diff --git a/assets/build/admin/package.asset.php b/assets/build/admin/package.asset.php index 484964828..c4a65b263 100644 --- a/assets/build/admin/package.asset.php +++ b/assets/build/admin/package.asset.php @@ -1 +1 @@ - array('wp-i18n'), 'version' => '99fe468873e64c9eac92'); + array('wp-i18n'), 'version' => 'cb9f28f8df8b559eaee6'); diff --git a/assets/build/admin/package.js b/assets/build/admin/package.js index 490ae5aa3..230d002fe 100644 --- a/assets/build/admin/package.js +++ b/assets/build/admin/package.js @@ -1 +1,5826 @@ -(()=>{var t={611:(t,e,i)=>{"use strict";function a(t,e){for(var i=[],a={},n=0;nf});var n="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!n)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var s={},o=n&&(document.head||document.getElementsByTagName("head")[0]),r=null,l=0,c=!1,u=function(){},d=null,p="data-vue-ssr-id",v="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function f(t,e,i,n){c=i,d=n||{};var o=a(t,e);return h(o),function(e){for(var i=[],n=0;ni.parts.length&&(a.parts.length=i.parts.length)}else{var o=[];for(n=0;n{var a=i(6291);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("4168dbce",a,!1,{})},935:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i="",a=void 0!==e[5];return e[4]&&(i+="@supports (".concat(e[4],") {")),e[2]&&(i+="@media ".concat(e[2]," {")),a&&(i+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),i+=t(e),a&&(i+="}"),e[2]&&(i+="}"),e[4]&&(i+="}"),i})).join("")},e.i=function(t,i,a,n,s){"string"==typeof t&&(t=[[null,t,void 0]]);var o={};if(a)for(var r=0;r0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=s),i&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=i):u[2]=i),n&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=n):u[4]="".concat(n)),e.push(u))}},e}},1041:(t,e,i)=>{var a=i(5965);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("0c7f7908",a,!1,{})},1292:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".jfb-tooltip[data-v-431c7ba2]{position:relative;display:inline-block}.jfb-tooltip-has-help[data-v-431c7ba2]{cursor:pointer}.jfb-tooltip-has-text[data-v-431c7ba2]{display:flex;column-gap:.5em;align-items:center}.jfb-tooltip--text[data-v-431c7ba2]{text-overflow:ellipsis;overflow:hidden;padding:.1em 0}.jfb-tooltip .dashicons-dismiss[data-v-431c7ba2]{color:#d63638}.jfb-tooltip .dashicons-warning[data-v-431c7ba2]{color:orange}.jfb-tooltip .dashicons-warning.danger[data-v-431c7ba2]{color:#d63638}.jfb-tooltip .dashicons-yes-alt[data-v-431c7ba2]{color:#32cd32}.jfb-tooltip .dashicons-info[data-v-431c7ba2]{color:#90c6db}.jfb-tooltip .dashicons-hourglass[data-v-431c7ba2]{color:#b5b5b5}.jfb-tooltip .dashicons-update.loading[data-v-431c7ba2]{animation:jfb-tooltip-loading-icon-data-v-431c7ba2 1.5s infinite linear}.jfb-tooltip .cx-vui-tooltip[data-v-431c7ba2]{width:fit-content;bottom:calc(100% + 15px);box-sizing:border-box;pointer-events:none;transition:all .18s linear;opacity:0;padding-left:1em;padding-right:1em;position:absolute;z-index:2}.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-right[data-v-431c7ba2]{right:-1.2em}.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-right[data-v-431c7ba2]:after{right:20px;left:unset}.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-left[data-v-431c7ba2]{left:-0.9em}.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-left[data-v-431c7ba2]:after{left:20px;right:unset}.jfb-tooltip:hover .cx-vui-tooltip[data-v-431c7ba2]{opacity:1}.jfb-tooltip:hover .cx-vui-tooltip.tooltip-position-top-right[data-v-431c7ba2]{bottom:100%}.jfb-tooltip:hover .cx-vui-tooltip.tooltip-position-top-left[data-v-431c7ba2]{bottom:100%}.jfb-tooltip-position--top-right[data-v-431c7ba2]{flex-direction:row-reverse}@keyframes jfb-tooltip-loading-icon-data-v-431c7ba2{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""]);const r=o},1418:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".table-details-row{display:flex;justify-content:space-between;font-size:1.1em}.table-details-row:first-child{font-weight:bold}.table-details-row:nth-child(even){background-color:#eee}.table-details-row-column{padding:.5em 1em}.table-details-row--heading{flex:1;text-align:right}.table-details-row-role--default.table-details-row--heading{font-weight:600}.table-details-row--content{flex:2}.table-details-row--actions{flex:.3}.table-details-row h3{padding:.5em;border-bottom:1px solid #aaa;width:50%;margin:1em auto;text-align:center;color:#aaa;font-weight:400}",""]);const r=o},1618:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".cx-vui-select[data-v-b31905c2]{line-height:2em;padding:6px 24px 6px 8px}.cx-vui-select.fullwidth[data-v-b31905c2]{width:100%}",""]);const r=o},1700:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".table-details{display:flex;flex-direction:column}",""]);const r=o},2310:(t,e,i)=>{var a=i(1618);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("2e7817a3",a,!1,{})},2373:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".cx-vui-component[data-v-327e05fd]{flex-direction:column;width:100%;border-top:unset;gap:.7em}.cx-vui-component.padding-side-unset[data-v-327e05fd]{padding-left:unset;padding-right:unset}.padding-top-bottom-unset[data-v-327e05fd]{padding-top:unset;padding-bottom:unset}.padding-unset[data-v-327e05fd]{padding:unset}",""]);const r=o},4244:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".cx-vui-external-link__icon{width:1em;height:1em;fill:currentcolor;vertical-align:middle}",""]);const r=o},4761:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,"hr.jfb[data-v-362c518d]{border:0;border-top:1px solid #ececec;margin:unset}",""]);const r=o},4965:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,'.fade-enter-active[data-v-7d75afce],.fade-leave-active[data-v-7d75afce]{transition:opacity .5s}.fade-enter[data-v-7d75afce],.fade-leave-to[data-v-7d75afce]{opacity:0}.jfb-recursive-details[data-v-7d75afce]:not(.jfb-recursive-details--indent){margin-top:unset}.jfb-recursive-details--indent[data-v-7d75afce]{margin-left:1.5em;margin-top:.5em}.jfb-recursive-details-row[data-v-7d75afce]:not(:last-child){margin-bottom:.5em;padding-bottom:.5em}.jfb-recursive-details-item--content[data-v-7d75afce]{border-bottom:1px solid #ccc}.jfb-recursive-details-item-without-children>.jfb-recursive-details-item--heading[data-v-7d75afce]::after{content:":"}.jfb-recursive-details-item-with-children>.jfb-recursive-details-item--heading[data-v-7d75afce]{cursor:pointer}.jfb-recursive-details-item-with-children>.jfb-recursive-details-item--heading[data-v-7d75afce]:hover{color:#2271b1;border-bottom-color:#2271b1}',""]);const r=o},5598:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,"\n@media print {\n.cx-vui-button[data-v-aa3950ea] {\n\t\tdisplay: none;\n}\n}\n",""]);const r=o},5965:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".cx-vui-popup__close[data-v-7acae1c9]{position:unset}.cx-vui-popup__header[data-v-7acae1c9]{display:flex;justify-content:space-between;padding-bottom:10px;margin:unset;border-bottom:1px solid #ececec}.cx-vui-popup.sticky-header .cx-vui-popup__body[data-v-7acae1c9],.cx-vui-popup.sticky-footer .cx-vui-popup__body[data-v-7acae1c9]{max-height:80vh;overflow-y:auto}.cx-vui-popup.sticky-header .cx-vui-popup__header[data-v-7acae1c9]{position:sticky;top:0;background-color:#fff;padding-top:20px;z-index:1}.cx-vui-popup.sticky-header .cx-vui-popup__body[data-v-7acae1c9]{padding-top:0}.cx-vui-popup.sticky-footer .cx-vui-popup__body[data-v-7acae1c9]{padding-bottom:0}.cx-vui-popup.sticky-footer .cx-vui-popup__content[data-v-7acae1c9]{padding-bottom:40px}.cx-vui-popup.sticky-footer .cx-vui-popup__footer[data-v-7acae1c9]{position:sticky;bottom:0;background-color:#fff;padding-bottom:20px;border-top:1px solid #ececec}",""]);const r=o},5981:(t,e,i)=>{var a=i(4761);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("8c144c80",a,!1,{})},6168:(t,e,i)=>{var a=i(1700);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("206d9f3c",a,!1,{})},6278:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".cx-vui-input--warning-danger[data-v-13c6d87e]{border:1px solid #d63638}",""]);const r=o},6291:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".cx-vui-tabs__nav-item--disabled{opacity:.5;cursor:not-allowed}.cx-vui-tabs__nav-item--disabled:hover{color:unset}.cx-vui-tabs__nav-item--has-icon{display:flex;justify-content:space-between;column-gap:1em}.cx-vui-tabs--layout-vertical>.cx-vui-tabs__nav{width:unset;flex:unset;max-width:unset}.cx-vui-tabs--layout-vertical>.cx-vui-tabs__content{flex:1}",""]);const r=o},6608:(t,e,i)=>{var a=i(1292);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("3a21f3b2",a,!1,{})},6758:t=>{"use strict";t.exports=function(t){return t[1]}},6945:(t,e,i)=>{var a=i(2373);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("b1875a50",a,!1,{})},7393:(t,e,i)=>{var a=i(4965);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("29e569e4",a,!1,{})},7922:(t,e,i)=>{var a=i(5598);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("7e55f3a9",a,!1,{})},7944:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".cx-vui-collapse-mini__wrap{padding:0 0 20px}.cx-vui-collapse-mini__item{border-bottom:1px solid #ececec}.cx-vui-collapse-mini__item:first-child{border-top:1px solid #ececec}.cx-vui-collapse-mini__item:last-child{margin-bottom:unset}.cx-vui-collapse-mini__item--active .cx-vui-collapse-mini__header-label>svg{transform:rotate(90deg)}.cx-vui-collapse-mini__header{padding:1.2rem;display:flex;align-items:center;cursor:pointer;column-gap:1em}.cx-vui-collapse-mini__header-label{font-weight:500;font-size:15px;line-height:23px;color:#007cba;display:flex;align-items:center}.cx-vui-collapse-mini__header-desc{font-size:15px;line-height:23px;color:#7b7e81}.cx-vui-collapse-mini__header-label svg{margin:-1px 8px 0 0;transition:.3s}.cx-vui-collapse-mini--disabled{opacity:.5}.cx-vui-collapse-mini--disabled .cx-vui-collapse-mini__header{cursor:not-allowed}.cx-vui-collapse-mini__content{padding:0 1.5rem 1.5rem}",""]);const r=o},8036:(t,e,i)=>{var a=i(8984);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("57efcfaf",a,!1,{})},8528:(t,e,i)=>{var a=i(4244);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("45767117",a,!1,{})},8862:(t,e,i)=>{var a=i(1418);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("6aaa4088",a,!1,{})},8984:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>r});var a=i(6758),n=i.n(a),s=i(935),o=i.n(s)()(n());o.push([t.id,".size--1-x-2 .cx-vui-component__meta[data-v-6f5201e4]{flex:1}.size--1-x-2 .cx-vui-component__control[data-v-6f5201e4]{flex:2}.padding-side-unset.cx-vui-component[data-v-6f5201e4]{padding-left:unset;padding-right:unset}.cx-vui-component__control-actions[data-v-6f5201e4]{display:flex;justify-content:flex-end;gap:1em;margin-top:.5em}",""]);const r=o},9330:(t,e,i)=>{var a=i(6278);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("21fb632e",a,!1,{})},9356:(t,e,i)=>{var a=i(7944);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[t.id,a,""]]),a.locals&&(t.exports=a.locals),(0,i(611).A)("30df35ee",a,!1,{})}},e={};function i(a){var n=e[a];if(void 0!==n)return n.exports;var s=e[a]={id:a,exports:{}};return t[a](s,s.exports,i),s.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var a in e)i.o(e,a)&&!i.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{"use strict";class t extends Error{constructor(e=!1,i=""){super(i),Error.captureStackTrace&&Error.captureStackTrace(this,t),this.name="ApiInputError",this.noticeOptions=e}}const e=t;var a=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:{"cx-vui-panel":t.withPanel,"cx-vui-collapse-mini--disabled":t.disabled,"cx-vui-collapse-mini__item":!0,"cx-vui-collapse-mini__item--active":t.isActive}},[i("div",{staticClass:"cx-vui-collapse-mini__header",on:{click:t.collapse}},[i("div",{staticClass:"cx-vui-collapse-mini__header-label"},[i("svg",{attrs:{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[i("path",{attrs:{d:"M14 13.9999L14 -0.00012207L0 -0.000121458L6.11959e-07 13.9999L14 13.9999Z",fill:"white"}}),t._v(" "),i("path",{attrs:{d:"M5.32911 1L11 7L5.32911 13L4 11.5938L8.34177 7L4 2.40625L5.32911 1Z",fill:"#007CBA"}})]),t._v("\n\t\t\t"+t._s(t.label)+"\n\t\t")]),t._v(" "),t.icon?i("div",{staticClass:"cx-vui-collapse-mini__header-desc"},["object"==typeof t.icon?i(t.icon,{tag:"component"}):t._e()],1):t.desc?i("div",{staticClass:"cx-vui-collapse-mini__header-desc"},[t._v("\n\t\t\t"+t._s(t.desc)+"\n\t\t")]):t._e(),t._v(" "),t.$slots.description?i("div",{staticClass:"cx-vui-collapse-mini__header-custom-description"},[t._t("description")],2):t._e()]),t._v(" "),t.disabled?t._e():[this.$slots.default?[i("div",{directives:[{name:"show",rawName:"v-show",value:t.isActive,expression:"isActive"}],staticClass:"cx-vui-collapse-mini__content"},[t._t("default")],2)]:[t._t("custom",null,{state:{isActive:t.isActive}})]]],2)};a._withStripped=!0;const n={name:"cx-vui-collapse-mini",props:{withPanel:{type:Boolean,default:!1},initialActive:{type:Boolean,default:!1},label:{type:String,default:"Collapse Mini"},desc:{type:String,default:""},disabled:{type:Boolean,default:!1},icon:{type:[Object,String],default:""}},data:()=>({isActive:!1}),created(){this.isActive=this.initialActive},methods:{collapse(){this.disabled||(this.isActive=!this.isActive,this.$emit("change",this.isActive))}}};function s(t,e,i,a,n,s,o,r){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=i,c._compiled=!0),a&&(c.functional=!0),s&&(c._scopeId="data-v-"+s),o?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),n&&n.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},c._ssrRegister=l):n&&(l=r?function(){n.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}i(9356);const o=s(n,a,[],!1,null,null,null).exports,r={methods:{getIncoming:t=>t?window.JetFBPageConfig[t]:window.JetFBPageConfig}},l={methods:{saveByAjax(t,e){const i=this;let a={};try{a=this.getAjaxObject(t,e)}catch(t){if(!t)return;return"object"==typeof t.noticeOptions?void i.$CXNotice.add({message:"Invalid request data.",type:"error",duration:2e3,...t.noticeOptions}):void i.$CXNotice.add({message:t,type:"error",duration:2e3})}jfbEventBus.$emit("request-state",{state:"begin",slug:e}),jQuery.ajax(a).done((function(a){"function"==typeof t.onSaveDone?t.onSaveDone(a):a.success?(i.$CXNotice.add({message:a.data.message,type:"success",duration:5e3}),"function"==typeof t.onSaveDoneSuccess&&t.onSaveDoneSuccess(a)):(i.$CXNotice.add({message:a.data.message,type:"error",duration:5e3}),"function"==typeof t.onSaveDoneError&&t.onSaveDoneError(a)),jfbEventBus.$emit("request-state",{state:"end",slug:e})})).fail((function(a,n,s){"function"==typeof t.onSaveFail?t.onSaveFail(a,n,s):i.$CXNotice.add({message:s,type:"error",duration:5e3}),jfbEventBus.$emit("request-state",{state:"end",slug:e})}))},getAjaxObject(t,e){const i={url:window.ajaxurl,type:"POST",dataType:"json",...t.getRequestOnSave()};return i.data={action:`jet_fb_save_tab__${e}`,...i.data},window?.JetFBPageConfigPackage?.nonce&&(i.data._nonce=window.JetFBPageConfigPackage.nonce),i}}},c={props:["value","full-entry","entry-id","scope"],computed:{parsedJson(){return JSON.parse(JSON.stringify(this.value))}}},u={methods:{promiseWrapper(t){const e=t=>"object"==typeof t?t?.message:t;return(i,a,...n)=>{const s=t=>{"function"==typeof i&&i(),this.$CXNotice.add({message:e(t),type:"success",duration:4e3})},o=t=>{"function"==typeof i&&i(),this.$CXNotice.add({message:e(t),type:"error",duration:4e3})};try{t.call(this,{resolve:s,reject:o},...n)}catch(t){o(t.message)}}}}};var d=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",{staticClass:"table-details"},t._l(t.columns,(function(e,a){return t.canShow(a)?i("DetailsTableRow",{key:a,attrs:{type:t.getType(a)},scopedSlots:t._u([{key:"name",fn:function(){return[t._v(t._s(e.label))]},proxy:!0},{key:"value",fn:function(){return["object"==typeof t.getColumnValue(a,!1)?[i("DetailsTableRowValue",{attrs:{value:t.getColumnValue(a,!1),columns:e.children||{}}})]:[t._v(t._s(t.getColumnValue(a,"")))]]},proxy:!0}],null,!0)}):t._e()})),1)};d._withStripped=!0;var p=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("ul",{directives:[{name:"show",rawName:"v-show",value:!this.withIndent,expression:"! this.withIndent"}],class:t.rootClasses},t._l(t.value,(function(e,a){return t.isHiddenLevel(a)?i("li",{key:a,staticClass:"jfb-recursive-details-row"},[t.isSkipLevel(a)?[i("DetailsTableRowValue",{attrs:{value:e,columns:t.getChildren(a)}})]:[t.isObject(e)?i("span",{class:t.itemClasses(!0)},[i("span",{staticClass:"jfb-recursive-details-item--heading",on:{click:function(e){return t.toggleNext(a)}}},[t._v("\n\t\t\t\t\t"+t._s(t.getItemLabel(a))+"\n\t\t\t\t\t"),i("span",{class:t.arrowClasses(a)})]),t._v(" "),i("span",{staticClass:"jfb-recursive-details-item--content"},[i("transition",{attrs:{name:"fade"}},[i("DetailsTableRowValue",{directives:[{name:"show",rawName:"v-show",value:t.isShow(a),expression:"isShow( itemName )"}],attrs:{value:e,"with-indent":!0,columns:t.getChildren(a)}})],1)],1)]):i("span",{class:t.itemClasses(!1)},[i("span",{staticClass:"jfb-recursive-details-item--heading"},[t._v(t._s(t.getItemLabel(a)))]),t._v(" \n\t\t\t\t"),i("span",{staticClass:"jfb-recursive-details-item--content"},[t._v(t._s(e))])])]],2):t._e()})),0)};p._withStripped=!0;const v={name:"DetailsTableRowValue",props:{value:Object,withIndent:{type:Boolean,default:!1},columns:{type:Object,default:()=>({})}},data:()=>({showNext:{}}),computed:{rootClasses(){return{"jfb-recursive-details":!0,"jfb-recursive-details--indent":this.withIndent}}},methods:{getChildren(t){return this.columns[t]?.children||[]},getItemLabel(t){return this.columns[t]?this.columns[t].label:t},isObject:t=>"object"==typeof t,toggleNext(t){const e=this.showNext[t]||!1;this.$set(this.showNext,t,!e)},isShow(t){return"undefined"===this.showNext[t]||this.showNext[t]},itemClasses:(t=!0)=>({"jfb-recursive-details-item":!0,"jfb-recursive-details-item-with-children":t,"jfb-recursive-details-item-without-children":!t}),arrowClasses(t){return{dashicons:!0,"dashicons-arrow-down-alt2":!this.isShow(t),"dashicons-arrow-up-alt2":this.isShow(t)}},isSkipLevel(t){return this.columns[t]?.skip_level},isHiddenLevel(t){return!this.columns[t]?.hide}}};i(7393);const f=s(v,p,[],!1,null,"7d75afce",null).exports;var h=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"table-details-row"},["rowValue"===t.type?[i("div",{class:t.headingClasses},["default"!==t.role?[t._v(t._s("Name"))]:[t._t("name"),t._v("\n\t\t\t\t:\n\t\t\t")]],2),t._v(" "),i("div",{class:t.contentClasses},["default"!==t.role?[t._v(t._s("Value"))]:[t._t("value")]],2),t._v(" "),i("div",{class:t.actionClasses},["default"!==t.role?[t._v(t._s("Actions"))]:[t._t("actions")]],2)]:[i("h3",[t._t("name")],2)]],2)};h._withStripped=!0;const m={name:"DetailsTableRow",props:{role:{type:String,default:"default",validator:function(t){return-1!==["header","default","footer"].indexOf(t)}},type:{type:String,default:"rowValue",validator:function(t){return-1!==["rowValue","heading"].indexOf(t)}}},computed:{headingClasses(){return this.classes({"table-details-row--heading":!0})},contentClasses(){return this.classes({"table-details-row--content":!0})},actionClasses(){return this.classes({"table-details-row--actions":!0})}},methods:{classes(t){return{"table-details-row-column":!0,...t,["table-details-row-role--"+this.role]:!0}}}};i(8862);const _={name:"DetailsTable",components:{DetailsTableRow:s(m,h,[],!1,null,null,null).exports,DetailsTableRowValue:f},props:{columns:{type:Object},source:{type:Object}},methods:{getColumnValue(t,e=!1){return this.source[t]?this.source[t].value:e},hasValueOrAnotherType(t){return this.getColumnValue(t)||"rowValue"!==this.getType(t)},getType(t){var e;return null!==(e=this.columns[t].type)&&void 0!==e?e:"rowValue"},canShow(t){const e=this.getType(t),i=!1!==this.columns[t].show_in_details,a=this.getColumnValue(t);return i&&("rowValue"!==e||a)}}};i(6168);const b=s(_,d,[],!1,null,null,null).exports;var g=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.className},[t.$slots.meta?i("div",{staticClass:"cx-vui-component__meta"},[t._t("meta")],2):t.$slots.label||t.$slots.description?i("div",{staticClass:"cx-vui-component__meta"},[t.$slots.label?i("label",{staticClass:"cx-vui-component__label",attrs:{for:t.elementIdData}},[t.stateType?[i("Tooltip",{attrs:{icon:t.stateType,position:"top-right"},scopedSlots:t._u([{key:"help",fn:function(){return[t._v(t._s(t.stateHelp))]},proxy:!0},{key:"default",fn:function(){return[t._t("label")]},proxy:!0}],null,!0)})]:[t._t("label")]],2):t._e(),t._v(" "),t.$slots.description?i("div",{staticClass:"cx-vui-component__desc"},[t._t("description")],2):t._e()]):t._e(),t._v(" "),i("div",{staticClass:"cx-vui-component__control"},[t._t("default"),t._v(" "),t.$slots.actions?i("div",{staticClass:"cx-vui-component__control-actions"},[t._t("actions")],2):t._e()],2)])};g._withStripped=!0;var y=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.wrapperClasses},[i("span",{class:t.dashIconClass}),t._v(" "),t.$slots.default?i("span",{staticClass:"jfb-icon-status--text"},[t._t("default")],2):t._e(),t._v(" "),t.$slots.help?i("div",{class:t.tooltipClasses},[t._t("help")],2):t._e()])};y._withStripped=!0;const x={success:"dashicons-yes-alt",warning:"dashicons-warning","warning-danger":["dashicons-warning","danger"],info:"dashicons-info",pending:"dashicons-hourglass",error:"dashicons-dismiss",loading:["dashicons-update","loading"]},w={name:"Tooltip",props:{icon:{type:String,validator:t=>Object.keys(x).includes(t),default:"info"},position:{type:String,validator:t=>["top-right","top-left"].includes(t),default:"top-left"}},computed:{wrapperClasses(){return{"jfb-tooltip":!0,"jfb-tooltip-has-text":!!this.$slots.default,"jfb-tooltip-has-help":!!this.$slots.help,["jfb-tooltip-position--"+this.position]:!0}},dashIconClass(){var t;let e=null!==(t=x[this.icon])&&void 0!==t?t:"";return Array.isArray(e)||(e=[e]),["dashicons",...e]},tooltipClasses(){return{"cx-vui-tooltip":!0,["tooltip-position-"+this.position]:!0}}}};i(6608);const C=s(w,y,[],!1,null,"431c7ba2",null).exports,j={name:"RowWrapper",components:{Tooltip:C},props:{elementId:{type:String},state:{type:[String,Object],validator:t=>(t=>["warning-danger","warning","loading",""].includes(t))("string"==typeof t?t:t.type),default:""},classNames:{type:Object,default:()=>({"cx-vui-component--equalwidth":!0})}},data(){return{elementIdData:`cx_${this.elementId}`}},computed:{className(){return{"cx-vui-component":!0,["cx-vui-component--is-"+this.stateType]:this.stateType,...this.classNames}},stateType(){return"string"==typeof this.state?this.state:this.state.type},stateHelp(){return"string"==typeof this.state?"":this.state.message}},provide(){return{elementId:this.elementIdData,stateType:()=>this.stateType}}};i(8036);const S=s(j,g,[],!1,null,"6f5201e4",null).exports,O=window.wp.i18n,k={methods:{__:(t,e)=>(0,O.__)(t,e),sprintf:(t,...e)=>(0,O.sprintf)(t,...e),__s:(t,e,...i)=>(0,O.sprintf)((0,O.__)(t,e),...i)}},{doAction:$}=wp.hooks;function T(){return window.location.pathname}function L(){const t={};return window.location.search.replace("?","").split("&").forEach((e=>{const[i,a]=e.split("=");t[i]=a})),t}function I(t,e){if("object"!=typeof e)return[[t,e]];const i=[];for(let[a,n]of Object.entries(e))a=`${t}[${a}]`,i.push(...I(a,n));return i}var N=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"jfb-list-components"},[t._l(t.components,(function(e,a){return i("div",{key:"entry_"+a,staticClass:"jfb-list-components-item"},[i("keep-alive",[i(e,{tag:"component",attrs:{scope:t.scope}})],1)],1)})),t._v(" "),t._t("default")],2)};N._withStripped=!0;const A=s({name:"ListComponents",props:{components:Array,scope:String}},N,[],!1,null,null,null).exports;var E=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"show",rawName:"v-show",value:t.show,expression:"show"}],staticClass:"cx-vui-tabs-panel"},[t._t("default")],2)};E._withStripped=!0;const D=s({name:"cx-vui-tabs-panel",props:{tab:{type:String,default:""},name:{type:String,default:""},label:{type:String,default:""},disabled:{type:Boolean,default:!1},icon:{type:[Object,String],default:""}},data:()=>({show:!1})},E,[],!1,null,null,null).exports;var V=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:{"cx-vui-tabs":!0,"cx-vui-tabs--invert":t.invert,"cx-vui-tabs--layout-vertical":"vertical"===this.layout,"cx-vui-tabs--layout-horizontal":"horizontal"===this.layout,"cx-vui-tabs--in-panel":t.inPanel}},[i("div",{staticClass:"cx-vui-tabs__nav"},t._l(t.navList,(function(e){return i("div",{class:{"cx-vui-tabs__nav-item":!0,"cx-vui-tabs__nav-item--active":t.isActive(e.name),"cx-vui-tabs__nav-item--disabled":t.isDisabled(e.name),"cx-vui-tabs__nav-item--has-icon":!!e.icon},on:{click:function(i){return t.onTabClick(e.name)}}},[i("span",{staticClass:"item-label"},[t._v(t._s(e.label))]),t._v(" "),e.icon?i("span",{staticClass:"item-icon"},["object"==typeof e.icon?i(e.icon,{tag:"component",attrs:{"is-active":t.isActive(e.name)}}):t._e()],1):t._e()])})),0),t._v(" "),i("div",{staticClass:"cx-vui-tabs__content"},[t._t("default")],2)])};V._withStripped=!0;const P={name:"cx-vui-tabs",props:{value:{type:[String,Number],default:""},name:{type:String,default:""},invert:{type:Boolean,default:!1},inPanel:{type:Boolean,default:!1},layout:{validator:t=>["horizontal","vertical"].includes(t),default:"horizontal"},conditions:{type:Array,default:()=>[]}},data(){return{navList:[],activeTab:this.value,disabledTabs:[]}},mounted(){const t=this.getTabs();this.disabledTabs=this.getDisabledTabs(),this.navList=t,this.activeTab||(this.activeTab=t[0].name),this.updateState()},methods:{isActive(t){return t===this.activeTab},isDisabled(t){return this.disabledTabs.includes(t)},getDisabledTabs(){const t=[];for(const e of this.$children)e.disabled&&t.push(e.name);return t},onTabClick(t){this.isDisabled(t)||(this.activeTab=t,this.$emit("input",this.activeTab),this.updateState())},updateState(){const t=this.getTabs();this.navList=t,t.forEach((t=>{t.show=this.activeTab===t.name}))},getTabs(){const t=this.$children.filter((t=>"cx-vui-tabs-panel"===t.$options.name)),e=[];return t.forEach((t=>{t.tab&&this.name?t.tab===this.name&&e.push(t):e.push(t)})),e}}};i(799);const B=s(P,V,[],!1,null,null,null).exports,F="JetFBConfig";function M(t){localStorage.setItem(F,JSON.stringify(t))}function R(){const t=localStorage.getItem(F);return null===t?{}:JSON.parse(t)}function z(t,e){let i=R();i={...i,[t]:e},M(i)}function q(t,e=!1){var i;return null!==(i=R()[t])&&void 0!==i?i:e}const J={setStorage:M,getStorage:R,setItem:z,getItem:q,storage:function(t){const e={setStorage(e){z(t,e)},getStorage:()=>q(t,{})};return{...e,setItem(t,i){let a=e.getStorage();a={...a,[t]:i},e.setStorage(a)},getItem(t,i=!1){var a;return null!==(a=e.getStorage()[t])&&void 0!==a?a:i}}}};var U=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("a",{staticClass:"cx-vui-external-link",attrs:{href:t.href,target:"_blank",rel:"external noreferrer noopener"}},[t._t("default"),t._v(" "),i("svg",{staticClass:"cx-vui-external-link__icon",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24","aria-hidden":"true",focusable:"false"}},[i("path",{attrs:{d:"M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"}})])],2)};U._withStripped=!0;const H={name:"ExternalLink",mixins:[k],props:{href:{type:String,default:""}}};i(8528);const W=s(H,U,[],!1,null,null,null).exports;var X=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.className},[t.$slots.label?i("label",{staticClass:"cx-vui-component__label",attrs:{for:t.elementIdData}},[t._t("label")],2):t._e(),t._v(" "),t._t("default"),t._v(" "),t.$slots.description?i("div",{staticClass:"cx-vui-component__desc"},[t._t("description")],2):t._e()],2)};X._withStripped=!0;const Z={name:"ColumnWrapper",props:{elementId:{type:String,required:!0},classNames:{type:Object,default:()=>({})}},data(){return{elementIdData:`cx_${this.elementId}`}},computed:{className(){return{"cx-vui-component":!0,...this.classNames}}},provide(){return{elementId:this.elementIdData}}};i(6945);const G=s(Z,X,[],!1,null,"327e05fd",null).exports;var Q=function(){var t=this,e=t.$createElement;return(t._self._c||e)("select",{class:t.className,attrs:{name:t.elementId,id:t.elementId},domProps:{value:t.value},on:{input:t.handleInput}},[t._t("default")],2)};Q._withStripped=!0;const K={name:"CxVuiSelect",props:{value:{type:[String,Number],default:""},elementId:{type:String},classNames:{type:Object,default:()=>({})}},computed:{className(){return{"cx-vui-select":!0,...this.classNames}}},methods:{handleInput(t){this.$emit("input",t.target.value)}},inject:["elementId"]};i(2310);const Y=s(K,Q,[],!1,null,"b31905c2",null).exports;var tt=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.className},[i("div",{staticClass:"cx-vui-popup__overlay",on:{click:function(e){return t.$emit("close")}}}),t._v(" "),i("div",{staticClass:"cx-vui-popup__body"},[t.$slots.title?i("h2",{staticClass:"cx-vui-popup__header"},[t._t("title"),t._v(" "),t.$slots.close?[t._t("close")]:i("div",{staticClass:"cx-vui-popup__close",on:{click:function(e){return t.$emit("close")}}},[i("svg",{attrs:{width:"20",height:"20",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[i("path",{attrs:{d:"M12 3.00671L8.00671 7L12 10.9933L10.9933 12L7 8.00671L3.00671 12L2 10.9933L5.99329 7L2 3.00671L3.00671 2L7 5.99329L10.9933 2L12 3.00671Z"}})])])],2):t._e(),t._v(" "),i("div",{staticClass:"cx-vui-popup__content"},[t._t("content")],2),t._v(" "),t.$slots.footer?i("div",{staticClass:"cx-vui-popup__footer"},[t._t("footer")],2):t._e()])])};tt._withStripped=!0;const et={name:"CxVuiPopup",props:{classNames:{type:Object,default:()=>({})},stickyFooter:{type:Boolean,default:!1}},computed:{className(){return{"cx-vui-popup":!0,...this.classNames}}}};i(1041);const it=s(et,tt,[],!1,null,"7acae1c9",null).exports;var at=function(){var t,e=this,i=e.$createElement,a=e._self._c||i;return a("div",{staticClass:"cx-vui-f-select"},[a("div",{class:{"cx-vui-f-select__selected":!0,"cx-vui-f-select__selected-not-empty":this.value.length>0}},e._l(e.value,(function(t){return a("div",{staticClass:"cx-vui-f-select__selected-option",on:{click:function(i){return e.handleResultClick(t)}}},[e.$slots["option-"+t]?[e._t("option-"+t)]:[e.isNonRemovable(t)?e._e():a("span",{staticClass:"cx-vui-f-select__selected-option-icon"},[a("svg",{attrs:{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[a("path",{attrs:{d:"M10 1.00671L6.00671 5L10 8.99329L8.99329 10L5 6.00671L1.00671 10L0 8.99329L3.99329 5L0 1.00671L1.00671 0L5 3.99329L8.99329 0L10 1.00671Z"}})])]),e._v("\n\t\t\t\t"+e._s(e.getOptionLabel(t))+"\n\t\t\t")]],2)})),0),e._v(" "),a("div",{directives:[{name:"click-outside",rawName:"v-click-outside.capture",value:e.onClickOutside,expression:"onClickOutside",modifiers:{capture:!0}},{name:"click-outside",rawName:"v-click-outside:mousedown.capture",value:e.onClickOutside,expression:"onClickOutside",arg:"mousedown",modifiers:{capture:!0}},{name:"click-outside",rawName:"v-click-outside:touchstart.capture",value:e.onClickOutside,expression:"onClickOutside",arg:"touchstart",modifiers:{capture:!0}}],staticClass:"cx-vui-f-select__control",on:{keydown:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.handleOptionsNav.apply(null,arguments))},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.handleOptionsNav.apply(null,arguments))},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"tab",9,t.key,"Tab")?null:e.handleOptionsNav.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleEnter.apply(null,arguments)}]}},[a("input",{class:(t={"cx-vui-f-select__input":!0,"cx-vui-input--in-focus":e.inFocus,"cx-vui-input":!0},t["cx-vui-input--"+e.stateType()]=e.stateType(),t["size-fullwidth"]=!0,t["has-error"]=e.error,t),attrs:{id:e.elementId,placeholder:e.placeholder,autocomplete:e.autocomplete,type:"text"},domProps:{value:e.query},on:{input:e.handleInput,focus:e.handleFocus}}),e._v(" "),e.inFocus?a("div",{staticClass:"cx-vui-f-select__results"},[e.filteredOptions.length?a("div",e._l(e.filteredOptions,(function(t,i){return a("div",{class:{"cx-vui-f-select__result":!0,"in-focus":i===e.optionInFocus,"is-selected":e.isSelectedOption(t)},on:{click:function(i){return e.handleResultClick(t.value)}}},[e._v(e._s(e.getOptionLabel(t))+"\n\t\t\t\t")])})),0):a("div",{staticClass:"cx-vui-f-select__results-message",domProps:{innerHTML:e._s(e.notFoundMeassge)}})]):e._e()]),e._v(" "),a("select",{staticClass:"cx-vui-f-select__select-tag",attrs:{placeholder:e.placeholder,disabled:e.disabled,readonly:e.readonly,multiple:e.multiple},domProps:{value:e.currentValues}},e._l(e.currentValues,(function(t){return a("option",{attrs:{selected:""},domProps:{value:t}})})),0)])};function nt(t){return nt="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},nt(t)}function st(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function ot(t){for(var e=1;e["on","off"].includes(t),default:"off"},conditions:{type:Array,default:function(){return[]}},remote:{type:Boolean,default:!1},remoteCallback:{type:Function},remoteTrigger:{type:Number,default:3},remoteTriggerMessage:{type:String,default:"Please enter %d char(s) to start search"},notFoundMeassge:{type:String,default:"There is no items find matching this query"},loadingMessage:{type:String,default:"Loading..."},preventWrap:{type:Boolean,default:!1},wrapperCss:{type:Array,default:function(){return[]}},elementId:{type:String},stateType:{type:Function}},data:()=>({query:"",inFocus:!1,optionInFocus:!1,loading:!1,loaded:!1}),created(){this.currentValues||(this.currentValues=[])},computed:{filteredOptions(){return this.query?this.optionsList.filter((t=>t.label.includes(this.query)||t.value.includes(this.query))):this.optionsList}},methods:{handleFocus(t){this.inFocus=!0,this.$emit("on-focus",t)},handleOptionsNav(t){"ArrowUp"!==t.key&&"Tab"!==t.key||this.navigateOptions(-1),"ArrowDown"===t.key&&this.navigateOptions(1)},navigateOptions(t){!1===this.optionInFocus&&(this.optionInFocus=-1);let e=this.optionInFocus+t,i=this.filteredOptions.length-1;i<0&&(i=0),e<0?e=0:e>i&&(e=i),this.optionInFocus=e},onClickOutside(t){this.inFocus&&(this.inFocus=!1,this.$emit("on-blur",t))},handleInput(t){this.$emit("input",t.target.value),this.query=t.target.value,this.inFocus||(this.inFocus=!0)},handleEnter(){if(!1===this.optionInFocus||!this.optionsList[this.optionInFocus])return;let t=this.filteredOptions[this.optionInFocus].value;this.handleResultClick(t)},handleResultClick(t){this.isNonRemovable(t)||(this.value.includes(t)?this.removeValue(t):this.multiple?this.storeValues([...new Set(this.value),t]):this.storeValues(t),this.inFocus=!1,this.optionInFocus=!1,this.query="")},removeValue(t){this.multiple||this.storeValues("");const e=this.value.filter((e=>e!==t));this.storeValues(e)},storeValues(t){this.$emit("change",this.sanitizeValue(t))},getOptionLabel(t){var e;const i="string"==typeof t?t:t.value,a=this.optionsList.find((({value:t})=>t===i));return null!==(e=a?.label)&&void 0!==e?e:""},sanitizeValue(t){return this.multiple?Array.isArray(t)?t:[t].filter(Boolean):Array.isArray(t)?t[0]:t},isSelectedOption(t){const e="string"==typeof t?t:t.value;return this.value.includes(e)},isNonRemovable(t){var e;const i="string"==typeof t?t:t.value,a=this.optionsList.find((({value:t})=>t===i));return null!==(e=a?.nonRemovable)&&void 0!==e&&e}},inject:["elementId","stateType"]};i(9330);const mt=s(ht,at,[],!1,null,"13c6d87e",null).exports;var _t=function(){var t=this,e=t.$createElement;return(t._self._c||e)("input",{staticClass:"cx-vui-input size-fullwidth",attrs:{type:"date",name:t.elementId,id:t.elementId,max:t.max,min:t.min},domProps:{value:t.value},on:{input:t.handleInput}})};_t._withStripped=!0;let bt=new Date(Date.now()-864e4).toJSON();[bt]=bt.split("T");const gt=t=>!!["now"].includes(t)||!Number.isNaN(new Date(t).getTime()),yt=s({name:"CxVuiDate",props:{value:{type:String},maxDate:{validator:gt},minDate:{validator:gt},elementId:{type:String}},data(){return{max:"now"===this.maxDate?bt:this.maxDate,min:"now"===this.minDate?bt:this.minDate}},methods:{handleInput(t){this.$emit("input",t.target.value)}},inject:["elementId"]},_t,[],!1,null,"1707aa50",null).exports;var xt=function(){var t=this.$createElement;return(this._self._c||t)("hr",{staticClass:"jfb"})};xt._withStripped=!0;i(5981);const wt=s({name:"Delimiter"},xt,[],!1,null,"362c518d",null).exports;var Ct=function(){var t=this,e=t.$createElement;return(t._self._c||e)("cx-vui-button",{attrs:{"button-style":"accent",size:"mini"},on:{click:t.print},scopedSlots:t._u([{key:"label",fn:function(){return[t.$slots.default?[t._t("default")]:[t._v("\n\t\t\t"+t._s(t.__("Print","jet-form-builder"))+"\n\t\t")]]},proxy:!0}],null,!0)})};Ct._withStripped=!0;const jt={name:"PrintButton",methods:{print(){window.print()}},mixins:[k]};i(7922);const St=s(jt,Ct,[],!1,null,"aa3950ea",null).exports;window.JetFBActions={renderCurrentPage:function(t,e={}){const i=new Vue({el:"#jet-form-builder_page_"+t.name,render:e=>e(t),...e});$("jet.fb.render.page",i)},getCurrentPath:T,getSearch:L,createPath:function(t={},e={},i=[]){const a=[];t={...L(),...t};for(const[e,n]of Object.entries(t))i.includes(e)||a.push(`${e}=${encodeURIComponent(n)}`);return[T(),a.join("&")].filter((t=>t)).join("?")},addQueryArgs:function(t,e){e=new URL(e);const i=new URLSearchParams(e.search),a=[];for(const[e,i]of Object.entries(t))a.push(...I(e,i));for(const[t,e]of a)e&&i.append(t,e);return e.origin+e.pathname+"?"+i},LocalStorage:J,resolveRestUrl:function(t,e){if("object"!=typeof e||!Object.keys(e)?.length)return t;for(let[i,a]of Object.entries(e)){const e=new RegExp(`\\{${i}\\}`,"g");if(t.match(e)){t=t.replace(e,String(a));continue}const n=new RegExp(`\\(\\?P<${i}>(.*?)\\)`),s=t.match(n);if(Array.isArray(s)){if(a=""+a,!new RegExp(s[1]).test(a))throw new Error((0,O.sprintf)((0,O.__)("Invalid parameter for rest url. RegExp: %1$s, Value: %2$s","jet-form-builder"),s[1],a));t=t.replace(n,a)}}return t}},window.JetFBErrors={ApiInputError:e},window.JetFBComponents={CxVuiCollapseMini:o,DetailsTable:b,SimpleWrapperComponent:S,ListComponents:A,CxVuiTabsPanel:D,CxVuiTabs:B,ExternalLink:W,RowWrapper:S,ColumnWrapper:G,CxVuiSelect:Y,CxVuiPopup:it,CxVuiFSelect:mt,CxVuiDate:yt,Tooltip:C,Delimiter:wt,PrintButton:St},window.JetFBMixins={GetIncoming:r,SaveTabByAjax:l,i18n:k,ParseIncomingValueMixin:c,PromiseWrapper:u}})()})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=script&lang=js": +/*!**************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=script&lang=js ***! + \**************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'ColumnWrapper', + props: { + elementId: { + type: String, + required: true + }, + /** + * Possible values: + * 'padding-top-bottom-unset': true, + * 'padding-unset': true, + * 'padding-side-unset: true, + */ + classNames: { + type: Object, + default: () => ({}) + } + }, + data() { + return { + elementIdData: `cx_${this.elementId}` + }; + }, + computed: { + className() { + return { + 'cx-vui-component': true, + ...this.classNames + }; + } + }, + provide() { + return { + elementId: this.elementIdData + }; + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiCollapseMini.vue?vue&type=script&lang=js": +/*!******************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiCollapseMini.vue?vue&type=script&lang=js ***! + \******************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'cx-vui-collapse-mini', + props: { + withPanel: { + type: Boolean, + default: false + }, + initialActive: { + type: Boolean, + default: false + }, + label: { + type: String, + default: 'Collapse Mini' + }, + desc: { + type: String, + default: '' + }, + disabled: { + type: Boolean, + default: false + }, + icon: { + type: [Object, String], + default: '' + } + }, + data() { + return { + isActive: false + }; + }, + created() { + this.isActive = this.initialActive; + }, + methods: { + collapse() { + if (this.disabled) { + return; + } + this.isActive = !this.isActive; + this.$emit('change', this.isActive); + } + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiDate.vue?vue&type=script&lang=js": +/*!**********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiDate.vue?vue&type=script&lang=js ***! + \**********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// + +let now = new Date(Date.now() - 8640000).toJSON(); +[now] = now.split('T'); +const dateValidator = value => { + if (['now'].includes(value)) { + return true; + } + return !Number.isNaN(new Date(value).getTime()); +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'CxVuiDate', + props: { + value: { + type: String + }, + maxDate: { + validator: dateValidator + }, + minDate: { + validator: dateValidator + }, + elementId: { + type: String + } + }, + data() { + return { + max: 'now' === this.maxDate ? now : this.maxDate, + min: 'now' === this.minDate ? now : this.minDate + }; + }, + methods: { + handleInput(event) { + this.$emit('input', event.target.value); + } + }, + inject: ['elementId'] +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiFSelect.vue?vue&type=script&lang=js": +/*!*************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiFSelect.vue?vue&type=script&lang=js ***! + \*************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var v_click_outside_x__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! v-click-outside-x */ "../../node_modules/v-click-outside-x/dist/v-click-outside-x.esm.js"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'CxVuiFSelect', + directives: { + clickOutside: v_click_outside_x__WEBPACK_IMPORTED_MODULE_0__.directive + }, + props: { + value: { + type: [String, Number, Array], + default: '' + }, + placeholder: { + type: String, + default: '' + }, + optionsList: { + type: Array, + default: function () { + return []; + } + }, + disabled: { + type: Boolean, + default: false + }, + readonly: { + type: Boolean, + default: false + }, + error: { + type: Boolean, + default: false + }, + multiple: { + type: Boolean, + default: false + }, + autocomplete: { + validator(value) { + return ['on', 'off'].includes(value); + }, + default: 'off' + }, + conditions: { + type: Array, + default: function () { + return []; + } + }, + remote: { + type: Boolean, + default: false + }, + remoteCallback: { + type: Function + }, + remoteTrigger: { + type: Number, + default: 3 + }, + remoteTriggerMessage: { + type: String, + default: 'Please enter %d char(s) to start search' + }, + notFoundMeassge: { + type: String, + default: 'There is no items find matching this query' + }, + loadingMessage: { + type: String, + default: 'Loading...' + }, + preventWrap: { + type: Boolean, + default: false + }, + // Wrapper related props (should be passed into wrapper component) + wrapperCss: { + type: Array, + default: function () { + return []; + } + }, + // basically used from injected + elementId: { + type: String + }, + // basically used from injected + stateType: { + type: Function + } + }, + data() { + return { + query: '', + inFocus: false, + optionInFocus: false, + loading: false, + loaded: false + }; + }, + created() { + if (!this.currentValues) { + this.currentValues = []; + } + }, + computed: { + filteredOptions() { + if (!this.query) { + return this.optionsList; + } else { + return this.optionsList.filter(option => { + return option.label.includes(this.query) || option.value.includes(this.query); + }); + } + } + }, + methods: { + handleFocus(event) { + this.inFocus = true; + this.$emit('on-focus', event); + }, + handleOptionsNav(event) { + // next + if ('ArrowUp' === event.key || 'Tab' === event.key) { + this.navigateOptions(-1); + } + // prev + if ('ArrowDown' === event.key) { + this.navigateOptions(1); + } + }, + navigateOptions(direction) { + if (false === this.optionInFocus) { + this.optionInFocus = -1; + } + let index = this.optionInFocus + direction; + let maxLength = this.filteredOptions.length - 1; + if (maxLength < 0) { + maxLength = 0; + } + if (index < 0) { + index = 0; + } else if (index > maxLength) { + index = maxLength; + } + this.optionInFocus = index; + }, + onClickOutside(event) { + if (this.inFocus) { + this.inFocus = false; + this.$emit('on-blur', event); + } + }, + handleInput(event) { + this.$emit('input', event.target.value); + this.query = event.target.value; + if (!this.inFocus) { + this.inFocus = true; + } + }, + handleEnter() { + if (false === this.optionInFocus || !this.optionsList[this.optionInFocus]) { + return; + } + let value = this.filteredOptions[this.optionInFocus].value; + this.handleResultClick(value); + }, + handleResultClick(value) { + if (this.isNonRemovable(value)) { + return; + } + if (this.value.includes(value)) { + this.removeValue(value); + } else if (this.multiple) { + this.storeValues([...new Set(this.value), value]); + } else { + this.storeValues(value); + } + this.inFocus = false; + this.optionInFocus = false; + this.query = ''; + }, + removeValue(value) { + if (!this.multiple) { + this.storeValues(''); + } + const filtered = this.value.filter(current => current !== value); + this.storeValues(filtered); + }, + storeValues(value) { + this.$emit('change', this.sanitizeValue(value)); + }, + getOptionLabel(option) { + var _find$label; + const optionValue = 'string' === typeof option ? option : option.value; + const find = this.optionsList.find(({ + value + }) => value === optionValue); + return (_find$label = find?.label) !== null && _find$label !== void 0 ? _find$label : ''; + }, + sanitizeValue(value) { + if (this.multiple) { + return Array.isArray(value) ? value : [value].filter(Boolean); + } + return Array.isArray(value) ? value[0] : value; + }, + isSelectedOption(option) { + const optionValue = 'string' === typeof option ? option : option.value; + return this.value.includes(optionValue); + }, + isNonRemovable(option) { + var _find$nonRemovable; + const optionValue = 'string' === typeof option ? option : option.value; + const find = this.optionsList.find(({ + value + }) => value === optionValue); + return (_find$nonRemovable = find?.nonRemovable) !== null && _find$nonRemovable !== void 0 ? _find$nonRemovable : false; + } + }, + inject: ['elementId', 'stateType'] +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiPopup.vue?vue&type=script&lang=js": +/*!***********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiPopup.vue?vue&type=script&lang=js ***! + \***********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'CxVuiPopup', + props: { + /** + * Possible values: + * 'sticky-footer': true, + */ + classNames: { + type: Object, + default: () => ({}) + }, + stickyFooter: { + type: Boolean, + default: false + } + }, + computed: { + className() { + return { + 'cx-vui-popup': true, + ...this.classNames + }; + } + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiSelect.vue?vue&type=script&lang=js": +/*!************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiSelect.vue?vue&type=script&lang=js ***! + \************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'CxVuiSelect', + props: { + value: { + type: [String, Number], + default: '' + }, + elementId: { + type: String + }, + classNames: { + type: Object, + default: () => ({}) + } + }, + computed: { + className() { + return { + 'cx-vui-select': true, + ...this.classNames + }; + } + }, + methods: { + handleInput(event) { + this.$emit('input', event.target.value); + } + }, + inject: ['elementId'] +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabs.vue?vue&type=script&lang=js": +/*!**********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabs.vue?vue&type=script&lang=js ***! + \**********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'cx-vui-tabs', + props: { + value: { + type: [String, Number], + default: '' + }, + name: { + type: String, + default: '' + }, + invert: { + type: Boolean, + default: false + }, + inPanel: { + type: Boolean, + default: false + }, + layout: { + validator(value) { + return ['horizontal', 'vertical'].includes(value); + }, + default: 'horizontal' + }, + conditions: { + type: Array, + default() { + return []; + } + } + }, + data() { + return { + navList: [], + activeTab: this.value, + disabledTabs: [] + }; + }, + mounted() { + const tabs = this.getTabs(); + this.disabledTabs = this.getDisabledTabs(); + this.navList = tabs; + if (!this.activeTab) { + this.activeTab = tabs[0].name; + } + this.updateState(); + }, + methods: { + isActive(name) { + return name === this.activeTab; + }, + isDisabled(name) { + return this.disabledTabs.includes(name); + }, + getDisabledTabs() { + const names = []; + for (const tab of this.$children) { + if (tab.disabled) { + names.push(tab.name); + } + } + return names; + }, + onTabClick(tab) { + if (this.isDisabled(tab)) { + return; + } + this.activeTab = tab; + this.$emit('input', this.activeTab); + this.updateState(); + }, + updateState() { + const tabs = this.getTabs(); + this.navList = tabs; + tabs.forEach(tab => { + tab.show = this.activeTab === tab.name; + }); + }, + getTabs() { + const allTabs = this.$children.filter(item => { + return 'cx-vui-tabs-panel' === item.$options.name; + }); + const tabs = []; + allTabs.forEach(item => { + if (item.tab && this.name) { + if (item.tab === this.name) { + tabs.push(item); + } + } else { + tabs.push(item); + } + }); + return tabs; + } + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabsPanel.vue?vue&type=script&lang=js": +/*!***************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabsPanel.vue?vue&type=script&lang=js ***! + \***************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'cx-vui-tabs-panel', + props: { + tab: { + type: String, + default: '' + }, + name: { + type: String, + default: '' + }, + label: { + type: String, + default: '' + }, + disabled: { + type: Boolean, + default: false + }, + icon: { + type: [Object, String], + default: '' + } + }, + data() { + return { + show: false + }; + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Delimiter.vue?vue&type=script&lang=js": +/*!**********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Delimiter.vue?vue&type=script&lang=js ***! + \**********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'Delimiter' +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTable.vue?vue&type=script&lang=js": +/*!*************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTable.vue?vue&type=script&lang=js ***! + \*************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _DetailsTableRowValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DetailsTableRowValue */ "./admin-package/components/DetailsTableRowValue.vue"); +/* harmony import */ var _DetailsTableRow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DetailsTableRow */ "./admin-package/components/DetailsTableRow.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'DetailsTable', + components: { + DetailsTableRow: _DetailsTableRow__WEBPACK_IMPORTED_MODULE_1__["default"], + DetailsTableRowValue: _DetailsTableRowValue__WEBPACK_IMPORTED_MODULE_0__["default"] + }, + props: { + columns: { + type: Object + }, + source: { + type: Object + } + }, + methods: { + getColumnValue(column, ifEmpty = false) { + return this.source[column] ? this.source[column].value : ifEmpty; + }, + hasValueOrAnotherType(column) { + return this.getColumnValue(column) || 'rowValue' !== this.getType(column); + }, + getType(column) { + var _this$columns$column$; + return (_this$columns$column$ = this.columns[column].type) !== null && _this$columns$column$ !== void 0 ? _this$columns$column$ : 'rowValue'; + }, + canShow(columnName) { + const type = this.getType(columnName); + const inDetails = false !== this.columns[columnName].show_in_details; + const value = this.getColumnValue(columnName); + return inDetails && ('rowValue' !== type || value); + } + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRow.vue?vue&type=script&lang=js": +/*!****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRow.vue?vue&type=script&lang=js ***! + \****************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +function defaultColumnClasses() { + return { + 'table-details-row-column': true + }; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'DetailsTableRow', + props: { + role: { + type: String, + default: 'default', + validator: function (value) { + return -1 !== ['header', 'default', 'footer'].indexOf(value); + } + }, + type: { + type: String, + default: 'rowValue', + validator: function (value) { + return -1 !== ['rowValue', 'heading'].indexOf(value); + } + } + }, + computed: { + headingClasses() { + return this.classes({ + 'table-details-row--heading': true + }); + }, + contentClasses() { + return this.classes({ + 'table-details-row--content': true + }); + }, + actionClasses() { + return this.classes({ + 'table-details-row--actions': true + }); + } + }, + methods: { + classes(classes) { + return { + ...defaultColumnClasses(), + ...classes, + ['table-details-row-role--' + this.role]: true + }; + } + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRowValue.vue?vue&type=script&lang=js": +/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRowValue.vue?vue&type=script&lang=js ***! + \*********************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'DetailsTableRowValue', + props: { + value: Object, + withIndent: { + type: Boolean, + default: false + }, + columns: { + type: Object, + default() { + return {}; + } + } + }, + data() { + return { + showNext: {} + }; + }, + computed: { + rootClasses() { + return { + 'jfb-recursive-details': true, + 'jfb-recursive-details--indent': this.withIndent + }; + } + }, + methods: { + getChildren(columnName) { + return this.columns[columnName]?.children || []; + }, + getItemLabel(columnName) { + return this.columns[columnName] ? this.columns[columnName].label : columnName; + }, + isObject(itemValue) { + return 'object' === typeof itemValue; + }, + toggleNext(name) { + const prev = this.showNext[name] || false; + this.$set(this.showNext, name, !prev); + }, + isShow(name) { + return 'undefined' === this.showNext[name] ? true : this.showNext[name]; + }, + itemClasses(isObject = true) { + return { + 'jfb-recursive-details-item': true, + 'jfb-recursive-details-item-with-children': isObject, + 'jfb-recursive-details-item-without-children': !isObject + }; + }, + arrowClasses(columnName) { + return { + dashicons: true, + 'dashicons-arrow-down-alt2': !this.isShow(columnName), + 'dashicons-arrow-up-alt2': this.isShow(columnName) + }; + }, + isSkipLevel(columnName) { + return this.columns[columnName]?.skip_level; + }, + isHiddenLevel(columnName) { + return !this.columns[columnName]?.hide; + } + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ExternalLink.vue?vue&type=script&lang=js": +/*!*************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ExternalLink.vue?vue&type=script&lang=js ***! + \*************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _mixins_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mixins/i18n */ "./admin-package/mixins/i18n.js"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'ExternalLink', + mixins: [_mixins_i18n__WEBPACK_IMPORTED_MODULE_0__["default"]], + props: { + href: { + type: String, + default: '' + } + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ListComponents.vue?vue&type=script&lang=js": +/*!***************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ListComponents.vue?vue&type=script&lang=js ***! + \***************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: "ListComponents", + props: { + components: Array, + scope: String + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/PrintButton.vue?vue&type=script&lang=js": +/*!************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/PrintButton.vue?vue&type=script&lang=js ***! + \************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _mixins_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mixins/i18n */ "./admin-package/mixins/i18n.js"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'PrintButton', + methods: { + print() { + window.print(); + } + }, + mixins: [_mixins_i18n__WEBPACK_IMPORTED_MODULE_0__["default"]] +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/RowWrapper.vue?vue&type=script&lang=js": +/*!***********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/RowWrapper.vue?vue&type=script&lang=js ***! + \***********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Tooltip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Tooltip */ "./admin-package/components/Tooltip.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + +const isCorrectType = value => ['warning-danger', 'warning', 'loading', ''].includes(value); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'RowWrapper', + components: { + Tooltip: _Tooltip__WEBPACK_IMPORTED_MODULE_0__["default"] + }, + props: { + elementId: { + type: String + }, + state: { + type: [String, Object], + validator(value) { + if ('string' === typeof value) { + return isCorrectType(value); + } + return isCorrectType(value.type); + }, + default: '' + }, + /** + * Possible values: + * 'size--1-x-2': true, + * 'padding-side-unset': true, + */ + classNames: { + type: Object, + default: () => ({ + 'cx-vui-component--equalwidth': true + }) + } + }, + data() { + return { + elementIdData: `cx_${this.elementId}` + }; + }, + computed: { + className() { + return { + 'cx-vui-component': true, + ['cx-vui-component--is-' + this.stateType]: this.stateType, + ...this.classNames + }; + }, + stateType() { + return 'string' === typeof this.state ? this.state : this.state.type; + }, + stateHelp() { + return 'string' === typeof this.state ? '' : this.state.message; + } + }, + provide() { + return { + elementId: this.elementIdData, + stateType: () => this.stateType + }; + } +}); + +/***/ }), + +/***/ "../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Tooltip.vue?vue&type=script&lang=js": +/*!********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/babel-loader/lib/index.js!../../node_modules/@wyw-in-js/webpack-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Tooltip.vue?vue&type=script&lang=js ***! + \********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +const schema = { + success: 'dashicons-yes-alt', + warning: 'dashicons-warning', + 'warning-danger': ['dashicons-warning', 'danger'], + info: 'dashicons-info', + pending: 'dashicons-hourglass', + error: 'dashicons-dismiss', + loading: ['dashicons-update', 'loading'] +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'Tooltip', + props: { + icon: { + type: String, + validator(value) { + return Object.keys(schema).includes(value); + }, + default: 'info' + }, + position: { + type: String, + validator(value) { + return ['top-right', 'top-left'].includes(value); + }, + default: 'top-left' + } + }, + computed: { + wrapperClasses() { + return { + 'jfb-tooltip': true, + 'jfb-tooltip-has-text': !!this.$slots.default, + 'jfb-tooltip-has-help': !!this.$slots.help, + ['jfb-tooltip-position--' + this.position]: true + }; + }, + dashIconClass() { + var _schema$this$icon; + let classes = (_schema$this$icon = schema[this.icon]) !== null && _schema$this$icon !== void 0 ? _schema$this$icon : ''; + if (!Array.isArray(classes)) { + classes = [classes]; + } + return ['dashicons', ...classes]; + }, + tooltipClasses() { + return { + 'cx-vui-tooltip': true, + ['tooltip-position-' + this.position]: true + }; + } + } +}); + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=style&index=0&id=edf02a0e&lang=scss&scoped=true": +/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=style&index=0&id=edf02a0e&lang=scss&scoped=true ***! + \******************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.cx-vui-component[data-v-edf02a0e] { + flex-direction: column; + width: 100%; + border-top: unset; + gap: 0.7em; +} +.cx-vui-component.padding-side-unset[data-v-edf02a0e] { + padding-left: unset; + padding-right: unset; +} +.padding-top-bottom-unset[data-v-edf02a0e] { + padding-top: unset; + padding-bottom: unset; +} +.padding-unset[data-v-edf02a0e] { + padding: unset; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/ColumnWrapper.vue","webpack://./../ColumnWrapper.vue"],"names":[],"mappings":"AA+DA;EACC,sBAAA;EACA,WAAA;EACA,iBAAA;EACA,UAAA;AC9DD;ADgEC;EACC,mBAAA;EACA,oBAAA;AC9DF;ADkEA;EACC,kBAAA;EACA,qBAAA;AC/DD;ADkEA;EACC,cAAA;AC/DD","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.cx-vui-component {\r\n\tflex-direction: column;\r\n\twidth: 100%;\r\n\tborder-top: unset;\r\n\tgap: 0.7em;\r\n\r\n\t&.padding-side-unset {\r\n\t\tpadding-left: unset;\r\n\t\tpadding-right: unset;\r\n\t}\r\n}\r\n\r\n.padding-top-bottom-unset {\r\n\tpadding-top: unset;\r\n\tpadding-bottom: unset;\r\n}\r\n\r\n.padding-unset {\r\n\tpadding: unset;\r\n}\r\n",".cx-vui-component {\n flex-direction: column;\n width: 100%;\n border-top: unset;\n gap: 0.7em;\n}\n.cx-vui-component.padding-side-unset {\n padding-left: unset;\n padding-right: unset;\n}\n\n.padding-top-bottom-unset {\n padding-top: unset;\n padding-bottom: unset;\n}\n\n.padding-unset {\n padding: unset;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiCollapseMini.vue?vue&type=style&index=0&id=eca1c496&lang=scss": +/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiCollapseMini.vue?vue&type=style&index=0&id=eca1c496&lang=scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.cx-vui-collapse-mini__wrap { + padding: 0 0 20px; +} +.cx-vui-collapse-mini__item { + border-bottom: 1px solid #ECECEC; +} +.cx-vui-collapse-mini__item:first-child { + border-top: 1px solid #ECECEC; +} +.cx-vui-collapse-mini__item:last-child { + margin-bottom: unset; +} +.cx-vui-collapse-mini__item--active .cx-vui-collapse-mini__header-label > svg { + transform: rotate(90deg); +} +.cx-vui-collapse-mini__header { + padding: 1.2rem; + display: flex; + align-items: center; + cursor: pointer; + column-gap: 1em; +} +.cx-vui-collapse-mini__header-label { + font-weight: 500; + font-size: 15px; + line-height: 23px; + color: #007CBA; + display: flex; + align-items: center; +} +.cx-vui-collapse-mini__header-desc { + font-size: 15px; + line-height: 23px; + color: #7B7E81; +} +.cx-vui-collapse-mini__header-label svg { + margin: -1px 8px 0 0; + transition: 0.3s; +} +.cx-vui-collapse-mini--disabled { + opacity: 0.5; +} +.cx-vui-collapse-mini--disabled .cx-vui-collapse-mini__header { + cursor: not-allowed; +} +.cx-vui-collapse-mini__content { + padding: 0 1.5rem 1.5rem; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/CxVuiCollapseMini.vue","webpack://./../CxVuiCollapseMini.vue"],"names":[],"mappings":"AA6GC;EACC,iBAAA;AC5GF;AD+GC;EAaC,gCAAA;ACzHF;AD6GE;EACC,6BAAA;AC3GH;AD8GE;EACC,oBAAA;AC5GH;AD+GE;EACC,wBAAA;AC7GH;ADmHC;EACC,eAAA;EACA,aAAA;EACA,mBAAA;EACA,eAAA;EACA,eAAA;ACjHF;ADmHE;EACC,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;ACjHH;ADoHE;EACC,eAAA;EACA,iBAAA;EACA,cAAA;AClHH;ADqHE;EACC,oBAAA;EACA,gBAAA;ACnHH;ADuHC;EACC,YAAA;ACrHF;ADuHE;EACC,mBAAA;ACrHH;ADyHC;EACC,wBAAA;ACvHF","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.cx-vui-collapse-mini {\r\n\t&__wrap {\r\n\t\tpadding: 0 0 20px;\r\n\t}\r\n\r\n\t&__item {\r\n\t\t&:first-child {\r\n\t\t\tborder-top: 1px solid #ECECEC;\r\n\t\t}\r\n\r\n\t\t&:last-child {\r\n\t\t\tmargin-bottom: unset;\r\n\t\t}\r\n\r\n\t\t&--active .cx-vui-collapse-mini__header-label > svg {\r\n\t\t\ttransform: rotate(90deg);\r\n\t\t}\r\n\r\n\t\tborder-bottom: 1px solid #ECECEC;\r\n\t}\r\n\r\n\t&__header {\r\n\t\tpadding: 1.2rem;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tcursor: pointer;\r\n\t\tcolumn-gap: 1em;\r\n\r\n\t\t&-label {\r\n\t\t\tfont-weight: 500;\r\n\t\t\tfont-size: 15px;\r\n\t\t\tline-height: 23px;\r\n\t\t\tcolor: #007CBA;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t&-desc {\r\n\t\t\tfont-size: 15px;\r\n\t\t\tline-height: 23px;\r\n\t\t\tcolor: #7B7E81;\r\n\t\t}\r\n\r\n\t\t&-label svg {\r\n\t\t\tmargin: -1px 8px 0 0;\r\n\t\t\ttransition: 0.3s;\r\n\t\t}\r\n\t}\r\n\r\n\t&--disabled {\r\n\t\topacity: 0.5;\r\n\r\n\t\t.cx-vui-collapse-mini__header {\r\n\t\t\tcursor: not-allowed;\r\n\t\t}\r\n\t}\r\n\r\n\t&__content {\r\n\t\tpadding: 0 1.5rem 1.5rem;\r\n\t}\r\n}\r\n",".cx-vui-collapse-mini__wrap {\n padding: 0 0 20px;\n}\n.cx-vui-collapse-mini__item {\n border-bottom: 1px solid #ECECEC;\n}\n.cx-vui-collapse-mini__item:first-child {\n border-top: 1px solid #ECECEC;\n}\n.cx-vui-collapse-mini__item:last-child {\n margin-bottom: unset;\n}\n.cx-vui-collapse-mini__item--active .cx-vui-collapse-mini__header-label > svg {\n transform: rotate(90deg);\n}\n.cx-vui-collapse-mini__header {\n padding: 1.2rem;\n display: flex;\n align-items: center;\n cursor: pointer;\n column-gap: 1em;\n}\n.cx-vui-collapse-mini__header-label {\n font-weight: 500;\n font-size: 15px;\n line-height: 23px;\n color: #007CBA;\n display: flex;\n align-items: center;\n}\n.cx-vui-collapse-mini__header-desc {\n font-size: 15px;\n line-height: 23px;\n color: #7B7E81;\n}\n.cx-vui-collapse-mini__header-label svg {\n margin: -1px 8px 0 0;\n transition: 0.3s;\n}\n.cx-vui-collapse-mini--disabled {\n opacity: 0.5;\n}\n.cx-vui-collapse-mini--disabled .cx-vui-collapse-mini__header {\n cursor: not-allowed;\n}\n.cx-vui-collapse-mini__content {\n padding: 0 1.5rem 1.5rem;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiFSelect.vue?vue&type=style&index=0&id=e0ca50fe&scoped=true&lang=scss": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiFSelect.vue?vue&type=style&index=0&id=e0ca50fe&scoped=true&lang=scss ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.cx-vui-input--warning-danger[data-v-e0ca50fe] { + border: 1px solid #d63638; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/CxVuiFSelect.vue","webpack://./../CxVuiFSelect.vue"],"names":[],"mappings":"AAoVC;EACC,yBAAA;ACnVF","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.cx-vui-input {\r\n\t&--warning-danger {\r\n\t\tborder: 1px solid #d63638;\r\n\t}\r\n}\r\n",".cx-vui-input--warning-danger {\n border: 1px solid #d63638;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiPopup.vue?vue&type=style&index=0&id=c40a982a&scoped=true&lang=scss": +/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiPopup.vue?vue&type=style&index=0&id=c40a982a&scoped=true&lang=scss ***! + \***************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.cx-vui-popup__close[data-v-c40a982a] { + position: unset; +} +.cx-vui-popup__header[data-v-c40a982a] { + display: flex; + justify-content: space-between; + padding-bottom: 10px; + margin: unset; + border-bottom: 1px solid #ECECEC; +} +.cx-vui-popup.sticky-header .cx-vui-popup__body[data-v-c40a982a], .cx-vui-popup.sticky-footer .cx-vui-popup__body[data-v-c40a982a] { + max-height: 80vh; + overflow-y: auto; +} +.cx-vui-popup.sticky-header .cx-vui-popup__header[data-v-c40a982a] { + position: sticky; + top: 0; + background-color: white; + padding-top: 20px; + z-index: 1; +} +.cx-vui-popup.sticky-header .cx-vui-popup__body[data-v-c40a982a] { + padding-top: 0; +} +.cx-vui-popup.sticky-footer .cx-vui-popup__body[data-v-c40a982a] { + padding-bottom: 0; +} +.cx-vui-popup.sticky-footer .cx-vui-popup__content[data-v-c40a982a] { + padding-bottom: 40px; +} +.cx-vui-popup.sticky-footer .cx-vui-popup__footer[data-v-c40a982a] { + position: sticky; + bottom: 0; + background-color: white; + padding-bottom: 20px; + border-top: 1px solid #ECECEC; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/CxVuiPopup.vue","webpack://./../CxVuiPopup.vue"],"names":[],"mappings":"AAiEC;EACC,eAAA;AChEF;ADmEC;EACC,aAAA;EACA,8BAAA;EACA,oBAAA;EACA,aAAA;EACA,gCAAA;ACjEF;ADqEE;EACC,gBAAA;EACA,gBAAA;ACnEH;ADwEE;EACC,gBAAA;EACA,MAAA;EACA,uBAAA;EACA,iBAAA;EACA,UAAA;ACtEH;ADyEE;EACC,cAAA;ACvEH;AD4EE;EACC,iBAAA;AC1EH;AD6EE;EACC,oBAAA;AC3EH;AD8EE;EACC,gBAAA;EACA,SAAA;EACA,uBAAA;EACA,oBAAA;EACA,6BAAA;AC5EH","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.cx-vui-popup {\r\n\t&__close {\r\n\t\tposition: unset;\r\n\t}\r\n\r\n\t&__header {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\tpadding-bottom: 10px;\r\n\t\tmargin: unset;\r\n\t\tborder-bottom: 1px solid #ECECEC;\r\n\t}\r\n\r\n\t&.sticky-header, &.sticky-footer {\r\n\t\t.cx-vui-popup__body {\r\n\t\t\tmax-height: 80vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t}\r\n\t}\r\n\r\n\t&.sticky-header {\r\n\t\t.cx-vui-popup__header {\r\n\t\t\tposition: sticky;\r\n\t\t\ttop: 0;\r\n\t\t\tbackground-color: white;\r\n\t\t\tpadding-top: 20px;\r\n\t\t\tz-index: 1;\r\n\t\t}\r\n\r\n\t\t.cx-vui-popup__body {\r\n\t\t\tpadding-top: 0;\r\n\t\t}\r\n\t}\r\n\r\n\t&.sticky-footer {\r\n\t\t.cx-vui-popup__body {\r\n\t\t\tpadding-bottom: 0;\r\n\t\t}\r\n\r\n\t\t.cx-vui-popup__content {\r\n\t\t\tpadding-bottom: 40px;\r\n\t\t}\r\n\r\n\t\t.cx-vui-popup__footer {\r\n\t\t\tposition: sticky;\r\n\t\t\tbottom: 0;\r\n\t\t\tbackground-color: white;\r\n\t\t\tpadding-bottom: 20px;\r\n\t\t\tborder-top: 1px solid #ECECEC;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n",".cx-vui-popup__close {\n position: unset;\n}\n.cx-vui-popup__header {\n display: flex;\n justify-content: space-between;\n padding-bottom: 10px;\n margin: unset;\n border-bottom: 1px solid #ECECEC;\n}\n.cx-vui-popup.sticky-header .cx-vui-popup__body, .cx-vui-popup.sticky-footer .cx-vui-popup__body {\n max-height: 80vh;\n overflow-y: auto;\n}\n.cx-vui-popup.sticky-header .cx-vui-popup__header {\n position: sticky;\n top: 0;\n background-color: white;\n padding-top: 20px;\n z-index: 1;\n}\n.cx-vui-popup.sticky-header .cx-vui-popup__body {\n padding-top: 0;\n}\n.cx-vui-popup.sticky-footer .cx-vui-popup__body {\n padding-bottom: 0;\n}\n.cx-vui-popup.sticky-footer .cx-vui-popup__content {\n padding-bottom: 40px;\n}\n.cx-vui-popup.sticky-footer .cx-vui-popup__footer {\n position: sticky;\n bottom: 0;\n background-color: white;\n padding-bottom: 20px;\n border-top: 1px solid #ECECEC;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiSelect.vue?vue&type=style&index=0&id=332e17cd&lang=scss&scoped=true": +/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiSelect.vue?vue&type=style&index=0&id=332e17cd&lang=scss&scoped=true ***! + \****************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.cx-vui-select[data-v-332e17cd] { + line-height: 2em; + padding: 6px 24px 6px 8px; +} +.cx-vui-select.fullwidth[data-v-332e17cd] { + width: 100%; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/CxVuiSelect.vue","webpack://./../CxVuiSelect.vue"],"names":[],"mappings":"AAgDA;EACC,gBAAA;EACA,yBAAA;AC/CD;ADiDC;EACC,WAAA;AC/CF","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.cx-vui-select {\r\n\tline-height: 2em;\r\n\tpadding: 6px 24px 6px 8px;\r\n\r\n\t&.fullwidth {\r\n\t\twidth: 100%;\r\n\t}\r\n}\r\n",".cx-vui-select {\n line-height: 2em;\n padding: 6px 24px 6px 8px;\n}\n.cx-vui-select.fullwidth {\n width: 100%;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabs.vue?vue&type=style&index=0&id=3c8e3f8f&lang=scss": +/*!**************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabs.vue?vue&type=style&index=0&id=3c8e3f8f&lang=scss ***! + \**************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.cx-vui-tabs__nav-item--disabled { + opacity: 0.5; + cursor: not-allowed; +} +.cx-vui-tabs__nav-item--disabled:hover { + color: unset; +} +.cx-vui-tabs__nav-item--has-icon { + display: flex; + justify-content: space-between; + column-gap: 1em; +} +.cx-vui-tabs--layout-vertical > .cx-vui-tabs__nav { + width: unset; + flex: unset; + max-width: unset; +} +.cx-vui-tabs--layout-vertical > .cx-vui-tabs__content { + flex: 1; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/CxVuiTabs.vue","webpack://./../CxVuiTabs.vue"],"names":[],"mappings":"AAsJC;EACC,YAAA;EACA,mBAAA;ACrJF;ADuJE;EACC,YAAA;ACrJH;ADyJC;EACC,aAAA;EACA,8BAAA;EACA,eAAA;ACvJF;AD4JC;EACC,YAAA;EACA,WAAA;EACA,gBAAA;ACzJF;AD4JC;EACC,OAAA;AC1JF","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.cx-vui-tabs__nav-item {\r\n\t&--disabled {\r\n\t\topacity: 0.5;\r\n\t\tcursor: not-allowed;\r\n\r\n\t\t&:hover {\r\n\t\t\tcolor: unset;\r\n\t\t}\r\n\t}\r\n\r\n\t&--has-icon {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\tcolumn-gap: 1em;\r\n\t}\r\n}\r\n\r\n.cx-vui-tabs--layout-vertical {\r\n\t& > .cx-vui-tabs__nav {\r\n\t\twidth: unset;\r\n\t\tflex: unset;\r\n\t\tmax-width: unset;\r\n\t}\r\n\r\n\t& > .cx-vui-tabs__content {\r\n\t\tflex: 1;\r\n\t}\r\n}\r\n\r\n\r\n",".cx-vui-tabs__nav-item--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.cx-vui-tabs__nav-item--disabled:hover {\n color: unset;\n}\n.cx-vui-tabs__nav-item--has-icon {\n display: flex;\n justify-content: space-between;\n column-gap: 1em;\n}\n\n.cx-vui-tabs--layout-vertical > .cx-vui-tabs__nav {\n width: unset;\n flex: unset;\n max-width: unset;\n}\n.cx-vui-tabs--layout-vertical > .cx-vui-tabs__content {\n flex: 1;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Delimiter.vue?vue&type=style&index=0&id=8c6d5cba&scoped=true&lang=scss": +/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Delimiter.vue?vue&type=style&index=0&id=8c6d5cba&scoped=true&lang=scss ***! + \**************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `hr.jfb[data-v-8c6d5cba] { + border: 0; + border-top: 1px solid #ECECEC; + margin: unset; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/Delimiter.vue","webpack://./../Delimiter.vue"],"names":[],"mappings":"AAWA;EACC,SAAA;EACA,6BAAA;EACA,aAAA;ACVD","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\r\nhr.jfb {\r\n\tborder: 0;\r\n\tborder-top: 1px solid #ECECEC;\r\n\tmargin: unset;\r\n}\r\n","hr.jfb {\n border: 0;\n border-top: 1px solid #ECECEC;\n margin: unset;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTable.vue?vue&type=style&index=0&id=5f62dc40&lang=scss": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTable.vue?vue&type=style&index=0&id=5f62dc40&lang=scss ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.table-details { + display: flex; + flex-direction: column; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/DetailsTable.vue","webpack://./../DetailsTable.vue"],"names":[],"mappings":"AA2DA;EACC,aAAA;EACA,sBAAA;AC1DD","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.table-details {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n",".table-details {\n display: flex;\n flex-direction: column;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRow.vue?vue&type=style&index=0&id=d41fc6ac&lang=scss": +/*!********************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRow.vue?vue&type=style&index=0&id=d41fc6ac&lang=scss ***! + \********************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.table-details-row { + display: flex; + justify-content: space-between; + font-size: 1.1em; +} +.table-details-row:first-child { + font-weight: bold; +} +.table-details-row:nth-child(even) { + background-color: #eeeeee; +} +.table-details-row-column { + padding: 0.5em 1em; + /*border-bottom: 1px solid #ccc;*/ +} +.table-details-row--heading { + flex: 1; + text-align: right; +} +.table-details-row-role--default.table-details-row--heading { + font-weight: 600; +} +.table-details-row--content { + flex: 2; +} +.table-details-row--actions { + flex: 0.3; + /*border-left: 1px solid #ccc;*/ +} +.table-details-row h3 { + padding: 0.5em; + border-bottom: 1px solid #aaa; + width: 50%; + margin: 1em auto; + text-align: center; + color: #aaa; + font-weight: 400; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/DetailsTableRow.vue","webpack://./../DetailsTableRow.vue"],"names":[],"mappings":"AA4FA;EACC,aAAA;EACA,8BAAA;EACA,gBAAA;AC3FD;AD4FC;EACC,iBAAA;AC1FF;AD4FC;EACC,yBAAA;AC1FF;AD4FC;EACC,kBAAA;EACA,iCAAA;AC1FF;AD4FC;EACC,OAAA;EACA,iBAAA;AC1FF;AD4FC;EACC,gBAAA;AC1FF;AD4FC;EACC,OAAA;AC1FF;AD4FC;EACC,SAAA;EACA,+BAAA;AC1FF;AD6FC;EACC,cAAA;EACA,6BAAA;EACA,UAAA;EACA,gBAAA;EACA,kBAAA;EACA,WAAA;EACA,gBAAA;AC3FF","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\r\n.table-details-row {\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\tfont-size: 1.1em;\r\n\t&:first-child {\r\n\t\tfont-weight: bold;\r\n\t}\r\n\t&:nth-child(even) {\r\n\t\tbackground-color: #eeeeee;\r\n\t}\r\n\t&-column {\r\n\t\tpadding: 0.5em 1em;\r\n\t\t/*border-bottom: 1px solid #ccc;*/\r\n\t}\r\n\t&--heading {\r\n\t\tflex: 1;\r\n\t\ttext-align: right;\r\n\t}\r\n\t&-role--default.table-details-row--heading {\r\n\t\tfont-weight: 600;\r\n\t}\r\n\t&--content {\r\n\t\tflex: 2;\r\n\t}\r\n\t&--actions {\r\n\t\tflex: 0.3;\r\n\t\t/*border-left: 1px solid #ccc;*/\r\n\t}\r\n\r\n\th3 {\r\n\t\tpadding: 0.5em;\r\n\t\tborder-bottom: 1px solid #aaa;\r\n\t\twidth: 50%;\r\n\t\tmargin: 1em auto;\r\n\t\ttext-align: center;\r\n\t\tcolor: #aaa;\r\n\t\tfont-weight: 400;\r\n\t}\r\n}\r\n",".table-details-row {\n display: flex;\n justify-content: space-between;\n font-size: 1.1em;\n}\n.table-details-row:first-child {\n font-weight: bold;\n}\n.table-details-row:nth-child(even) {\n background-color: #eeeeee;\n}\n.table-details-row-column {\n padding: 0.5em 1em;\n /*border-bottom: 1px solid #ccc;*/\n}\n.table-details-row--heading {\n flex: 1;\n text-align: right;\n}\n.table-details-row-role--default.table-details-row--heading {\n font-weight: 600;\n}\n.table-details-row--content {\n flex: 2;\n}\n.table-details-row--actions {\n flex: 0.3;\n /*border-left: 1px solid #ccc;*/\n}\n.table-details-row h3 {\n padding: 0.5em;\n border-bottom: 1px solid #aaa;\n width: 50%;\n margin: 1em auto;\n text-align: center;\n color: #aaa;\n font-weight: 400;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRowValue.vue?vue&type=style&index=0&id=73ed5497&lang=scss&scoped=true": +/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRowValue.vue?vue&type=style&index=0&id=73ed5497&lang=scss&scoped=true ***! + \*************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.fade-enter-active[data-v-73ed5497], .fade-leave-active[data-v-73ed5497] { + transition: opacity 0.5s; +} +.fade-enter[data-v-73ed5497], .fade-leave-to[data-v-73ed5497] { + opacity: 0; +} +.jfb-recursive-details[data-v-73ed5497]:not(.jfb-recursive-details--indent) { + margin-top: unset; +} +.jfb-recursive-details--indent[data-v-73ed5497] { + margin-left: 1.5em; + margin-top: 0.5em; +} +.jfb-recursive-details-row[data-v-73ed5497]:not(:last-child) { + margin-bottom: 0.5em; + padding-bottom: 0.5em; +} +.jfb-recursive-details-item--content[data-v-73ed5497] { + border-bottom: 1px solid #ccc; +} +.jfb-recursive-details-item-without-children > .jfb-recursive-details-item--heading[data-v-73ed5497]::after { + content: ":"; +} +.jfb-recursive-details-item-with-children > .jfb-recursive-details-item--heading[data-v-73ed5497] { + cursor: pointer; +} +.jfb-recursive-details-item-with-children > .jfb-recursive-details-item--heading[data-v-73ed5497]:hover { + color: #2271b1; + border-bottom-color: #2271b1; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/DetailsTableRowValue.vue","webpack://./../DetailsTableRowValue.vue"],"names":[],"mappings":"AAqHA;EACC,wBAAA;ACpHD;ADuHA;EAEC,UAAA;ACrHD;ADyHC;EACC,iBAAA;ACtHF;ADyHC;EACC,kBAAA;EACA,iBAAA;ACvHF;AD2HE;EACC,oBAAA;EACA,qBAAA;ACzHH;AD+HE;EACC,6BAAA;AC7HH;ADgIE;EACC,YAAA;AC9HH;ADiIE;EACC,eAAA;AC/HH;ADiIG;EACC,cAAA;EACA,4BAAA;AC/HJ","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.fade-enter-active, .fade-leave-active {\r\n\ttransition: opacity .5s;\r\n}\r\n\r\n.fade-enter, .fade-leave-to /* .fade-leave-active до версии 2.1.8 */\r\n{\r\n\topacity: 0;\r\n}\r\n\r\n.jfb-recursive-details {\r\n\t&:not( &--indent ) {\r\n\t\tmargin-top: unset;\r\n\t}\r\n\r\n\t&--indent {\r\n\t\tmargin-left: 1.5em;\r\n\t\tmargin-top: 0.5em;\r\n\t}\r\n\r\n\t&-row {\r\n\t\t&:not( :last-child ) {\r\n\t\t\tmargin-bottom: 0.5em;\r\n\t\t\tpadding-bottom: 0.5em;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&-item {\r\n\t\t&--content {\r\n\t\t\tborder-bottom: 1px solid #ccc;\r\n\t\t}\r\n\r\n\t\t&-without-children > &--heading::after {\r\n\t\t\tcontent: ':';\r\n\t\t}\r\n\r\n\t\t&-with-children > &--heading {\r\n\t\t\tcursor: pointer;\r\n\r\n\t\t\t&:hover {\r\n\t\t\t\tcolor: #2271b1;\r\n\t\t\t\tborder-bottom-color: #2271b1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n",".fade-enter-active, .fade-leave-active {\n transition: opacity 0.5s;\n}\n\n.fade-enter, .fade-leave-to {\n opacity: 0;\n}\n\n.jfb-recursive-details:not(.jfb-recursive-details--indent) {\n margin-top: unset;\n}\n.jfb-recursive-details--indent {\n margin-left: 1.5em;\n margin-top: 0.5em;\n}\n.jfb-recursive-details-row:not(:last-child) {\n margin-bottom: 0.5em;\n padding-bottom: 0.5em;\n}\n.jfb-recursive-details-item--content {\n border-bottom: 1px solid #ccc;\n}\n.jfb-recursive-details-item-without-children > .jfb-recursive-details-item--heading::after {\n content: \":\";\n}\n.jfb-recursive-details-item-with-children > .jfb-recursive-details-item--heading {\n cursor: pointer;\n}\n.jfb-recursive-details-item-with-children > .jfb-recursive-details-item--heading:hover {\n color: #2271b1;\n border-bottom-color: #2271b1;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ExternalLink.vue?vue&type=style&index=0&id=81b8e10e&lang=scss": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ExternalLink.vue?vue&type=style&index=0&id=81b8e10e&lang=scss ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.cx-vui-external-link__icon { + width: 1em; + height: 1em; + fill: currentcolor; + vertical-align: middle; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/ExternalLink.vue","webpack://./../ExternalLink.vue"],"names":[],"mappings":"AAmCC;EACC,UAAA;EACA,WAAA;EACA,kBAAA;EACA,sBAAA;AClCF","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.cx-vui-external-link {\r\n\t&__icon {\r\n\t\twidth: 1em;\r\n\t\theight: 1em;\r\n\t\tfill: currentcolor;\r\n\t\tvertical-align: middle;\r\n\t}\r\n}\r\n",".cx-vui-external-link__icon {\n width: 1em;\n height: 1em;\n fill: currentcolor;\n vertical-align: middle;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/RowWrapper.vue?vue&type=style&index=0&id=83705926&lang=scss&scoped=true": +/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/RowWrapper.vue?vue&type=style&index=0&id=83705926&lang=scss&scoped=true ***! + \***************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.size--1-x-2 .cx-vui-component__meta[data-v-83705926] { + flex: 1; +} +.size--1-x-2 .cx-vui-component__control[data-v-83705926] { + flex: 2; +} +.padding-side-unset.cx-vui-component[data-v-83705926] { + padding-left: unset; + padding-right: unset; +} +.cx-vui-component__control-actions[data-v-83705926] { + display: flex; + justify-content: flex-end; + gap: 1em; + margin-top: 0.5em; +}`, "",{"version":3,"sources":["webpack://./admin-package/components/RowWrapper.vue","webpack://./../RowWrapper.vue"],"names":[],"mappings":"AAsHC;EACC,OAAA;ACrHF;ADwHC;EACC,OAAA;ACtHF;AD0HA;EACC,mBAAA;EACA,oBAAA;ACvHD;AD0HA;EACC,aAAA;EACA,yBAAA;EACA,QAAA;EACA,iBAAA;ACvHD","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\r\n.size--1-x-2 {\r\n\t.cx-vui-component__meta {\r\n\t\tflex: 1;\r\n\t}\r\n\r\n\t.cx-vui-component__control {\r\n\t\tflex: 2;\r\n\t}\r\n}\r\n\r\n.padding-side-unset.cx-vui-component {\r\n\tpadding-left: unset;\r\n\tpadding-right: unset;\r\n}\r\n\r\n.cx-vui-component__control-actions {\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n\tgap: 1em;\r\n\tmargin-top: 0.5em;\r\n}\r\n",".size--1-x-2 .cx-vui-component__meta {\n flex: 1;\n}\n.size--1-x-2 .cx-vui-component__control {\n flex: 2;\n}\n\n.padding-side-unset.cx-vui-component {\n padding-left: unset;\n padding-right: unset;\n}\n\n.cx-vui-component__control-actions {\n display: flex;\n justify-content: flex-end;\n gap: 1em;\n margin-top: 0.5em;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Tooltip.vue?vue&type=style&index=0&id=7ae9ae9f&scoped=true&lang=scss": +/*!************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Tooltip.vue?vue&type=style&index=0&id=7ae9ae9f&scoped=true&lang=scss ***! + \************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.jfb-tooltip[data-v-7ae9ae9f] { + position: relative; + display: inline-block; +} +.jfb-tooltip-has-help[data-v-7ae9ae9f] { + cursor: pointer; +} +.jfb-tooltip-has-text[data-v-7ae9ae9f] { + display: flex; + column-gap: 0.5em; + align-items: center; +} +.jfb-tooltip--text[data-v-7ae9ae9f] { + text-overflow: ellipsis; + overflow: hidden; + padding: 0.1em 0; +} +.jfb-tooltip .dashicons-dismiss[data-v-7ae9ae9f] { + color: #d63638; +} +.jfb-tooltip .dashicons-warning[data-v-7ae9ae9f] { + color: #ffa500; +} +.jfb-tooltip .dashicons-warning.danger[data-v-7ae9ae9f] { + color: #d63638; +} +.jfb-tooltip .dashicons-yes-alt[data-v-7ae9ae9f] { + color: #32cd32; +} +.jfb-tooltip .dashicons-info[data-v-7ae9ae9f] { + color: #90c6db; +} +.jfb-tooltip .dashicons-hourglass[data-v-7ae9ae9f] { + color: #b5b5b5; +} +.jfb-tooltip .dashicons-update.loading[data-v-7ae9ae9f] { + animation: jfb-tooltip-loading-icon-data-v-7ae9ae9f 1.5s infinite linear; +} +.jfb-tooltip .cx-vui-tooltip[data-v-7ae9ae9f] { + width: fit-content; + bottom: calc(100% + 15px); + box-sizing: border-box; + pointer-events: none; + transition: all 0.18s linear; + opacity: 0; + padding-left: 1em; + padding-right: 1em; + position: absolute; + z-index: 2; +} +.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-right[data-v-7ae9ae9f] { + right: -1.2em; +} +.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-right[data-v-7ae9ae9f]:after { + right: 20px; + left: unset; +} +.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-left[data-v-7ae9ae9f] { + left: -0.9em; +} +.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-left[data-v-7ae9ae9f]:after { + left: 20px; + right: unset; +} +.jfb-tooltip:hover .cx-vui-tooltip[data-v-7ae9ae9f] { + opacity: 1; +} +.jfb-tooltip:hover .cx-vui-tooltip.tooltip-position-top-right[data-v-7ae9ae9f] { + bottom: 100%; +} +.jfb-tooltip:hover .cx-vui-tooltip.tooltip-position-top-left[data-v-7ae9ae9f] { + bottom: 100%; +} +.jfb-tooltip-position--top-right[data-v-7ae9ae9f] { + flex-direction: row-reverse; +} +@keyframes jfb-tooltip-loading-icon-data-v-7ae9ae9f { +0% { + transform: rotate(0deg); +} +to { + transform: rotate(359deg); +} +}`, "",{"version":3,"sources":["webpack://./admin-package/components/Tooltip.vue","webpack://./../Tooltip.vue"],"names":[],"mappings":"AAyEA;EACC,kBAAA;EACA,qBAAA;ACxED;AD0EC;EACC,eAAA;ACxEF;AD2EC;EACC,aAAA;EACA,iBAAA;EACA,mBAAA;ACzEF;AD4EC;EACC,uBAAA;EACA,gBAAA;EACA,gBAAA;AC1EF;AD8EE;EACC,cAAA;AC5EH;AD+EE;EACC,cAAA;AC7EH;ADgFE;EACC,cAAA;AC9EH;ADiFE;EACC,cAAA;AC/EH;ADkFE;EACC,cAAA;AChFH;ADmFE;EACC,cAAA;ACjFH;ADoFE;EACC,wEAAA;AClFH;ADsFC;EACC,kBAAA;EACA,yBAAA;EACA,sBAAA;EACA,oBAAA;EACA,4BAAA;EACA,UAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;EACA,UAAA;ACpFF;ADsFE;EACC,aAAA;ACpFH;ADsFG;EACC,WAAA;EACA,WAAA;ACpFJ;ADwFE;EACC,YAAA;ACtFH;ADwFG;EACC,UAAA;EACA,YAAA;ACtFJ;AD4FE;EACC,UAAA;AC1FH;AD4FG;EACC,YAAA;AC1FJ;AD6FG;EACC,YAAA;AC3FJ;ADiGE;EACC,2BAAA;AC/FH;ADoGA;AACC;IACC,uBAAA;ACjGA;ADoGD;IACC,yBAAA;AClGA;AACF","sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.jfb-tooltip {\r\n\tposition: relative;\r\n\tdisplay: inline-block;\r\n\r\n\t&-has-help {\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&-has-text {\r\n\t\tdisplay: flex;\r\n\t\tcolumn-gap: 0.5em;\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t&--text {\r\n\t\ttext-overflow: ellipsis;\r\n\t\toverflow: hidden;\r\n\t\tpadding: 0.1em 0;\r\n\t}\r\n\r\n\t.dashicons {\r\n\t\t&-dismiss {\r\n\t\t\tcolor: #d63638;\r\n\t\t}\r\n\r\n\t\t&-warning {\r\n\t\t\tcolor: #ffa500;\r\n\t\t}\r\n\r\n\t\t&-warning.danger {\r\n\t\t\tcolor: #d63638;\r\n\t\t}\r\n\r\n\t\t&-yes-alt {\r\n\t\t\tcolor: #32cd32;\r\n\t\t}\r\n\r\n\t\t&-info {\r\n\t\t\tcolor: #90c6db;\r\n\t\t}\r\n\r\n\t\t&-hourglass {\r\n\t\t\tcolor: #b5b5b5;\r\n\t\t}\r\n\r\n\t\t&-update.loading {\r\n\t\t\tanimation: jfb-tooltip-loading-icon 1.5s infinite linear;\r\n\t\t}\r\n\t}\r\n\r\n\t.cx-vui-tooltip {\r\n\t\twidth: fit-content;\r\n\t\tbottom: calc(100% + 15px);\r\n\t\tbox-sizing: border-box;\r\n\t\tpointer-events: none;\r\n\t\ttransition: all 0.180s linear;\r\n\t\topacity: 0;\r\n\t\tpadding-left: 1em;\r\n\t\tpadding-right: 1em;\r\n\t\tposition: absolute;\r\n\t\tz-index: 2;\r\n\r\n\t\t&.tooltip-position-top-right {\r\n\t\t\tright: -1.2em;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tright: 20px;\r\n\t\t\t\tleft: unset;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tooltip-position-top-left {\r\n\t\t\tleft: -0.9em;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tleft: 20px;\r\n\t\t\t\tright: unset;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&:hover {\r\n\t\t.cx-vui-tooltip {\r\n\t\t\topacity: 1;\r\n\r\n\t\t\t&.tooltip-position-top-right {\r\n\t\t\t\tbottom: 100%;\r\n\t\t\t}\r\n\r\n\t\t\t&.tooltip-position-top-left {\r\n\t\t\t\tbottom: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&-position {\r\n\t\t&--top-right {\r\n\t\t\tflex-direction: row-reverse;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n@keyframes jfb-tooltip-loading-icon {\r\n\t0% {\r\n\t\ttransform: rotate(0deg)\r\n\t}\r\n\r\n\tto {\r\n\t\ttransform: rotate(359deg)\r\n\t}\r\n}\r\n",".jfb-tooltip {\n position: relative;\n display: inline-block;\n}\n.jfb-tooltip-has-help {\n cursor: pointer;\n}\n.jfb-tooltip-has-text {\n display: flex;\n column-gap: 0.5em;\n align-items: center;\n}\n.jfb-tooltip--text {\n text-overflow: ellipsis;\n overflow: hidden;\n padding: 0.1em 0;\n}\n.jfb-tooltip .dashicons-dismiss {\n color: #d63638;\n}\n.jfb-tooltip .dashicons-warning {\n color: #ffa500;\n}\n.jfb-tooltip .dashicons-warning.danger {\n color: #d63638;\n}\n.jfb-tooltip .dashicons-yes-alt {\n color: #32cd32;\n}\n.jfb-tooltip .dashicons-info {\n color: #90c6db;\n}\n.jfb-tooltip .dashicons-hourglass {\n color: #b5b5b5;\n}\n.jfb-tooltip .dashicons-update.loading {\n animation: jfb-tooltip-loading-icon 1.5s infinite linear;\n}\n.jfb-tooltip .cx-vui-tooltip {\n width: fit-content;\n bottom: calc(100% + 15px);\n box-sizing: border-box;\n pointer-events: none;\n transition: all 0.18s linear;\n opacity: 0;\n padding-left: 1em;\n padding-right: 1em;\n position: absolute;\n z-index: 2;\n}\n.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-right {\n right: -1.2em;\n}\n.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-right:after {\n right: 20px;\n left: unset;\n}\n.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-left {\n left: -0.9em;\n}\n.jfb-tooltip .cx-vui-tooltip.tooltip-position-top-left:after {\n left: 20px;\n right: unset;\n}\n.jfb-tooltip:hover .cx-vui-tooltip {\n opacity: 1;\n}\n.jfb-tooltip:hover .cx-vui-tooltip.tooltip-position-top-right {\n bottom: 100%;\n}\n.jfb-tooltip:hover .cx-vui-tooltip.tooltip-position-top-left {\n bottom: 100%;\n}\n.jfb-tooltip-position--top-right {\n flex-direction: row-reverse;\n}\n\n@keyframes jfb-tooltip-loading-icon {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/PrintButton.vue?vue&type=style&index=0&id=5837624a&scoped=true&lang=css": +/*!********************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/PrintButton.vue?vue&type=style&index=0&id=5837624a&scoped=true&lang=css ***! + \********************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +@media print { +.cx-vui-button[data-v-5837624a] { + display: none; +} +} +`, "",{"version":3,"sources":["webpack://./../admin-package/components/PrintButton.vue"],"names":[],"mappings":";AAgCA;AACA;EACA,aAAA;AACA;AACA","sourcesContent":["\r\n\r\n\r\n\r\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/runtime/api.js": +/*!*********************************************************!*\ + !*** ../../node_modules/css-loader/dist/runtime/api.js ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function (cssWithMappingToString) { + var list = []; + + // return the list of modules as css string + list.toString = function toString() { + return this.map(function (item) { + var content = ""; + var needLayer = typeof item[5] !== "undefined"; + if (item[4]) { + content += "@supports (".concat(item[4], ") {"); + } + if (item[2]) { + content += "@media ".concat(item[2], " {"); + } + if (needLayer) { + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); + } + content += cssWithMappingToString(item); + if (needLayer) { + content += "}"; + } + if (item[2]) { + content += "}"; + } + if (item[4]) { + content += "}"; + } + return content; + }).join(""); + }; + + // import a list of modules into the list + list.i = function i(modules, media, dedupe, supports, layer) { + if (typeof modules === "string") { + modules = [[null, modules, undefined]]; + } + var alreadyImportedModules = {}; + if (dedupe) { + for (var k = 0; k < this.length; k++) { + var id = this[k][0]; + if (id != null) { + alreadyImportedModules[id] = true; + } + } + } + for (var _k = 0; _k < modules.length; _k++) { + var item = [].concat(modules[_k]); + if (dedupe && alreadyImportedModules[item[0]]) { + continue; + } + if (typeof layer !== "undefined") { + if (typeof item[5] === "undefined") { + item[5] = layer; + } else { + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); + item[5] = layer; + } + } + if (media) { + if (!item[2]) { + item[2] = media; + } else { + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); + item[2] = media; + } + } + if (supports) { + if (!item[4]) { + item[4] = "".concat(supports); + } else { + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); + item[4] = supports; + } + } + list.push(item); + } + }; + return list; +}; + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/runtime/sourceMaps.js": +/*!****************************************************************!*\ + !*** ../../node_modules/css-loader/dist/runtime/sourceMaps.js ***! + \****************************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (item) { + var content = item[1]; + var cssMapping = item[3]; + if (!cssMapping) { + return content; + } + if (typeof btoa === "function") { + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); + var sourceMapping = "/*# ".concat(data, " */"); + return [content].concat([sourceMapping]).join("\n"); + } + return [content].join("\n"); +}; + +/***/ }), + +/***/ "../../node_modules/v-click-outside-x/dist/v-click-outside-x.esm.js": +/*!**************************************************************************!*\ + !*** ../../node_modules/v-click-outside-x/dist/v-click-outside-x.esm.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ directive: () => (/* binding */ directive), +/* harmony export */ install: () => (/* binding */ install) +/* harmony export */ }); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../package.json */ "../../node_modules/v-click-outside-x/package.json"); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + +var version = _package_json__WEBPACK_IMPORTED_MODULE_0__.version; +/** + * @typedef {import("../types/index.d.ts")} VClickOutsidePlugin + */ + +var CLICK = 'click'; +var captureInstances = Object.create(null); +var nonCaptureInstances = Object.create(null); +var captureEventHandlers = Object.create(null); +var nonCaptureEventHandlers = Object.create(null); +var instancesList = [captureInstances, nonCaptureInstances]; +/** + * The common event handler for bot capture and non-capture events. + * + * @param {!object} context - The event context. + * @param {!object} instances - The capture or non-capture registered instances. + * @param {Event} event - The event object. + * @param {string} arg - The event type. + * @returns {undefined} Default. + */ + +var commonHandler = function onCommonEvent(context, instances, event, arg) { + var target = event.target; + + var itemIteratee = function itemIteratee(item) { + var el = item.el; + + if (el !== target && !el.contains(target)) { + var binding = item.binding; + + if (binding.modifiers.stop) { + event.stopPropagation(); + } + + if (binding.modifiers.prevent) { + event.preventDefault(); + } + + binding.value.call(context, event); + } + }; + + instances[arg].forEach(itemIteratee); +}; +/** + * Get the correct event handler: Capture or non-capture. + * + * @param {boolean} useCapture - Indicate which handler to use; 'true' to use + * capture handler or 'false' for non-capture. + * @param {string} arg - The event type. + * @returns {Function} - The event handler. + */ + + +var getEventHandler = function getEventHandler(useCapture, arg) { + if (useCapture) { + if (captureEventHandlers[arg]) { + return captureEventHandlers[arg]; + } + /** + * Event handler for capture events. + * + * @param {Event} event - The event object. + */ + + + captureEventHandlers[arg] = function onCaptureEvent(event) { + commonHandler(this, captureInstances, event, arg); + }; + + return captureEventHandlers[arg]; + } + + if (nonCaptureEventHandlers[arg]) { + return nonCaptureEventHandlers[arg]; + } + /** + * Event handler for non-capture events. + * + * @param {Event} event - The event object. + */ + + + nonCaptureEventHandlers[arg] = function onNonCaptureEvent(event) { + commonHandler(this, nonCaptureInstances, event, arg); + }; + + return nonCaptureEventHandlers[arg]; +}; +/** + * The directive definition. + * {@link https://vuejs.org/v2/guide/custom-directive.html|Custom directive}. + * + * @type {VClickOutsidePlugin.directive} + * @property {!object} $captureInstances - Registered capture instances. + * @property {!object} $nonCaptureInstances - Registered non-capture instances. + * @property {Function} $_onCaptureEvent - Event handler for capture events. + * @property {Function} $_onNonCaptureEvent - Event handler for non-capture events. + * @property {Function} bind - Called only once, when the directive is first + * bound to the element. + * @property {Function} unbind - Called only once, when the directive is unbound + * from the element. + * @property {string} version - The version number of this release. + */ + + +var directive = Object.defineProperties({}, { + $captureInstances: { + value: captureInstances + }, + $nonCaptureInstances: { + value: nonCaptureInstances + }, + $captureEventHandlers: { + value: captureEventHandlers + }, + $nonCaptureEventHandlers: { + value: nonCaptureEventHandlers + }, + bind: { + value: function bind(el, binding) { + if (typeof binding.value !== 'function') { + throw new TypeError('Binding value must be a function.'); + } + + var arg = binding.arg || CLICK; + + var normalisedBinding = _objectSpread(_objectSpread({}, binding), { + arg: arg, + modifiers: _objectSpread(_objectSpread({}, { + capture: false, + prevent: false, + stop: false + }), binding.modifiers) + }); + + var useCapture = normalisedBinding.modifiers.capture; + var instances = useCapture ? captureInstances : nonCaptureInstances; + + if (!Array.isArray(instances[arg])) { + instances[arg] = []; + } + + if (instances[arg].push({ + el: el, + binding: normalisedBinding + }) === 1) { + /* istanbul ignore next */ + if ((typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && document) { + document.addEventListener(arg, getEventHandler(useCapture, arg), useCapture); + } + } + } + }, + unbind: { + value: function unbind(el) { + var compareElements = function compareElements(item) { + return item.el !== el; + }; + + var instancesIteratee = function instancesIteratee(instances) { + var instanceKeys = Object.keys(instances); + + if (instanceKeys.length) { + var useCapture = instances === captureInstances; + + var keysIteratee = function keysIteratee(eventName) { + var newInstance = instances[eventName].filter(compareElements); + + if (newInstance.length) { + instances[eventName] = newInstance; + } else { + /* istanbul ignore next */ + if ((typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && document) { + document.removeEventListener(eventName, getEventHandler(useCapture, eventName), useCapture); + } + + delete instances[eventName]; + } + }; + + instanceKeys.forEach(keysIteratee); + } + }; + + instancesList.forEach(instancesIteratee); + } + }, + + /* Note: This needs to be manually updated to match package.json. */ + version: { + enumerable: true, + value: version + } +}); +/** + * A Vue.js plugin should expose an install method. The method will be called + * with the Vue constructor as the first argument, along with possible options. + * {@link https://vuejs.org/v2/guide/plugins.html#Writing-a-Plugin|Writing a plugin}. + * + * @type {VClickOutsidePlugin.install} + * @param {import("vue")} Vue - The Vue constructor. + */ + +function install(Vue) { + Vue.directive('click-outside', directive); +} + +//# sourceMappingURL=v-click-outside-x.esm.js.map + +/***/ }), + +/***/ "../../node_modules/v-click-outside-x/package.json": +/*!*********************************************************!*\ + !*** ../../node_modules/v-click-outside-x/package.json ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"name":"v-click-outside-x","version":"4.1.3","description":"Vue directive to react on clicks outside an element.","homepage":"https://github.com/SergioCrisostomo/v-click-outside-x.git","author":{"name":"Graham Fairweather"},"maintainers":[{"name":"Sérgio Crisóstomo","email":"sergiosbox@gmail.com"}],"copyright":"Copyright (c) 2018-present","keywords":["vue","click","outside","directive"],"files":["dist","src"],"module":"dist/v-click-outside-x.esm.js","main":"dist/v-click-outside-x.js","typings":"types/index.d.ts","jsdelivr":"dist/v-click-outside-x.min.js","scripts":{"build:esm":"mkdirp dist && babel -s true --env-name esm src/v-click-outside-x.js -o dist/v-click-outside-x.esm.js","build:base":"webpack --bail --progress --profile --colors","build":"npm run build:esm && cross-env NODE_ENV=production npm run build:base --","build:dev":"npm run build:base --","clean":"rimraf dist && npm run clean:coverage","clean:coverage":"rimraf __tests__/coverage","lint":"eslint -f \'node_modules/eslint-friendly-formatter\' --ext .js,.json .","lint-fix":"npm run lint -- --fix","report":"npm run build -- --env.report","report:dev":"npm run build:dev -- --env.report","security":"npm audit","security-fix":"npm run security -- fix","start":"nodemon --exec \\"npm run build\\" --watch src","test":"npm run clean:coverage && jest","test:ci":"npm run test -- --ci --maxWorkers=2","test:ci-coveralls":"npm run test:ci -- --coverage --coverageReporters=text-lcov | coveralls","test:coverage":"npm run test -- --coverage"},"license":"MIT","repository":{"type":"git","url":"https://github.com/SergioCrisostomo/v-click-outside-x.git"},"bugs":{"url":"https://github.com/SergioCrisostomo/v-click-outside-x/issues"},"dependencies":{},"devDependencies":{"@babel/cli":"^7.13.16","@babel/core":"^7.13.16","@babel/node":"^7.13.13","@babel/plugin-transform-property-mutators":"^7.12.13","@babel/plugin-transform-runtime":"^7.13.15","@babel/preset-env":"^7.13.15","@babel/runtime":"^7.13.17","@types/jest":"^24.9.1","@types/node":"^13.13.50","@types/webpack":"^4.41.27","@typescript-eslint/eslint-plugin":"^2.34.0","@typescript-eslint/parser":"^2.34.0","babel-core":"^7.0.0-0","babel-eslint":"^10.1.0","babel-loader":"^8.2.2","babel-plugin-lodash":"^3.3.4","caniuse-lite":"^1.0.30001214","coveralls":"^3.1.0","cross-env":"^6.0.3","eslint":"^6.8.0","eslint-friendly-formatter":"^4.0.1","eslint-import-resolver-webpack":"^0.12.2","eslint-loader":"^3.0.4","eslint-plugin-babel":"^5.3.1","eslint-plugin-compat":"^3.9.0","eslint-plugin-css-modules":"^2.11.0","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-html":"^6.1.2","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^22.17.0","eslint-plugin-jsdoc":"^20.4.0","eslint-plugin-json":"^1.4.0","eslint-plugin-lodash":"^6.0.0","eslint-plugin-no-use-extend-native":"^0.4.1","eslint-plugin-prefer-object-spread":"^1.2.1","eslint-plugin-prettier":"^3.4.0","eslint-plugin-promise":"^4.3.1","eslint-plugin-sort-class-members":"^1.11.0","eslint-plugin-switch-case":"^1.1.2","jest":"^24.9.0","jest-cli":"^24.9.0","jest-file":"^1.0.0","lodash":"^4.17.21","lodash-webpack-plugin":"^0.11.6","mkdirp":"^0.5.5","nodemon":"^2.0.7","prettier":"^1.19.1","rimraf":"^3.0.2","source-map-loader":"^0.2.4","strip-ansi":"^6.0.0","terser-webpack-plugin":"^2.3.8","typescript":"^3.9.9","webpack":"^4.46.0","webpack-bundle-analyzer":"^3.9.0","webpack-cli":"^3.3.12","webpack-global-object-x":"^1.0.1","webpack-merge":"^4.2.2"},"engines":{"node":">=8.11.4","npm":">=6.10.1"},"browserslist":["> 1%","Explorer >= 9"]}'); + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=template&id=edf02a0e&scoped=true": +/*!*********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=template&id=edf02a0e&scoped=true ***! + \*********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.className},[(_vm.$slots.label)?_c('label',{staticClass:"cx-vui-component__label",attrs:{"for":_vm.elementIdData}},[_vm._t("label")],2):_vm._e(),_vm._v(" "),_vm._t("default"),_vm._v(" "),(_vm.$slots.description)?_c('div',{staticClass:"cx-vui-component__desc"},[_vm._t("description")],2):_vm._e()],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiCollapseMini.vue?vue&type=template&id=eca1c496": +/*!*************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiCollapseMini.vue?vue&type=template&id=eca1c496 ***! + \*************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ + 'cx-vui-panel': _vm.withPanel, + 'cx-vui-collapse-mini--disabled': _vm.disabled, + 'cx-vui-collapse-mini__item': true, + 'cx-vui-collapse-mini__item--active': _vm.isActive +}},[_c('div',{staticClass:"cx-vui-collapse-mini__header",on:{"click":_vm.collapse}},[_c('div',{staticClass:"cx-vui-collapse-mini__header-label"},[_c('svg',{attrs:{"width":"14","height":"14","viewBox":"0 0 14 14","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M14 13.9999L14 -0.00012207L0 -0.000121458L6.11959e-07 13.9999L14 13.9999Z","fill":"white"}}),_vm._v(" "),_c('path',{attrs:{"d":"M5.32911 1L11 7L5.32911 13L4 11.5938L8.34177 7L4 2.40625L5.32911 1Z","fill":"#007CBA"}})]),_vm._v("\n\t\t\t"+_vm._s(_vm.label)+"\n\t\t")]),_vm._v(" "),(_vm.icon)?_c('div',{staticClass:"cx-vui-collapse-mini__header-desc"},[('object' === typeof _vm.icon)?_c(_vm.icon,{tag:"component"}):_vm._e()],1):(_vm.desc)?_c('div',{staticClass:"cx-vui-collapse-mini__header-desc"},[_vm._v("\n\t\t\t"+_vm._s(_vm.desc)+"\n\t\t")]):_vm._e(),_vm._v(" "),(_vm.$slots.description)?_c('div',{staticClass:"cx-vui-collapse-mini__header-custom-description"},[_vm._t("description")],2):_vm._e()]),_vm._v(" "),(!_vm.disabled)?[(this.$slots.default)?[_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.isActive),expression:"isActive"}],staticClass:"cx-vui-collapse-mini__content"},[_vm._t("default")],2)]:[_vm._t("custom",null,{"state":{ isActive: _vm.isActive }})]]:_vm._e()],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiDate.vue?vue&type=template&id=47253882&scoped=true": +/*!*****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiDate.vue?vue&type=template&id=47253882&scoped=true ***! + \*****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('input',{staticClass:"cx-vui-input size-fullwidth",attrs:{"type":"date","name":_vm.elementId,"id":_vm.elementId,"max":_vm.max,"min":_vm.min},domProps:{"value":_vm.value},on:{"input":_vm.handleInput}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiFSelect.vue?vue&type=template&id=e0ca50fe&scoped=true": +/*!********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiFSelect.vue?vue&type=template&id=e0ca50fe&scoped=true ***! + \********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () { +var _obj; +var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"cx-vui-f-select"},[_c('div',{class:{ + 'cx-vui-f-select__selected': true, + 'cx-vui-f-select__selected-not-empty': this.value.length > 0 + }},_vm._l((_vm.value),function(option){return _c('div',{staticClass:"cx-vui-f-select__selected-option",on:{"click":function($event){return _vm.handleResultClick( option )}}},[(_vm.$slots[ 'option-' + option ])?[_vm._t('option-' + option)]:[(!_vm.isNonRemovable( option ))?_c('span',{staticClass:"cx-vui-f-select__selected-option-icon"},[_c('svg',{attrs:{"width":"10","height":"10","viewBox":"0 0 10 10","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M10 1.00671L6.00671 5L10 8.99329L8.99329 10L5 6.00671L1.00671 10L0 8.99329L3.99329 5L0 1.00671L1.00671 0L5 3.99329L8.99329 0L10 1.00671Z"}})])]):_vm._e(),_vm._v("\n\t\t\t\t"+_vm._s(_vm.getOptionLabel( option ))+"\n\t\t\t")]],2)}),0),_vm._v(" "),_c('div',{directives:[{name:"click-outside",rawName:"v-click-outside.capture",value:(_vm.onClickOutside),expression:"onClickOutside",modifiers:{"capture":true}},{name:"click-outside",rawName:"v-click-outside:mousedown.capture",value:(_vm.onClickOutside),expression:"onClickOutside",arg:"mousedown",modifiers:{"capture":true}},{name:"click-outside",rawName:"v-click-outside:touchstart.capture",value:(_vm.onClickOutside),expression:"onClickOutside",arg:"touchstart",modifiers:{"capture":true}}],staticClass:"cx-vui-f-select__control",on:{"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"up",38,$event.key,["Up","ArrowUp"])){ return null; }$event.preventDefault();return _vm.handleOptionsNav.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"down",40,$event.key,["Down","ArrowDown"])){ return null; }$event.preventDefault();return _vm.handleOptionsNav.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"tab",9,$event.key,"Tab")){ return null; }return _vm.handleOptionsNav.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }return _vm.handleEnter.apply(null, arguments)}]}},[_c('input',{class:( _obj = { + 'cx-vui-f-select__input': true, + 'cx-vui-input--in-focus': _vm.inFocus, + 'cx-vui-input': true + }, _obj['cx-vui-input--' + _vm.stateType() ] = _vm.stateType(), _obj['size-fullwidth'] = true, _obj['has-error'] = _vm.error, _obj ),attrs:{"id":_vm.elementId,"placeholder":_vm.placeholder,"autocomplete":_vm.autocomplete,"type":"text"},domProps:{"value":_vm.query},on:{"input":_vm.handleInput,"focus":_vm.handleFocus}}),_vm._v(" "),(_vm.inFocus)?_c('div',{staticClass:"cx-vui-f-select__results"},[(! _vm.filteredOptions.length)?_c('div',{staticClass:"cx-vui-f-select__results-message",domProps:{"innerHTML":_vm._s(_vm.notFoundMeassge)}}):_c('div',_vm._l((_vm.filteredOptions),function(option,optionIndex){return _c('div',{class:{ + 'cx-vui-f-select__result': true, + 'in-focus': optionIndex === _vm.optionInFocus, + 'is-selected': _vm.isSelectedOption( option ) + },on:{"click":function($event){return _vm.handleResultClick( option.value )}}},[_vm._v(_vm._s(_vm.getOptionLabel( option ))+"\n\t\t\t\t")])}),0)]):_vm._e()]),_vm._v(" "),_c('select',{staticClass:"cx-vui-f-select__select-tag",attrs:{"placeholder":_vm.placeholder,"disabled":_vm.disabled,"readonly":_vm.readonly,"multiple":_vm.multiple},domProps:{"value":_vm.currentValues}},_vm._l((_vm.currentValues),function(option){return _c('option',{attrs:{"selected":""},domProps:{"value":option}})}),0)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiPopup.vue?vue&type=template&id=c40a982a&scoped=true": +/*!******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiPopup.vue?vue&type=template&id=c40a982a&scoped=true ***! + \******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.className},[_c('div',{staticClass:"cx-vui-popup__overlay",on:{"click":function($event){return _vm.$emit( 'close' )}}}),_vm._v(" "),_c('div',{staticClass:"cx-vui-popup__body"},[(_vm.$slots.title)?_c('h2',{staticClass:"cx-vui-popup__header"},[_vm._t("title"),_vm._v(" "),(_vm.$slots.close)?[_vm._t("close")]:_c('div',{staticClass:"cx-vui-popup__close",on:{"click":function($event){return _vm.$emit( 'close' )}}},[_c('svg',{attrs:{"width":"20","height":"20","viewBox":"0 0 14 14","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M12 3.00671L8.00671 7L12 10.9933L10.9933 12L7 8.00671L3.00671 12L2 10.9933L5.99329 7L2 3.00671L3.00671 2L7 5.99329L10.9933 2L12 3.00671Z"}})])])],2):_vm._e(),_vm._v(" "),_c('div',{staticClass:"cx-vui-popup__content"},[_vm._t("content")],2),_vm._v(" "),(_vm.$slots.footer)?_c('div',{staticClass:"cx-vui-popup__footer"},[_vm._t("footer")],2):_vm._e()])])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiSelect.vue?vue&type=template&id=332e17cd&scoped=true": +/*!*******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiSelect.vue?vue&type=template&id=332e17cd&scoped=true ***! + \*******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('select',{class:_vm.className,attrs:{"name":_vm.elementId,"id":_vm.elementId},domProps:{"value":_vm.value},on:{"input":_vm.handleInput}},[_vm._t("default")],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabs.vue?vue&type=template&id=3c8e3f8f": +/*!*****************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabs.vue?vue&type=template&id=3c8e3f8f ***! + \*****************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ + 'cx-vui-tabs': true, + 'cx-vui-tabs--invert': _vm.invert, + 'cx-vui-tabs--layout-vertical': 'vertical' === this.layout, + 'cx-vui-tabs--layout-horizontal': 'horizontal' === this.layout, + 'cx-vui-tabs--in-panel': _vm.inPanel, +}},[_c('div',{staticClass:"cx-vui-tabs__nav"},_vm._l((_vm.navList),function(item){return _c('div',{class:{ + 'cx-vui-tabs__nav-item': true, + 'cx-vui-tabs__nav-item--active': _vm.isActive( item.name ), + 'cx-vui-tabs__nav-item--disabled': _vm.isDisabled( item.name ), + 'cx-vui-tabs__nav-item--has-icon': !! item.icon, + },on:{"click":function($event){return _vm.onTabClick( item.name )}}},[_c('span',{staticClass:"item-label"},[_vm._v(_vm._s(item.label))]),_vm._v(" "),(item.icon)?_c('span',{staticClass:"item-icon"},[('object' === typeof item.icon)?_c(item.icon,{tag:"component",attrs:{"is-active":_vm.isActive( item.name )}}):_vm._e()],1):_vm._e()])}),0),_vm._v(" "),_c('div',{staticClass:"cx-vui-tabs__content"},[_vm._t("default")],2)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabsPanel.vue?vue&type=template&id=be3da036": +/*!**********************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/CxVuiTabsPanel.vue?vue&type=template&id=be3da036 ***! + \**********************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.show),expression:"show"}],staticClass:"cx-vui-tabs-panel"},[_vm._t("default")],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Delimiter.vue?vue&type=template&id=8c6d5cba&scoped=true": +/*!*****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Delimiter.vue?vue&type=template&id=8c6d5cba&scoped=true ***! + \*****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('hr',{staticClass:"jfb"})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTable.vue?vue&type=template&id=5f62dc40": +/*!********************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTable.vue?vue&type=template&id=5f62dc40 ***! + \********************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:"table-details"},_vm._l((_vm.columns),function(column,columnName){return (_vm.canShow( columnName ))?_c('DetailsTableRow',{key:columnName,attrs:{"type":_vm.getType( columnName )},scopedSlots:_vm._u([{key:"name",fn:function(){return [_vm._v(_vm._s(column.label))]},proxy:true},{key:"value",fn:function(){return [('object' === typeof _vm.getColumnValue( columnName, false ))?[_c('DetailsTableRowValue',{attrs:{"value":_vm.getColumnValue( columnName, false ),"columns":(column.children || {})}})]:[_vm._v(_vm._s(_vm.getColumnValue( columnName, '' )))]]},proxy:true}],null,true)}):_vm._e()}),1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRow.vue?vue&type=template&id=d41fc6ac": +/*!***********************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRow.vue?vue&type=template&id=d41fc6ac ***! + \***********************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"table-details-row"},[('rowValue' === _vm.type)?[_c('div',{class:_vm.headingClasses},[(_vm.role !== 'default')?[_vm._v(_vm._s('Name'))]:[_vm._t("name"),_vm._v("\n\t\t\t\t:\n\t\t\t")]],2),_vm._v(" "),_c('div',{class:_vm.contentClasses},[(_vm.role !== 'default')?[_vm._v(_vm._s('Value'))]:[_vm._t("value")]],2),_vm._v(" "),_c('div',{class:_vm.actionClasses},[(_vm.role !== 'default')?[_vm._v(_vm._s('Actions'))]:[_vm._t("actions")]],2)]:[_c('h3',[_vm._t("name")],2)]],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRowValue.vue?vue&type=template&id=73ed5497&scoped=true": +/*!****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/DetailsTableRowValue.vue?vue&type=template&id=73ed5497&scoped=true ***! + \****************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{directives:[{name:"show",rawName:"v-show",value:(! this.withIndent),expression:"! this.withIndent"}],class:_vm.rootClasses},_vm._l((_vm.value),function(itemValue,itemName){return (_vm.isHiddenLevel( itemName ))?_c('li',{key:itemName,staticClass:"jfb-recursive-details-row"},[(_vm.isSkipLevel( itemName ))?[_c('DetailsTableRowValue',{attrs:{"value":itemValue,"columns":_vm.getChildren( itemName )}})]:[(_vm.isObject( itemValue ))?_c('span',{class:_vm.itemClasses( true )},[_c('span',{staticClass:"jfb-recursive-details-item--heading",on:{"click":function($event){return _vm.toggleNext( itemName )}}},[_vm._v("\n\t\t\t\t\t"+_vm._s(_vm.getItemLabel( itemName ))+"\n\t\t\t\t\t"),_c('span',{class:_vm.arrowClasses( itemName )})]),_vm._v(" "),_c('span',{staticClass:"jfb-recursive-details-item--content"},[_c('transition',{attrs:{"name":"fade"}},[_c('DetailsTableRowValue',{directives:[{name:"show",rawName:"v-show",value:(_vm.isShow( itemName )),expression:"isShow( itemName )"}],attrs:{"value":itemValue,"with-indent":true,"columns":_vm.getChildren( itemName )}})],1)],1)]):_c('span',{class:_vm.itemClasses( false )},[_c('span',{staticClass:"jfb-recursive-details-item--heading"},[_vm._v(_vm._s(_vm.getItemLabel( itemName )))]),_vm._v(" \n\t\t\t\t"),_c('span',{staticClass:"jfb-recursive-details-item--content"},[_vm._v(_vm._s(itemValue))])])]],2):_vm._e()}),0)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ExternalLink.vue?vue&type=template&id=81b8e10e": +/*!********************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ExternalLink.vue?vue&type=template&id=81b8e10e ***! + \********************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:"cx-vui-external-link",attrs:{"href":_vm.href,"target":"_blank","rel":"external noreferrer noopener"}},[_vm._t("default"),_vm._v(" "),_c('svg',{staticClass:"cx-vui-external-link__icon",attrs:{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","width":"24","height":"24","aria-hidden":"true","focusable":"false"}},[_c('path',{attrs:{"d":"M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"}})])],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ListComponents.vue?vue&type=template&id=6dd368e8": +/*!**********************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ListComponents.vue?vue&type=template&id=6dd368e8 ***! + \**********************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"jfb-list-components"},[_vm._l((_vm.components),function(component,index){return _c('div',{key:'entry_' + index,staticClass:"jfb-list-components-item"},[_c('keep-alive',[_c(component,{tag:"component",attrs:{"scope":_vm.scope}})],1)],1)}),_vm._v(" "),_vm._t("default")],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/PrintButton.vue?vue&type=template&id=5837624a&scoped=true": +/*!*******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/PrintButton.vue?vue&type=template&id=5837624a&scoped=true ***! + \*******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('cx-vui-button',{attrs:{"button-style":"accent","size":"mini"},on:{"click":_vm.print},scopedSlots:_vm._u([{key:"label",fn:function(){return [(_vm.$slots.default)?[_vm._t("default")]:[_vm._v("\n\t\t\t"+_vm._s(_vm.__( 'Print', 'jet-form-builder' ))+"\n\t\t")]]},proxy:true}],null,true)})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/RowWrapper.vue?vue&type=template&id=83705926&scoped=true": +/*!******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/RowWrapper.vue?vue&type=template&id=83705926&scoped=true ***! + \******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.className},[(_vm.$slots.meta)?_c('div',{staticClass:"cx-vui-component__meta"},[_vm._t("meta")],2):(_vm.$slots.label || _vm.$slots.description)?_c('div',{staticClass:"cx-vui-component__meta"},[(_vm.$slots.label)?_c('label',{staticClass:"cx-vui-component__label",attrs:{"for":_vm.elementIdData}},[(_vm.stateType)?[_c('Tooltip',{attrs:{"icon":_vm.stateType,"position":'top-right'},scopedSlots:_vm._u([{key:"help",fn:function(){return [_vm._v(_vm._s(_vm.stateHelp))]},proxy:true},{key:"default",fn:function(){return [_vm._t("label")]},proxy:true}],null,true)})]:[_vm._t("label")]],2):_vm._e(),_vm._v(" "),(_vm.$slots.description)?_c('div',{staticClass:"cx-vui-component__desc"},[_vm._t("description")],2):_vm._e()]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"cx-vui-component__control"},[_vm._t("default"),_vm._v(" "),(_vm.$slots.actions)?_c('div',{staticClass:"cx-vui-component__control-actions"},[_vm._t("actions")],2):_vm._e()],2)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Tooltip.vue?vue&type=template&id=7ae9ae9f&scoped=true": +/*!***************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/Tooltip.vue?vue&type=template&id=7ae9ae9f&scoped=true ***! + \***************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.wrapperClasses},[_c('span',{class:_vm.dashIconClass}),_vm._v(" "),(_vm.$slots.default)?_c('span',{staticClass:"jfb-icon-status--text"},[_vm._t("default")],2):_vm._e(),_vm._v(" "),(_vm.$slots.help)?_c('div',{class:_vm.tooltipClasses},[_vm._t("help")],2):_vm._e()])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/runtime/componentNormalizer.js": +/*!************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ normalizeComponent) +/* harmony export */ }); +/* globals __VUE_SSR_CONTEXT__ */ + +// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). +// This module is a runtime utility for cleaner component module output and will +// be included in the final webpack user bundle. + +function normalizeComponent( + scriptExports, + render, + staticRenderFns, + functionalTemplate, + injectStyles, + scopeId, + moduleIdentifier /* server only */, + shadowMode /* vue-cli only */ +) { + // Vue.extend constructor export interop + var options = + typeof scriptExports === 'function' ? scriptExports.options : scriptExports + + // render functions + if (render) { + options.render = render + options.staticRenderFns = staticRenderFns + options._compiled = true + } + + // functional template + if (functionalTemplate) { + options.functional = true + } + + // scopedId + if (scopeId) { + options._scopeId = 'data-v-' + scopeId + } + + var hook + if (moduleIdentifier) { + // server build + hook = function (context) { + // 2.3 injection + context = + context || // cached call + (this.$vnode && this.$vnode.ssrContext) || // stateful + (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional + // 2.2 with runInNewContext: true + if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { + context = __VUE_SSR_CONTEXT__ + } + // inject component styles + if (injectStyles) { + injectStyles.call(this, context) + } + // register component module identifier for async chunk inferrence + if (context && context._registeredComponents) { + context._registeredComponents.add(moduleIdentifier) + } + } + // used by ssr in case component is cached and beforeCreate + // never gets called + options._ssrRegister = hook + } else if (injectStyles) { + hook = shadowMode + ? function () { + injectStyles.call( + this, + (options.functional ? this.parent : this).$root.$options.shadowRoot + ) + } + : injectStyles + } + + if (hook) { + if (options.functional) { + // for template-only hot-reload because in that case the render fn doesn't + // go through the normalizer + options._injectStyles = hook + // register for functional component in vue file + var originalRender = options.render + options.render = function renderWithStyleInjection(h, context) { + hook.call(context) + return originalRender(h, context) + } + } else { + // inject component registration as beforeCreate hook + var existing = options.beforeCreate + options.beforeCreate = existing ? [].concat(existing, hook) : [hook] + } + } + + return { + exports: scriptExports, + options: options + } +} + + +/***/ }), + +/***/ "../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=style&index=0&id=edf02a0e&lang=scss&scoped=true": +/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-package/components/ColumnWrapper.vue?vue&type=style&index=0&id=edf02a0e&lang=scss&scoped=true ***! + \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// style-loader: Adds some css to the DOM by adding a "],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/options/OptionsTab.vue?vue&type=style&index=0&id=9dc42de6&scoped=true&lang=css": +/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/options/OptionsTab.vue?vue&type=style&index=0&id=9dc42de6&scoped=true&lang=css ***! + \********************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +.jfb-has-error .cx-vui-input[data-v-9dc42de6], +.jfb-has-error input[data-v-9dc42de6] { + border-color: #dc2626 !important; + outline: none; +} +.jfb-field-error[data-v-9dc42de6] { + margin: 6px 0 12px; + color: #dc2626; + font-size: 12px; + line-height: 1.4; + text-align:right; +} +`, "",{"version":3,"sources":["webpack://./../admin/pages/jfb-settings/tabs/options/OptionsTab.vue"],"names":[],"mappings":";AAkNA;;EAEA,gCAAA;EACA,aAAA;AACA;AAEA;EACA,kBAAA;EACA,cAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;AACA","sourcesContent":["\r\n\r\n\r\n\r\n\r\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/user-journey/UserJourneyTab.vue?vue&type=style&index=0&id=0fb0c2fc&lang=css": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/user-journey/UserJourneyTab.vue?vue&type=style&index=0&id=0fb0c2fc&lang=css ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +.user-journey-select select.cx-vui-select { + padding: 6px 24px 6px 12px; +} +`, "",{"version":3,"sources":["webpack://./../admin/pages/jfb-settings/tabs/user-journey/UserJourneyTab.vue"],"names":[],"mappings":";AA2HA;CACA,0BAAA;AACA","sourcesContent":["\r\n\r\n\r\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/runtime/api.js": +/*!*********************************************************!*\ + !*** ../../node_modules/css-loader/dist/runtime/api.js ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function (cssWithMappingToString) { + var list = []; + + // return the list of modules as css string + list.toString = function toString() { + return this.map(function (item) { + var content = ""; + var needLayer = typeof item[5] !== "undefined"; + if (item[4]) { + content += "@supports (".concat(item[4], ") {"); + } + if (item[2]) { + content += "@media ".concat(item[2], " {"); + } + if (needLayer) { + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); + } + content += cssWithMappingToString(item); + if (needLayer) { + content += "}"; + } + if (item[2]) { + content += "}"; + } + if (item[4]) { + content += "}"; + } + return content; + }).join(""); + }; + + // import a list of modules into the list + list.i = function i(modules, media, dedupe, supports, layer) { + if (typeof modules === "string") { + modules = [[null, modules, undefined]]; + } + var alreadyImportedModules = {}; + if (dedupe) { + for (var k = 0; k < this.length; k++) { + var id = this[k][0]; + if (id != null) { + alreadyImportedModules[id] = true; + } + } + } + for (var _k = 0; _k < modules.length; _k++) { + var item = [].concat(modules[_k]); + if (dedupe && alreadyImportedModules[item[0]]) { + continue; + } + if (typeof layer !== "undefined") { + if (typeof item[5] === "undefined") { + item[5] = layer; + } else { + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); + item[5] = layer; + } + } + if (media) { + if (!item[2]) { + item[2] = media; + } else { + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); + item[2] = media; + } + } + if (supports) { + if (!item[4]) { + item[4] = "".concat(supports); + } else { + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); + item[4] = supports; + } + } + list.push(item); + } + }; + return list; +}; + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/runtime/sourceMaps.js": +/*!****************************************************************!*\ + !*** ../../node_modules/css-loader/dist/runtime/sourceMaps.js ***! + \****************************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (item) { + var content = item[1]; + var cssMapping = item[3]; + if (!cssMapping) { + return content; + } + if (typeof btoa === "function") { + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); + var sourceMapping = "/*# ".concat(data, " */"); + return [content].concat([sourceMapping]).join("\n"); + } + return [content].join("\n"); +}; + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/IsPROIcon.vue?vue&type=template&id=14baa230&scoped=true": +/*!*****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/IsPROIcon.vue?vue&type=template&id=14baa230&scoped=true ***! + \*****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._v(_vm._s(_vm.__( 'Pro', 'jet-form-builder' )))])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/SettingsPage.vue?vue&type=template&id=4b43500e": +/*!********************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/SettingsPage.vue?vue&type=template&id=4b43500e ***! + \********************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +function objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; } +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('FormBuilderPage',{attrs:{"title":_vm.__( 'JetFormBuilder Settings', 'jet-form-builder' )}},[_c('div',{staticClass:"jfb-content"},[_c('AlertsList'),_vm._v(" "),_c('div',{staticClass:"jfb-content-main"},[_c('div',{staticClass:"cx-vui-panel"},[_c('CxVuiTabs',{attrs:{"in-panel":false,"value":_vm.activeTabSlug,"layout":"vertical"},on:{"input":_vm.onChangeActiveTab}},_vm._l((_vm.tabs),function(ref,index){ +var displayButton = ref.displayButton; if ( displayButton === void 0 ) displayButton = true; +var rest = objectWithoutProperties( ref, ["displayButton"] ); +var tab = rest; +return _c('CxVuiTabsPanel',{key:tab.component.name,attrs:{"name":tab.component.name,"label":tab.title,"disabled":tab.disabled,"icon":tab.icon},scopedSlots:_vm._u([(tab.component.render)?{key:"default",fn:function(){return [_c('keep-alive',[_c(tab.component,{ref:"tabComponents",refInFor:true,tag:"component",attrs:{"incoming":_vm.getIncoming( tab.component.name ),"inner-slugs":_vm.activeTabInnerSlugs || []}})],1),_vm._v(" "),(displayButton)?_c('cx-vui-button',{attrs:{"button-style":"accent","loading":_vm.loadingTab[ tab.component.name ]},on:{"click":function($event){return _vm.onSaveTab( index, tab.component.name )}},scopedSlots:_vm._u([{key:"label",fn:function(){return [_c('span',[_vm._v("Save")])]},proxy:true}],null,true)}):_vm._e()]},proxy:true}:null],null,true)})}),1)],1)]),_vm._v(" "),_c('SettingsSideBar')],1)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/friendlyCaptcha/friendlyCaptcha.vue?vue&type=template&id=054f030e": +/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/friendlyCaptcha/friendlyCaptcha.vue?vue&type=template&id=054f030e ***! + \***********************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('SimpleWrapperComponent',{attrs:{"element-id":"friendly_key"},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.label.key))]},proxy:true},{key:"description",fn:function(){return [_c('p',{staticClass:"fb-description"},[_vm._v("\n\t\t\t\t"+_vm._s(_vm.__( + 'It can be found on the page listing your Applications. Or follow this', + 'jet-form-builder' + ) + ' ')+"\n\t\t\t\t"),_c('ExternalLink',{attrs:{"href":"https://docs.friendlycaptcha.com/#/installation?id=_1-generating-a-sitekey"}},[_vm._v("\n\t\t\t\t\t"+_vm._s(_vm.__( 'guide', 'jet-form-builder' ))+"\n\t\t\t\t")])],1)]},proxy:true},{key:"default",fn:function(){return [_c('input',{directives:[{name:"model",rawName:"v-model",value:(_vm.storage.key),expression:"storage.key"}],staticClass:"cx-vui-input size-fullwidth",attrs:{"id":"friendly_key","type":"text"},domProps:{"value":(_vm.storage.key)},on:{"input":function($event){if($event.target.composing){ return; }_vm.$set(_vm.storage, "key", $event.target.value)}}})]},proxy:true}])}),_vm._v(" "),_c('cx-vui-input',{attrs:{"element-id":"friendly_secret","label":_vm.label.secret,"description":_vm.__( + 'It can be found on the page listing your API keys.', + 'jet-form-builder' + ),"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.secret),callback:function ($$v) {_vm.$set(_vm.storage, "secret", $$v)},expression:"storage.secret"}})],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/google/reCAPTCHAv3.vue?vue&type=template&id=638ceb7f": +/*!**********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/google/reCAPTCHAv3.vue?vue&type=template&id=638ceb7f ***! + \**********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('cx-vui-input',{attrs:{"label":_vm.label.key,"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.key),callback:function ($$v) {_vm.$set(_vm.storage, "key", $$v)},expression:"storage.key"}}),_vm._v(" "),_c('cx-vui-input',{attrs:{"label":_vm.label.secret,"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.secret),callback:function ($$v) {_vm.$set(_vm.storage, "secret", $$v)},expression:"storage.secret"}}),_vm._v(" "),_c('cx-vui-input',{attrs:{"type":"number","min":0,"max":1,"step":0.1,"label":_vm.label.threshold,"description":_vm.help.threshold,"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.threshold),callback:function ($$v) {_vm.$set(_vm.storage, "threshold", $$v)},expression:"storage.threshold"}}),_vm._v(" "),_c('p',{staticClass:"fb-description"},[_vm._v(_vm._s(_vm.help.apiPref)+" "),_c('a',{attrs:{"href":_vm.help.apiLink,"target":"_blank"}},[_vm._v(_vm._s(_vm.help.apiLinkLabel))])])],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/hCaptcha/hCaptcha.vue?vue&type=template&id=34567fa4": +/*!*********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/hCaptcha/hCaptcha.vue?vue&type=template&id=34567fa4 ***! + \*********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('SimpleWrapperComponent',{attrs:{"element-id":"hcaptcha_key"},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.label.key))]},proxy:true},{key:"description",fn:function(){return [_c('p',{staticClass:"fb-description"},[_vm._v("\n\t\t\t\t\t"+_vm._s(_vm.__( + 'You can find it on this page in the first column of Sitekey.', + 'jet-form-builder' + ) + ' ')+"\n\t\t\t\t\t"),_c('ExternalLink',{attrs:{"href":"https://dashboard.hcaptcha.com/sites"}},[_vm._v("\n\t\t\t\t\t\t"+_vm._s(_vm.__( 'Go to the dashboard of sites', 'jet-form-builder' ))+"\n\t\t\t\t\t")])],1)]},proxy:true},{key:"default",fn:function(){return [_c('input',{directives:[{name:"model",rawName:"v-model",value:(_vm.storage.key),expression:"storage.key"}],staticClass:"cx-vui-input size-fullwidth",attrs:{"id":"hcaptcha_key","type":"text"},domProps:{"value":(_vm.storage.key)},on:{"input":function($event){if($event.target.composing){ return; }_vm.$set(_vm.storage, "key", $event.target.value)}}})]},proxy:true}])}),_vm._v(" "),_c('SimpleWrapperComponent',{attrs:{"element-id":"hcaptcha_secret"},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.label.secret))]},proxy:true},{key:"description",fn:function(){return [_c('p',{staticClass:"fb-description"},[_vm._v("\n\t\t\t\t\t"+_vm._s(_vm.__( + "You can find it on the settings page,\nthis will be the first field.", + 'jet-form-builder' + ) + ' ')+"\n\t\t\t\t\t"),_c('ExternalLink',{attrs:{"href":"https://dashboard.hcaptcha.com/settings"}},[_vm._v("\n\t\t\t\t\t\t"+_vm._s(_vm.__( 'Go to the Settings page', 'jet-form-builder' ))+"\n\t\t\t\t\t")])],1)]},proxy:true},{key:"default",fn:function(){return [_c('input',{directives:[{name:"model",rawName:"v-model",value:(_vm.storage.secret),expression:"storage.secret"}],staticClass:"cx-vui-input size-fullwidth",attrs:{"id":"hcaptcha_secret","type":"text"},domProps:{"value":(_vm.storage.secret)},on:{"input":function($event){if($event.target.composing){ return; }_vm.$set(_vm.storage, "secret", $event.target.value)}}})]},proxy:true}])})],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/turnstile/turnstile.vue?vue&type=template&id=5a9ffa38": +/*!***********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/captcha/turnstile/turnstile.vue?vue&type=template&id=5a9ffa38 ***! + \***********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('cx-vui-input',{attrs:{"element-id":"turnstile_key","label":_vm.label.key,"description":_vm.__( + 'Read the hint to the Secret Key field', + 'jet-form-builder' + ),"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.key),callback:function ($$v) {_vm.$set(_vm.storage, "key", $$v)},expression:"storage.key"}}),_vm._v(" "),_c('cx-vui-input',{attrs:{"element-id":"turnstile_secret","label":_vm.label.secret,"description":_vm.__( + 'You can find both keys on your Turnstile Site settings page', + 'jet-form-builder' + ),"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.secret),callback:function ($$v) {_vm.$set(_vm.storage, "secret", $$v)},expression:"storage.secret"}}),_vm._v(" "),_c('p',{staticClass:"fb-description"},[_vm._v("\n\t\t"+_vm._s(_vm.__( 'Didn\'t find it? Here is', 'jet-form-builder' ) + ' ')+"\n\t\t"),_c('ExternalLink',{attrs:{"href":"https://developers.cloudflare.com/turnstile/get-started/#get-a-sitekey-and-secret-key"}},[_vm._v("\n\t\t\t"+_vm._s(_vm.__( 'a more detailed description', 'jet-form-builder' ))+"\n\t\t")])],1)],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/gateways/paypal/PaypalTab.vue?vue&type=template&id=8eff804c": +/*!*********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/gateways/paypal/PaypalTab.vue?vue&type=template&id=8eff804c ***! + \*********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('cx-vui-input',{attrs:{"label":_vm.label.client_id,"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.client_id),callback:function ($$v) {_vm.$set(_vm.storage, "client_id", $$v)},expression:"storage.client_id"}}),_vm._v(" "),_c('cx-vui-input',{attrs:{"label":_vm.label.secret,"wrapper-css":[ 'equalwidth' ],"size":'fullwidth'},model:{value:(_vm.storage.secret),callback:function ($$v) {_vm.$set(_vm.storage, "secret", $$v)},expression:"storage.secret"}})],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/sidebar/SettingsSideBar.vue?vue&type=template&id=4254b64c": +/*!*******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/sidebar/SettingsSideBar.vue?vue&type=template&id=4254b64c ***! + \*******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SideBarBoxes',{scopedSlots:_vm._u([{key:"icon-help",fn:function(){return [_c('svg',{attrs:{"width":"14","height":"21","viewBox":"0 0 14 21","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M5.25 21H8.75V17.5H5.25V21ZM7 0C3.1325 0 0 3.1325 0 7H3.5C3.5 5.075 5.075 3.5 7 3.5C8.925 3.5 10.5 5.075 10.5 7C10.5 10.5 5.25 10.0625 5.25 15.75H8.75C8.75 11.8125 14 11.375 14 7C14 3.1325 10.8675 0 7 0Z","fill":"#7B7E81"}})])]},proxy:true},{key:"content-help",fn:function(box){return [_c('div',{staticClass:"help-center-link"},[_c('a',{attrs:{"href":box.link_knowledge,"target":"_blank"}},[_c('div',{staticClass:"help-center-link-icon"},[_c('svg',{attrs:{"width":"14","height":"16","viewBox":"0 0 14 16","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M13.458 11.2552L13.458 1.4115C13.458 1.03064 13.1357 0.708374 12.7549 0.708374L3.14551 0.708374C1.59277 0.708374 0.333008 1.96814 0.333008 3.52087L0.333008 12.8959C0.333008 14.4486 1.59277 15.7084 3.14551 15.7084L12.7549 15.7084C13.1357 15.7084 13.458 15.4154 13.458 15.0052L13.458 14.5365C13.458 14.3314 13.3408 14.1263 13.1943 14.0092C13.0479 13.5404 13.0479 12.2513 13.1943 11.8119C13.3408 11.6947 13.458 11.4896 13.458 11.2552ZM4.08301 4.63416C4.08301 4.54626 4.1416 4.45837 4.25879 4.45837L10.4697 4.45837C10.5576 4.45837 10.6455 4.54626 10.6455 4.63416L10.6455 5.22009C10.6455 5.33728 10.5576 5.39587 10.4697 5.39587L4.25879 5.39587C4.1416 5.39587 4.08301 5.33728 4.08301 5.22009L4.08301 4.63416ZM4.08301 6.50916C4.08301 6.42127 4.1416 6.33337 4.25879 6.33337L10.4697 6.33337C10.5576 6.33337 10.6455 6.42127 10.6455 6.50916L10.6455 7.09509C10.6455 7.21228 10.5576 7.27087 10.4697 7.27087L4.25879 7.27087C4.1416 7.27087 4.08301 7.21228 4.08301 7.09509L4.08301 6.50916ZM11.4951 13.8334L3.14551 13.8334C2.61816 13.8334 2.20801 13.4232 2.20801 12.8959C2.20801 12.3978 2.61816 11.9584 3.14551 11.9584L11.4951 11.9584C11.4365 12.4857 11.4365 13.3353 11.4951 13.8334Z","fill":"#007CBA"}})])]),_vm._v(" "),_c('div',{staticClass:"help-center-link-label"},[_vm._v(_vm._s(box.label_knowledge))])])]),_vm._v(" "),_c('div',{staticClass:"help-center-link"},[_c('a',{attrs:{"href":box.link_community,"target":"_blank"}},[_c('div',{staticClass:"help-center-link-icon"},[_c('svg',{attrs:{"width":"16","height":"16","viewBox":"0 0 16 16","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M15.5913 8.04564C15.5913 3.87728 12.214 0.5 8.04564 0.5C3.87728 0.5 0.5 3.87728 0.5 8.04564C0.5 11.8185 3.23834 14.9523 6.85903 15.5L6.85903 10.2363L4.94219 10.2363L4.94219 8.04564L6.85903 8.04564L6.85903 6.40264C6.85903 4.51623 7.98479 3.45132 9.68864 3.45132C10.5406 3.45132 11.3925 3.60345 11.3925 3.60345L11.3925 5.45943L10.4493 5.45943C9.50609 5.45943 9.20183 6.03753 9.20183 6.64604L9.20183 8.04564L11.3012 8.04564L10.9665 10.2363L9.20183 10.2363L9.20183 15.5C12.8225 14.9523 15.5913 11.8185 15.5913 8.04564Z","fill":"#007CBA"}})])]),_vm._v(" "),_c('div',{staticClass:"help-center-link-label"},[_vm._v(_vm._s(box.label_community))])])]),_vm._v(" "),_c('div',{staticClass:"help-center-link"},[_c('a',{attrs:{"href":box.link_support,"target":"_blank"}},[_c('div',{staticClass:"help-center-link-icon"},[_c('svg',{attrs:{"width":"15","height":"18","viewBox":"0 0 15 18","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M7.58333 0.666687C3.675 0.666687 0.5 3.84169 0.5 7.75002C0.5 11.6584 3.675 14.8334 7.58333 14.8334H8V17.3334C12.05 15.3834 14.6667 11.5 14.6667 7.75002C14.6667 3.84169 11.4917 0.666687 7.58333 0.666687ZM8.41667 12.75H6.75V11.0834H8.41667V12.75ZM8.41667 9.83335H6.75C6.75 7.12502 9.25 7.33335 9.25 5.66669C9.25 4.75002 8.5 4.00002 7.58333 4.00002C6.66667 4.00002 5.91667 4.75002 5.91667 5.66669H4.25C4.25 3.82502 5.74167 2.33335 7.58333 2.33335C9.425 2.33335 10.9167 3.82502 10.9167 5.66669C10.9167 7.75002 8.41667 7.95835 8.41667 9.83335Z","fill":"#007CBA"}})])]),_vm._v(" "),_c('div',{staticClass:"help-center-link-label"},[_vm._v(_vm._s(box.label_support))])])]),_vm._v(" "),_c('div',{staticClass:"help-center-link"},[_c('a',{attrs:{"href":box.link_git,"target":"_blank"}},[_c('div',{staticClass:"help-center-link-icon"},[_c('svg',{attrs:{"width":"16","height":"16","viewBox":"0 0 16 16","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"fill-rule":"evenodd","clip-rule":"evenodd","d":"M7.976 0C5.86071 0.000265156 3.83214 0.840676 2.33641 2.33641C0.840676 3.83214 0.000265156 5.86071 0 7.976C0 11.498 2.3 14.483 5.431 15.56C5.823 15.609 5.969 15.364 5.969 15.168V13.798C3.768 14.288 3.279 12.722 3.279 12.722C2.936 11.792 2.398 11.547 2.398 11.547C1.664 11.058 2.446 11.058 2.446 11.058C3.229 11.107 3.67 11.89 3.67 11.89C4.404 13.113 5.529 12.77 5.97 12.575C6.018 12.037 6.263 11.695 6.459 11.499C4.697 11.303 2.838 10.618 2.838 7.535C2.838 6.655 3.131 5.969 3.67 5.382C3.62 5.235 3.327 4.404 3.768 3.327C3.768 3.327 4.453 3.131 5.969 4.159C6.605 3.963 7.291 3.914 7.976 3.914C8.661 3.914 9.346 4.012 9.982 4.159C11.499 3.132 12.184 3.327 12.184 3.327C12.624 4.404 12.33 5.235 12.281 5.431C12.8199 6.01808 13.1171 6.7871 13.113 7.584C13.113 10.667 11.253 11.303 9.493 11.499C9.786 11.743 10.031 12.232 10.031 12.966V15.168C10.031 15.364 10.177 15.608 10.569 15.56C12.155 15.0248 13.5327 14.0046 14.5073 12.6436C15.4818 11.2827 16.004 9.64989 16 7.976C15.951 3.572 12.38 0 7.976 0Z","fill":"#007CBA"}})])]),_vm._v(" "),_c('div',{staticClass:"help-center-link-label"},[_vm._v(_vm._s(box.label_git))])])])]}}])})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/captcha/CaptchaTab.vue?vue&type=template&id=62b36e55": +/*!*******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/captcha/CaptchaTab.vue?vue&type=template&id=62b36e55 ***! + \*******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.captcha),function(tab,index){return _c('CxVuiCollapseMini',{key:tab.component.name,attrs:{"with-panel":"","icon":tab.icon,"label":_vm.getTabTitle( tab ),"disabled":tab.disabled,"initial-active":_vm.isActive( tab.component.name )},on:{"change":function($event){return _vm.onChangeActive( $event, tab.component.name )}}},[_c('keep-alive',[_c(tab.component,{ref:"captcha",refInFor:true,tag:"component",attrs:{"incoming":_vm.getIncomingCaptcha( tab.component.name )}})],1),_vm._v(" "),_c('cx-vui-button',{attrs:{"button-style":"accent","loading":_vm.loadingGateways[ tab.component.name ]},on:{"click":function($event){return _vm.onSaveGateway( index, tab.component.name )}}},[_c('span',{attrs:{"slot":"label"},slot:"label"},[_vm._v("Save")])])],1)}),1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/getresponse/GetResponseTab.vue?vue&type=template&id=054dbebb": +/*!***************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/getresponse/GetResponseTab.vue?vue&type=template&id=054dbebb ***! + \***************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('cx-vui-input',{attrs:{"label":_vm.label.api_key,"wrapper-css":[ 'equalwidth' ],"description":((_vm.help.apiPref) + " " + (_vm.help.apiLinkLabel) + ""),"size":'fullwidth'},model:{value:(_vm.api_key),callback:function ($$v) {_vm.api_key=$$v},expression:"api_key"}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/mailchimp/MailChimpTab.vue?vue&type=template&id=783c3dc9": +/*!***********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/mailchimp/MailChimpTab.vue?vue&type=template&id=783c3dc9 ***! + \***********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('cx-vui-input',{attrs:{"label":_vm.label.api_key,"wrapper-css":[ 'equalwidth' ],"description":((_vm.help.apiPref) + " " + (_vm.help.apiLinkLabel) + ""),"size":'fullwidth'},model:{value:(_vm.api_key),callback:function ($$v) {_vm.api_key=$$v},expression:"api_key"}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/options/OptionsTab.vue?vue&type=template&id=9dc42de6&scoped=true": +/*!*******************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/options/OptionsTab.vue?vue&type=template&id=9dc42de6&scoped=true ***! + \*******************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cx-vui-switcher',{attrs:{"name":"enable_dev_mode","wrapper-css":[ 'equalwidth' ],"label":_vm.loading.enable_dev_mode ? ((_vm.label.enable_dev_mode) + " (loading...)") : _vm.label.enable_dev_mode,"description":_vm.help.enable_dev_mode,"value":_vm.storage.hasOwnProperty( 'enable_dev_mode' ) ? _vm.storage.enable_dev_mode : false,"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'enable_dev_mode', $event )}}}),_vm._v(" "),_c('cx-vui-switcher',{attrs:{"name":"clear_on_uninstall","wrapper-css":[ 'equalwidth' ],"label":_vm.loading.clear_on_uninstall ? ((_vm.label.clear_on_uninstall) + " (loading...)") : _vm.label.clear_on_uninstall,"description":_vm.help.clear_on_uninstall,"value":_vm.storage.hasOwnProperty( 'clear_on_uninstall' ) ? _vm.storage.clear_on_uninstall : false,"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'clear_on_uninstall', $event )}}}),_vm._v(" "),_c('cx-vui-input',{attrs:{"name":"form_records_access_capability","wrapper-css":[ 'equalwidth' ],"size":'fullwidth',"label":_vm.loading.form_records_access_capability ? ((_vm.label.form_records_access_capability) + " (loading...)") : _vm.label.form_records_access_capability,"description":_vm.help.form_records_access_capability,"value":_vm.storage.hasOwnProperty( 'form_records_access_capability' ) ? _vm.storage.form_records_access_capability : 'manage_options',"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'form_records_access_capability', $event )}}}),_vm._v(" "),_c('cx-vui-select',{attrs:{"name":"ssr_validation_method","wrapper-css":[ 'equalwidth' ],"size":'fullwidth',"label":_vm.loading.ssr_validation_method ? ((_vm.label.ssr_validation_method) + " (loading...)") : _vm.label.ssr_validation_method,"description":_vm.help.ssr_validation_method,"value":_vm.storage.hasOwnProperty( 'ssr_validation_method' ) ? _vm.storage.ssr_validation_method : 'rest',"options-list":_vm.selectOptions,"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'ssr_validation_method', $event )}}}),_vm._v(" "),_c('cx-vui-component-wrapper',{attrs:{"label":_vm.__( 'Form Accessibility', 'jet-form-builder' ),"wrapper-css":[ 'equalwidth' ]}}),_vm._v(" "),_c('div',{staticClass:"cx-vui-inner-panel"},[_c('cx-vui-switcher',{attrs:{"name":"disable_next_button","wrapper-css":[ 'equalwidth' ],"label":_vm.loading.disable_next_button ? ((_vm.label.disable_next_button) + " (loading...)") : _vm.label.disable_next_button,"description":_vm.help.disable_next_button,"value":_vm.storage.hasOwnProperty( 'disable_next_button' ) ? _vm.storage.disable_next_button : true,"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'disable_next_button', $event )}}}),_vm._v(" "),_c('cx-vui-switcher',{attrs:{"name":"scroll_on_next","wrapper-css":[ 'equalwidth' ],"label":_vm.loading.scroll_on_next ? ((_vm.label.scroll_on_next) + " (loading...)") : _vm.label.scroll_on_next,"description":_vm.help.scroll_on_next,"value":_vm.storage.hasOwnProperty( 'scroll_on_next' ) ? _vm.storage.scroll_on_next : false,"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'scroll_on_next', $event )}}}),_vm._v(" "),_c('cx-vui-switcher',{attrs:{"name":"auto_focus","wrapper-css":[ 'equalwidth' ],"label":_vm.loading.auto_focus ? ((_vm.label.auto_focus) + " (loading...)") : _vm.label.auto_focus,"description":_vm.help.auto_focus,"value":_vm.storage.hasOwnProperty( 'auto_focus' ) ? _vm.storage.auto_focus : false,"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'auto_focus', $event )}}})],1),_vm._v(" "),_c('cx-vui-component-wrapper',{attrs:{"label":_vm.__( 'Form Request Args', 'jet-form-builder' ),"wrapper-css":[ 'equalwidth' ]}}),_vm._v(" "),_c('cx-vui-input',{attrs:{"name":"gfb_request_args_key","wrapper-css":[ 'equalwidth', _vm.errors.gfb_request_args_key ? 'jfb-has-error' : '' ],"size":'fullwidth',"label":'Request key',"description":'Unique form parameter (key)',"value":_vm.storage.hasOwnProperty( 'gfb_request_args_key' ) ? _vm.storage.gfb_request_args_key : '1111',"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'gfb_request_args_key', $event )}}}),_vm._v(" "),(_vm.errors.gfb_request_args_key)?_c('div',{staticClass:"jfb-field-error"},[_vm._v("\n "+_vm._s(_vm.errors.gfb_request_args_key)+"\n ")]):_vm._e(),_vm._v(" "),_c('cx-vui-input',{attrs:{"name":"gfb_request_args_value","wrapper-css":[ 'equalwidth', _vm.errors.gfb_request_args_value ? 'jfb-has-error' : '' ],"size":'fullwidth',"label":'Request value',"description":'Unique form parameter (value)',"value":_vm.storage.hasOwnProperty( 'gfb_request_args_value' ) ? _vm.storage.gfb_request_args_value : '2222',"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'gfb_request_args_value', $event )}}}),_vm._v(" "),(_vm.errors.gfb_request_args_value)?_c('div',{staticClass:"jfb-field-error"},[_vm._v("\n "+_vm._s(_vm.errors.gfb_request_args_value)+"\n ")]):_vm._e()],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/payments-gateways/PaymentsGateways.vue?vue&type=template&id=676966a1": +/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/payments-gateways/PaymentsGateways.vue?vue&type=template&id=676966a1 ***! + \***********************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('cx-vui-switcher',{attrs:{"name":"use_gateways","wrapper-css":[ 'equalwidth' ],"label":_vm.label.use_gateways,"description":_vm.help.use_gateways,"value":_vm.storage.use_gateways},on:{"input":function($event){return _vm.changeVal( 'use_gateways', $event )}}}),_vm._v(" "),(_vm.storage.use_gateways)?_c('cx-vui-switcher',{attrs:{"name":"enable_test_mode","wrapper-css":[ 'equalwidth' ],"description":_vm.help.enable_test_mode,"label":_vm.label.enable_test_mode,"value":_vm.storage.enable_test_mode},on:{"input":function($event){return _vm.changeVal( 'enable_test_mode', $event )}}}):_vm._e(),_vm._v(" "),(_vm.storage.use_gateways)?[_c('div',{staticClass:"cx-vui-inner-panel"},_vm._l((_vm.gateways),function(tab,index){return _c('CxVuiCollapseMini',{key:tab.component.name,attrs:{"with-panel":"","icon":tab.icon,"label":tab.title,"disabled":tab.disabled,"initial-active":_vm.isActive( tab.component.name )},on:{"change":function($event){return _vm.onChangeActive( $event, tab.component.name )}}},[_c('keep-alive',[_c(tab.component,{ref:"gateways",refInFor:true,tag:"component",attrs:{"incoming":_vm.getIncoming( tab.component.name )}})],1),_vm._v(" "),_c('cx-vui-button',{attrs:{"button-style":"accent","loading":_vm.loadingGateways[ tab.component.name ]},on:{"click":function($event){return _vm.onSaveGateway( index, tab.component.name )}}},[_c('span',{attrs:{"slot":"label"},slot:"label"},[_vm._v("Save")])])],1)}),1)]:_vm._e()],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/user-journey/UserJourneyTab.vue?vue&type=template&id=0fb0c2fc": +/*!****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/tabs/user-journey/UserJourneyTab.vue?vue&type=template&id=0fb0c2fc ***! + \****************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cx-vui-switcher',{attrs:{"name":"enable_user_journey","label":_vm.loading.enable_user_journey ? ((_vm.label.enable_user_journey) + " (loading...)") : _vm.label.enable_user_journey,"description":_vm.help.enable_user_journey,"wrapper-css":[ 'equalwidth' ],"value":_vm.storage.hasOwnProperty( 'enable_user_journey' ) ? _vm.storage.enable_user_journey : false,"disabled":_vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'enable_user_journey', $event )}}}),_vm._v(" "),(_vm.storage.enable_user_journey)?[_c('cx-vui-select',{staticClass:"user-journey-select",attrs:{"name":"storage_type","label":_vm.loading.storage_type ? ((_vm.label.storage_type) + " (loading...)") : _vm.label.storage_type,"description":_vm.help.storage_type,"wrapper-css":[ 'equalwidth' ],"options-list":[ + { + value: 'local', + label: 'Local Storage' + }, + { + value: 'session', + label: 'Session Storage' + } + ],"value":_vm.storage.hasOwnProperty( 'storage_type' ) ? _vm.storage.storage_type : 'local',"disabled":!_vm.storage.enable_user_journey || _vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'storage_type', $event )}}}),_vm._v(" "),_c('cx-vui-component-wrapper',[_c('div',{staticClass:"cx-vui-component__label"},[_vm._v("Please note!")]),_vm._v(" "),_c('div',[_c('b',[_vm._v("Session Storage:")]),_vm._v(" The information is kept only while this tab or window is open. Reloading the page is fine, but as soon as you close the tab, the data disappears. Other tabs or windows of the site can’t see it. You can still get it back by pressing Ctrl + Shift + T (“Reopen Closed Tab”)")]),_vm._v(" "),_c('div',[_c('b',[_vm._v("Local Storage:")]),_vm._v(" The information stays much longer—every tab or window of this site can use it, and it remains even after you close and reopen the browser, until you clear it yourself.")])]),_vm._v(" "),_c('cx-vui-select',{staticClass:"user-journey-select",attrs:{"name":"clear_after_submit","label":_vm.loading.clear_after_submit ? ((_vm.label.clear_after_submit) + " (loading...)") : _vm.label.clear_after_submit,"description":_vm.help.clear_after_submit,"wrapper-css":[ 'equalwidth' ],"options-list":[ + { + value: 'always', + label: 'After any submit (success or failure)' + }, + { + value: 'success', + label: 'After successful submit only' + } + ],"value":_vm.storage.hasOwnProperty( 'clear_after_submit' ) ? _vm.storage.clear_after_submit : 'success',"disabled":!_vm.storage.enable_user_journey || _vm.isLoading},on:{"input":function($event){return _vm.changeVal( 'clear_after_submit', $event )}}})]:_vm._e()],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/runtime/componentNormalizer.js": +/*!************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ normalizeComponent) +/* harmony export */ }); +/* globals __VUE_SSR_CONTEXT__ */ + +// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). +// This module is a runtime utility for cleaner component module output and will +// be included in the final webpack user bundle. + +function normalizeComponent( + scriptExports, + render, + staticRenderFns, + functionalTemplate, + injectStyles, + scopeId, + moduleIdentifier /* server only */, + shadowMode /* vue-cli only */ +) { + // Vue.extend constructor export interop + var options = + typeof scriptExports === 'function' ? scriptExports.options : scriptExports + + // render functions + if (render) { + options.render = render + options.staticRenderFns = staticRenderFns + options._compiled = true + } + + // functional template + if (functionalTemplate) { + options.functional = true + } + + // scopedId + if (scopeId) { + options._scopeId = 'data-v-' + scopeId + } + + var hook + if (moduleIdentifier) { + // server build + hook = function (context) { + // 2.3 injection + context = + context || // cached call + (this.$vnode && this.$vnode.ssrContext) || // stateful + (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional + // 2.2 with runInNewContext: true + if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { + context = __VUE_SSR_CONTEXT__ + } + // inject component styles + if (injectStyles) { + injectStyles.call(this, context) + } + // register component module identifier for async chunk inferrence + if (context && context._registeredComponents) { + context._registeredComponents.add(moduleIdentifier) + } + } + // used by ssr in case component is cached and beforeCreate + // never gets called + options._ssrRegister = hook + } else if (injectStyles) { + hook = shadowMode + ? function () { + injectStyles.call( + this, + (options.functional ? this.parent : this).$root.$options.shadowRoot + ) + } + : injectStyles + } + + if (hook) { + if (options.functional) { + // for template-only hot-reload because in that case the render fn doesn't + // go through the normalizer + options._injectStyles = hook + // register for functional component in vue file + var originalRender = options.render + options.render = function renderWithStyleInjection(h, context) { + hook.call(context) + return originalRender(h, context) + } + } else { + // inject component registration as beforeCreate hook + var existing = options.beforeCreate + options.beforeCreate = existing ? [].concat(existing, hook) : [hook] + } + } + + return { + exports: scriptExports, + options: options + } +} + + +/***/ }), + +/***/ "../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/SettingsPage.vue?vue&type=style&index=0&id=4b43500e&lang=scss": +/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin/pages/jfb-settings/SettingsPage.vue?vue&type=style&index=0&id=4b43500e&lang=scss ***! + \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// style-loader: Adds some css to the DOM by adding a "],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/RedirectToSingle.vue?vue&type=style&index=0&id=1858beab&scoped=true&lang=css": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/RedirectToSingle.vue?vue&type=style&index=0&id=1858beab&scoped=true&lang=css ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +a[data-v-1858beab] { + margin-right: 1em; + text-decoration: none; +} +body.rtl a[data-v-1858beab] { + margin-left: 1em; +} +`, "",{"version":3,"sources":["webpack://./../admin-vuex-package/components/BoxActions/RedirectToSingle.vue"],"names":[],"mappings":";AA0CA;CACA,iBAAA;CACA,qBAAA;AACA;AACA;CACA,gBAAA;AACA","sourcesContent":["\r\n\r\n\r\n\r\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PageActions.vue?vue&type=style&index=0&id=5ac5349d&scoped=true&lang=css": +/*!*************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PageActions.vue?vue&type=style&index=0&id=5ac5349d&scoped=true&lang=css ***! + \*************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +.page-actions[data-v-5ac5349d] { + display: flex; + gap: 1em; +} + +`, "",{"version":3,"sources":["webpack://./../admin-vuex-package/components/PageActions.vue"],"names":[],"mappings":";AA6EA;CACA,aAAA;CACA,QAAA;AACA","sourcesContent":["\r\n\r\n\r\n\r\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSimple.vue?vue&type=style&index=0&id=0f34be8c&lang=css": +/*!***************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSimple.vue?vue&type=style&index=0&id=0f34be8c&lang=css ***! + \***************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +.misc-pub-section { + border-bottom: 1px solid #ececec; +} +.misc-pub-section:last-child { + border-bottom: unset; +} + +`, "",{"version":3,"sources":["webpack://./../admin-vuex-package/components/PostBoxSimple.vue"],"names":[],"mappings":";AAsEA;CACA,gCAAA;AACA;AAEA;CACA,oBAAA;AACA","sourcesContent":["\r\n\r\n\r\n\r\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSkeleton.vue?vue&type=style&index=0&id=07ca11b2&scoped=true&lang=css": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSkeleton.vue?vue&type=style&index=0&id=07ca11b2&scoped=true&lang=css ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../../node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +.handle-actions[data-v-07ca11b2] { + display: flex; +} + +`, "",{"version":3,"sources":["webpack://./../admin-vuex-package/components/PostBoxSkeleton.vue"],"names":[],"mappings":";AA8DA;CACA,aAAA;AACA","sourcesContent":["\r\n\r\n\r\n\r\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/runtime/api.js": +/*!*********************************************************!*\ + !*** ../../node_modules/css-loader/dist/runtime/api.js ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function (cssWithMappingToString) { + var list = []; + + // return the list of modules as css string + list.toString = function toString() { + return this.map(function (item) { + var content = ""; + var needLayer = typeof item[5] !== "undefined"; + if (item[4]) { + content += "@supports (".concat(item[4], ") {"); + } + if (item[2]) { + content += "@media ".concat(item[2], " {"); + } + if (needLayer) { + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); + } + content += cssWithMappingToString(item); + if (needLayer) { + content += "}"; + } + if (item[2]) { + content += "}"; + } + if (item[4]) { + content += "}"; + } + return content; + }).join(""); + }; + + // import a list of modules into the list + list.i = function i(modules, media, dedupe, supports, layer) { + if (typeof modules === "string") { + modules = [[null, modules, undefined]]; + } + var alreadyImportedModules = {}; + if (dedupe) { + for (var k = 0; k < this.length; k++) { + var id = this[k][0]; + if (id != null) { + alreadyImportedModules[id] = true; + } + } + } + for (var _k = 0; _k < modules.length; _k++) { + var item = [].concat(modules[_k]); + if (dedupe && alreadyImportedModules[item[0]]) { + continue; + } + if (typeof layer !== "undefined") { + if (typeof item[5] === "undefined") { + item[5] = layer; + } else { + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); + item[5] = layer; + } + } + if (media) { + if (!item[2]) { + item[2] = media; + } else { + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); + item[2] = media; + } + } + if (supports) { + if (!item[4]) { + item[4] = "".concat(supports); + } else { + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); + item[4] = supports; + } + } + list.push(item); + } + }; + return list; +}; + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/runtime/getUrl.js": +/*!************************************************************!*\ + !*** ../../node_modules/css-loader/dist/runtime/getUrl.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (url, options) { + if (!options) { + options = {}; + } + if (!url) { + return url; + } + url = String(url.__esModule ? url.default : url); + + // If url is already wrapped in quotes, remove them + if (/^['"].*['"]$/.test(url)) { + url = url.slice(1, -1); + } + if (options.hash) { + url += options.hash; + } + + // Should url be wrapped? + // See https://drafts.csswg.org/css-values-3/#urls + if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { + return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); + } + return url; +}; + +/***/ }), + +/***/ "../../node_modules/css-loader/dist/runtime/sourceMaps.js": +/*!****************************************************************!*\ + !*** ../../node_modules/css-loader/dist/runtime/sourceMaps.js ***! + \****************************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (item) { + var content = item[1]; + var cssMapping = item[3]; + if (!cssMapping) { + return content; + } + if (typeof btoa === "function") { + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); + var sourceMapping = "/*# ".concat(data, " */"); + return [content].concat([sourceMapping]).join("\n"); + } + return [content].join("\n"); +}; + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ActionsWithFilters.vue?vue&type=template&id=34183439&scoped=true": +/*!*******************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ActionsWithFilters.vue?vue&type=template&id=34183439&scoped=true ***! + \*******************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.show)?_c('div',{class:_vm.wrapperClass},[_c('ChooseAction'),_vm._v(" "),_c('div',{staticClass:"filters"},[_vm._t("filters")],2),_vm._v(" "),_c('div',{staticClass:"wrapper-buttons"},[_vm._t("buttons")],2)],1):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/Alerts/AlertItem.vue?vue&type=template&id=6e060cd8": +/*!*****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/Alerts/AlertItem.vue?vue&type=template&id=6e060cd8 ***! + \*****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classes},[_c('div',{staticClass:"alert-type-line"}),_vm._v(" "),_c('div',{staticClass:"alert-icon",domProps:{"innerHTML":_vm._s(_vm.iconHtml)}}),_vm._v(" "),_c('div',{staticClass:"alert-content"},[(_vm.config.title)?_c('div',{staticClass:"alert-title",domProps:{"innerHTML":_vm._s(_vm.config.title)}}):_vm._e(),_vm._v(" "),(_vm.config.message)?_c('div',{staticClass:"alert-message",domProps:{"innerHTML":_vm._s(_vm.config.message)}}):_vm._e(),_vm._v(" "),(_vm.$slots['alert-buttons'])?_c('div',{staticClass:"alert-buttons"},[_vm._t("alert-buttons")],2):(_vm.config.buttons)?_c('div',{staticClass:"alert-buttons"},_vm._l((_vm.config.buttons),function(button,index){return _c('cx-vui-button',{key:("button-alert-" + index),class:("cx-vui-button--style-" + (button.type)),attrs:{"button-style":button.style,"size":"mini","url":button.url,"tag-name":button.rest.url ? 'button' : 'a',"target":button.rest.url ? '' : '_blank'},on:{"click":function($event){return _vm.emitClick( $event, button )}},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(button.label))]},proxy:true}],null,true)})}),1):_vm._e()]),_vm._v(" "),_c('div',{staticClass:"alert-close",on:{"click":_vm.closeAlert}},[_c('svg',{attrs:{"width":"20","height":"20","viewBox":"0 0 14 14","fill":"#dcdcdd","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M12 3.00671L8.00671 7L12 10.9933L10.9933 12L7 8.00671L3.00671 12L2 10.9933L5.99329 7L2 3.00671L3.00671 2L7 5.99329L10.9933 2L12 3.00671Z"}})])])])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/Alerts/AlertsList.vue?vue&type=template&id=4c567adc": +/*!******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/Alerts/AlertsList.vue?vue&type=template&id=4c567adc ***! + \******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('div',{staticClass:"jet-form-builder-page__alerts"},_vm._l((_vm.getNotices),function(notice){return _c('AlertItem',{key:notice.id,attrs:{"id":notice.id},scopedSlots:_vm._u([(_vm.$slots[ 'alert-buttons-' + notice.id ])?{key:"alert-buttons",fn:function(){return [_vm._t([ 'alert-buttons-' + notice.id ])]},proxy:true}:null],null,true)})}),1):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/ActionButton.vue?vue&type=template&id=c57152d8&scoped=true": +/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/ActionButton.vue?vue&type=template&id=c57152d8&scoped=true ***! + \************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.action.button)?_c('cx-vui-button',{key:("button-action-" + (_vm.action.slug)),class:[ + ("cx-vui-button--style-" + (_vm.action.button.type)) ].concat( _vm.action.button.classes ),attrs:{"button-style":_vm.action.button.style,"size":_vm.action.button.size,"url":_vm.action.button.url,"tag-name":_vm.action.button.url ? 'a' : 'button',"disabled":_vm.isDisabled,"loading":_vm.isLoading,"target":"_blank"},on:{"click":_vm.globalEmit},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.action.button.label))]},proxy:true}],null,false,389569784)}):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/BoxActions.vue?vue&type=template&id=0477663e": +/*!**********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/BoxActions.vue?vue&type=template&id=0477663e ***! + \**********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.primary.length)?_c('div',{staticClass:"major-publishing-actions"},[_c('div',{staticClass:"jfb-primary-actions"},_vm._l((_vm.primary),function(action){return _c('ActionButton',{key:action.slug,class:[ + 'box-actions-item', + 'action-' + action.slug ],attrs:{"scope":_vm.scope,"action":action}})}),1),_vm._v(" "),_c('div',{staticClass:"clear"})]):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/EditTableSwitcher.vue?vue&type=template&id=74813489": +/*!*****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/EditTableSwitcher.vue?vue&type=template&id=74813489 ***! + \*****************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isEditableTable)?_c('cx-vui-switcher',{staticClass:"jfb-cx-vui-component",attrs:{"label":_vm.__( 'Edit table', 'jet-form-builder' ),"value":_vm.isEnableEdit},on:{"input":_vm.toggleEditTable}}):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/RedirectToSingle.vue?vue&type=template&id=1858beab&scoped=true": +/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/RedirectToSingle.vue?vue&type=template&id=1858beab&scoped=true ***! + \****************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () { +var _obj; +var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasSingleEndpoint)?_c('a',{attrs:{"href":_vm.getSingleHref,"title":_vm.getSingleTitle}},[_c('span',{class:( _obj = { + 'dashicons': true + }, _obj[ 'dashicons-' + _vm.getSingleType ] = true, _obj ),attrs:{"aria-hidden":"true"}})]):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/ShowOverflowTable.vue?vue&type=template&id=02c4a593": +/*!*****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/ShowOverflowTable.vue?vue&type=template&id=02c4a593 ***! + \*****************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showOverflowControl)?_c('cx-vui-switcher',{staticClass:"jfb-cx-vui-component",attrs:{"label":_vm.__( 'Show overflow', 'jet-form-builder' )},model:{value:(_vm.showOverflow),callback:function ($$v) {_vm.showOverflow=$$v},expression:"showOverflow"}}):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/UndoChangesTable.vue?vue&type=template&id=091691db": +/*!****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/BoxActions/UndoChangesTable.vue?vue&type=template&id=091691db ***! + \****************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isEditableTable)?_c('cx-vui-button',{attrs:{"disabled":! _vm.hasChanges,"button-style":"link-accent","size":"mini"},on:{"click":function($event){_vm.hasChanges = true}},scopedSlots:_vm._u([{key:"label",fn:function(){return [_c('span',{staticClass:"dashicons dashicons-undo"}),_vm._v("\n\t\t"+_vm._s(_vm.__( 'Undo', 'jet-form-builder' ))+"\n\t")]},proxy:true}],null,false,1196425)}):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ChooseAction.vue?vue&type=template&id=3f84bee4": +/*!*************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ChooseAction.vue?vue&type=template&id=3f84bee4 ***! + \*************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"jet-fb-choose-action-wrapper"},[_c('cx-vui-select',{attrs:{"placeholder":_vm.__( 'Bulk actions', 'jet-form-builder' ),"size":"fullwidth","value":_vm.currentAction,"options-list":_vm.actionsList},on:{"input":_vm.setCurrentAction}}),_vm._v(" "),_c('cx-vui-button',{attrs:{"loading":_vm.isLoading,"disabled":_vm.isDoing,"button-style":"accent-border","size":"mini"},on:{"click":_vm.applyAction},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.__( 'Apply', 'jet-form-builder' )))]},proxy:true}])})],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ClearFiltersButton.vue?vue&type=template&id=3c7bfee1": +/*!*******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ClearFiltersButton.vue?vue&type=template&id=3c7bfee1 ***! + \*******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('cx-vui-button',{attrs:{"button-style":"link-error","size":"mini","disabled":!_vm.hasSelectedFilters},on:{"click":function($event){return _vm.dispatch('clearFiltersWithFetch' )}},scopedSlots:_vm._u([{key:"label",fn:function(){return [_c('span',{staticClass:"dashicons dashicons-no-alt"}),_vm._v("\n\t\t\t"+_vm._s(_vm.label)+"\n\t\t")]},proxy:true}])})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/DetailsTableWithStore.vue?vue&type=template&id=6f067e5e": +/*!**********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/DetailsTableWithStore.vue?vue&type=template&id=6f067e5e ***! + \**********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('DetailsTable',{attrs:{"columns":_vm.columnsFromStore,"source":_vm.currentFromStore}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntriesList.vue?vue&type=template&id=1600d67d": +/*!************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntriesList.vue?vue&type=template&id=1600d67d ***! + \************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('table',{staticClass:"jfb-list-table"},_vm._l((_vm.columns),function(ref,column){ +var label = ref.label; +return _c('tr',{key:column,class:[ + 'jfb-list-table-row', + 'row--' + column + ]},[(label)?_c('th',{staticClass:"jfb-list-table-row--inner jfb-list-table-row--heading"},[_vm._v("\n\t\t\t"+_vm._s(label)+"\n\t\t")]):_vm._e(),_vm._v(" "),_c('td',{staticClass:"jfb-list-table-row--inner jfb-list-table-row--item"},[_c('EntryColumnList',{attrs:{"scope":_vm.scope,"list":_vm.list,"column":column}})],1)])}),0)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntriesTable.vue?vue&type=template&id=7f29adff": +/*!*************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntriesTable.vue?vue&type=template&id=7f29adff ***! + \*************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('EntriesTableSkeleton',{attrs:{"list":_vm.list,"columns":_vm.columns,"loading":_vm.isLoading,"empty-message":_vm.emptyMessage,"columns-components":_vm.components,"footer-heading":_vm.footerHeading,"scope":_vm.scope}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntriesTableSkeleton.vue?vue&type=template&id=6d30b4ec": +/*!*********************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntriesTableSkeleton.vue?vue&type=template&id=6d30b4ec ***! + \*********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.rootClasses},[_c('cx-vui-list-table',{attrs:{"is-empty":! _vm.list.length,"empty-message":_vm.emptyMessage},scopedSlots:_vm._u([{key:"heading",fn:function(){return [_c('cx-vui-list-table-heading',{attrs:{"slots":_vm.filteredColumns}},_vm._l((_vm.filteredColumns),function(column){return _c('span',{key:column,attrs:{"slot":column},slot:column},[(_vm.getHeadingComponent( column ))?[_c('keep-alive',[_c(_vm.getHeadingComponent( column ),{tag:"component",attrs:{"value":_vm.columns[ column ],"scope":_vm.scope}})],1)]:[_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.columns[ column ] ? _vm.columns[ column ].label : '')+"\n\t\t\t\t\t\t")],_vm._v(" "),(_vm.columns[ column ].sortable)?_c('svg',{attrs:{"width":"10","height":"5","viewBox":"0 0 10 5","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M0.833374 0.333328L5.00004 4.5L9.16671 0.333328H0.833374Z","fill":"#7B7E81"}})]):_vm._e()],2)}),0)]},proxy:true},(_vm.footerHeading)?{key:"footer",fn:function(){return [_c('cx-vui-list-table-heading',{attrs:{"slots":_vm.filteredColumns}},_vm._l((_vm.filteredColumns),function(column){return _c('span',{key:column,attrs:{"slot":column},slot:column},[(_vm.getHeadingComponent( column ))?[_c('keep-alive',[_c(_vm.getHeadingComponent( column ),{tag:"component",attrs:{"value":_vm.columns[ column ],"scope":_vm.scope}})],1)]:[_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.columns[ column ] ? _vm.columns[ column ].label : '')+"\n\t\t\t\t\t\t")],_vm._v(" "),(_vm.columns[ column ].sortable)?_c('svg',{attrs:{"width":"10","height":"5","viewBox":"0 0 10 5","fill":"none","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M0.833374 0.333328L5.00004 4.5L9.16671 0.333328H0.833374Z","fill":"#7B7E81"}})]):_vm._e()],2)}),0)]},proxy:true}:null,{key:"items",fn:function(){return _vm._l((_vm.list),function(entry,entryID){return _c('div',{key:entryID,class:_vm.classEntry( entryID, entry )},[_c('div',{staticClass:"list-table-item-columns"},_vm._l((_vm.filteredColumns),function(column){return _c('EntryColumnsTable',{key:'entry_' + column,attrs:{"column":column,"entry":entry,"entry-id":entryID,"scope":_vm.scope,"columns-components":_vm.columnsComponents}})}),1),_vm._v(" "),(entry.actions)?_c('div',{staticClass:"list-table-item-actions"},_vm._l((entry.actions.value),function(action){return _c('span',{key:action.value},[_c('a',{class:_vm.getActionClass( action ),attrs:{"href":_vm.getActionHref( action )},on:{"click":function($event){return _vm.onClickAction( action, entry, $event )}}},[_vm._v("\n\t\t\t\t\t\t\t\t"+_vm._s(action.label)+"\n\t\t\t\t\t\t\t")])])}),0):_vm._e()])})},proxy:true}],null,true)})],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntryColumnList.vue?vue&type=template&id=008980d5": +/*!****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntryColumnList.vue?vue&type=template&id=008980d5 ***! + \****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.record.editable && _vm.isEnableEdit)?_c('div',{staticClass:"list-table-item__cell--body-value jfb-control"},[_c('keep-alive',[_c(_vm.getComponentEditControl,{tag:"component",attrs:{"options":_vm.record.control_options},model:{value:(_vm.editedCellValue),callback:function ($$v) {_vm.editedCellValue=$$v},expression:"editedCellValue"}})],1)],1):(_vm.getItemComponentColumn)?[_c(_vm.getItemComponentColumn,{tag:"component",attrs:{"value":_vm.value,"full-entry":_vm.list,"scope":_vm.scope}})]:(_vm.getItemComponentType)?[_c(_vm.getItemComponentType,{tag:"component",attrs:{"value":_vm.value,"full-entry":_vm.list,"scope":_vm.scope}})]:_c('div',{domProps:{"innerHTML":_vm._s(_vm.value)}})],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntryColumnsTable.vue?vue&type=template&id=74775cf2": +/*!******************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/EntryColumnsTable.vue?vue&type=template&id=74775cf2 ***! + \******************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.getClasses},[_c('div',{staticClass:"list-table-item__cell--body jfb-ellipsis"},[(_vm.initial.editable && _vm.isEnableEdit)?_c('div',{staticClass:"list-table-item__cell--body-value jfb-control"},[_c('keep-alive',[_c(_vm.getComponentEditControl,{tag:"component",attrs:{"options":_vm.initial.control_options},model:{value:(_vm.editedCellValue),callback:function ($$v) {_vm.editedCellValue=$$v},expression:"editedCellValue"}})],1)],1):(_vm.getComponentColumn)?[_c(_vm.getComponentColumn,{tag:"component",attrs:{"value":_vm.value,"full-entry":_vm.entry,"entry-id":_vm.entryId,"scope":_vm.scope}})]:(_vm.getComponentType)?[_c(_vm.getComponentType,{tag:"component",attrs:{"value":_vm.value,"full-entry":_vm.entry,"entry-id":_vm.entryId,"scope":_vm.scope}})]:_c('div',{staticClass:"list-table-item__cell--body-value",domProps:{"innerHTML":_vm._s(_vm.value)}})],2),_vm._v(" "),(_vm.initial.editable && _vm.editedCellValue !== _vm.initialValue)?_c('div',{staticClass:"list-table-item__cell--actions"},[_c('span',{staticClass:"dashicons dashicons-undo",on:{"click":_vm.revertChangesColumn}})]):_vm._e()])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/FormBuilderPage.vue?vue&type=template&id=704fbf15": +/*!****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/FormBuilderPage.vue?vue&type=template&id=704fbf15 ***! + \****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ + 'wrap': true, + 'jet-form-builder-page': true, +}},[_vm._t("heading-before"),_vm._v(" "),_c('h1',{staticClass:"wp-heading-inline"},[_vm._v("\n\t\t"+_vm._s(_vm.title)+"\n\t")]),_vm._v(" "),(_vm.$slots['heading-after'])?[_vm._t("heading-after")]:(_vm.hasGlobalActions)?[_c('PageActions')]:_vm._e(),_vm._v(" "),_c('hr',{staticClass:"wp-header-end"}),_vm._v(" "),_vm._t("default")],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PageActions.vue?vue&type=template&id=5ac5349d&scoped=true": +/*!************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PageActions.vue?vue&type=template&id=5ac5349d&scoped=true ***! + \************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"page-actions"},_vm._l((_vm.secondaryActions),function(action){return _c('div',{key:action.slug,class:[ + 'page-actions-item', + 'action-' + action.slug ]},[(action.button)?_c('cx-vui-button',{key:("button-action-" + (action.slug)),class:[ + ("cx-vui-button--style-" + (action.button.type)) ].concat( action.button.classes ),attrs:{"button-style":action.button.style,"size":action.button.size,"url":action.button.url,"tag-name":action.button.url ? 'a' : 'button',"disabled":_vm.isDisabled( action.slug ) || _vm.isGlobalDoing,"loading":_vm.isLoading( action.slug ),"target":"_blank"},on:{"click":function($event){return _vm.globalEmit( action )}},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(action.button.label))]},proxy:true}],null,true)}):_vm._e()],1)}),0)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PaymentsPage/PaymentsComponent.vue?vue&type=template&id=7d33215e": +/*!*******************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PaymentsPage/PaymentsComponent.vue?vue&type=template&id=7d33215e ***! + \*******************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('FormBuilderPage',{attrs:{"title":_vm.__( 'JetFormBuilder Payments', 'jet-form-builder' )},scopedSlots:_vm._u([{key:"heading-after",fn:function(){return [_c('ExportPaymentsButton')]},proxy:true}])},[_vm._v(" "),_c('ActionsWithFilters',{scopedSlots:_vm._u([{key:"filters",fn:function(){return [_c('StatusFilter')]},proxy:true}])}),_vm._v(" "),_c('TablePagination'),_vm._v(" "),_c('EntriesTable'),_vm._v(" "),(_vm.$slots.default)?[_vm._t("default")]:_vm._e(),_vm._v(" "),_c('TablePagination')],2)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PaymentsPage/components/ExportPaymentsButton.vue?vue&type=template&id=50cc33ba": +/*!*********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PaymentsPage/components/ExportPaymentsButton.vue?vue&type=template&id=50cc33ba ***! + \*********************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{"display":"inline-block"}},[_c('cx-vui-button',{attrs:{"button-style":"link-accent","size":"mini"},on:{"click":function($event){_vm.showPopup = true}},scopedSlots:_vm._u([{key:"label",fn:function(){return [_c('span',{staticClass:"dashicons dashicons-database-export"}),_vm._v("\n\t\t\t"+_vm._s(_vm.__( 'Export', 'jet-form-builder' ))+"\n\t\t")]},proxy:true}])}),_vm._v(" "),(_vm.showPopup)?_c('CxVuiPopup',{attrs:{"class-names":{ + 'export-popup': true, + 'sticky-footer': true, + }},on:{"close":function($event){_vm.showPopup = false}},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v(_vm._s(_vm.__( '1. Select data to export:', 'jet-form-builder' )))]},proxy:true},{key:"content",fn:function(){return [_c('RowWrapper',{attrs:{"element-id":"columns","class-names":{ + 'size--1-x-2': true, + 'padding-side-unset': true + },"state":_vm.columnsState},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.__( 'General Columns', 'jet-form-builder' )))]},proxy:true},{key:"default",fn:function(){return [_c('CxVuiFSelect',{attrs:{"options-list":_vm.columns,"multiple":true,"value":_vm.selectedColumns},on:{"change":_vm.setColumns}})]},proxy:true},{key:"actions",fn:function(){return [_c('cx-vui-button',{attrs:{"button-style":"link-accent","size":"link","tagName":"a","disabled":_vm.columnsValues.length === _vm.selectedColumns.length},on:{"click":_vm.selectAllColumns},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.__( 'Choose all', 'jet-form-builder' ))+"\n\t\t\t\t\t\t")]},proxy:true}],null,false,3825749283)}),_vm._v(" "),_c('cx-vui-button',{attrs:{"button-style":"link-error","size":"link","tagName":"a","disabled":!_vm.selectedColumns.length},on:{"click":_vm.clearAllColumns},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.__( 'Clear', 'jet-form-builder' ))+"\n\t\t\t\t\t\t")]},proxy:true}],null,false,782737158)})]},proxy:true}],null,false,2802837545)}),_vm._v(" "),_c('RowWrapper',{attrs:{"element-id":"payerColumns","class-names":{ + 'size--1-x-2': true, + 'padding-side-unset': true + },"state":_vm.columnsState},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.__( 'Payer Columns', 'jet-form-builder' )))]},proxy:true},{key:"default",fn:function(){return [_c('CxVuiFSelect',{attrs:{"options-list":_vm.payerColumns,"multiple":true,"value":_vm.selectedPayerColumns},on:{"change":_vm.setPayerColumns}})]},proxy:true},{key:"actions",fn:function(){return [_c('cx-vui-button',{attrs:{"button-style":"link-accent","size":"link","tagName":"a","disabled":_vm.payerColumnsValues.length === _vm.selectedPayerColumns.length},on:{"click":_vm.selectAllPayerColumns},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.__( 'Choose all', 'jet-form-builder' ))+"\n\t\t\t\t\t\t")]},proxy:true}],null,false,3825749283)}),_vm._v(" "),_c('cx-vui-button',{attrs:{"button-style":"link-error","size":"link","tagName":"a","disabled":!_vm.selectedPayerColumns.length},on:{"click":_vm.clearAllPayerColumns},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.__( 'Clear', 'jet-form-builder' ))+"\n\t\t\t\t\t\t")]},proxy:true}],null,false,782737158)})]},proxy:true}],null,false,4094018880)}),_vm._v(" "),_c('RowWrapper',{attrs:{"element-id":"shippingColumns","class-names":{ + 'size--1-x-2': true, + 'padding-side-unset': true + },"state":_vm.columnsState},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.__( 'Shipping Columns', 'jet-form-builder' )))]},proxy:true},{key:"default",fn:function(){return [_c('CxVuiFSelect',{attrs:{"options-list":_vm.shippingColumns,"multiple":true,"value":_vm.selectedShippingColumns},on:{"change":_vm.setShippingColumns}})]},proxy:true},{key:"actions",fn:function(){return [_c('cx-vui-button',{attrs:{"button-style":"link-accent","size":"link","tagName":"a","disabled":_vm.shippingColumnsValues.length === _vm.selectedShippingColumns.length},on:{"click":_vm.selectAllShippingColumns},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.__( 'Choose all', 'jet-form-builder' ))+"\n\t\t\t\t\t\t")]},proxy:true}],null,false,3825749283)}),_vm._v(" "),_c('cx-vui-button',{attrs:{"button-style":"link-error","size":"link","tagName":"a","disabled":!_vm.selectedShippingColumns.length},on:{"click":_vm.clearAllShippingColumns},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(_vm.__( 'Clear', 'jet-form-builder' ))+"\n\t\t\t\t\t\t")]},proxy:true}],null,false,782737158)})]},proxy:true}],null,false,1335985645)}),_vm._v(" "),_c('h3',[_vm._v(_vm._s(_vm.__( '2. Filter payments:', 'jet-form-builder' )))]),_vm._v(" "),_c('Delimiter'),_vm._v(" "),_c('RowWrapper',{attrs:{"element-id":"status","class-names":{ + 'size--1-x-2': true, + 'padding-side-unset': true + }},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.__( 'Status', 'jet-form-builder' )))]},proxy:true},{key:"default",fn:function(){return [_c('CxVuiSelect',{attrs:{"value":_vm.status,"class-names":{ 'fullwidth': true }},on:{"input":_vm.setStatus}},_vm._l((_vm.statusFilter.options || []),function(option){return _c('option',{domProps:{"value":option.value}},[_vm._v("\n\t\t\t\t\t\t\t"+_vm._s(option.label)+"\n\t\t\t\t\t\t")])}),0)]},proxy:true}],null,false,3912950338)})]},proxy:true},{key:"footer",fn:function(){return [_c('div',{staticClass:"footer-buttons"},[_c('cx-vui-button',{attrs:{"button-style":'accent',"size":'mini',"disabled":!_vm.canBeExported},on:{"click":_vm.startExport},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.__( 'Export', 'jet-form-builder' )))]},proxy:true}],null,false,2420192243)}),_vm._v(" "),_c('cx-vui-button',{attrs:{"size":'mini'},on:{"click":function($event){_vm.showPopup = false}},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(_vm.__( 'Cancel', 'jet-form-builder' )))]},proxy:true}],null,false,298029969)})],1),_vm._v(" "),_c('div',{staticClass:"footer-counter"},[_c('div',{staticClass:"footer-counter--message"},[_vm._v("\n\t\t\t\t\t"+_vm._s(_vm.countMessage)+"\n\t\t\t\t")]),_vm._v(" "),_c('cx-vui-button',{attrs:{"button-style":"link-accent","size":"link","tagName":"a","disabled":_vm.isLoading( 'count' ),"loading":_vm.isLoading( 'count' )},on:{"click":_vm.onClickUpdateCount},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v("\n\t\t\t\t\t\t"+_vm._s(_vm.__( 'Update', 'jet-form-builder' ))+"\n\t\t\t\t\t")]},proxy:true}],null,false,168407598)})],1)]},proxy:true}],null,false,3777172923)}):_vm._e()],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PaymentsPage/filters/StatusFilter.vue?vue&type=template&id=4f820e00": +/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PaymentsPage/filters/StatusFilter.vue?vue&type=template&id=4f820e00 ***! + \**********************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CxVuiSelect',{attrs:{"value":_vm.filter.selected},on:{"input":_vm.onChangeFilter}},_vm._l((_vm.filter.options || []),function(option){return _c('option',{domProps:{"value":option.value}},[_vm._v("\n\t\t"+_vm._s(option.label)+"\n\t")])}),0)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxContainer.vue?vue&type=template&id=d86617d2": +/*!*****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxContainer.vue?vue&type=template&id=d86617d2 ***! + \*****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"postbox-container",attrs:{"id":_vm.wrapId}},[_c('div',{class:_vm.classes,attrs:{"id":_vm.id}},[_vm._t("default")],2)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxGrid.vue?vue&type=template&id=794a16a0": +/*!************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxGrid.vue?vue&type=template&id=794a16a0 ***! + \************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{"id":"poststuff"}},[_c('div',{class:_vm.bodyClasses,attrs:{"id":"post-body"}},[(_vm.$slots.topBody)?_c('div',{attrs:{"id":"post-body-content"}},[_vm._t("topBody")],2):_vm._e(),_vm._v(" "),_vm._l((_vm.containers),function(ref){ +var wrap_id = ref.wrap_id; +var id = ref.id; +var classes = ref.classes; +var boxes = ref.boxes; +return _c('PostBoxContainer',{key:wrap_id,attrs:{"wrap-id":wrap_id,"id":id,"classes":classes}},_vm._l((boxes),function(ref){ + var slug = ref.slug; + var title = ref.title; + var list = ref.list; + var render_type = ref.render_type; if ( render_type === void 0 ) render_type = false; +return _c('PostBoxSimple',{key:slug,attrs:{"slug":slug,"title":title,"list":list,"render-type":render_type},scopedSlots:_vm._u([{key:"header-actions",fn:function(){return [_vm._t('header-actions-' + slug,null,null,{ list: list })]},proxy:true},{key:"default",fn:function(){return [_vm._t('body-' + slug,null,null,{ list: list })]},proxy:true},{key:"before",fn:function(){return [_vm._t('before-' + slug,null,null,{ list: list })]},proxy:true},{key:"after",fn:function(){return [_vm._t('after-' + slug,null,null,{ list: list })]},proxy:true},(_vm.$slots['in-header-' + slug ])?{key:"in-header",fn:function(){return [_vm._t('in-header-' + slug)]},proxy:true}:null,(_vm.$slots['in-footer-' + slug ])?{key:"in-footer",fn:function(){return [_vm._t('in-footer-' + slug)]},proxy:true}:null],null,true)})}),1)})],2)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSimple.vue?vue&type=template&id=0f34be8c": +/*!**************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSimple.vue?vue&type=template&id=0f34be8c ***! + \**************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"jfb-post-box",attrs:{"id":_vm.slug + '-wrapper'}},[(_vm.$slots.default)?_c('div',{staticClass:"jfb-post-box--content"},[_vm._t("default")],2):_c('div',{staticClass:"jfb-post-box--content"},[_vm._t("before"),_vm._v(" "),_c('PostBoxSkeleton',{attrs:{"title":_vm.title,"slug":_vm.slug},scopedSlots:_vm._u([{key:"header-actions",fn:function(){return [_vm._t("header-actions")]},proxy:true},{key:"default",fn:function(){return [_vm._t("in-header"),_vm._v(" "),('table' === _vm.renderType)?_c('EntriesTable',{attrs:{"scope":_vm.slug}}):('list' === _vm.renderType)?_c('EntriesList',{attrs:{"scope":_vm.slug}}):_c('div',{attrs:{"id":"misc-publishing-actions"}},_vm._l((_vm.list),function(value,name){return _c('div',{key:name,staticClass:"misc-pub-section"},[_vm._v("\n\t\t\t\t\t\t"+_vm._s(name)+": "),_c('strong',[_vm._v(_vm._s(value))])])}),0),_vm._v(" "),_vm._t("in-footer")]},proxy:true}],null,true)}),_vm._v(" "),_vm._t("after")],2)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSkeleton.vue?vue&type=template&id=07ca11b2&scoped=true": +/*!****************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/PostBoxSkeleton.vue?vue&type=template&id=07ca11b2&scoped=true ***! + \****************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"postbox",attrs:{"id":_vm.slug}},[_c('div',{staticClass:"postbox-header"},[_c('h2',{staticClass:"ui-sortable-handle"},[_vm._v(_vm._s(_vm.title))]),_vm._v(" "),(_vm.$slots['header-actions'])?_c('div',{staticClass:"handle-actions"},[_vm._t("header-actions")],2):_c('div',{staticClass:"handle-actions"},[_c('UndoChangesTable',{attrs:{"scope":_vm.slug}}),_vm._v(" "),_c('EditTableSwitcher',{attrs:{"scope":_vm.slug}}),_vm._v(" "),_c('ShowOverflowTable',{attrs:{"scope":_vm.slug}}),_vm._v(" "),_c('RedirectToSingle',{attrs:{"scope":_vm.slug}})],1)]),_vm._v(" "),_c('div',{staticClass:"postbox-inner submitbox"},[_vm._t("default"),_vm._v(" "),(_vm.$slots.actions)?_c('div',{staticClass:"major-publishing-actions"},[_vm._t("actions"),_vm._v(" "),_c('div',{staticClass:"clear"})],2):_c('PrimaryActions',{attrs:{"scope":_vm.slug}})],2)])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/SideBarBoxes.vue?vue&type=template&id=27877b3e": +/*!*************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/SideBarBoxes.vue?vue&type=template&id=27877b3e ***! + \*************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.boxes.length)?_c('div',{staticClass:"jfb-content-sidebar"},[_vm._l((_vm.boxes),function(box,index){return [('panel' === box.type)?_c('DashboardPanel',{key:index,attrs:{"config":box},scopedSlots:_vm._u([(_vm.$slots[ 'icon-' + box.slug ])?{key:"icon",fn:function(){return [_vm._t('icon-' + box.slug)]},proxy:true}:null,(_vm.$scopedSlots['content-' + box.slug])?{key:"default",fn:function(){return [_vm._t('content-' + box.slug,null,null,box)]},proxy:true}:null],null,true)}):('banner' === box.type)?_c('DashboardBanner',{key:'banner-' + index,attrs:{"config":box}}):_vm._e()]})],2):_vm._e()} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/actions/ActionsItem.vue?vue&type=template&id=554817ff": +/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/actions/ActionsItem.vue?vue&type=template&id=554817ff ***! + \*********************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"jfb-actions"},_vm._l((_vm.parsedJson),function(action,actionID){return _c('a',{key:actionID,staticClass:"jfb-dropdown-item",attrs:{"href":"javascript:void(0)"},on:{"click":function($event){return _vm.run( actionID )}}},[_vm._v("\n\t\t"+_vm._s(action.label)+"\n\t")])}),0)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/choose/ChooseHead.vue?vue&type=template&id=3548b9f0&scoped=true": +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/choose/ChooseHead.vue?vue&type=template&id=3548b9f0&scoped=true ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('cx-vui-checkbox',{attrs:{"options-list":[ { value: 'checked' } ],"value":_vm.chooseHeadValue,"return-type":"single","name":"jfb_record_all"},on:{"input":_vm.onClick}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/choose/ChooseItem.vue?vue&type=template&id=840cd4ba": +/*!*******************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/choose/ChooseItem.vue?vue&type=template&id=840cd4ba ***! + \*******************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('cx-vui-checkbox',{attrs:{"options-list":[ { value: _vm.value } ],"value":_vm.isCheckedCurrent,"return-type":"single","name":"jfb_record_row"},on:{"input":_vm.onChange}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/icon-status/IconStatus.vue?vue&type=template&id=eb79323a&scoped=true": +/*!************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/icon-status/IconStatus.vue?vue&type=template&id=eb79323a&scoped=true ***! + \************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.wrapperClasses},[_c('span',{class:_vm.dashIconClass}),_vm._v(" "),(_vm.value.text)?_c('span',{staticClass:"jfb-icon-status--text"},[_vm._v(_vm._s(_vm.value.text))]):_vm._e(),_vm._v(" "),(_vm.value.help)?_c('div',{class:_vm.tooltipClasses},[_vm._v(_vm._s(_vm.value.help)+"\n\t")]):_vm._e()])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/input-control/InputControl.vue?vue&type=template&id=26fb4d77": +/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/input-control/InputControl.vue?vue&type=template&id=26fb4d77 ***! + \****************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('input',{attrs:{"type":_vm.options.type},domProps:{"value":_vm.value},on:{"input":_vm.onInput}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/link-type/LinkType.vue?vue&type=template&id=160b62b6&scoped=true": +/*!********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/link-type/LinkType.vue?vue&type=template&id=160b62b6&scoped=true ***! + \********************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () { +var _obj; +var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{class:{ + 'row-title': _vm.parsedJson.primary, + 'with-flex': _vm.hasIcon, + },attrs:{"href":_vm.parsedJson.href,"target":_vm.target,"title":_vm.parsedJson.title}},[_c('span',[_vm._v(_vm._s(_vm.parsedJson.text))]),_vm._v(" "),(_vm.hasIcon)?_c('span',{class:( _obj = { + 'dashicons': true + }, _obj[ 'dashicons-' + _vm.parsedJson.type ] = true, _obj ),attrs:{"aria-hidden":"true"}}):_vm._e()])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/pre/ColumnPre.vue?vue&type=template&id=40a32ca2": +/*!***************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/pre/ColumnPre.vue?vue&type=template&id=40a32ca2 ***! + \***************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[(_vm.isShowOverflow)?_c('pre',[_vm._v(_vm._s(_vm.parsedValue))]):_c('span',[_vm._v(_vm._s(_vm.value))])])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/select-control/SelectControl.vue?vue&type=template&id=5d6333a6&scoped=true": +/*!******************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/select-control/SelectControl.vue?vue&type=template&id=5d6333a6&scoped=true ***! + \******************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('select',{domProps:{"value":_vm.getValue},on:{"input":_vm.onInput}},_vm._l((_vm.options.options),function(type){return _c('option',{attrs:{"disabled":type.disabled},domProps:{"value":type.value}},[_vm._v("\n\t\t"+_vm._s(_vm.label( type ))+"\n\t")])}),0)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/textarea-control/TextareaControl.vue?vue&type=template&id=52c403ad": +/*!**********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TableColumns/textarea-control/TextareaControl.vue?vue&type=template&id=52c403ad ***! + \**********************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('textarea',{domProps:{"value":_vm.value},on:{"input":_vm.onInput}})} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TablePagination.vue?vue&type=template&id=045acab7": +/*!****************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/TablePagination.vue?vue&type=template&id=045acab7 ***! + \****************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"jfb-pagination"},[_c('span',{staticClass:"jfb-pagination--results"},[_vm._v("\n\t\t"+_vm._s(_vm.__s( + "Showing %d - %d of %d results.", + 'jet-form-builder', + _vm.queryState.itemsFrom, + _vm.queryState.itemsTo, + _vm.queryState.total + ))+"\n\t")]),_vm._v(" "),(_vm.queryState.limit < _vm.queryState.total)?_c('cx-vui-pagination',{attrs:{"total":_vm.queryState.total,"page-size":_vm.queryState.limit,"current":_vm.queryState.currentPage,"disabled":_vm.isLoading},on:{"on-change":_vm.changePage}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"jfb-pagination--sort"},[_c('cx-vui-input',{attrs:{"label":_vm.__( 'Results per page', 'jet-form-builder' ),"value":_vm.queryState.limit,"type":"number","min":1,"max":_vm.queryState.total,"disabled":_vm.isLoading},on:{"on-input-change":_vm.changeLimit}})],1)],1)} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/VuiBoxes/DashboardBanner.vue?vue&type=template&id=1ffbb93e": +/*!*************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/VuiBoxes/DashboardBanner.vue?vue&type=template&id=1ffbb93e ***! + \*************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.wrapperClasses},[_c('div',{staticClass:"banner-frame"},[_c('div',{staticClass:"banner-inner"},[_c('div',{staticClass:"banner-label"},[_vm._v(_vm._s(_vm.config.label))]),_vm._v(" "),_c('div',{staticClass:"banner-title"},[_c('span',[_vm._v(_vm._s(_vm.config.title))])]),_vm._v(" "),_c('div',{staticClass:"banner-content"},[_vm._v(_vm._s(_vm.config.content))]),_vm._v(" "),(_vm.hasButtons)?_c('div',{staticClass:"banner-buttons"},_vm._l((_vm.config.buttons),function(button,index){return _c('cx-vui-button',{key:("button-banner-" + index),class:("cx-vui-button--style-" + (button.type)),attrs:{"button-style":button.style,"size":"mini","url":button.url,"tag-name":"a","target":"_blank"},scopedSlots:_vm._u([{key:"label",fn:function(){return [_vm._v(_vm._s(button.label))]},proxy:true}],null,true)})}),1):_vm._e()])])])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/VuiBoxes/DashboardPanel.vue?vue&type=template&id=4ad26942": +/*!************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/VuiBoxes/DashboardPanel.vue?vue&type=template&id=4ad26942 ***! + \************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render), +/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) +/* harmony export */ }); +var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.wrapperClasses},[_c('div',{staticClass:"jet-form-builder-page__panel-header"},[_c('div',{staticClass:"panel-header-icon"},[_vm._t("icon")],2),_vm._v(" "),_c('div',{staticClass:"panel-header-content"},[_c('span',{staticClass:"panel-header-desc"},[_vm._v(_vm._s(_vm.config.description))]),_vm._v(" "),_c('div',{staticClass:"panel-header-title"},[_vm._v(_vm._s(_vm.config.title))])])]),_vm._v(" "),(_vm.$slots.default)?_c('div',{staticClass:"jet-form-builder-page__panel-content"},[_vm._t("default")],2):_vm._e()])} +var staticRenderFns = [] +render._withStripped = true + + +/***/ }), + +/***/ "../../node_modules/vue-loader/lib/runtime/componentNormalizer.js": +/*!************************************************************************!*\ + !*** ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ normalizeComponent) +/* harmony export */ }); +/* globals __VUE_SSR_CONTEXT__ */ + +// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). +// This module is a runtime utility for cleaner component module output and will +// be included in the final webpack user bundle. + +function normalizeComponent( + scriptExports, + render, + staticRenderFns, + functionalTemplate, + injectStyles, + scopeId, + moduleIdentifier /* server only */, + shadowMode /* vue-cli only */ +) { + // Vue.extend constructor export interop + var options = + typeof scriptExports === 'function' ? scriptExports.options : scriptExports + + // render functions + if (render) { + options.render = render + options.staticRenderFns = staticRenderFns + options._compiled = true + } + + // functional template + if (functionalTemplate) { + options.functional = true + } + + // scopedId + if (scopeId) { + options._scopeId = 'data-v-' + scopeId + } + + var hook + if (moduleIdentifier) { + // server build + hook = function (context) { + // 2.3 injection + context = + context || // cached call + (this.$vnode && this.$vnode.ssrContext) || // stateful + (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional + // 2.2 with runInNewContext: true + if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { + context = __VUE_SSR_CONTEXT__ + } + // inject component styles + if (injectStyles) { + injectStyles.call(this, context) + } + // register component module identifier for async chunk inferrence + if (context && context._registeredComponents) { + context._registeredComponents.add(moduleIdentifier) + } + } + // used by ssr in case component is cached and beforeCreate + // never gets called + options._ssrRegister = hook + } else if (injectStyles) { + hook = shadowMode + ? function () { + injectStyles.call( + this, + (options.functional ? this.parent : this).$root.$options.shadowRoot + ) + } + : injectStyles + } + + if (hook) { + if (options.functional) { + // for template-only hot-reload because in that case the render fn doesn't + // go through the normalizer + options._injectStyles = hook + // register for functional component in vue file + var originalRender = options.render + options.render = function renderWithStyleInjection(h, context) { + hook.call(context) + return originalRender(h, context) + } + } else { + // inject component registration as beforeCreate hook + var existing = options.beforeCreate + options.beforeCreate = existing ? [].concat(existing, hook) : [hook] + } + } + + return { + exports: scriptExports, + options: options + } +} + + +/***/ }), + +/***/ "../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ActionsWithFilters.vue?vue&type=style&index=0&id=34183439&scoped=true&lang=scss": +/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./admin-vuex-package/components/ActionsWithFilters.vue?vue&type=style&index=0&id=34183439&scoped=true&lang=scss ***! + \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// style-loader: Adds some css to the DOM by adding a \n\t\t\t\t${t}\n\t\t\t\n\t\t\t`)}catch(t){console.error(t),f(t?.message||(0,a.__)("Failed to parse HTML.","jet-form-builder"))}finally{c(!1)}}},m?(0,a.__)("Parsing...","jet-form-builder"):(0,a.__)("Parse HTML","jet-form-builder")))))}function b(){const[t,r]=(0,e.useState)(!1);return(0,o.createElement)(e.Fragment,null,(0,o.createElement)("a",{href:"#",className:"page-title-action",onClick:t=>{t.preventDefault(),r(!0)}},(0,a.__)("Import from HTML","jet-form-builder")),t&&(0,o.createElement)(f,{setShowModal:r}))}n()((()=>{const t=document.querySelector('.page-title-action[href*="post-new.php"]');if(!t)return;const r=document.createElement("div");r.style.display="inline-flex",r.style.marginLeft="4px",t.after(r),(0,e.createRoot)(r).render(wp.element.createElement(b))}))})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "../../admin/HtmlParserButton.js": +/*!***************************************!*\ + !*** ../../admin/HtmlParserButton.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ HtmlParserButton) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _HtmlParserModal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./HtmlParserModal */ "../../admin/HtmlParserModal.js"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); + + + + +function HtmlParserButton() { + const [showModal, setShowModal] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useState)(false); + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", { + href: "#", + className: "page-title-action", + onClick: event => { + event.preventDefault(); + setShowModal(true); + } + }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Import from HTML', 'jet-form-builder')), showModal && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_HtmlParserModal__WEBPACK_IMPORTED_MODULE_1__["default"], { + setShowModal: setShowModal + })); +} + +/***/ }), + +/***/ "../../admin/HtmlParserFooter.js": +/*!***************************************!*\ + !*** ../../admin/HtmlParserFooter.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ HtmlParserFooter) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch"); +/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./serialize */ "../../admin/serialize.js"); + + + + + + +const { + parseHTMLtoBlocks +} = JetFormBuilderParser; +const getPostEditUrl = id => { + const url = new URL(JetFormBuilderAdmin.edit_url); + url.searchParams.set('post', id); + return url.href; +}; +function HtmlParserFooter({ + clearHTML, + rawHTML, + setShowModal +}) { + const [isBusy, setIsBusy] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_4__.useState)(false); + const createForm = async () => { + setIsBusy(true); + try { + const blocks = parseHTMLtoBlocks(rawHTML); + if (!blocks.length) { + console.error((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('JFB: Could not parse blocks', 'jet-form-builder'), rawHTML); + setIsBusy(false); + return; + } + const serialized = (0,_serialize__WEBPACK_IMPORTED_MODULE_5__["default"])(blocks); + const response = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default()({ + method: 'POST', + path: '/wp/v2/jet-form-builder', + data: { + title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Imported HTML Form', 'jet-form-builder') + ' ' + new Date().toLocaleString('sv-SE').replace('T', ' '), + content: serialized, + status: 'publish' + } + }); + window.location.href = getPostEditUrl(response.id); + } catch (error) { + console.error('Failed to create form:', error); + setIsBusy(false); + } + }; + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Flex, { + justify: "space-between" + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Button, { + variant: "secondary", + onClick: clearHTML + }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Back', 'jet-form-builder')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Button, { + variant: "primary", + onClick: createForm, + isBusy: isBusy, + disabled: isBusy + }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Create Form', 'jet-form-builder'))); +} + +/***/ }), + +/***/ "../../admin/HtmlParserModal.js": +/*!**************************************!*\ + !*** ../../admin/HtmlParserModal.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ HtmlParserModal) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _HtmlParserFooter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./HtmlParserFooter */ "../../admin/HtmlParserFooter.js"); + + + + + +const { + parseHTMLtoBlocks, + getFormInnerFields +} = JetFormBuilderParser; +function HtmlParserModal({ + setShowModal +}) { + const [html, setHtml] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useState)(''); + const [formHTML, setFormHTML] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useState)(''); + const [isParsing, setParsing] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useState)(false); + const [error, setError] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useState)(''); + const handleSubmit = () => { + setParsing(true); + setError(''); + try { + const innerHTML = getFormInnerFields(html); + const styledHTML = ` +
+ + ${innerHTML} +
+ `; + setFormHTML(styledHTML); + } catch (err) { + console.error(err); + setError(err?.message || (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Failed to parse HTML.', 'jet-form-builder')); + } finally { + setParsing(false); + } + }; + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Modal, { + style: { + width: '60vw' + }, + onRequestClose: () => setShowModal(false), + title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Import HTML Form', 'jet-form-builder'), + className: "jfb-html-parser-modal" + }, error && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Notice, { + status: "error", + isDismissible: true, + onRemove: () => setError('') + }, error), Boolean(formHTML.length) ? (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { + dangerouslySetInnerHTML: { + __html: formHTML + }, + style: { + padding: '2em 1em', + backgroundColor: '#f6f7f7', + marginBottom: '1em' + } + }), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_HtmlParserFooter__WEBPACK_IMPORTED_MODULE_4__["default"], { + clearHTML: () => setFormHTML(''), + formHTML: formHTML, + rawHTML: html, + setShowModal: setShowModal + })) : (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.TextareaControl, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Paste your HTML here', 'jet-form-builder'), + value: html, + onChange: setHtml, + rows: 7 + }), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("ul", { + style: { + listStyle: 'disc', + paddingInlineStart: '1em' + } + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('You can use any HTML code that contains form elements, but only headings, form controls, and buttons will be parsed.', 'jet-form-builder')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)(`All the code you paste here will be parsed into a single Form, even if it contains more than one
tag.`, 'jet-form-builder')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)(`The parser can only understand form elements and structure; it can't parse styling or behavior.`, 'jet-form-builder'))), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Flex, { + justify: "flex-end", + style: { + marginTop: '1em' + } + }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Button, { + isPrimary: true, + isBusy: isParsing, + disabled: isParsing || !html.trim().length, + onClick: handleSubmit + }, isParsing ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Parsing...', 'jet-form-builder') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Parse HTML', 'jet-form-builder'))))); +} + +/***/ }), + +/***/ "../../admin/serialize.js": +/*!********************************!*\ + !*** ../../admin/serialize.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +function convertToCommentBlock({ + name, + attributes +}) { + const blockAttrs = JSON.stringify(attributes); + return ``; +} + +/** + * @param blocks {Object[]} + */ +function serialize(blocks) { + return blocks.map(convertToCommentBlock).join('\n\n'); +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (serialize); + +/***/ }), + +/***/ "@wordpress/api-fetch": +/*!**********************************!*\ + !*** external ["wp","apiFetch"] ***! + \**********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["apiFetch"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/dom-ready": +/*!**********************************!*\ + !*** external ["wp","domReady"] ***! + \**********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["domReady"]; + +/***/ }), + +/***/ "@wordpress/element": +/*!*********************************!*\ + !*** external ["wp","element"] ***! + \*********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["element"]; + +/***/ }), + +/***/ "@wordpress/i18n": +/*!******************************!*\ + !*** external ["wp","i18n"] ***! + \******************************/ +/***/ ((module) => { + +module.exports = window["wp"]["i18n"]; + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +module.exports = window["React"]; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!****************************!*\ + !*** ../../admin/index.js ***! + \****************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_dom_ready__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/dom-ready */ "@wordpress/dom-ready"); +/* harmony import */ var _wordpress_dom_ready__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom_ready__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _HtmlParserButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./HtmlParserButton */ "../../admin/HtmlParserButton.js"); + + + +_wordpress_dom_ready__WEBPACK_IMPORTED_MODULE_1___default()(() => { + const target = document.querySelector('.page-title-action[href*="post-new.php"]'); + if (!target) { + return; + } + const container = document.createElement('div'); + container.style.display = 'inline-flex'; + container.style.marginLeft = '4px'; + target.after(container); + (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createRoot)(container).render(wp.element.createElement(_HtmlParserButton__WEBPACK_IMPORTED_MODULE_2__["default"])); +}); +})(); + +/******/ })() +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tdWkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFBQTtBQUdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU1BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRUE7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQVNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBV0E7Ozs7Ozs7Ozs7Ozs7O0FDMUpBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FDYkE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ1BBOzs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQSIsInNvdXJjZXMiOlsid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi9hZG1pbi9IdG1sUGFyc2VyQnV0dG9uLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi9hZG1pbi9IdG1sUGFyc2VyRm9vdGVyLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi9hZG1pbi9IdG1sUGFyc2VyTW9kYWwuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uL2FkbWluL3NlcmlhbGl6ZS5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvZXh0ZXJuYWwgd2luZG93IFtcIndwXCIsXCJhcGlGZXRjaFwiXSIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvZXh0ZXJuYWwgd2luZG93IFtcIndwXCIsXCJjb21wb25lbnRzXCJdIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci9leHRlcm5hbCB3aW5kb3cgW1wid3BcIixcImRvbVJlYWR5XCJdIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci9leHRlcm5hbCB3aW5kb3cgW1wid3BcIixcImVsZW1lbnRcIl0iLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL2V4dGVybmFsIHdpbmRvdyBbXCJ3cFwiLFwiaTE4blwiXSIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvZXh0ZXJuYWwgd2luZG93IFwiUmVhY3RcIiIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uL2FkbWluL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBIdG1sUGFyc2VyTW9kYWwgZnJvbSAnLi9IdG1sUGFyc2VyTW9kYWwnO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xyXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIdG1sUGFyc2VyQnV0dG9uKCkge1xyXG5cdGNvbnN0IFsgc2hvd01vZGFsLCBzZXRTaG93TW9kYWwgXSA9IHVzZVN0YXRlKCBmYWxzZSApO1xyXG5cclxuXHRyZXR1cm4gKFxyXG5cdFx0PEZyYWdtZW50PlxyXG5cdFx0XHQ8YVxyXG5cdFx0XHRcdGhyZWY9XCIjXCJcclxuXHRcdFx0XHRjbGFzc05hbWU9XCJwYWdlLXRpdGxlLWFjdGlvblwiXHJcblx0XHRcdFx0b25DbGljaz17ICggZXZlbnQgKSA9PiB7XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0c2V0U2hvd01vZGFsKCB0cnVlICk7XHJcblx0XHRcdFx0fSB9XHJcblx0XHRcdD5cclxuXHRcdFx0XHR7IF9fKCAnSW1wb3J0IGZyb20gSFRNTCcsICdqZXQtZm9ybS1idWlsZGVyJyApIH1cclxuXHRcdFx0PC9hPlxyXG5cdFx0XHR7IHNob3dNb2RhbCAmJiA8SHRtbFBhcnNlck1vZGFsIHNldFNob3dNb2RhbD17IHNldFNob3dNb2RhbCB9IC8+IH1cclxuXHRcdDwvRnJhZ21lbnQ+XHJcblx0KTtcclxufSIsImltcG9ydCB7IEJ1dHRvbiwgRmxleCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IF9fIH0gZnJvbSAnQHdvcmRwcmVzcy9pMThuJztcclxuaW1wb3J0IGFwaUZldGNoIGZyb20gJ0B3b3JkcHJlc3MvYXBpLWZldGNoJztcclxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xyXG5pbXBvcnQgc2VyaWFsaXplIGZyb20gJy4vc2VyaWFsaXplJztcclxuXHJcbmNvbnN0IHsgcGFyc2VIVE1MdG9CbG9ja3MgfSA9IEpldEZvcm1CdWlsZGVyUGFyc2VyO1xyXG5cclxuY29uc3QgZ2V0UG9zdEVkaXRVcmwgPSBpZCA9PiB7XHJcblx0Y29uc3QgdXJsID0gbmV3IFVSTCggSmV0Rm9ybUJ1aWxkZXJBZG1pbi5lZGl0X3VybCApO1xyXG5cdHVybC5zZWFyY2hQYXJhbXMuc2V0KCAncG9zdCcsIGlkICk7XHJcblxyXG5cdHJldHVybiB1cmwuaHJlZjtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEh0bWxQYXJzZXJGb290ZXIoIHsgY2xlYXJIVE1MLCByYXdIVE1MLCBzZXRTaG93TW9kYWwgfSApIHtcclxuXHRjb25zdCBbIGlzQnVzeSwgc2V0SXNCdXN5IF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcclxuXHRjb25zdCBjcmVhdGVGb3JtID0gYXN5bmMgKCkgPT4ge1xyXG5cdFx0c2V0SXNCdXN5KCB0cnVlICk7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBibG9ja3MgPSBwYXJzZUhUTUx0b0Jsb2NrcyggcmF3SFRNTCApO1xyXG5cclxuXHRcdFx0aWYgKCAhYmxvY2tzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCBfXyggJ0pGQjogQ291bGQgbm90IHBhcnNlIGJsb2NrcycsICdqZXQtZm9ybS1idWlsZGVyJyApLCByYXdIVE1MICk7XHJcblx0XHRcdFx0c2V0SXNCdXN5KCBmYWxzZSApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZSggYmxvY2tzICk7XHJcblxyXG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUZldGNoKCB7XHJcblx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0cGF0aDogJy93cC92Mi9qZXQtZm9ybS1idWlsZGVyJyxcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHR0aXRsZTogX18oICdJbXBvcnRlZCBIVE1MIEZvcm0nLCAnamV0LWZvcm0tYnVpbGRlcicgKSArICcgJyArIG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoJ3N2LVNFJykucmVwbGFjZSgnVCcsICcgJyksXHJcblx0XHRcdFx0XHRjb250ZW50OiBzZXJpYWxpemVkLFxyXG5cdFx0XHRcdFx0c3RhdHVzOiAncHVibGlzaCcsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBnZXRQb3N0RWRpdFVybCggcmVzcG9uc2UuaWQgKTtcclxuXHJcblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoICdGYWlsZWQgdG8gY3JlYXRlIGZvcm06JywgZXJyb3IgKTtcclxuXHRcdFx0c2V0SXNCdXN5KCBmYWxzZSApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdHJldHVybiAoXHJcblx0XHQ8RmxleCBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiPlxyXG5cdFx0XHQ8QnV0dG9uXHJcblx0XHRcdFx0dmFyaWFudD1cInNlY29uZGFyeVwiXHJcblx0XHRcdFx0b25DbGljaz17IGNsZWFySFRNTCB9XHJcblx0XHRcdD5cclxuXHRcdFx0XHR7IF9fKCAnQmFjaycsICdqZXQtZm9ybS1idWlsZGVyJyApIH1cclxuXHRcdFx0PC9CdXR0b24+XHJcblx0XHRcdDxCdXR0b25cclxuXHRcdFx0XHR2YXJpYW50PVwicHJpbWFyeVwiXHJcblx0XHRcdFx0b25DbGljaz17IGNyZWF0ZUZvcm0gfVxyXG5cdFx0XHRcdGlzQnVzeT17IGlzQnVzeSB9XHJcblx0XHRcdFx0ZGlzYWJsZWQ9eyBpc0J1c3kgfVxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0eyBfXyggJ0NyZWF0ZSBGb3JtJywgJ2pldC1mb3JtLWJ1aWxkZXInICkgfVxyXG5cdFx0XHQ8L0J1dHRvbj5cclxuXHRcdDwvRmxleD5cclxuXHQpO1xyXG59XHJcbiIsImltcG9ydCB7XHJcblx0VGV4dGFyZWFDb250cm9sLFxyXG5cdEJ1dHRvbixcclxuXHRGbGV4LFxyXG5cdE5vdGljZSxcclxuXHRNb2RhbCxcclxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XHJcbmltcG9ydCB7IF9fIH0gZnJvbSAnQHdvcmRwcmVzcy9pMThuJztcclxuaW1wb3J0IEh0bWxQYXJzZXJGb290ZXIgZnJvbSAnLi9IdG1sUGFyc2VyRm9vdGVyJztcclxuXHJcbmNvbnN0IHtcclxuXHRwYXJzZUhUTUx0b0Jsb2NrcyxcclxuXHRnZXRGb3JtSW5uZXJGaWVsZHMsXHJcbn0gPSBKZXRGb3JtQnVpbGRlclBhcnNlcjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEh0bWxQYXJzZXJNb2RhbCgge3NldFNob3dNb2RhbH0gKSB7XHJcblx0Y29uc3QgWyBodG1sLCBzZXRIdG1sIF0gICAgICAgICA9IHVzZVN0YXRlKCAnJyApO1xyXG5cdGNvbnN0IFsgZm9ybUhUTUwsIHNldEZvcm1IVE1MIF0gPSB1c2VTdGF0ZSggJycgKTtcclxuXHRjb25zdCBbIGlzUGFyc2luZywgc2V0UGFyc2luZyBdID0gdXNlU3RhdGUoIGZhbHNlICk7XHJcblx0Y29uc3QgWyBlcnJvciwgc2V0RXJyb3IgXSAgICAgICA9IHVzZVN0YXRlKCAnJyApO1xyXG5cclxuXHRjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XHJcblx0XHRzZXRQYXJzaW5nKCB0cnVlICk7XHJcblx0XHRzZXRFcnJvciggJycgKTtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBpbm5lckhUTUwgPSBnZXRGb3JtSW5uZXJGaWVsZHMoIGh0bWwgKTtcclxuXHJcblx0XHRcdGNvbnN0IHN0eWxlZEhUTUwgPSBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJqZXQtZm9ybS1idWlsZGVyLWh0bWwtcGFyc2VyLXByZXZpZXdcIj5cclxuXHRcdFx0XHQ8c3R5bGU+XHJcblx0XHRcdFx0XHQuamV0LWZvcm0tYnVpbGRlci1odG1sLXBhcnNlci1wcmV2aWV3IHtcclxuXHRcdFx0XHRcdFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQuamV0LWZvcm0tYnVpbGRlci1odG1sLXBhcnNlci1wcmV2aWV3IHRleHRhcmVhLFxyXG5cdFx0XHRcdFx0LmpldC1mb3JtLWJ1aWxkZXItaHRtbC1wYXJzZXItcHJldmlldyBpbnB1dDpub3QoW3R5cGU9XCJjaGVja2JveFwiXSk6bm90KFt0eXBlPVwicmFkaW9cIl0pOm5vdChbdHlwZT1cInN1Ym1pdFwiXSksXHJcblx0XHRcdFx0XHQuamV0LWZvcm0tYnVpbGRlci1odG1sLXBhcnNlci1wcmV2aWV3IHNlbGVjdCB7XHJcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xyXG5cdFx0XHRcdFx0XHR3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG5cdFx0XHRcdFx0XHRtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuXHRcdFx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMTBweDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC5qZXQtZm9ybS1idWlsZGVyLWh0bWwtcGFyc2VyLXByZXZpZXcgbGFiZWwge1xyXG5cdFx0XHRcdFx0XHRkaXNwbGF5OmJsb2NrO1xyXG5cdFx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOjVweDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC5qZXQtZm9ybS1idWlsZGVyLWh0bWwtcGFyc2VyLXByZXZpZXcgYnIge1xyXG5cdFx0XHRcdFx0XHRkaXNwbGF5Om5vbmU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQuamV0LWZvcm0tYnVpbGRlci1odG1sLXBhcnNlci1wcmV2aWV3IGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXHJcblx0XHRcdFx0XHQuamV0LWZvcm0tYnVpbGRlci1odG1sLXBhcnNlci1wcmV2aWV3IGJ1dHRvbiB7XHJcblx0XHRcdFx0XHRcdGRpc3BsYXk6YmxvY2s7XHJcblx0XHRcdFx0XHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogIzAwNzFhMTtcclxuXHRcdFx0XHRcdFx0Y29sb3I6ICNmZmY7XHJcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwcHggMjBweDtcclxuXHRcdFx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdDwvc3R5bGU+XHJcblx0XHRcdFx0JHtpbm5lckhUTUx9XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0XHRgO1xyXG5cclxuXHRcdFx0c2V0Rm9ybUhUTUwoIHN0eWxlZEhUTUwgKTtcclxuXHRcdH0gY2F0Y2ggKCBlcnIgKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoIGVyciApO1xyXG5cdFx0XHRzZXRFcnJvcihcclxuXHRcdFx0XHRlcnI/Lm1lc3NhZ2UgfHxcclxuXHRcdFx0XHRfXyggJ0ZhaWxlZCB0byBwYXJzZSBIVE1MLicsICdqZXQtZm9ybS1idWlsZGVyJyApXHJcblx0XHRcdCk7XHJcblx0XHR9IGZpbmFsbHkge1xyXG5cdFx0XHRzZXRQYXJzaW5nKCBmYWxzZSApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdHJldHVybiAoXHJcblx0XHQ8TW9kYWxcclxuXHRcdFx0c3R5bGU9eyB7IHdpZHRoOiAnNjB2dycgfSB9XHJcblx0XHRcdG9uUmVxdWVzdENsb3NlPXsgKCkgPT4gc2V0U2hvd01vZGFsKCBmYWxzZSApIH1cclxuXHRcdFx0dGl0bGU9eyBfXyggJ0ltcG9ydCBIVE1MIEZvcm0nLCAnamV0LWZvcm0tYnVpbGRlcicgKSB9XHJcblx0XHRcdGNsYXNzTmFtZT1cImpmYi1odG1sLXBhcnNlci1tb2RhbFwiXHJcblx0XHQ+XHJcblx0XHRcdHsgZXJyb3IgJiYgKFxyXG5cdFx0XHRcdDxOb3RpY2VcclxuXHRcdFx0XHRcdHN0YXR1cz1cImVycm9yXCJcclxuXHRcdFx0XHRcdGlzRGlzbWlzc2libGVcclxuXHRcdFx0XHRcdG9uUmVtb3ZlPXsgKCkgPT4gc2V0RXJyb3IoICcnICkgfVxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdHsgZXJyb3IgfVxyXG5cdFx0XHRcdDwvTm90aWNlPlxyXG5cdFx0XHQpIH1cclxuXHJcblx0XHRcdHsgQm9vbGVhbiggZm9ybUhUTUwubGVuZ3RoICkgPyAoXHJcblx0XHRcdFx0PD5cclxuXHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9eyB7IF9faHRtbDogZm9ybUhUTUwgfSB9XHJcblx0XHRcdFx0XHRcdHN0eWxlPXsge1xyXG5cdFx0XHRcdFx0XHRcdHBhZGRpbmc6ICcyZW0gMWVtJyxcclxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6ICcjZjZmN2Y3JyxcclxuXHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206ICcxZW0nLFxyXG5cdFx0XHRcdFx0XHR9IH1cclxuXHRcdFx0XHRcdC8+XHJcblxyXG5cdFx0XHRcdFx0PEh0bWxQYXJzZXJGb290ZXJcclxuXHRcdFx0XHRcdFx0Y2xlYXJIVE1MPXsgKCkgPT4gc2V0Rm9ybUhUTUwoICcnICkgfVxyXG5cdFx0XHRcdFx0XHRmb3JtSFRNTD17IGZvcm1IVE1MIH1cclxuXHRcdFx0XHRcdFx0cmF3SFRNTD17IGh0bWwgfVxyXG5cdFx0XHRcdFx0XHRzZXRTaG93TW9kYWw9eyBzZXRTaG93TW9kYWwgfVxyXG5cdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHQ8Lz5cclxuXHRcdFx0KSA6IChcclxuXHRcdFx0XHQ8PlxyXG5cdFx0XHRcdFx0PFRleHRhcmVhQ29udHJvbFxyXG5cdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnUGFzdGUgeW91ciBIVE1MIGhlcmUnLCAnamV0LWZvcm0tYnVpbGRlcicgKSB9XHJcblx0XHRcdFx0XHRcdHZhbHVlPXsgaHRtbCB9XHJcblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgc2V0SHRtbCB9XHJcblx0XHRcdFx0XHRcdHJvd3M9eyA3IH1cclxuXHRcdFx0XHRcdC8+XHJcblxyXG5cdFx0XHRcdFx0PHVsIHN0eWxlPXsge1xyXG5cdFx0XHRcdFx0XHRsaXN0U3R5bGU6ICdkaXNjJyxcclxuXHRcdFx0XHRcdFx0cGFkZGluZ0lubGluZVN0YXJ0OiAnMWVtJyxcclxuXHRcdFx0XHRcdH0gfT5cclxuXHRcdFx0XHRcdFx0PGxpPnsgX18oXHJcblx0XHRcdFx0XHRcdFx0J1lvdSBjYW4gdXNlIGFueSBIVE1MIGNvZGUgdGhhdCBjb250YWlucyBmb3JtIGVsZW1lbnRzLCBidXQgb25seSBoZWFkaW5ncywgZm9ybSBjb250cm9scywgYW5kIGJ1dHRvbnMgd2lsbCBiZSBwYXJzZWQuJyxcclxuXHRcdFx0XHRcdFx0XHQnamV0LWZvcm0tYnVpbGRlcicsXHJcblx0XHRcdFx0XHRcdCkgfTwvbGk+XHJcblx0XHRcdFx0XHRcdDxsaT57IF9fKFxyXG5cdFx0XHRcdFx0XHRcdGBBbGwgdGhlIGNvZGUgeW91IHBhc3RlIGhlcmUgd2lsbCBiZSBwYXJzZWQgaW50byBhIHNpbmdsZSBGb3JtLCBldmVuIGlmIGl0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgPGZvcm0+IHRhZy5gLFxyXG5cdFx0XHRcdFx0XHRcdCdqZXQtZm9ybS1idWlsZGVyJyxcclxuXHRcdFx0XHRcdFx0KSB9PC9saT5cclxuXHRcdFx0XHRcdFx0PGxpPnsgX18oXHJcblx0XHRcdFx0XHRcdFx0YFRoZSBwYXJzZXIgY2FuIG9ubHkgdW5kZXJzdGFuZCBmb3JtIGVsZW1lbnRzIGFuZCBzdHJ1Y3R1cmU7IGl0IGNhbid0IHBhcnNlIHN0eWxpbmcgb3IgYmVoYXZpb3IuYCxcclxuXHRcdFx0XHRcdFx0XHQnamV0LWZvcm0tYnVpbGRlcicsXHJcblx0XHRcdFx0XHRcdCkgfTwvbGk+XHJcblx0XHRcdFx0XHQ8L3VsPlxyXG5cclxuXHRcdFx0XHRcdDxGbGV4IGp1c3RpZnk9XCJmbGV4LWVuZFwiIHN0eWxlPXsgeyBtYXJnaW5Ub3A6ICcxZW0nIH0gfT5cclxuXHRcdFx0XHRcdFx0PEJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdGlzUHJpbWFyeVxyXG5cdFx0XHRcdFx0XHRcdGlzQnVzeT17IGlzUGFyc2luZyB9XHJcblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9eyBpc1BhcnNpbmcgfHwgIWh0bWwudHJpbSgpLmxlbmd0aCB9XHJcblx0XHRcdFx0XHRcdFx0b25DbGljaz17IGhhbmRsZVN1Ym1pdCB9XHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHR7IGlzUGFyc2luZ1xyXG5cdFx0XHRcdFx0XHRcdFx0PyBfXyggJ1BhcnNpbmcuLi4nLCAnamV0LWZvcm0tYnVpbGRlcicgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBfXyggJ1BhcnNlIEhUTUwnLCAnamV0LWZvcm0tYnVpbGRlcicgKSB9XHJcblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxyXG5cdFx0XHRcdFx0PC9GbGV4PlxyXG5cdFx0XHRcdDwvPlxyXG5cdFx0XHQpIH1cclxuXHRcdDwvTW9kYWw+XHJcblx0KTtcclxufVxyXG4iLCJmdW5jdGlvbiBjb252ZXJ0VG9Db21tZW50QmxvY2soIHsgbmFtZSwgYXR0cmlidXRlcyB9ICkge1xyXG5cdGNvbnN0IGJsb2NrQXR0cnMgPSBKU09OLnN0cmluZ2lmeSggYXR0cmlidXRlcyApO1xyXG5cclxuXHRyZXR1cm4gYDwhLS0gd3A6JHsgbmFtZSB9ICR7IGJsb2NrQXR0cnMgfSAvLS0+YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBibG9ja3Mge09iamVjdFtdfVxyXG4gKi9cclxuZnVuY3Rpb24gc2VyaWFsaXplKCBibG9ja3MgKSB7XHJcblx0cmV0dXJuIGJsb2Nrcy5tYXAoIGNvbnZlcnRUb0NvbW1lbnRCbG9jayApLmpvaW4oICdcXG5cXG4nICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNlcmlhbGl6ZTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvd1tcIndwXCJdW1wiYXBpRmV0Y2hcIl07IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3dbXCJ3cFwiXVtcImNvbXBvbmVudHNcIl07IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3dbXCJ3cFwiXVtcImRvbVJlYWR5XCJdOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wid3BcIl1bXCJlbGVtZW50XCJdOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wid3BcIl1bXCJpMThuXCJdOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wiUmVhY3RcIl07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IGNyZWF0ZVJvb3QgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xyXG5pbXBvcnQgZG9tUmVhZHkgZnJvbSAnQHdvcmRwcmVzcy9kb20tcmVhZHknO1xyXG5pbXBvcnQgSHRtbFBhcnNlckJ1dHRvbiBmcm9tICcuL0h0bWxQYXJzZXJCdXR0b24nO1xyXG5cclxuZG9tUmVhZHkoICgpID0+IHtcclxuXHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLnBhZ2UtdGl0bGUtYWN0aW9uW2hyZWYqPVwicG9zdC1uZXcucGhwXCJdJyApO1xyXG5cclxuXHRpZiAoICEgdGFyZ2V0ICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtZmxleCc7XHJcblx0Y29udGFpbmVyLnN0eWxlLm1hcmdpbkxlZnQgPSAnNHB4JztcclxuXHJcblx0dGFyZ2V0LmFmdGVyKCBjb250YWluZXIgKTtcclxuXHRjcmVhdGVSb290KCBjb250YWluZXIgKS5yZW5kZXIoXHJcblx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoIEh0bWxQYXJzZXJCdXR0b24gKVxyXG5cdCk7XHJcbn0gKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/modules/html-parser/assets/build/parser.asset.php b/modules/html-parser/assets/build/parser.asset.php index cbf9e16e9..4bc943eee 100644 --- a/modules/html-parser/assets/build/parser.asset.php +++ b/modules/html-parser/assets/build/parser.asset.php @@ -1 +1 @@ - array(), 'version' => '068ab8b170c6d65bc80c'); + array(), 'version' => '1d759531dc317626894a'); diff --git a/modules/html-parser/assets/build/parser.js b/modules/html-parser/assets/build/parser.js index 15e13287b..8b5ad58a9 100644 --- a/modules/html-parser/assets/build/parser.js +++ b/modules/html-parser/assets/build/parser.js @@ -1,2 +1,11782 @@ -/*! For license information please see parser.js.LICENSE.txt */ -(()=>{var e={12:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((function(e){return e.charCodeAt(0)})))},259:(e,t,r)=>{"use strict";let n=r(4318),i=r(6973);class s extends Error{constructor(e,t,r,n,i,o){super(e),this.name="CssSyntaxError",this.reason=e,i&&(this.file=i),n&&(this.source=n),o&&(this.plugin=o),void 0!==t&&void 0!==r&&("number"==typeof t?(this.line=t,this.column=r):(this.line=t.line,this.column=t.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,s)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",void 0!==this.line&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(e){if(!this.source)return"";let t=this.source;null==e&&(e=n.isColorSupported);let r=e=>e,s=e=>e,o=e=>e;if(e){let{bold:e,gray:t,red:a}=n.createColors(!0);s=t=>e(a(t)),r=e=>t(e),i&&(o=e=>i(e))}let a=t.split(/\r?\n/),l=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),u=String(c).length;return a.slice(l,c).map(((e,t)=>{let n=l+1+t,i=" "+(" "+n).slice(-u)+" | ";if(n===this.line){if(e.length>160){let t=20,n=Math.max(0,this.column-t),a=Math.max(this.column+t,this.endColumn+t),l=e.slice(n,a),c=r(i.replace(/\d/g," "))+e.slice(0,Math.min(this.column-1,t-1)).replace(/[^\t]/g," ");return s(">")+r(i)+o(l)+"\n "+c+s("^")}let t=r(i.replace(/\d/g," "))+e.slice(0,this.column-1).replace(/[^\t]/g," ");return s(">")+r(i)+o(e)+"\n "+t+s("^")}return" "+r(i)+o(e)})).join("\n")}toString(){let e=this.showSourceCode();return e&&(e="\n\n"+e+"\n"),this.name+": "+this.message+e}}e.exports=s,s.default=s},349:(e,t)=>{"use strict";function r(e){for(var t=1;t{"use strict";let n=r(1173);class i{get content(){return this.css}constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new n(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter((e=>"warning"===e.type))}}e.exports=i,i.default=i},874:()=>{},887:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.replaceCodePoint=t.fromCodePoint=void 0;var n=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(e){var t;return e>=55296&&e<=57343||e>1114111?65533:null!==(t=n.get(e))&&void 0!==t?t:e}t.fromCodePoint=null!==(r=String.fromCodePoint)&&void 0!==r?r:function(e){var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+String.fromCharCode(e)},t.replaceCodePoint=i,t.default=function(e){return(0,t.fromCodePoint)(i(e))}},1047:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r");case a.Comment:return"\x3c!--".concat(e.data,"--\x3e");case a.CDATA:return function(e){return"")}(e);case a.Script:case a.Style:case a.Tag:return function(e,t){var r;"foreign"===t.xmlMode&&(e.name=null!==(r=c.elementNames.get(e.name))&&void 0!==r?r:e.name,e.parent&&m.has(e.parent.name)&&(t=n(n({},t),{xmlMode:!1}))),!t.xmlMode&&g.has(e.name)&&(t=n(n({},t),{xmlMode:"foreign"}));var i="<".concat(e.name),s=function(e,t){var r;if(e){var n=!1===(null!==(r=t.encodeEntities)&&void 0!==r?r:t.decodeEntities)?h:t.xmlMode||"utf8"!==t.encodeEntities?l.encodeXML:l.escapeAttribute;return Object.keys(e).map((function(r){var i,s,o=null!==(i=e[r])&&void 0!==i?i:"";return"foreign"===t.xmlMode&&(r=null!==(s=c.attributeNames.get(r))&&void 0!==s?s:r),t.emptyAttrs||t.xmlMode||""!==o?"".concat(r,'="').concat(n(o),'"'):r})).join(" ")}}(e.attribs,t);return s&&(i+=" ".concat(s)),0===e.children.length&&(t.xmlMode?!1!==t.selfClosingTags:t.selfClosingTags&&d.has(e.name))?(t.xmlMode||(i+=" "),i+="/>"):(i+=">",e.children.length>0&&(i+=p(e.children,t)),!t.xmlMode&&d.has(e.name)||(i+=""))),i}(e,t);case a.Text:return function(e,t){var r,n=e.data||"";return!1===(null!==(r=t.encodeEntities)&&void 0!==r?r:t.decodeEntities)||!t.xmlMode&&e.parent&&u.has(e.parent.name)||(n=t.xmlMode||"utf8"!==t.encodeEntities?(0,l.encodeXML)(n):(0,l.escapeText)(n)),n}(e,t)}}t.render=p,t.default=p;var m=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),g=new Set(["svg","math"])},1173:e=>{"use strict";class t{constructor(e,t={}){if(this.type="warning",this.text=e,t.node&&t.node.source){let e=t.node.rangeBy(t);this.line=e.start.line,this.column=e.start.column,this.endLine=e.end.line,this.endColumn=e.end.column}for(let e in t)this[e]=t[e]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}}e.exports=t,t.default=t},1176:(e,t,r)=>{"use strict";let n=r(5621);class i extends n{constructor(e){super(e),this.type="comment"}}e.exports=i,i.default=i},1210:(e,t,r)=>{"use strict";let n=r(6099),i=r(3922);const s=r(780);let o=r(9068);r(3471);class a{get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,t=i;try{e=t(this._css,this._opts)}catch(e){this.error=e}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return"NoWorkResult"}constructor(e,t,r){let i;t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=r,this._map=void 0;let a=o;this.result=new s(this._processor,i,this._opts),this.result.css=t;let l=this;Object.defineProperty(this.result,"root",{get:()=>l.root});let c=new n(a,i,this._opts,t);if(c.isMap()){let[e,t]=c.generate();e&&(this.result.css=e),t&&(this.result.map=t)}else c.clearAnnotation(),this.result.css=c.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,t){return this.async().then(e,t)}toString(){return this._css}warnings(){return[]}}e.exports=a,a.default=a},1281:(e,t,r)=>{"use strict";let n=r(5621);class i extends n{get variable(){return this.prop.startsWith("--")||"$"===this.prop[0]}constructor(e){e&&void 0!==e.value&&"string"!=typeof e.value&&(e={...e,value:String(e.value)}),super(e),this.type="decl"}}e.exports=i,i.default=i},1866:()=>{},2133:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.hasChildren=t.isDocument=t.isComment=t.isText=t.isCDATA=t.isTag=void 0,i(r(3380),t),i(r(7427),t),i(r(2472),t),i(r(6841),t),i(r(5622),t),i(r(3632),t),i(r(9332),t);var s=r(4576);Object.defineProperty(t,"isTag",{enumerable:!0,get:function(){return s.isTag}}),Object.defineProperty(t,"isCDATA",{enumerable:!0,get:function(){return s.isCDATA}}),Object.defineProperty(t,"isText",{enumerable:!0,get:function(){return s.isText}}),Object.defineProperty(t,"isComment",{enumerable:!0,get:function(){return s.isComment}}),Object.defineProperty(t,"isDocument",{enumerable:!0,get:function(){return s.isDocument}}),Object.defineProperty(t,"hasChildren",{enumerable:!0,get:function(){return s.hasChildren}})},2312:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.escapeText=t.escapeAttribute=t.escapeUTF8=t.escape=t.encodeXML=t.getCodePoint=t.xmlReplacer=void 0,t.xmlReplacer=/["&'<>$\x80-\uFFFF]/g;var r=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);function n(e){for(var n,i="",s=0;null!==(n=t.xmlReplacer.exec(e));){var o=n.index,a=e.charCodeAt(o),l=r.get(a);void 0!==l?(i+=e.substring(s,o)+l,s=o+1):(i+="".concat(e.substring(s,o),"&#x").concat((0,t.getCodePoint)(e,o).toString(16),";"),s=t.xmlReplacer.lastIndex+=Number(55296==(64512&a)))}return i+e.substr(s)}function i(e,t){return function(r){for(var n,i=0,s="";n=e.exec(r);)i!==n.index&&(s+=r.substring(i,n.index)),s+=t.get(n[0].charCodeAt(0)),i=n.index+1;return s+r.substring(i)}}t.getCodePoint=null!=String.prototype.codePointAt?function(e,t){return e.codePointAt(t)}:function(e,t){return 55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t)},t.encodeXML=n,t.escape=n,t.escapeUTF8=i(/[&<>'"]/g,r),t.escapeAttribute=i(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),t.escapeText=i(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))},2472:(e,t)=>{"use strict";function r(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){var t=e.parent.children,r=t.lastIndexOf(e);r>=0&&t.splice(r,1)}e.next=null,e.prev=null,e.parent=null}Object.defineProperty(t,"__esModule",{value:!0}),t.removeElement=r,t.replaceElement=function(e,t){var r=t.prev=e.prev;r&&(r.next=t);var n=t.next=e.next;n&&(n.prev=t);var i=t.parent=e.parent;if(i){var s=i.children;s[s.lastIndexOf(e)]=t,e.parent=null}},t.appendChild=function(e,t){if(r(t),t.next=null,t.parent=e,e.children.push(t)>1){var n=e.children[e.children.length-2];n.next=t,t.prev=n}else t.prev=null},t.append=function(e,t){r(t);var n=e.parent,i=e.next;if(t.next=i,t.prev=e,e.next=t,t.parent=n,i){if(i.prev=t,n){var s=n.children;s.splice(s.lastIndexOf(i),0,t)}}else n&&n.children.push(t)},t.prependChild=function(e,t){if(r(t),t.parent=e,t.prev=null,1!==e.children.unshift(t)){var n=e.children[1];n.prev=t,t.next=n}else t.next=null},t.prepend=function(e,t){r(t);var n=e.parent;if(n){var i=n.children;i.splice(i.indexOf(e),0,t)}e.prev&&(e.prev.next=t),t.parent=n,t.prev=e.prev,t.next=e,e.prev=t}},2648:(e,t,r)=>{"use strict";let n,i,s=r(9062);class o extends s{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new n(new i,this,e).stringify()}}o.registerLazyResult=e=>{n=e},o.registerProcessor=e=>{i=e},e.exports=o,o.default=o},2803:e=>{"use strict";const t={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};class r{constructor(e){this.builder=e}atrule(e,t){let r="@"+e.name,n=e.params?this.rawValue(e,"params"):"";if(void 0!==e.raws.afterName?r+=e.raws.afterName:n&&(r+=" "),e.nodes)this.block(e,r+n);else{let i=(e.raws.between||"")+(t?";":"");this.builder(r+n+i,e)}}beforeAfter(e,t){let r;r="decl"===e.type?this.raw(e,null,"beforeDecl"):"comment"===e.type?this.raw(e,null,"beforeComment"):"before"===t?this.raw(e,null,"beforeRule"):this.raw(e,null,"beforeClose");let n=e.parent,i=0;for(;n&&"root"!==n.type;)i+=1,n=n.parent;if(r.includes("\n")){let t=this.raw(e,null,"indent");if(t.length)for(let e=0;e0&&"comment"===e.nodes[t].type;)t-=1;let r=this.raw(e,"semicolon");for(let n=0;n{if(i=e.raws[r],void 0!==i)return!1}))}var a;return void 0===i&&(i=t[n]),o.rawCache[n]=i,i}rawBeforeClose(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length>0&&void 0!==e.raws.after)return t=e.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawBeforeComment(e,t){let r;return e.walkComments((e=>{if(void 0!==e.raws.before)return r=e.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1})),void 0===r?r=this.raw(t,null,"beforeDecl"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeDecl(e,t){let r;return e.walkDecls((e=>{if(void 0!==e.raws.before)return r=e.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1})),void 0===r?r=this.raw(t,null,"beforeRule"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeOpen(e){let t;return e.walk((e=>{if("decl"!==e.type&&(t=e.raws.between,void 0!==t))return!1})),t}rawBeforeRule(e){let t;return e.walk((r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&void 0!==r.raws.before)return t=r.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawColon(e){let t;return e.walkDecls((e=>{if(void 0!==e.raws.between)return t=e.raws.between.replace(/[^\s:]/g,""),!1})),t}rawEmptyBody(e){let t;return e.walk((e=>{if(e.nodes&&0===e.nodes.length&&(t=e.raws.after,void 0!==t))return!1})),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk((r=>{let n=r.parent;if(n&&n!==e&&n.parent&&n.parent===e&&void 0!==r.raws.before){let e=r.raws.before.split("\n");return t=e[e.length-1],t=t.replace(/\S/g,""),!1}})),t}rawSemicolon(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length&&"decl"===e.last.type&&(t=e.raws.semicolon,void 0!==t))return!1})),t}rawValue(e,t){let r=e[t],n=e.raws[t];return n&&n.value===r?n.raw:r}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}rule(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")}stringify(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)}}e.exports=r,r.default=r},2957:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=void 0;var o=s(r(6181)),a=r(6861),l=new Set(["input","option","optgroup","select","button","datalist","textarea"]),c=new Set(["p"]),u=new Set(["thead","tbody"]),h=new Set(["dd","dt"]),d=new Set(["rt","rp"]),p=new Map([["tr",new Set(["tr","th","td"])],["th",new Set(["th"])],["td",new Set(["thead","th","td"])],["body",new Set(["head","link","script"])],["li",new Set(["li"])],["p",c],["h1",c],["h2",c],["h3",c],["h4",c],["h5",c],["h6",c],["select",l],["input",l],["output",l],["button",l],["datalist",l],["textarea",l],["option",new Set(["option"])],["optgroup",new Set(["optgroup","option"])],["dd",h],["dt",h],["address",c],["article",c],["aside",c],["blockquote",c],["details",c],["div",c],["dl",c],["fieldset",c],["figcaption",c],["figure",c],["footer",c],["form",c],["header",c],["hr",c],["main",c],["nav",c],["ol",c],["pre",c],["section",c],["table",c],["ul",c],["rt",d],["rp",d],["tbody",u],["tfoot",u]]),f=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]),m=new Set(["math","svg"]),g=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignobject","desc","title"]),b=/\s|\//,y=function(){function e(e,t){var r,n,i,s,a;void 0===t&&(t={}),this.options=t,this.startIndex=0,this.endIndex=0,this.openTagStart=0,this.tagname="",this.attribname="",this.attribvalue="",this.attribs=null,this.stack=[],this.foreignContext=[],this.buffers=[],this.bufferOffset=0,this.writeIndex=0,this.ended=!1,this.cbs=null!=e?e:{},this.lowerCaseTagNames=null!==(r=t.lowerCaseTags)&&void 0!==r?r:!t.xmlMode,this.lowerCaseAttributeNames=null!==(n=t.lowerCaseAttributeNames)&&void 0!==n?n:!t.xmlMode,this.tokenizer=new(null!==(i=t.Tokenizer)&&void 0!==i?i:o.default)(this.options,this),null===(a=(s=this.cbs).onparserinit)||void 0===a||a.call(s,this)}return e.prototype.ontext=function(e,t){var r,n,i=this.getSlice(e,t);this.endIndex=t-1,null===(n=(r=this.cbs).ontext)||void 0===n||n.call(r,i),this.startIndex=t},e.prototype.ontextentity=function(e){var t,r,n=this.tokenizer.getSectionStart();this.endIndex=n-1,null===(r=(t=this.cbs).ontext)||void 0===r||r.call(t,(0,a.fromCodePoint)(e)),this.startIndex=n},e.prototype.isVoidElement=function(e){return!this.options.xmlMode&&f.has(e)},e.prototype.onopentagname=function(e,t){this.endIndex=t;var r=this.getSlice(e,t);this.lowerCaseTagNames&&(r=r.toLowerCase()),this.emitOpenTag(r)},e.prototype.emitOpenTag=function(e){var t,r,n,i;this.openTagStart=this.startIndex,this.tagname=e;var s=!this.options.xmlMode&&p.get(e);if(s)for(;this.stack.length>0&&s.has(this.stack[this.stack.length-1]);){var o=this.stack.pop();null===(r=(t=this.cbs).onclosetag)||void 0===r||r.call(t,o,!0)}this.isVoidElement(e)||(this.stack.push(e),m.has(e)?this.foreignContext.push(!0):g.has(e)&&this.foreignContext.push(!1)),null===(i=(n=this.cbs).onopentagname)||void 0===i||i.call(n,e),this.cbs.onopentag&&(this.attribs={})},e.prototype.endOpenTag=function(e){var t,r;this.startIndex=this.openTagStart,this.attribs&&(null===(r=(t=this.cbs).onopentag)||void 0===r||r.call(t,this.tagname,this.attribs,e),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""},e.prototype.onopentagend=function(e){this.endIndex=e,this.endOpenTag(!1),this.startIndex=e+1},e.prototype.onclosetag=function(e,t){var r,n,i,s,o,a;this.endIndex=t;var l=this.getSlice(e,t);if(this.lowerCaseTagNames&&(l=l.toLowerCase()),(m.has(l)||g.has(l))&&this.foreignContext.pop(),this.isVoidElement(l))this.options.xmlMode||"br"!==l||(null===(n=(r=this.cbs).onopentagname)||void 0===n||n.call(r,"br"),null===(s=(i=this.cbs).onopentag)||void 0===s||s.call(i,"br",{},!0),null===(a=(o=this.cbs).onclosetag)||void 0===a||a.call(o,"br",!1));else{var c=this.stack.lastIndexOf(l);if(-1!==c)if(this.cbs.onclosetag)for(var u=this.stack.length-c;u--;)this.cbs.onclosetag(this.stack.pop(),0!==u);else this.stack.length=c;else this.options.xmlMode||"p"!==l||(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=t+1},e.prototype.onselfclosingtag=function(e){this.endIndex=e,this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1]?(this.closeCurrentTag(!1),this.startIndex=e+1):this.onopentagend(e)},e.prototype.closeCurrentTag=function(e){var t,r,n=this.tagname;this.endOpenTag(e),this.stack[this.stack.length-1]===n&&(null===(r=(t=this.cbs).onclosetag)||void 0===r||r.call(t,n,!e),this.stack.pop())},e.prototype.onattribname=function(e,t){this.startIndex=e;var r=this.getSlice(e,t);this.attribname=this.lowerCaseAttributeNames?r.toLowerCase():r},e.prototype.onattribdata=function(e,t){this.attribvalue+=this.getSlice(e,t)},e.prototype.onattribentity=function(e){this.attribvalue+=(0,a.fromCodePoint)(e)},e.prototype.onattribend=function(e,t){var r,n;this.endIndex=t,null===(n=(r=this.cbs).onattribute)||void 0===n||n.call(r,this.attribname,this.attribvalue,e===o.QuoteType.Double?'"':e===o.QuoteType.Single?"'":e===o.QuoteType.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""},e.prototype.getInstructionName=function(e){var t=e.search(b),r=t<0?e:e.substr(0,t);return this.lowerCaseTagNames&&(r=r.toLowerCase()),r},e.prototype.ondeclaration=function(e,t){this.endIndex=t;var r=this.getSlice(e,t);if(this.cbs.onprocessinginstruction){var n=this.getInstructionName(r);this.cbs.onprocessinginstruction("!".concat(n),"!".concat(r))}this.startIndex=t+1},e.prototype.onprocessinginstruction=function(e,t){this.endIndex=t;var r=this.getSlice(e,t);if(this.cbs.onprocessinginstruction){var n=this.getInstructionName(r);this.cbs.onprocessinginstruction("?".concat(n),"?".concat(r))}this.startIndex=t+1},e.prototype.oncomment=function(e,t,r){var n,i,s,o;this.endIndex=t,null===(i=(n=this.cbs).oncomment)||void 0===i||i.call(n,this.getSlice(e,t-r)),null===(o=(s=this.cbs).oncommentend)||void 0===o||o.call(s),this.startIndex=t+1},e.prototype.oncdata=function(e,t,r){var n,i,s,o,a,l,c,u,h,d;this.endIndex=t;var p=this.getSlice(e,t-r);this.options.xmlMode||this.options.recognizeCDATA?(null===(i=(n=this.cbs).oncdatastart)||void 0===i||i.call(n),null===(o=(s=this.cbs).ontext)||void 0===o||o.call(s,p),null===(l=(a=this.cbs).oncdataend)||void 0===l||l.call(a)):(null===(u=(c=this.cbs).oncomment)||void 0===u||u.call(c,"[CDATA[".concat(p,"]]")),null===(d=(h=this.cbs).oncommentend)||void 0===d||d.call(h)),this.startIndex=t+1},e.prototype.onend=function(){var e,t;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(var r=this.stack.length;r>0;this.cbs.onclosetag(this.stack[--r],!0));}null===(t=(e=this.cbs).onend)||void 0===t||t.call(e)},e.prototype.reset=function(){var e,t,r,n;null===(t=(e=this.cbs).onreset)||void 0===t||t.call(e),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,null===(n=(r=this.cbs).onparserinit)||void 0===n||n.call(r,this),this.buffers.length=0,this.bufferOffset=0,this.writeIndex=0,this.ended=!1},e.prototype.parseComplete=function(e){this.reset(),this.end(e)},e.prototype.getSlice=function(e,t){for(;e-this.bufferOffset>=this.buffers[0].length;)this.shiftBuffer();for(var r=this.buffers[0].slice(e-this.bufferOffset,t-this.bufferOffset);t-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),r+=this.buffers[0].slice(0,t-this.bufferOffset);return r},e.prototype.shiftBuffer=function(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()},e.prototype.write=function(e){var t,r;this.ended?null===(r=(t=this.cbs).onerror)||void 0===r||r.call(t,new Error(".write() after done!")):(this.buffers.push(e),this.tokenizer.running&&(this.tokenizer.write(e),this.writeIndex++))},e.prototype.end=function(e){var t,r;this.ended?null===(r=(t=this.cbs).onerror)||void 0===r||r.call(t,new Error(".end() after done!")):(e&&this.write(e),this.ended=!0,this.tokenizer.end())},e.prototype.pause=function(){this.tokenizer.pause()},e.prototype.resume=function(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXMLStrict=t.decodeHTML5Strict=t.decodeHTML4Strict=t.decodeHTML5=t.decodeHTML4=t.decodeHTMLAttribute=t.decodeHTMLStrict=t.decodeHTML=t.decodeXML=t.DecodingMode=t.EntityDecoder=t.encodeHTML5=t.encodeHTML4=t.encodeNonAsciiHTML=t.encodeHTML=t.escapeText=t.escapeAttribute=t.escapeUTF8=t.escape=t.encodeXML=t.encode=t.decodeStrict=t.decode=t.EncodingMode=t.EntityLevel=void 0;var n,i,s=r(6861),o=r(9061),a=r(2312);function l(e,t){if(void 0===t&&(t=n.XML),("number"==typeof t?t:t.level)===n.HTML){var r="object"==typeof t?t.mode:void 0;return(0,s.decodeHTML)(e,r)}return(0,s.decodeXML)(e)}!function(e){e[e.XML=0]="XML",e[e.HTML=1]="HTML"}(n=t.EntityLevel||(t.EntityLevel={})),function(e){e[e.UTF8=0]="UTF8",e[e.ASCII=1]="ASCII",e[e.Extensive=2]="Extensive",e[e.Attribute=3]="Attribute",e[e.Text=4]="Text"}(i=t.EncodingMode||(t.EncodingMode={})),t.decode=l,t.decodeStrict=function(e,t){var r;void 0===t&&(t=n.XML);var i="number"==typeof t?{level:t}:t;return null!==(r=i.mode)&&void 0!==r||(i.mode=s.DecodingMode.Strict),l(e,i)},t.encode=function(e,t){void 0===t&&(t=n.XML);var r="number"==typeof t?{level:t}:t;return r.mode===i.UTF8?(0,a.escapeUTF8)(e):r.mode===i.Attribute?(0,a.escapeAttribute)(e):r.mode===i.Text?(0,a.escapeText)(e):r.level===n.HTML?r.mode===i.ASCII?(0,o.encodeNonAsciiHTML)(e):(0,o.encodeHTML)(e):(0,a.encodeXML)(e)};var c=r(2312);Object.defineProperty(t,"encodeXML",{enumerable:!0,get:function(){return c.encodeXML}}),Object.defineProperty(t,"escape",{enumerable:!0,get:function(){return c.escape}}),Object.defineProperty(t,"escapeUTF8",{enumerable:!0,get:function(){return c.escapeUTF8}}),Object.defineProperty(t,"escapeAttribute",{enumerable:!0,get:function(){return c.escapeAttribute}}),Object.defineProperty(t,"escapeText",{enumerable:!0,get:function(){return c.escapeText}});var u=r(9061);Object.defineProperty(t,"encodeHTML",{enumerable:!0,get:function(){return u.encodeHTML}}),Object.defineProperty(t,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return u.encodeNonAsciiHTML}}),Object.defineProperty(t,"encodeHTML4",{enumerable:!0,get:function(){return u.encodeHTML}}),Object.defineProperty(t,"encodeHTML5",{enumerable:!0,get:function(){return u.encodeHTML}});var h=r(6861);Object.defineProperty(t,"EntityDecoder",{enumerable:!0,get:function(){return h.EntityDecoder}}),Object.defineProperty(t,"DecodingMode",{enumerable:!0,get:function(){return h.DecodingMode}}),Object.defineProperty(t,"decodeXML",{enumerable:!0,get:function(){return h.decodeXML}}),Object.defineProperty(t,"decodeHTML",{enumerable:!0,get:function(){return h.decodeHTML}}),Object.defineProperty(t,"decodeHTMLStrict",{enumerable:!0,get:function(){return h.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTMLAttribute",{enumerable:!0,get:function(){return h.decodeHTMLAttribute}}),Object.defineProperty(t,"decodeHTML4",{enumerable:!0,get:function(){return h.decodeHTML}}),Object.defineProperty(t,"decodeHTML5",{enumerable:!0,get:function(){return h.decodeHTML}}),Object.defineProperty(t,"decodeHTML4Strict",{enumerable:!0,get:function(){return h.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML5Strict",{enumerable:!0,get:function(){return h.decodeHTMLStrict}}),Object.defineProperty(t,"decodeXMLStrict",{enumerable:!0,get:function(){return h.decodeXML}})},3149:(e,t,r)=>{"use strict";let n=r(2648),i=r(4333),s=r(1210),o=r(9901);class a{constructor(e=[]){this.version="8.5.3",this.plugins=this.normalize(e)}normalize(e){let t=[];for(let r of e)if(!0===r.postcss?r=r():r.postcss&&(r=r.postcss),"object"==typeof r&&Array.isArray(r.plugins))t=t.concat(r.plugins);else if("object"==typeof r&&r.postcssPlugin)t.push(r);else if("function"==typeof r)t.push(r);else if("object"!=typeof r||!r.parse&&!r.stringify)throw new Error(r+" is not a PostCSS plugin");return t}process(e,t={}){return this.plugins.length||t.parser||t.stringifier||t.syntax?new i(this,e,t):new s(this,e,t)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}}e.exports=a,a.default=a,o.registerProcessor(a),n.registerProcessor(a)},3380:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getOuterHTML=a,t.getInnerHTML=function(e,t){return(0,i.hasChildren)(e)?e.children.map((function(e){return a(e,t)})).join(""):""},t.getText=function e(t){return Array.isArray(t)?t.map(e).join(""):(0,i.isTag)(t)?"br"===t.name?"\n":e(t.children):(0,i.isCDATA)(t)?e(t.children):(0,i.isText)(t)?t.data:""},t.textContent=function e(t){return Array.isArray(t)?t.map(e).join(""):(0,i.hasChildren)(t)&&!(0,i.isComment)(t)?e(t.children):(0,i.isText)(t)?t.data:""},t.innerText=function e(t){return Array.isArray(t)?t.map(e).join(""):(0,i.hasChildren)(t)&&(t.type===o.ElementType.Tag||(0,i.isCDATA)(t))?e(t.children):(0,i.isText)(t)?t.data:""};var i=r(4576),s=n(r(1047)),o=r(8788);function a(e,t){return(0,s.default)(e,t)}},3407:e=>{"use strict";e.exports=e=>{if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}},3471:e=>{"use strict";let t={};e.exports=function(e){t[e]||(t[e]=!0,"undefined"!=typeof console&&console.warn&&console.warn(e))}},3632:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DocumentPosition=void 0,t.removeSubsets=function(e){for(var t=e.length;--t>=0;){var r=e[t];if(t>0&&e.lastIndexOf(r,t-1)>=0)e.splice(t,1);else for(var n=r.parent;n;n=n.parent)if(e.includes(n)){e.splice(t,1);break}}return e},t.compareDocumentPosition=s,t.uniqueSort=function(e){return(e=e.filter((function(e,t,r){return!r.includes(e,t+1)}))).sort((function(e,t){var r=s(e,t);return r&n.PRECEDING?-1:r&n.FOLLOWING?1:0})),e};var n,i=r(4576);function s(e,t){var r=[],s=[];if(e===t)return 0;for(var o=(0,i.hasChildren)(e)?e:e.parent;o;)r.unshift(o),o=o.parent;for(o=(0,i.hasChildren)(t)?t:t.parent;o;)s.unshift(o),o=o.parent;for(var a=Math.min(r.length,s.length),l=0;lu.indexOf(d)?c===t?n.FOLLOWING|n.CONTAINED_BY:n.FOLLOWING:c===e?n.PRECEDING|n.CONTAINS:n.PRECEDING}!function(e){e[e.DISCONNECTED=1]="DISCONNECTED",e[e.PRECEDING=2]="PRECEDING",e[e.FOLLOWING=4]="FOLLOWING",e[e.CONTAINS=8]="CONTAINS",e[e.CONTAINED_BY=16]="CONTAINED_BY"}(n||(t.DocumentPosition=n={}))},3663:(e,t)=>{"use strict";function r(e){return"[object Object]"===Object.prototype.toString.call(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.isPlainObject=function(e){var t,n;return!1!==r(e)&&(void 0===(t=e.constructor)||!1!==r(n=t.prototype)&&!1!==n.hasOwnProperty("isPrototypeOf"))}},3708:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((function(e){return e.charCodeAt(0)})))},3838:function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},n(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),s=this&&this.__assign||function(){return s=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(a);t.NodeWithChildren=d;var p=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=o.ElementType.CDATA,t}return i(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 4},enumerable:!1,configurable:!0}),t}(d);t.CDATA=p;var f=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=o.ElementType.Root,t}return i(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 9},enumerable:!1,configurable:!0}),t}(d);t.Document=f;var m=function(e){function t(t,r,n,i){void 0===n&&(n=[]),void 0===i&&(i="script"===t?o.ElementType.Script:"style"===t?o.ElementType.Style:o.ElementType.Tag);var s=e.call(this,n)||this;return s.name=t,s.attribs=r,s.type=i,s}return i(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var r,n;return{name:t,value:e.attribs[t],namespace:null===(r=e["x-attribsNamespace"])||void 0===r?void 0:r[t],prefix:null===(n=e["x-attribsPrefix"])||void 0===n?void 0:n[t]}}))},enumerable:!1,configurable:!0}),t}(d);function g(e){return(0,o.isTag)(e)}function b(e){return e.type===o.ElementType.CDATA}function y(e){return e.type===o.ElementType.Text}function v(e){return e.type===o.ElementType.Comment}function w(e){return e.type===o.ElementType.Directive}function x(e){return e.type===o.ElementType.Root}function S(e,t){var r;if(void 0===t&&(t=!1),y(e))r=new c(e.data);else if(v(e))r=new u(e.data);else if(g(e)){var n=t?T(e.children):[],i=new m(e.name,s({},e.attribs),n);n.forEach((function(e){return e.parent=i})),null!=e.namespace&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]=s({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]=s({},e["x-attribsPrefix"])),r=i}else if(b(e)){n=t?T(e.children):[];var o=new p(n);n.forEach((function(e){return e.parent=o})),r=o}else if(x(e)){n=t?T(e.children):[];var a=new f(n);n.forEach((function(e){return e.parent=a})),e["x-mode"]&&(a["x-mode"]=e["x-mode"]),r=a}else{if(!w(e))throw new Error("Not implemented yet: ".concat(e.type));var l=new h(e.name,e.data);null!=e["x-name"]&&(l["x-name"]=e["x-name"],l["x-publicId"]=e["x-publicId"],l["x-systemId"]=e["x-systemId"]),r=l}return r.startIndex=e.startIndex,r.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(r.sourceCodeLocation=e.sourceCodeLocation),r}function T(e){for(var t=e.map((function(e){return S(e,!0)})),r=1;r{"use strict";let n=r(9062),i=r(6173),s=r(5266);function o(e,t){let r=new i(e,t),n=new s(r);try{n.parse()}catch(e){throw e}return n.root}e.exports=o,o.default=o,n.registerParse(o)},4318:e=>{var t=String,r=function(){return{isColorSupported:!1,reset:t,bold:t,dim:t,italic:t,underline:t,inverse:t,hidden:t,strikethrough:t,black:t,red:t,green:t,yellow:t,blue:t,magenta:t,cyan:t,white:t,gray:t,bgBlack:t,bgRed:t,bgGreen:t,bgYellow:t,bgBlue:t,bgMagenta:t,bgCyan:t,bgWhite:t,blackBright:t,redBright:t,greenBright:t,yellowBright:t,blueBright:t,magentaBright:t,cyanBright:t,whiteBright:t,bgBlackBright:t,bgRedBright:t,bgGreenBright:t,bgYellowBright:t,bgBlueBright:t,bgMagentaBright:t,bgCyanBright:t,bgWhiteBright:t}};e.exports=r(),e.exports.createColors=r},4333:(e,t,r)=>{"use strict";let n=r(9062),i=r(2648),s=r(6099),o=r(3922),a=r(780),l=r(9901),c=r(9068),{isClean:u,my:h}=r(6644);r(3471);const d={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},p={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},f={Once:!0,postcssPlugin:!0,prepare:!0};function m(e){return"object"==typeof e&&"function"==typeof e.then}function g(e){let t=!1,r=d[e.type];return"decl"===e.type?t=e.prop.toLowerCase():"atrule"===e.type&&(t=e.name.toLowerCase()),t&&e.append?[r,r+"-"+t,0,r+"Exit",r+"Exit-"+t]:t?[r,r+"-"+t,r+"Exit",r+"Exit-"+t]:e.append?[r,0,r+"Exit"]:[r,r+"Exit"]}function b(e){let t;return t="document"===e.type?["Document",0,"DocumentExit"]:"root"===e.type?["Root",0,"RootExit"]:g(e),{eventIndex:0,events:t,iterator:0,node:e,visitorIndex:0,visitors:[]}}function y(e){return e[u]=!1,e.nodes&&e.nodes.forEach((e=>y(e))),e}let v={};class w{get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return"LazyResult"}constructor(e,t,r){let i;if(this.stringified=!1,this.processed=!1,"object"!=typeof t||null===t||"root"!==t.type&&"document"!==t.type)if(t instanceof w||t instanceof a)i=y(t.root),t.map&&(void 0===r.map&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let e=o;r.syntax&&(e=r.syntax.parse),r.parser&&(e=r.parser),e.parse&&(e=e.parse);try{i=e(t,r)}catch(e){this.processed=!0,this.error=e}i&&!i[h]&&n.rebuild(i)}else i=y(t);this.result=new a(e,i,r),this.helpers={...v,postcss:v,result:this.result},this.plugins=this.processor.plugins.map((e=>"object"==typeof e&&e.prepare?{...e,...e.prepare(this.result)}:e))}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(e,t){let r=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,"CssSyntaxError"!==e.name||e.plugin?r.postcssVersion:(e.plugin=r.postcssPlugin,e.setMessage())}catch(e){console&&console.error&&console.error(e)}return e}prepareVisitors(){this.listeners={};let e=(e,t,r)=>{this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push([e,r])};for(let t of this.plugins)if("object"==typeof t)for(let r in t){if(!p[r]&&/^[A-Z]/.test(r))throw new Error(`Unknown event ${r} in ${t.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!f[r])if("object"==typeof t[r])for(let n in t[r])e(t,"*"===n?r:r+"-"+n.toLowerCase(),t[r][n]);else"function"==typeof t[r]&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e0;){let e=this.visitTick(t);if(m(e))try{await e}catch(e){let r=t[t.length-1].node;throw this.handleError(e,r)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if("document"===e.type){let t=e.nodes.map((e=>r(e,this.helpers)));await Promise.all(t)}else await r(e,this.helpers)}catch(e){throw this.handleError(e)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if("object"==typeof e&&e.Once){if("document"===this.result.root.type){let t=this.result.root.nodes.map((t=>e.Once(t,this.helpers)));return m(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}if("function"==typeof e)return e(this.result.root,this.result)}catch(e){throw this.handleError(e)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=c;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let r=new s(t,this.result.root,this.result.opts).generate();return this.result.css=r[0],this.result.map=r[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins)if(m(this.runOnRoot(e)))throw this.getAsyncError();if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[u];)e[u]=!0,this.walkSync(e);if(this.listeners.OnceExit)if("document"===e.type)for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,t){return this.async().then(e,t)}toString(){return this.css}visitSync(e,t){for(let[r,n]of e){let e;this.result.lastPlugin=r;try{e=n(t,this.helpers)}catch(e){throw this.handleError(e,t.proxyOf)}if("root"!==t.type&&"document"!==t.type&&!t.parent)return!0;if(m(e))throw this.getAsyncError()}}visitTick(e){let t=e[e.length-1],{node:r,visitors:n}=t;if("root"!==r.type&&"document"!==r.type&&!r.parent)return void e.pop();if(n.length>0&&t.visitorIndex{e[u]||this.walkSync(e)}));else{let t=this.listeners[r];if(t&&this.visitSync(t,e.toProxy()))return}}warnings(){return this.sync().warnings()}}w.registerPostcss=e=>{v=e},e.exports=w,w.default=w,l.registerLazyResult(w),i.registerLazyResult(w)},4576:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.DomHandler=void 0;var s=r(8788),o=r(3838);i(r(3838),t);var a={withStartIndices:!1,withEndIndices:!1,xmlMode:!1},l=function(){function e(e,t,r){this.dom=[],this.root=new o.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,"function"==typeof t&&(r=t,t=a),"object"==typeof e&&(t=e,e=void 0),this.callback=null!=e?e:null,this.options=null!=t?t:a,this.elementCB=null!=r?r:null}return e.prototype.onparserinit=function(e){this.parser=e},e.prototype.onreset=function(){this.dom=[],this.root=new o.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},e.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},e.prototype.onerror=function(e){this.handleCallback(e)},e.prototype.onclosetag=function(){this.lastNode=null;var e=this.tagStack.pop();this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(e)},e.prototype.onopentag=function(e,t){var r=this.options.xmlMode?s.ElementType.Tag:void 0,n=new o.Element(e,t,void 0,r);this.addNode(n),this.tagStack.push(n)},e.prototype.ontext=function(e){var t=this.lastNode;if(t&&t.type===s.ElementType.Text)t.data+=e,this.options.withEndIndices&&(t.endIndex=this.parser.endIndex);else{var r=new o.Text(e);this.addNode(r),this.lastNode=r}},e.prototype.oncomment=function(e){if(this.lastNode&&this.lastNode.type===s.ElementType.Comment)this.lastNode.data+=e;else{var t=new o.Comment(e);this.addNode(t),this.lastNode=t}},e.prototype.oncommentend=function(){this.lastNode=null},e.prototype.oncdatastart=function(){var e=new o.Text(""),t=new o.CDATA([e]);this.addNode(t),e.parent=t,this.lastNode=e},e.prototype.oncdataend=function(){this.lastNode=null},e.prototype.onprocessinginstruction=function(e,t){var r=new o.ProcessingInstruction(e,t);this.addNode(r)},e.prototype.handleCallback=function(e){if("function"==typeof this.callback)this.callback(e,this.dom);else if(e)throw e},e.prototype.addNode=function(e){var t=this.tagStack[this.tagStack.length-1],r=t.children[t.children.length-1];this.options.withStartIndices&&(e.startIndex=this.parser.startIndex),this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),t.children.push(e),r&&(e.prev=r,r.next=e),e.parent=t,this.lastNode=null},e}();t.DomHandler=l,t.default=l},5266:(e,t,r)=>{"use strict";let n=r(5571),i=r(1176),s=r(1281),o=r(9901),a=r(9463),l=r(6120);const c={empty:!0,space:!0};e.exports=class{constructor(e){this.input=e,this.root=new o,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let t,r,i,s=new n;s.name=e[1].slice(1),""===s.name&&this.unnamedAtrule(s,e),this.init(s,e[2]);let o=!1,a=!1,l=[],c=[];for(;!this.tokenizer.endOfFile();){if(t=(e=this.tokenizer.nextToken())[0],"("===t||"["===t?c.push("("===t?")":"]"):"{"===t&&c.length>0?c.push("}"):t===c[c.length-1]&&c.pop(),0===c.length){if(";"===t){s.source.end=this.getPosition(e[2]),s.source.end.offset++,this.semicolon=!0;break}if("{"===t){a=!0;break}if("}"===t){if(l.length>0){for(i=l.length-1,r=l[i];r&&"space"===r[0];)r=l[--i];r&&(s.source.end=this.getPosition(r[3]||r[2]),s.source.end.offset++)}this.end(e);break}l.push(e)}else l.push(e);if(this.tokenizer.endOfFile()){o=!0;break}}s.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(s.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(s,"params",l),o&&(e=l[l.length-1],s.source.end=this.getPosition(e[3]||e[2]),s.source.end.offset++,this.spaces=s.raws.between,s.raws.between="")):(s.raws.afterName="",s.params=""),a&&(s.nodes=[],this.current=s)}checkMissedSemicolon(e){let t=this.colon(e);if(!1===t)return;let r,n=0;for(let i=t-1;i>=0&&(r=e[i],"space"===r[0]||(n+=1,2!==n));i--);throw this.input.error("Missed semicolon","word"===r[0]?r[3]+1:r[2])}colon(e){let t,r,n,i=0;for(let[s,o]of e.entries()){if(r=o,n=r[0],"("===n&&(i+=1),")"===n&&(i-=1),0===i&&":"===n){if(t){if("word"===t[0]&&"progid"===t[1])continue;return s}this.doubleColon(r)}t=r}return!1}comment(e){let t=new i;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;let r=e[1].slice(2,-2);if(/^\s*$/.test(r))t.text="",t.raws.left=r,t.raws.right="";else{let e=r.match(/^(\s*)([^]*\S)(\s*)$/);t.text=e[2],t.raws.left=e[1],t.raws.right=e[3]}}createTokenizer(){this.tokenizer=l(this.input)}decl(e,t){let r=new s;this.init(r,e[0][2]);let n,i=e[e.length-1];for(";"===i[0]&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(i[3]||i[2]||function(e){for(let t=e.length-1;t>=0;t--){let r=e[t],n=r[3]||r[2];if(n)return n}}(e)),r.source.end.offset++;"word"!==e[0][0];)1===e.length&&this.unknownWord(e),r.raws.before+=e.shift()[1];for(r.source.start=this.getPosition(e[0][2]),r.prop="";e.length;){let t=e[0][0];if(":"===t||"space"===t||"comment"===t)break;r.prop+=e.shift()[1]}for(r.raws.between="";e.length;){if(n=e.shift(),":"===n[0]){r.raws.between+=n[1];break}"word"===n[0]&&/\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1]}"_"!==r.prop[0]&&"*"!==r.prop[0]||(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let o,a=[];for(;e.length&&(o=e[0][0],"space"===o||"comment"===o);)a.push(e.shift());this.precheckMissedSemicolon(e);for(let t=e.length-1;t>=0;t--){if(n=e[t],"!important"===n[1].toLowerCase()){r.important=!0;let n=this.stringFrom(e,t);n=this.spacesFromEnd(e)+n," !important"!==n&&(r.raws.important=n);break}if("important"===n[1].toLowerCase()){let n=e.slice(0),i="";for(let e=t;e>0;e--){let t=n[e][0];if(i.trim().startsWith("!")&&"space"!==t)break;i=n.pop()[1]+i}i.trim().startsWith("!")&&(r.important=!0,r.raws.important=i,e=n)}if("space"!==n[0]&&"comment"!==n[0])break}e.some((e=>"space"!==e[0]&&"comment"!==e[0]))&&(r.raws.between+=a.map((e=>e[1])).join(""),a=[]),this.raw(r,"value",a.concat(e),t),r.value.includes(":")&&!t&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let t=new a;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let t=this.current.nodes[this.current.nodes.length-1];t&&"rule"===t.type&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="",t.source.end=this.getPosition(e[2]),t.source.end.offset+=t.raws.ownSemicolon.length)}}getPosition(e){let t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}}init(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="","comment"!==e.type&&(this.semicolon=!1)}other(e){let t=!1,r=null,n=!1,i=null,s=[],o=e[1].startsWith("--"),a=[],l=e;for(;l;){if(r=l[0],a.push(l),"("===r||"["===r)i||(i=l),s.push("("===r?")":"]");else if(o&&n&&"{"===r)i||(i=l),s.push("}");else if(0===s.length){if(";"===r){if(n)return void this.decl(a,o);break}if("{"===r)return void this.rule(a);if("}"===r){this.tokenizer.back(a.pop()),t=!0;break}":"===r&&(n=!0)}else r===s[s.length-1]&&(s.pop(),0===s.length&&(i=null));l=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),s.length>0&&this.unclosedBracket(i),t&&n){if(!o)for(;a.length&&(l=a[a.length-1][0],"space"===l||"comment"===l);)this.tokenizer.back(a.pop());this.decl(a,o)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e)}this.endFile()}precheckMissedSemicolon(){}raw(e,t,r,n){let i,s,o,a,l=r.length,u="",h=!0;for(let e=0;ee+t[1]),"");e.raws[t]={raw:n,value:u}}e[t]=u}rule(e){e.pop();let t=new a;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,"selector",e),this.current=t}spacesAndCommentsFromEnd(e){let t,r="";for(;e.length&&(t=e[e.length-1][0],"space"===t||"comment"===t);)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let t,r="";for(;e.length&&(t=e[0][0],"space"===t||"comment"===t);)r+=e.shift()[1];return r}spacesFromEnd(e){let t,r="";for(;e.length&&(t=e[e.length-1][0],"space"===t);)r=e.pop()[1]+r;return r}stringFrom(e,t){let r="";for(let n=t;n{"use strict";let n=r(9062);class i extends n{constructor(e){super(e),this.type="atrule"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}}e.exports=i,i.default=i,n.registerAtRule(i)},5621:(e,t,r)=>{"use strict";let n=r(259),i=r(2803),s=r(9068),{isClean:o,my:a}=r(6644);function l(e,t){let r=new e.constructor;for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if("proxyCache"===n)continue;let i=e[n],s=typeof i;"parent"===n&&"object"===s?t&&(r[n]=t):"source"===n?r[n]=i:Array.isArray(i)?r[n]=i.map((e=>l(e,r))):("object"===s&&null!==i&&(i=l(i)),r[n]=i)}return r}function c(e,t){if(t&&void 0!==t.offset)return t.offset;let r=1,n=1,i=0;for(let s=0;s"proxyOf"===t?e:"root"===t?()=>e.root().toProxy():e[t],set:(e,t,r)=>(e[t]===r||(e[t]=r,"prop"!==t&&"value"!==t&&"name"!==t&&"params"!==t&&"important"!==t&&"text"!==t||e.markDirty()),!0)}}markClean(){this[o]=!0}markDirty(){if(this[o]){this[o]=!1;let e=this;for(;e=e.parent;)e[o]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e){let t=this.source.start;if(e.index)t=this.positionInside(e.index);else if(e.word){let r="document"in this.source.input?this.source.input.document:this.source.input.css,n=r.slice(c(r,this.source.start),c(r,this.source.end)).indexOf(e.word);-1!==n&&(t=this.positionInside(n))}return t}positionInside(e){let t=this.source.start.column,r=this.source.start.line,n="document"in this.source.input?this.source.input.document:this.source.input.css,i=c(n,this.source.start),s=i+e;for(let e=i;e"object"==typeof e&&e.toJSON?e.toJSON(null,t):e));else if("object"==typeof n&&n.toJSON)r[e]=n.toJSON(null,t);else if("source"===e){let s=t.get(n.input);null==s&&(s=i,t.set(n.input,i),i++),r[e]={end:n.end,inputId:s,start:n.start}}else r[e]=n}return n&&(r.inputs=[...t.keys()].map((e=>e.toJSON()))),r}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=s){e.stringify&&(e=e.stringify);let t="";return e(this,(e=>{t+=e})),t}warn(e,t,r){let n={node:this};for(let e in r)n[e]=r[e];return e.warn(t,n)}}e.exports=u,u.default=u},5622:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.testElement=function(e,t){var r=l(e);return!r||r(t)},t.getElements=function(e,t,r,n){void 0===n&&(n=1/0);var s=l(e);return s?(0,i.filter)(s,t,r,n):[]},t.getElementById=function(e,t,r){return void 0===r&&(r=!0),Array.isArray(t)||(t=[t]),(0,i.findOne)(o("id",e),t,r)},t.getElementsByTagName=function(e,t,r,n){return void 0===r&&(r=!0),void 0===n&&(n=1/0),(0,i.filter)(s.tag_name(e),t,r,n)},t.getElementsByClassName=function(e,t,r,n){return void 0===r&&(r=!0),void 0===n&&(n=1/0),(0,i.filter)(o("class",e),t,r,n)},t.getElementsByTagType=function(e,t,r,n){return void 0===r&&(r=!0),void 0===n&&(n=1/0),(0,i.filter)(s.tag_type(e),t,r,n)};var n=r(4576),i=r(6841),s={tag_name:function(e){return"function"==typeof e?function(t){return(0,n.isTag)(t)&&e(t.name)}:"*"===e?n.isTag:function(t){return(0,n.isTag)(t)&&t.name===e}},tag_type:function(e){return"function"==typeof e?function(t){return e(t.type)}:function(t){return t.type===e}},tag_contains:function(e){return"function"==typeof e?function(t){return(0,n.isText)(t)&&e(t.data)}:function(t){return(0,n.isText)(t)&&t.data===e}}};function o(e,t){return"function"==typeof t?function(r){return(0,n.isTag)(r)&&t(r.attribs[e])}:function(r){return(0,n.isTag)(r)&&r.attribs[e]===t}}function a(e,t){return function(r){return e(r)||t(r)}}function l(e){var t=Object.keys(e).map((function(t){var r=e[t];return Object.prototype.hasOwnProperty.call(s,t)?s[t](r):o(t,r)}));return 0===t.length?null:t.reduce(a)}},5653:e=>{"use strict";let t={comma:e=>t.split(e,[","],!0),space:e=>t.split(e,[" ","\n","\t"]),split(e,t,r){let n=[],i="",s=!1,o=0,a=!1,l="",c=!1;for(let r of e)c?c=!1:"\\"===r?c=!0:a?r===l&&(a=!1):'"'===r||"'"===r?(a=!0,l=r):"("===r?o+=1:")"===r?o>0&&(o-=1):0===o&&t.includes(r)&&(s=!0),s?(""!==i&&n.push(i.trim()),i="",s=!1):i+=r;return(r||""!==i)&&n.push(i.trim()),n}};e.exports=t,t.default=t},5887:()=>{},5923:(e,t,r)=>{"use strict";let{existsSync:n,readFileSync:i}=r(874),{dirname:s,join:o}=r(8818),{SourceMapConsumer:a,SourceMapGenerator:l}=r(5887);class c{constructor(e,t){if(!1===t.map)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");let r=t.map?t.map.prev:void 0,n=this.loadMap(t.from,r);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=s(this.mapFile)),n&&(this.text=n)}consumer(){return this.consumerCache||(this.consumerCache=new a(this.text)),this.consumerCache}decodeInline(e){let t=e.match(/^data:application\/json;charset=utf-?8,/)||e.match(/^data:application\/json,/);if(t)return decodeURIComponent(e.substr(t[0].length));let r=e.match(/^data:application\/json;charset=utf-?8;base64,/)||e.match(/^data:application\/json;base64,/);if(r)return n=e.substr(r[0].length),Buffer?Buffer.from(n,"base64").toString():window.atob(n);var n;let i=e.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+i)}getAnnotationURL(e){return e.replace(/^\/\*\s*# sourceMappingURL=/,"").trim()}isMap(e){return"object"==typeof e&&("string"==typeof e.mappings||"string"==typeof e._mappings||Array.isArray(e.sections))}loadAnnotation(e){let t=e.match(/\/\*\s*# sourceMappingURL=/g);if(!t)return;let r=e.lastIndexOf(t.pop()),n=e.indexOf("*/",r);r>-1&&n>-1&&(this.annotation=this.getAnnotationURL(e.substring(r,n)))}loadFile(e){if(this.root=s(e),n(e))return this.mapFile=e,i(e,"utf-8").toString().trim()}loadMap(e,t){if(!1===t)return!1;if(t){if("string"==typeof t)return t;if("function"!=typeof t){if(t instanceof a)return l.fromSourceMap(t).toString();if(t instanceof l)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}{let r=t(e);if(r){let e=this.loadFile(r);if(!e)throw new Error("Unable to load previous source map: "+r.toString());return e}}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let t=this.annotation;return e&&(t=o(s(e),t)),this.loadFile(t)}}}startWith(e,t){return!!e&&e.substr(0,t.length)===t}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}}e.exports=c,c.default=c},6099:(e,t,r)=>{"use strict";let{dirname:n,relative:i,resolve:s,sep:o}=r(8818),{SourceMapConsumer:a,SourceMapGenerator:l}=r(5887),{pathToFileURL:c}=r(1866),u=r(6173),h=Boolean(a&&l),d=Boolean(n&&s&&i&&o);e.exports=class{constructor(e,t,r,n){this.stringify=e,this.mapOpts=r.map||{},this.root=t,this.opts=r,this.css=n,this.originalCSS=n,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;e=this.isInline()?"data:application/json;base64,"+this.toBase64(this.map.toString()):"string"==typeof this.mapOpts.annotation?this.mapOpts.annotation:"function"==typeof this.mapOpts.annotation?this.mapOpts.annotation(this.opts.to,this.root):this.outputFile()+".map";let t="\n";this.css.includes("\r\n")&&(t="\r\n"),this.css+=t+"/*# sourceMappingURL="+e+" */"}applyPrevMaps(){for(let e of this.previous()){let t,r=this.toUrl(this.path(e.file)),i=e.root||n(e.file);!1===this.mapOpts.sourcesContent?(t=new a(e.text),t.sourcesContent&&(t.sourcesContent=null)):t=e.consumer(),this.map.applySourceMap(t,r,this.toUrl(this.path(i)))}}clearAnnotation(){if(!1!==this.mapOpts.annotation)if(this.root){let e;for(let t=this.root.nodes.length-1;t>=0;t--)e=this.root.nodes[t],"comment"===e.type&&e.text.startsWith("# sourceMappingURL=")&&this.root.removeChild(t)}else this.css&&(this.css=this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm,""))}generate(){if(this.clearAnnotation(),d&&h&&this.isMap())return this.generateMap();{let e="";return this.stringify(this.root,(t=>{e+=t})),[e]}}generateMap(){if(this.root)this.generateString();else if(1===this.previous().length){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=l.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new l({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css="",this.map=new l({file:this.outputFile(),ignoreInvalidMapping:!0});let e,t,r=1,n=1,i="",s={generated:{column:0,line:0},original:{column:0,line:0},source:""};this.stringify(this.root,((o,a,l)=>{if(this.css+=o,a&&"end"!==l&&(s.generated.line=r,s.generated.column=n-1,a.source&&a.source.start?(s.source=this.sourcePath(a),s.original.line=a.source.start.line,s.original.column=a.source.start.column-1,this.map.addMapping(s)):(s.source=i,s.original.line=1,s.original.column=0,this.map.addMapping(s))),t=o.match(/\n/g),t?(r+=t.length,e=o.lastIndexOf("\n"),n=o.length-e):n+=o.length,a&&"start"!==l){let e=a.parent||{raws:{}};("decl"===a.type||"atrule"===a.type&&!a.nodes)&&a===e.last&&!e.raws.semicolon||(a.source&&a.source.end?(s.source=this.sourcePath(a),s.original.line=a.source.end.line,s.original.column=a.source.end.column-1,s.generated.line=r,s.generated.column=n-2,this.map.addMapping(s)):(s.source=i,s.original.line=1,s.original.column=0,s.generated.line=r,s.generated.column=n-1,this.map.addMapping(s)))}}))}isAnnotation(){return!!this.isInline()||(void 0!==this.mapOpts.annotation?this.mapOpts.annotation:!this.previous().length||this.previous().some((e=>e.annotation)))}isInline(){if(void 0!==this.mapOpts.inline)return this.mapOpts.inline;let e=this.mapOpts.annotation;return(void 0===e||!0===e)&&(!this.previous().length||this.previous().some((e=>e.inline)))}isMap(){return void 0!==this.opts.map?!!this.opts.map:this.previous().length>0}isSourcesContent(){return void 0!==this.mapOpts.sourcesContent?this.mapOpts.sourcesContent:!this.previous().length||this.previous().some((e=>e.withContent()))}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}path(e){if(this.mapOpts.absolute)return e;if(60===e.charCodeAt(0))return e;if(/^\w+:\/\//.test(e))return e;let t=this.memoizedPaths.get(e);if(t)return t;let r=this.opts.to?n(this.opts.to):".";"string"==typeof this.mapOpts.annotation&&(r=n(s(r,this.mapOpts.annotation)));let o=i(r,e);return this.memoizedPaths.set(e,o),o}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk((e=>{if(e.source&&e.source.input.map){let t=e.source.input.map;this.previousMaps.includes(t)||this.previousMaps.push(t)}}));else{let e=new u(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk((t=>{if(t.source){let r=t.source.input.from;if(r&&!e[r]){e[r]=!0;let n=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(n,t.source.input.css)}}}));else if(this.css){let e=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(e,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let t=this.memoizedFileURLs.get(e);if(t)return t;if(c){let t=c(e).toString();return this.memoizedFileURLs.set(e,t),t}throw new Error("`map.absolute` option is not available in this PostCSS build")}toUrl(e){let t=this.memoizedURLs.get(e);if(t)return t;"\\"===o&&(e=e.replace(/\\/g,"/"));let r=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,r),r}}},6120:e=>{"use strict";const t="'".charCodeAt(0),r='"'.charCodeAt(0),n="\\".charCodeAt(0),i="/".charCodeAt(0),s="\n".charCodeAt(0),o=" ".charCodeAt(0),a="\f".charCodeAt(0),l="\t".charCodeAt(0),c="\r".charCodeAt(0),u="[".charCodeAt(0),h="]".charCodeAt(0),d="(".charCodeAt(0),p=")".charCodeAt(0),f="{".charCodeAt(0),m="}".charCodeAt(0),g=";".charCodeAt(0),b="*".charCodeAt(0),y=":".charCodeAt(0),v="@".charCodeAt(0),w=/[\t\n\f\r "#'()/;[\\\]{}]/g,x=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,S=/.[\r\n"'(/\\]/,T=/[\da-f]/i;e.exports=function(e,E={}){let A,C,k,O,N,I,P,D,L,q,M=e.css.valueOf(),B=E.ignoreErrors,j=M.length,R=0,_=[],U=[];function H(t){throw e.error("Unclosed "+t,R)}return{back:function(e){U.push(e)},endOfFile:function(){return 0===U.length&&R>=j},nextToken:function(e){if(U.length)return U.pop();if(R>=j)return;let E=!!e&&e.ignoreUnclosed;switch(A=M.charCodeAt(R),A){case s:case o:case l:case c:case a:O=R;do{O+=1,A=M.charCodeAt(O)}while(A===o||A===s||A===l||A===c||A===a);I=["space",M.slice(R,O)],R=O-1;break;case u:case h:case f:case m:case y:case g:case p:{let e=String.fromCharCode(A);I=[e,e,R];break}case d:if(q=_.length?_.pop()[1]:"",L=M.charCodeAt(R+1),"url"===q&&L!==t&&L!==r&&L!==o&&L!==s&&L!==l&&L!==a&&L!==c){O=R;do{if(P=!1,O=M.indexOf(")",O+1),-1===O){if(B||E){O=R;break}H("bracket")}for(D=O;M.charCodeAt(D-1)===n;)D-=1,P=!P}while(P);I=["brackets",M.slice(R,O+1),R,O],R=O}else O=M.indexOf(")",R+1),C=M.slice(R,O+1),-1===O||S.test(C)?I=["(","(",R]:(I=["brackets",C,R,O],R=O);break;case t:case r:N=A===t?"'":'"',O=R;do{if(P=!1,O=M.indexOf(N,O+1),-1===O){if(B||E){O=R+1;break}H("string")}for(D=O;M.charCodeAt(D-1)===n;)D-=1,P=!P}while(P);I=["string",M.slice(R,O+1),R,O],R=O;break;case v:w.lastIndex=R+1,w.test(M),O=0===w.lastIndex?M.length-1:w.lastIndex-2,I=["at-word",M.slice(R,O+1),R,O],R=O;break;case n:for(O=R,k=!0;M.charCodeAt(O+1)===n;)O+=1,k=!k;if(A=M.charCodeAt(O+1),k&&A!==i&&A!==o&&A!==s&&A!==l&&A!==c&&A!==a&&(O+=1,T.test(M.charAt(O)))){for(;T.test(M.charAt(O+1));)O+=1;M.charCodeAt(O+1)===o&&(O+=1)}I=["word",M.slice(R,O+1),R,O],R=O;break;default:A===i&&M.charCodeAt(R+1)===b?(O=M.indexOf("*/",R+2)+1,0===O&&(B||E?O=M.length:H("comment")),I=["comment",M.slice(R,O+1),R,O],R=O):(x.lastIndex=R+1,x.test(M),O=0===x.lastIndex?M.length-1:x.lastIndex-2,I=["word",M.slice(R,O+1),R,O],_.push(I),R=O)}return R++,I},position:function(){return R}}}},6173:(e,t,r)=>{"use strict";let{nanoid:n}=r(6703),{isAbsolute:i,resolve:s}=r(8818),{SourceMapConsumer:o,SourceMapGenerator:a}=r(5887),{fileURLToPath:l,pathToFileURL:c}=r(1866),u=r(259),h=r(5923),d=r(6973),p=Symbol("fromOffsetCache"),f=Boolean(o&&a),m=Boolean(s&&i);class g{get from(){return this.file||this.id}constructor(e,t={}){if(null==e||"object"==typeof e&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),"\ufeff"===this.css[0]||"￾"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,this.document=this.css,t.document&&(this.document=t.document.toString()),t.from&&(!m||/^\w+:\/\//.test(t.from)||i(t.from)?this.file=t.from:this.file=s(t.from)),m&&f){let e=new h(this.css,t);if(e.text){this.map=e;let t=e.consumer().file;!this.file&&t&&(this.file=this.mapResolve(t))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}error(e,t,r,n={}){let i,s,o;if(t&&"object"==typeof t){let e=t,n=r;if("number"==typeof e.offset){let n=this.fromOffset(e.offset);t=n.line,r=n.col}else t=e.line,r=e.column;if("number"==typeof n.offset){let e=this.fromOffset(n.offset);s=e.line,i=e.col}else s=n.line,i=n.column}else if(!r){let e=this.fromOffset(t);t=e.line,r=e.col}let a=this.origin(t,r,s,i);return o=a?new u(e,void 0===a.endLine?a.line:{column:a.column,line:a.line},void 0===a.endLine?a.column:{column:a.endColumn,line:a.endLine},a.source,a.file,n.plugin):new u(e,void 0===s?t:{column:r,line:t},void 0===s?r:{column:i,line:s},this.css,this.file,n.plugin),o.input={column:r,endColumn:i,endLine:s,line:t,source:this.css},this.file&&(c&&(o.input.url=c(this.file).toString()),o.input.file=this.file),o}fromOffset(e){let t,r;if(this[p])r=this[p];else{let e=this.css.split("\n");r=new Array(e.length);let t=0;for(let n=0,i=e.length;n=t)n=r.length-1;else{let t,i=r.length-2;for(;n>1),e=r[t+1])){n=t;break}n=t+1}}return{col:e-r[n]+1,line:n+1}}mapResolve(e){return/^\w+:\/\//.test(e)?e:s(this.map.consumer().sourceRoot||this.map.root||".",e)}origin(e,t,r,n){if(!this.map)return!1;let s,o,a=this.map.consumer(),u=a.originalPositionFor({column:t,line:e});if(!u.source)return!1;"number"==typeof r&&(s=a.originalPositionFor({column:n,line:r})),o=i(u.source)?c(u.source):new URL(u.source,this.map.consumer().sourceRoot||c(this.map.mapFile));let h={column:u.column,endColumn:s&&s.column,endLine:s&&s.line,line:u.line,url:o.toString()};if("file:"===o.protocol){if(!l)throw new Error("file: protocol is not available in this PostCSS build");h.file=l(o)}let d=a.sourceContentFor(u.source);return d&&(h.source=d),h}toJSON(){let e={};for(let t of["hasBOM","css","file","id"])null!=this[t]&&(e[t]=this[t]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}}e.exports=g,g.default=g,d&&d.registerInput&&d.registerInput(g)},6181:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.QuoteType=void 0;var n,i,s,o=r(6861);function a(e){return e===n.Space||e===n.NewLine||e===n.Tab||e===n.FormFeed||e===n.CarriageReturn}function l(e){return e===n.Slash||e===n.Gt||a(e)}function c(e){return e>=n.Zero&&e<=n.Nine}!function(e){e[e.Tab=9]="Tab",e[e.NewLine=10]="NewLine",e[e.FormFeed=12]="FormFeed",e[e.CarriageReturn=13]="CarriageReturn",e[e.Space=32]="Space",e[e.ExclamationMark=33]="ExclamationMark",e[e.Number=35]="Number",e[e.Amp=38]="Amp",e[e.SingleQuote=39]="SingleQuote",e[e.DoubleQuote=34]="DoubleQuote",e[e.Dash=45]="Dash",e[e.Slash=47]="Slash",e[e.Zero=48]="Zero",e[e.Nine=57]="Nine",e[e.Semi=59]="Semi",e[e.Lt=60]="Lt",e[e.Eq=61]="Eq",e[e.Gt=62]="Gt",e[e.Questionmark=63]="Questionmark",e[e.UpperA=65]="UpperA",e[e.LowerA=97]="LowerA",e[e.UpperF=70]="UpperF",e[e.LowerF=102]="LowerF",e[e.UpperZ=90]="UpperZ",e[e.LowerZ=122]="LowerZ",e[e.LowerX=120]="LowerX",e[e.OpeningSquareBracket=91]="OpeningSquareBracket"}(n||(n={})),function(e){e[e.Text=1]="Text",e[e.BeforeTagName=2]="BeforeTagName",e[e.InTagName=3]="InTagName",e[e.InSelfClosingTag=4]="InSelfClosingTag",e[e.BeforeClosingTagName=5]="BeforeClosingTagName",e[e.InClosingTagName=6]="InClosingTagName",e[e.AfterClosingTagName=7]="AfterClosingTagName",e[e.BeforeAttributeName=8]="BeforeAttributeName",e[e.InAttributeName=9]="InAttributeName",e[e.AfterAttributeName=10]="AfterAttributeName",e[e.BeforeAttributeValue=11]="BeforeAttributeValue",e[e.InAttributeValueDq=12]="InAttributeValueDq",e[e.InAttributeValueSq=13]="InAttributeValueSq",e[e.InAttributeValueNq=14]="InAttributeValueNq",e[e.BeforeDeclaration=15]="BeforeDeclaration",e[e.InDeclaration=16]="InDeclaration",e[e.InProcessingInstruction=17]="InProcessingInstruction",e[e.BeforeComment=18]="BeforeComment",e[e.CDATASequence=19]="CDATASequence",e[e.InSpecialComment=20]="InSpecialComment",e[e.InCommentLike=21]="InCommentLike",e[e.BeforeSpecialS=22]="BeforeSpecialS",e[e.SpecialStartSequence=23]="SpecialStartSequence",e[e.InSpecialTag=24]="InSpecialTag",e[e.BeforeEntity=25]="BeforeEntity",e[e.BeforeNumericEntity=26]="BeforeNumericEntity",e[e.InNamedEntity=27]="InNamedEntity",e[e.InNumericEntity=28]="InNumericEntity",e[e.InHexEntity=29]="InHexEntity"}(i||(i={})),function(e){e[e.NoValue=0]="NoValue",e[e.Unquoted=1]="Unquoted",e[e.Single=2]="Single",e[e.Double=3]="Double"}(s=t.QuoteType||(t.QuoteType={}));var u={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])},h=function(){function e(e,t){var r=e.xmlMode,n=void 0!==r&&r,s=e.decodeEntities,a=void 0===s||s;this.cbs=t,this.state=i.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=i.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.trieIndex=0,this.trieCurrent=0,this.entityResult=0,this.entityExcess=0,this.xmlMode=n,this.decodeEntities=a,this.entityTrie=n?o.xmlDecodeTree:o.htmlDecodeTree}return e.prototype.reset=function(){this.state=i.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=i.Text,this.currentSequence=void 0,this.running=!0,this.offset=0},e.prototype.write=function(e){this.offset+=this.buffer.length,this.buffer=e,this.parse()},e.prototype.end=function(){this.running&&this.finish()},e.prototype.pause=function(){this.running=!1},e.prototype.resume=function(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=i.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&e===n.Amp&&(this.state=i.BeforeEntity)},e.prototype.stateSpecialStartSequence=function(e){var t=this.sequenceIndex===this.currentSequence.length;if(t?l(e):(32|e)===this.currentSequence[this.sequenceIndex]){if(!t)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=i.InTagName,this.stateInTagName(e)},e.prototype.stateInSpecialTag=function(e){if(this.sequenceIndex===this.currentSequence.length){if(e===n.Gt||a(e)){var t=this.index-this.currentSequence.length;if(this.sectionStart=n.LowerA&&e<=n.LowerZ||e>=n.UpperA&&e<=n.UpperZ}(e)},e.prototype.startSpecial=function(e,t){this.isSpecial=!0,this.currentSequence=e,this.sequenceIndex=t,this.state=i.SpecialStartSequence},e.prototype.stateBeforeTagName=function(e){if(e===n.ExclamationMark)this.state=i.BeforeDeclaration,this.sectionStart=this.index+1;else if(e===n.Questionmark)this.state=i.InProcessingInstruction,this.sectionStart=this.index+1;else if(this.isTagStartChar(e)){var t=32|e;this.sectionStart=this.index,this.xmlMode||t!==u.TitleEnd[2]?this.state=this.xmlMode||t!==u.ScriptEnd[2]?i.InTagName:i.BeforeSpecialS:this.startSpecial(u.TitleEnd,3)}else e===n.Slash?this.state=i.BeforeClosingTagName:(this.state=i.Text,this.stateText(e))},e.prototype.stateInTagName=function(e){l(e)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=i.BeforeAttributeName,this.stateBeforeAttributeName(e))},e.prototype.stateBeforeClosingTagName=function(e){a(e)||(e===n.Gt?this.state=i.Text:(this.state=this.isTagStartChar(e)?i.InClosingTagName:i.InSpecialComment,this.sectionStart=this.index))},e.prototype.stateInClosingTagName=function(e){(e===n.Gt||a(e))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=i.AfterClosingTagName,this.stateAfterClosingTagName(e))},e.prototype.stateAfterClosingTagName=function(e){(e===n.Gt||this.fastForwardTo(n.Gt))&&(this.state=i.Text,this.baseState=i.Text,this.sectionStart=this.index+1)},e.prototype.stateBeforeAttributeName=function(e){e===n.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=i.InSpecialTag,this.sequenceIndex=0):this.state=i.Text,this.baseState=this.state,this.sectionStart=this.index+1):e===n.Slash?this.state=i.InSelfClosingTag:a(e)||(this.state=i.InAttributeName,this.sectionStart=this.index)},e.prototype.stateInSelfClosingTag=function(e){e===n.Gt?(this.cbs.onselfclosingtag(this.index),this.state=i.Text,this.baseState=i.Text,this.sectionStart=this.index+1,this.isSpecial=!1):a(e)||(this.state=i.BeforeAttributeName,this.stateBeforeAttributeName(e))},e.prototype.stateInAttributeName=function(e){(e===n.Eq||l(e))&&(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=-1,this.state=i.AfterAttributeName,this.stateAfterAttributeName(e))},e.prototype.stateAfterAttributeName=function(e){e===n.Eq?this.state=i.BeforeAttributeValue:e===n.Slash||e===n.Gt?(this.cbs.onattribend(s.NoValue,this.index),this.state=i.BeforeAttributeName,this.stateBeforeAttributeName(e)):a(e)||(this.cbs.onattribend(s.NoValue,this.index),this.state=i.InAttributeName,this.sectionStart=this.index)},e.prototype.stateBeforeAttributeValue=function(e){e===n.DoubleQuote?(this.state=i.InAttributeValueDq,this.sectionStart=this.index+1):e===n.SingleQuote?(this.state=i.InAttributeValueSq,this.sectionStart=this.index+1):a(e)||(this.sectionStart=this.index,this.state=i.InAttributeValueNq,this.stateInAttributeValueNoQuotes(e))},e.prototype.handleInAttributeValue=function(e,t){e===t||!this.decodeEntities&&this.fastForwardTo(t)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(t===n.DoubleQuote?s.Double:s.Single,this.index),this.state=i.BeforeAttributeName):this.decodeEntities&&e===n.Amp&&(this.baseState=this.state,this.state=i.BeforeEntity)},e.prototype.stateInAttributeValueDoubleQuotes=function(e){this.handleInAttributeValue(e,n.DoubleQuote)},e.prototype.stateInAttributeValueSingleQuotes=function(e){this.handleInAttributeValue(e,n.SingleQuote)},e.prototype.stateInAttributeValueNoQuotes=function(e){a(e)||e===n.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(s.Unquoted,this.index),this.state=i.BeforeAttributeName,this.stateBeforeAttributeName(e)):this.decodeEntities&&e===n.Amp&&(this.baseState=this.state,this.state=i.BeforeEntity)},e.prototype.stateBeforeDeclaration=function(e){e===n.OpeningSquareBracket?(this.state=i.CDATASequence,this.sequenceIndex=0):this.state=e===n.Dash?i.BeforeComment:i.InDeclaration},e.prototype.stateInDeclaration=function(e){(e===n.Gt||this.fastForwardTo(n.Gt))&&(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=i.Text,this.sectionStart=this.index+1)},e.prototype.stateInProcessingInstruction=function(e){(e===n.Gt||this.fastForwardTo(n.Gt))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=i.Text,this.sectionStart=this.index+1)},e.prototype.stateBeforeComment=function(e){e===n.Dash?(this.state=i.InCommentLike,this.currentSequence=u.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=i.InDeclaration},e.prototype.stateInSpecialComment=function(e){(e===n.Gt||this.fastForwardTo(n.Gt))&&(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=i.Text,this.sectionStart=this.index+1)},e.prototype.stateBeforeSpecialS=function(e){var t=32|e;t===u.ScriptEnd[3]?this.startSpecial(u.ScriptEnd,4):t===u.StyleEnd[3]?this.startSpecial(u.StyleEnd,4):(this.state=i.InTagName,this.stateInTagName(e))},e.prototype.stateBeforeEntity=function(e){this.entityExcess=1,this.entityResult=0,e===n.Number?this.state=i.BeforeNumericEntity:e===n.Amp||(this.trieIndex=0,this.trieCurrent=this.entityTrie[0],this.state=i.InNamedEntity,this.stateInNamedEntity(e))},e.prototype.stateInNamedEntity=function(e){if(this.entityExcess+=1,this.trieIndex=(0,o.determineBranch)(this.entityTrie,this.trieCurrent,this.trieIndex+1,e),this.trieIndex<0)return this.emitNamedEntity(),void this.index--;this.trieCurrent=this.entityTrie[this.trieIndex];var t=this.trieCurrent&o.BinTrieFlags.VALUE_LENGTH;if(t){var r=(t>>14)-1;if(this.allowLegacyEntity()||e===n.Semi){var i=this.index-this.entityExcess+1;i>this.sectionStart&&this.emitPartial(this.sectionStart,i),this.entityResult=this.trieIndex,this.trieIndex+=r,this.entityExcess=0,this.sectionStart=this.index+1,0===r&&this.emitNamedEntity()}else this.trieIndex+=r}},e.prototype.emitNamedEntity=function(){if(this.state=this.baseState,0!==this.entityResult)switch((this.entityTrie[this.entityResult]&o.BinTrieFlags.VALUE_LENGTH)>>14){case 1:this.emitCodePoint(this.entityTrie[this.entityResult]&~o.BinTrieFlags.VALUE_LENGTH);break;case 2:this.emitCodePoint(this.entityTrie[this.entityResult+1]);break;case 3:this.emitCodePoint(this.entityTrie[this.entityResult+1]),this.emitCodePoint(this.entityTrie[this.entityResult+2])}},e.prototype.stateBeforeNumericEntity=function(e){(32|e)===n.LowerX?(this.entityExcess++,this.state=i.InHexEntity):(this.state=i.InNumericEntity,this.stateInNumericEntity(e))},e.prototype.emitNumericEntity=function(e){var t=this.index-this.entityExcess-1;t+2+Number(this.state===i.InHexEntity)!==this.index&&(t>this.sectionStart&&this.emitPartial(this.sectionStart,t),this.sectionStart=this.index+Number(e),this.emitCodePoint((0,o.replaceCodePoint)(this.entityResult))),this.state=this.baseState},e.prototype.stateInNumericEntity=function(e){e===n.Semi?this.emitNumericEntity(!0):c(e)?(this.entityResult=10*this.entityResult+(e-n.Zero),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)},e.prototype.stateInHexEntity=function(e){e===n.Semi?this.emitNumericEntity(!0):c(e)?(this.entityResult=16*this.entityResult+(e-n.Zero),this.entityExcess++):function(e){return e>=n.UpperA&&e<=n.UpperF||e>=n.LowerA&&e<=n.LowerF}(e)?(this.entityResult=16*this.entityResult+((32|e)-n.LowerA+10),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)},e.prototype.allowLegacyEntity=function(){return!this.xmlMode&&(this.baseState===i.Text||this.baseState===i.InSpecialTag)},e.prototype.cleanup=function(){this.running&&this.sectionStart!==this.index&&(this.state===i.Text||this.state===i.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==i.InAttributeValueDq&&this.state!==i.InAttributeValueSq&&this.state!==i.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))},e.prototype.shouldContinue=function(){return this.index{"use strict";let n=r(5571),i=r(1176),s=r(1281),o=r(6173),a=r(5923),l=r(9901),c=r(9463);function u(e,t){if(Array.isArray(e))return e.map((e=>u(e)));let{inputs:r,...h}=e;if(r){t=[];for(let e of r){let r={...e,__proto__:o.prototype};r.map&&(r.map={...r.map,__proto__:a.prototype}),t.push(r)}}if(h.nodes&&(h.nodes=e.nodes.map((e=>u(e,t)))),h.source){let{inputId:e,...r}=h.source;h.source=r,null!=e&&(h.source.input=t[e])}if("root"===h.type)return new l(h);if("decl"===h.type)return new s(h);if("rule"===h.type)return new c(h);if("comment"===h.type)return new i(h);if("atrule"===h.type)return new n(h);throw new Error("Unknown node type: "+e.type)}e.exports=u,u.default=u},6644:e=>{"use strict";e.exports.isClean=Symbol("isClean"),e.exports.my=Symbol("my")},6703:e=>{e.exports={nanoid:(e=21)=>{let t="",r=0|e;for(;r--;)t+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[64*Math.random()|0];return t},customAlphabet:(e,t=21)=>(r=t)=>{let n="",i=0|r;for(;i--;)n+=e[Math.random()*e.length|0];return n}}},6841:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filter=function(e,t,r,n){return void 0===r&&(r=!0),void 0===n&&(n=1/0),i(e,Array.isArray(t)?t:[t],r,n)},t.find=i,t.findOneChild=function(e,t){return t.find(e)},t.findOne=function e(t,r,i){void 0===i&&(i=!0);for(var s=Array.isArray(r)?r:[r],o=0;o0){var l=e(t,a.children,!0);if(l)return l}}return null},t.existsOne=function e(t,r){return(Array.isArray(r)?r:[r]).some((function(r){return(0,n.isTag)(r)&&t(r)||(0,n.hasChildren)(r)&&e(t,r.children)}))},t.findAll=function(e,t){for(var r=[],i=[Array.isArray(t)?t:[t]],s=[0];;)if(s[0]>=i[0].length){if(1===i.length)return r;i.shift(),s.shift()}else{var o=i[0][s[0]++];(0,n.isTag)(o)&&e(o)&&r.push(o),(0,n.hasChildren)(o)&&o.children.length>0&&(s.unshift(0),i.unshift(o.children))}};var n=r(4576);function i(e,t,r,i){for(var s=[],o=[Array.isArray(t)?t:[t]],a=[0];;)if(a[0]>=o[0].length){if(1===a.length)return s;o.shift(),a.shift()}else{var l=o[0][a[0]++];if(e(l)&&(s.push(l),--i<=0))return s;r&&(0,n.hasChildren)(l)&&l.children.length>0&&(a.unshift(0),o.unshift(l.children))}}},6861:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXML=t.decodeHTMLStrict=t.decodeHTMLAttribute=t.decodeHTML=t.determineBranch=t.EntityDecoder=t.DecodingMode=t.BinTrieFlags=t.fromCodePoint=t.replaceCodePoint=t.decodeCodePoint=t.xmlDecodeTree=t.htmlDecodeTree=void 0;var a=o(r(3708));t.htmlDecodeTree=a.default;var l=o(r(12));t.xmlDecodeTree=l.default;var c=s(r(887));t.decodeCodePoint=c.default;var u,h,d,p,f=r(887);function m(e){return e>=u.ZERO&&e<=u.NINE}Object.defineProperty(t,"replaceCodePoint",{enumerable:!0,get:function(){return f.replaceCodePoint}}),Object.defineProperty(t,"fromCodePoint",{enumerable:!0,get:function(){return f.fromCodePoint}}),function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"}(u||(u={})),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(h=t.BinTrieFlags||(t.BinTrieFlags={})),function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"}(d||(d={})),function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"}(p=t.DecodingMode||(t.DecodingMode={}));var g=function(){function e(e,t,r){this.decodeTree=e,this.emitCodePoint=t,this.errors=r,this.state=d.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=p.Strict}return e.prototype.startEntity=function(e){this.decodeMode=e,this.state=d.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},e.prototype.write=function(e,t){switch(this.state){case d.EntityStart:return e.charCodeAt(t)===u.NUM?(this.state=d.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=d.NamedEntity,this.stateNamedEntity(e,t));case d.NumericStart:return this.stateNumericStart(e,t);case d.NumericDecimal:return this.stateNumericDecimal(e,t);case d.NumericHex:return this.stateNumericHex(e,t);case d.NamedEntity:return this.stateNamedEntity(e,t)}},e.prototype.stateNumericStart=function(e,t){return t>=e.length?-1:(32|e.charCodeAt(t))===u.LOWER_X?(this.state=d.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=d.NumericDecimal,this.stateNumericDecimal(e,t))},e.prototype.addToNumericResult=function(e,t,r,n){if(t!==r){var i=r-t;this.result=this.result*Math.pow(n,i)+parseInt(e.substr(t,i),n),this.consumed+=i}},e.prototype.stateNumericHex=function(e,t){for(var r,n=t;t=u.UPPER_A&&r<=u.UPPER_F||r>=u.LOWER_A&&r<=u.LOWER_F)))return this.addToNumericResult(e,n,t,16),this.emitNumericEntity(i,3);t+=1}return this.addToNumericResult(e,n,t,16),-1},e.prototype.stateNumericDecimal=function(e,t){for(var r=t;t>14;t=u.UPPER_A&&e<=u.UPPER_Z||e>=u.LOWER_A&&e<=u.LOWER_Z||m(e)}(o)))?0:this.emitNotTerminatedNamedEntity();if(0!=(i=((n=r[this.treeIndex])&h.VALUE_LENGTH)>>14)){if(s===u.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==p.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}var o;return-1},e.prototype.emitNotTerminatedNamedEntity=function(){var e,t=this.result,r=(this.decodeTree[t]&h.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,r,this.consumed),null===(e=this.errors)||void 0===e||e.missingSemicolonAfterCharacterReference(),this.consumed},e.prototype.emitNamedEntityData=function(e,t,r){var n=this.decodeTree;return this.emitCodePoint(1===t?n[e]&~h.VALUE_LENGTH:n[e+1],r),3===t&&this.emitCodePoint(n[e+2],r),r},e.prototype.end=function(){var e;switch(this.state){case d.NamedEntity:return 0===this.result||this.decodeMode===p.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case d.NumericDecimal:return this.emitNumericEntity(0,2);case d.NumericHex:return this.emitNumericEntity(0,3);case d.NumericStart:return null===(e=this.errors)||void 0===e||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case d.EntityStart:return 0}},e}();function b(e){var t="",r=new g(e,(function(e){return t+=(0,c.fromCodePoint)(e)}));return function(e,n){for(var i=0,s=0;(s=e.indexOf("&",s))>=0;){t+=e.slice(i,s),r.startEntity(n);var o=r.write(e,s+1);if(o<0){i=s+r.end();break}i=s+o,s=0===o?i+1:i}var a=t+e.slice(i);return t="",a}}function y(e,t,r,n){var i=(t&h.BRANCH_LENGTH)>>7,s=t&h.JUMP_TABLE;if(0===i)return 0!==s&&n===s?r:-1;if(s){var o=n-s;return o<0||o>=i?-1:e[r+o]-1}for(var a=r,l=a+i-1;a<=l;){var c=a+l>>>1,u=e[c];if(un))return e[c+i];l=c-1}}return-1}t.EntityDecoder=g,t.determineBranch=y;var v=b(a.default),w=b(l.default);t.decodeHTML=function(e,t){return void 0===t&&(t=p.Legacy),v(e,t)},t.decodeHTMLAttribute=function(e){return v(e,p.Attribute)},t.decodeHTMLStrict=function(e){return v(e,p.Strict)},t.decodeXML=function(e){return w(e,p.Strict)}},6973:()=>{},7427:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getChildren=i,t.getParent=s,t.getSiblings=function(e){var t=s(e);if(null!=t)return i(t);for(var r=[e],n=e.prev,o=e.next;null!=n;)r.unshift(n),n=n.prev;for(;null!=o;)r.push(o),o=o.next;return r},t.getAttributeValue=function(e,t){var r;return null===(r=e.attribs)||void 0===r?void 0:r[t]},t.hasAttrib=function(e,t){return null!=e.attribs&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&null!=e.attribs[t]},t.getName=function(e){return e.name},t.nextElementSibling=function(e){for(var t=e.next;null!==t&&!(0,n.isTag)(t);)t=t.next;return t},t.prevElementSibling=function(e){for(var t=e.prev;null!==t&&!(0,n.isTag)(t);)t=t.prev;return t};var n=r(4576);function i(e){return(0,n.hasChildren)(e)?e.children:[]}function s(e){return e.parent||null}},8059:(e,t,r)=>{const n=r(616),i=r(3407),{isPlainObject:s}=r(3663),o=r(9465),a=r(9369),{parse:l}=r(9044),c=["img","audio","video","picture","svg","object","map","iframe","embed"],u=["script","style"];function h(e,t){e&&Object.keys(e).forEach((function(r){t(e[r],r)}))}function d(e,t){return{}.hasOwnProperty.call(e,t)}function p(e,t){const r=[];return h(e,(function(e){t(e)&&r.push(e)})),r}e.exports=m;const f=/^[^\0\t\n\f\r /<=>]+$/;function m(e,t,r){if(null==e)return"";"number"==typeof e&&(e=e.toString());let b="",y="";function v(e,t){const r=this;this.tag=e,this.attribs=t||{},this.tagPosition=b.length,this.text="",this.openingTagLength=0,this.mediaChildren=[],this.updateParentNodeText=function(){I.length&&(I[I.length-1].text+=r.text)},this.updateParentNodeMediaChildren=function(){I.length&&c.includes(this.tag)&&I[I.length-1].mediaChildren.push(this.tag)}}(t=Object.assign({},m.defaults,t)).parser=Object.assign({},g,t.parser);const w=function(e){return!1===t.allowedTags||(t.allowedTags||[]).indexOf(e)>-1};u.forEach((function(e){w(e)&&!t.allowVulnerableTags&&console.warn(`\n\n⚠️ Your \`allowedTags\` option includes, \`${e}\`, which is inherently\nvulnerable to XSS attacks. Please remove it from \`allowedTags\`.\nOr, to disable this warning, add the \`allowVulnerableTags\` option\nand ensure you are accounting for this risk.\n\n`)}));const x=t.nonTextTags||["script","style","textarea","option"];let S,T;t.allowedAttributes&&(S={},T={},h(t.allowedAttributes,(function(e,t){S[t]=[];const r=[];e.forEach((function(e){"string"==typeof e&&e.indexOf("*")>=0?r.push(i(e).replace(/\\\*/g,".*")):S[t].push(e)})),r.length&&(T[t]=new RegExp("^("+r.join("|")+")$"))})));const E={},A={},C={};h(t.allowedClasses,(function(e,t){if(S&&(d(S,t)||(S[t]=[]),S[t].push("class")),E[t]=e,Array.isArray(e)){const r=[];E[t]=[],C[t]=[],e.forEach((function(e){"string"==typeof e&&e.indexOf("*")>=0?r.push(i(e).replace(/\\\*/g,".*")):e instanceof RegExp?C[t].push(e):E[t].push(e)})),r.length&&(A[t]=new RegExp("^("+r.join("|")+")$"))}}));const k={};let O,N,I,P,D,L,q;h(t.transformTags,(function(e,t){let r;"function"==typeof e?r=e:"string"==typeof e&&(r=m.simpleTransform(e)),"*"===t?O=r:k[t]=r}));let M=!1;j();const B=new n.Parser({onopentag:function(e,r){if(t.onOpenTag&&t.onOpenTag(e,r),t.enforceHtmlBoundary&&"html"===e&&j(),L)return void q++;const n=new v(e,r);I.push(n);let i=!1;const c=!!n.text;let u;if(d(k,e)&&(u=k[e](e,r),n.attribs=r=u.attribs,void 0!==u.text&&(n.innerText=u.text),e!==u.tagName&&(n.name=e=u.tagName,D[N]=u.tagName)),O&&(u=O(e,r),n.attribs=r=u.attribs,e!==u.tagName&&(n.name=e=u.tagName,D[N]=u.tagName)),(!w(e)||"recursiveEscape"===t.disallowedTagsMode&&!function(e){for(const t in e)if(d(e,t))return!1;return!0}(P)||null!=t.nestingLimit&&N>=t.nestingLimit)&&(i=!0,P[N]=!0,"discard"!==t.disallowedTagsMode&&"completelyDiscard"!==t.disallowedTagsMode||-1!==x.indexOf(e)&&(L=!0,q=1)),N++,i){if("discard"===t.disallowedTagsMode||"completelyDiscard"===t.disallowedTagsMode){if(n.innerText&&!c){const r=R(n.innerText);t.textFilter?b+=t.textFilter(r,e):b+=r,M=!0}return}y=b,b=""}b+="<"+e,"script"===e&&(t.allowedScriptHostnames||t.allowedScriptDomains)&&(n.innerText=""),i&&("escape"===t.disallowedTagsMode||"recursiveEscape"===t.disallowedTagsMode)&&t.preserveEscapedAttributes?h(r,(function(e,t){b+=" "+t+'="'+R(e||"",!0)+'"'})):(!S||d(S,e)||S["*"])&&h(r,(function(r,i){if(!f.test(i))return void delete n.attribs[i];if(""===r&&!t.allowedEmptyAttributes.includes(i)&&(t.nonBooleanAttributes.includes(i)||t.nonBooleanAttributes.includes("*")))return void delete n.attribs[i];let c=!1;if(!S||d(S,e)&&-1!==S[e].indexOf(i)||S["*"]&&-1!==S["*"].indexOf(i)||d(T,e)&&T[e].test(i)||T["*"]&&T["*"].test(i))c=!0;else if(S&&S[e])for(const t of S[e])if(s(t)&&t.name&&t.name===i){c=!0;let e="";if(!0===t.multiple){const n=r.split(" ");for(const r of n)-1!==t.values.indexOf(r)&&(""===e?e=r:e+=" "+r)}else t.values.indexOf(r)>=0&&(e=r);r=e}if(c){if(-1!==t.allowedSchemesAppliedToAttributes.indexOf(i)&&_(e,r))return void delete n.attribs[i];if("script"===e&&"src"===i){let e=!0;try{const n=U(r);if(t.allowedScriptHostnames||t.allowedScriptDomains){const r=(t.allowedScriptHostnames||[]).find((function(e){return e===n.url.hostname})),i=(t.allowedScriptDomains||[]).find((function(e){return n.url.hostname===e||n.url.hostname.endsWith(`.${e}`)}));e=r||i}}catch(t){e=!1}if(!e)return void delete n.attribs[i]}if("iframe"===e&&"src"===i){let e=!0;try{const n=U(r);if(n.isRelativeUrl)e=d(t,"allowIframeRelativeUrls")?t.allowIframeRelativeUrls:!t.allowedIframeHostnames&&!t.allowedIframeDomains;else if(t.allowedIframeHostnames||t.allowedIframeDomains){const r=(t.allowedIframeHostnames||[]).find((function(e){return e===n.url.hostname})),i=(t.allowedIframeDomains||[]).find((function(e){return n.url.hostname===e||n.url.hostname.endsWith(`.${e}`)}));e=r||i}}catch(t){e=!1}if(!e)return void delete n.attribs[i]}if("srcset"===i)try{let e=a(r);if(e.forEach((function(e){_("srcset",e.url)&&(e.evil=!0)})),e=p(e,(function(e){return!e.evil})),!e.length)return void delete n.attribs[i];r=p(e,(function(e){return!e.evil})).map((function(e){if(!e.url)throw new Error("URL missing");return e.url+(e.w?` ${e.w}w`:"")+(e.h?` ${e.h}h`:"")+(e.d?` ${e.d}x`:"")})).join(", "),n.attribs[i]=r}catch(e){return void delete n.attribs[i]}if("class"===i){const t=E[e],s=E["*"],a=A[e],l=C[e],c=C["*"],d=[a,A["*"]].concat(l,c).filter((function(e){return e}));if(!(u=r,h=t&&s?o(t,s):t||s,m=d,r=h?(u=u.split(/\s+/)).filter((function(e){return-1!==h.indexOf(e)||m.some((function(t){return t.test(e)}))})).join(" "):u).length)return void delete n.attribs[i]}if("style"===i)if(t.parseStyleAttributes)try{if(r=function(e){return e.nodes[0].nodes.reduce((function(e,t){return e.push(`${t.prop}:${t.value}${t.important?" !important":""}`),e}),[]).join(";")}(function(e,t){if(!t)return e;const r=e.nodes[0];let n;return n=t[r.selector]&&t["*"]?o(t[r.selector],t["*"]):t[r.selector]||t["*"],n&&(e.nodes[0].nodes=r.nodes.reduce(function(e){return function(t,r){return d(e,r.prop)&&e[r.prop].some((function(e){return e.test(r.value)}))&&t.push(r),t}}(n),[])),e}(l(e+" {"+r+"}",{map:!1}),t.allowedStyles)),0===r.length)return void delete n.attribs[i]}catch(t){return"undefined"!=typeof window&&console.warn('Failed to parse "'+e+" {"+r+"}\", If you're running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547"),void delete n.attribs[i]}else if(t.allowedStyles)throw new Error("allowedStyles option cannot be used together with parseStyleAttributes: false.");b+=" "+i,r&&r.length?b+='="'+R(r,!0)+'"':t.allowedEmptyAttributes.includes(i)&&(b+='=""')}else delete n.attribs[i];var u,h,m})),-1!==t.selfClosing.indexOf(e)?b+=" />":(b+=">",!n.innerText||c||t.textFilter||(b+=R(n.innerText),M=!0)),i&&(b=y+R(b),y=""),n.openingTagLength=b.length-n.tagPosition},ontext:function(e){if(L)return;const r=I[I.length-1];let n;if(r&&(n=r.tag,e=void 0!==r.innerText?r.innerText:e),"completelyDiscard"!==t.disallowedTagsMode||w(n))if("discard"!==t.disallowedTagsMode&&"completelyDiscard"!==t.disallowedTagsMode||"script"!==n&&"style"!==n){if(!M){const r=R(e,!1);t.textFilter?b+=t.textFilter(r,n):b+=r}}else b+=e;else e="";I.length&&(I[I.length-1].text+=e)},onclosetag:function(e,r){if(t.onCloseTag&&t.onCloseTag(e,r),L){if(q--,q)return;L=!1}const n=I.pop();if(!n)return;if(n.tag!==e)return void I.push(n);L=!!t.enforceHtmlBoundary&&"html"===e,N--;const i=P[N];if(i){if(delete P[N],"discard"===t.disallowedTagsMode||"completelyDiscard"===t.disallowedTagsMode)return void n.updateParentNodeText();y=b,b=""}if(D[N]&&(e=D[N],delete D[N]),t.exclusiveFilter){const e=t.exclusiveFilter(n);if("excludeTag"===e)return i&&(b=y,y=""),void(b=b.substring(0,n.tagPosition)+b.substring(n.tagPosition+n.openingTagLength));if(e)return void(b=b.substring(0,n.tagPosition))}n.updateParentNodeMediaChildren(),n.updateParentNodeText(),-1!==t.selfClosing.indexOf(e)||r&&!w(e)&&["escape","recursiveEscape"].indexOf(t.disallowedTagsMode)>=0?i&&(b=y,y=""):(b+="",i&&(b=y+R(b),y=""),M=!1)}},t.parser);return B.write(e),B.end(),b;function j(){b="",N=0,I=[],P={},D={},L=!1,q=0}function R(e,r){return"string"!=typeof e&&(e+=""),t.parser.decodeEntities&&(e=e.replace(/&/g,"&").replace(//g,">"),r&&(e=e.replace(/"/g,"""))),e=e.replace(/&(?![a-zA-Z0-9#]{1,20};)/g,"&").replace(//g,">"),r&&(e=e.replace(/"/g,""")),e}function _(e,r){for(r=r.replace(/[\x00-\x20]+/g,"");;){const e=r.indexOf("\x3c!--");if(-1===e)break;const t=r.indexOf("--\x3e",e+4);if(-1===t)break;r=r.substring(0,e)+r.substring(t+3)}const n=r.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/);if(!n)return!!r.match(/^[/\\]{2}/)&&!t.allowProtocolRelative;const i=n[1].toLowerCase();return d(t.allowedSchemesByTag,e)?-1===t.allowedSchemesByTag[e].indexOf(i):!t.allowedSchemes||-1===t.allowedSchemes.indexOf(i)}function U(e){if((e=e.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/,"$1//")).startsWith("relative:"))throw new Error("relative: exploit attempt");let t="relative://relative-site";for(let e=0;e<100;e++)t+=`/${e}`;const r=new URL(e,t);return{isRelativeUrl:r&&"relative-site"===r.hostname&&"relative:"===r.protocol,url:r}}}const g={decodeEntities:!0};m.defaults={allowedTags:["address","article","aside","footer","header","h1","h2","h3","h4","h5","h6","hgroup","main","nav","section","blockquote","dd","div","dl","dt","figcaption","figure","hr","li","menu","ol","p","pre","ul","a","abbr","b","bdi","bdo","br","cite","code","data","dfn","em","i","kbd","mark","q","rb","rp","rt","rtc","ruby","s","samp","small","span","strong","sub","sup","time","u","var","wbr","caption","col","colgroup","table","tbody","td","tfoot","th","thead","tr"],nonBooleanAttributes:["abbr","accept","accept-charset","accesskey","action","allow","alt","as","autocapitalize","autocomplete","blocking","charset","cite","class","color","cols","colspan","content","contenteditable","coords","crossorigin","data","datetime","decoding","dir","dirname","download","draggable","enctype","enterkeyhint","fetchpriority","for","form","formaction","formenctype","formmethod","formtarget","headers","height","hidden","high","href","hreflang","http-equiv","id","imagesizes","imagesrcset","inputmode","integrity","is","itemid","itemprop","itemref","itemtype","kind","label","lang","list","loading","low","max","maxlength","media","method","min","minlength","name","nonce","optimum","pattern","ping","placeholder","popover","popovertarget","popovertargetaction","poster","preload","referrerpolicy","rel","rows","rowspan","sandbox","scope","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","tabindex","target","title","translate","type","usemap","value","width","wrap","onauxclick","onafterprint","onbeforematch","onbeforeprint","onbeforeunload","onbeforetoggle","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextlost","oncontextmenu","oncontextrestored","oncopy","oncuechange","oncut","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","onformdata","onhashchange","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onlanguagechange","onload","onloadeddata","onloadedmetadata","onloadstart","onmessage","onmessageerror","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onoffline","ononline","onpagehide","onpageshow","onpaste","onpause","onplay","onplaying","onpopstate","onprogress","onratechange","onreset","onresize","onrejectionhandled","onscroll","onscrollend","onsecuritypolicyviolation","onseeked","onseeking","onselect","onslotchange","onstalled","onstorage","onsubmit","onsuspend","ontimeupdate","ontoggle","onunhandledrejection","onunload","onvolumechange","onwaiting","onwheel"],disallowedTagsMode:"discard",allowedAttributes:{a:["href","name","target"],img:["src","srcset","alt","title","width","height","loading"]},allowedEmptyAttributes:["alt"],selfClosing:["img","br","hr","area","base","basefont","input","link","meta"],allowedSchemes:["http","https","ftp","mailto","tel"],allowedSchemesByTag:{},allowedSchemesAppliedToAttributes:["href","src","cite"],allowProtocolRelative:!0,enforceHtmlBoundary:!1,parseStyleAttributes:!0,preserveEscapedAttributes:!1},m.simpleTransform=function(e,t,r){return r=void 0===r||r,t=t||{},function(n,i){let s;if(r)for(s in t)i[s]=t[s];else i=t;return{tagName:e,attribs:i}}}},8788:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.Doctype=t.CDATA=t.Tag=t.Style=t.Script=t.Comment=t.Directive=t.Text=t.Root=t.isTag=t.ElementType=void 0,function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"}(r=t.ElementType||(t.ElementType={})),t.isTag=function(e){return e.type===r.Tag||e.type===r.Script||e.type===r.Style},t.Root=r.Root,t.Text=r.Text,t.Directive=r.Directive,t.Comment=r.Comment,t.Script=r.Script,t.Style=r.Style,t.Tag=r.Tag,t.CDATA=r.CDATA,t.Doctype=r.Doctype},8818:()=>{},9044:(e,t,r)=>{"use strict";let n=r(5571),i=r(1176),s=r(9062),o=r(259),a=r(1281),l=r(2648),c=r(6251),u=r(6173),h=r(4333),d=r(5653),p=r(5621),f=r(3922),m=r(3149),g=r(780),b=r(9901),y=r(9463),v=r(9068),w=r(1173);function x(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),new m(e)}x.plugin=function(e,t){let r,n=!1;function i(...r){console&&console.warn&&!n&&(n=!0,console.warn(e+": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration"),process.env.LANG&&process.env.LANG.startsWith("cn")&&console.warn(e+": 里面 postcss.plugin 被弃用. 迁移指南:\nhttps://www.w3ctech.com/topic/2226"));let i=t(...r);return i.postcssPlugin=e,i.postcssVersion=(new m).version,i}return Object.defineProperty(i,"postcss",{get:()=>(r||(r=i()),r)}),i.process=function(e,t,r){return x([i(r)]).process(e,t)},i},x.stringify=v,x.parse=f,x.fromJSON=c,x.list=d,x.comment=e=>new i(e),x.atRule=e=>new n(e),x.decl=e=>new a(e),x.rule=e=>new y(e),x.root=e=>new b(e),x.document=e=>new l(e),x.CssSyntaxError=o,x.Declaration=a,x.Container=s,x.Processor=m,x.Document=l,x.Comment=i,x.Warning=w,x.AtRule=n,x.Result=g,x.Input=u,x.Rule=y,x.Root=b,x.Node=p,h.registerPostcss(x),e.exports=x,x.default=x},9061:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.encodeNonAsciiHTML=t.encodeHTML=void 0;var i=n(r(349)),s=r(2312),o=/[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;function a(e,t){for(var r,n="",o=0;null!==(r=e.exec(t));){var a=r.index;n+=t.substring(o,a);var l=t.charCodeAt(a),c=i.default.get(l);if("object"==typeof c){if(a+1{"use strict";let n,i,s,o,a=r(1176),l=r(1281),c=r(5621),{isClean:u,my:h}=r(6644);function d(e){return e.map((e=>(e.nodes&&(e.nodes=d(e.nodes)),delete e.source,e)))}function p(e){if(e[u]=!1,e.proxyOf.nodes)for(let t of e.proxyOf.nodes)p(t)}class f extends c{get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}append(...e){for(let t of e){let e=this.normalize(t,this.last);for(let t of e)this.proxyOf.nodes.push(t)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let t,r,n=this.getIterator();for(;this.indexes[n]"proxyOf"===t?e:e[t]?"each"===t||"string"==typeof t&&t.startsWith("walk")?(...r)=>e[t](...r.map((e=>"function"==typeof e?(t,r)=>e(t.toProxy(),r):e))):"every"===t||"some"===t?r=>e[t](((e,...t)=>r(e.toProxy(),...t))):"root"===t?()=>e.root().toProxy():"nodes"===t?e.nodes.map((e=>e.toProxy())):"first"===t||"last"===t?e[t].toProxy():e[t]:e[t],set:(e,t,r)=>(e[t]===r||(e[t]=r,"name"!==t&&"params"!==t&&"selector"!==t||e.markDirty()),!0)}}index(e){return"number"==typeof e?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,t){let r,n=this.index(e),i=this.normalize(t,this.proxyOf.nodes[n]).reverse();n=this.index(e);for(let e of i)this.proxyOf.nodes.splice(n+1,0,e);for(let e in this.indexes)r=this.indexes[e],n(e[h]||f.rebuild(e),(e=e.proxyOf).parent&&e.parent.removeChild(e),e[u]&&p(e),e.raws||(e.raws={}),void 0===e.raws.before&&t&&void 0!==t.raws.before&&(e.raws.before=t.raws.before.replace(/\S/g,"")),e.parent=this.proxyOf,e)))}prepend(...e){e=e.reverse();for(let t of e){let e=this.normalize(t,this.first,"prepend").reverse();for(let t of e)this.proxyOf.nodes.unshift(t);for(let t in this.indexes)this.indexes[t]=this.indexes[t]+e.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){let t;e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);for(let r in this.indexes)t=this.indexes[r],t>=e&&(this.indexes[r]=t-1);return this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls((n=>{t.props&&!t.props.includes(n.prop)||t.fast&&!n.value.includes(t.fast)||(n.value=n.value.replace(e,r))})),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each(((t,r)=>{let n;try{n=e(t,r)}catch(e){throw t.addToError(e)}return!1!==n&&t.walk&&(n=t.walk(e)),n}))}walkAtRules(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("atrule"===r.type&&e.test(r.name))return t(r,n)})):this.walk(((r,n)=>{if("atrule"===r.type&&r.name===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("atrule"===e.type)return t(e,r)})))}walkComments(e){return this.walk(((t,r)=>{if("comment"===t.type)return e(t,r)}))}walkDecls(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("decl"===r.type&&e.test(r.prop))return t(r,n)})):this.walk(((r,n)=>{if("decl"===r.type&&r.prop===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("decl"===e.type)return t(e,r)})))}walkRules(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("rule"===r.type&&e.test(r.selector))return t(r,n)})):this.walk(((r,n)=>{if("rule"===r.type&&r.selector===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("rule"===e.type)return t(e,r)})))}}f.registerParse=e=>{i=e},f.registerRule=e=>{o=e},f.registerAtRule=e=>{n=e},f.registerRoot=e=>{s=e},e.exports=f,f.default=f,f.rebuild=e=>{"atrule"===e.type?Object.setPrototypeOf(e,n.prototype):"rule"===e.type?Object.setPrototypeOf(e,o.prototype):"decl"===e.type?Object.setPrototypeOf(e,l.prototype):"comment"===e.type?Object.setPrototypeOf(e,a.prototype):"root"===e.type&&Object.setPrototypeOf(e,s.prototype),e[h]=!0,e.nodes&&e.nodes.forEach((e=>{f.rebuild(e)}))}},9068:(e,t,r)=>{"use strict";let n=r(2803);function i(e,t){new n(t).stringify(e)}e.exports=i,i.default=i},9332:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFeed=function(e){var t=l(h,e);return t?"feed"===t.name?function(e){var t,r=e.children,n={type:"atom",items:(0,i.getElementsByTagName)("entry",r).map((function(e){var t,r=e.children,n={media:a(r)};u(n,"id","id",r),u(n,"title","title",r);var i=null===(t=l("link",r))||void 0===t?void 0:t.attribs.href;i&&(n.link=i);var s=c("summary",r)||c("content",r);s&&(n.description=s);var o=c("updated",r);return o&&(n.pubDate=new Date(o)),n}))};u(n,"id","id",r),u(n,"title","title",r);var s=null===(t=l("link",r))||void 0===t?void 0:t.attribs.href;s&&(n.link=s),u(n,"description","subtitle",r);var o=c("updated",r);return o&&(n.updated=new Date(o)),u(n,"author","email",r,!0),n}(t):function(e){var t,r,n=null!==(r=null===(t=l("channel",e.children))||void 0===t?void 0:t.children)&&void 0!==r?r:[],s={type:e.name.substr(0,3),id:"",items:(0,i.getElementsByTagName)("item",e.children).map((function(e){var t=e.children,r={media:a(t)};u(r,"id","guid",t),u(r,"title","title",t),u(r,"link","link",t),u(r,"description","description",t);var n=c("pubDate",t)||c("dc:date",t);return n&&(r.pubDate=new Date(n)),r}))};u(s,"title","title",n),u(s,"link","link",n),u(s,"description","description",n);var o=c("lastBuildDate",n);return o&&(s.updated=new Date(o)),u(s,"author","managingEditor",n,!0),s}(t):null};var n=r(3380),i=r(5622),s=["url","type","lang"],o=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function a(e){return(0,i.getElementsByTagName)("media:content",e).map((function(e){for(var t=e.attribs,r={medium:t.medium,isDefault:!!t.isDefault},n=0,i=s;n=l)return g;n=r(h),i=[],","===n.slice(-1)?(n=n.replace(d,""),y()):b()}function b(){for(r(c),s="",o="in descriptor";;){if(a=e.charAt(m),"in descriptor"===o)if(t(a))s&&(i.push(s),s="",o="after descriptor");else{if(","===a)return m+=1,s&&i.push(s),void y();if("("===a)s+=a,o="in parens";else{if(""===a)return s&&i.push(s),void y();s+=a}}else if("in parens"===o)if(")"===a)s+=a,o="in descriptor";else{if(""===a)return i.push(s),void y();s+=a}else if("after descriptor"===o)if(t(a));else{if(""===a)return void y();o="in descriptor",m-=1}m+=1}}function y(){var t,r,s,o,a,l,c,u,h,d=!1,m={};for(o=0;o{"use strict";let n=r(9062),i=r(5653);class s extends n{get selectors(){return i.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\s*/):null,r=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(r)}constructor(e){super(e),this.type="rule",this.nodes||(this.nodes=[])}}e.exports=s,s.default=s,n.registerRule(s)},9465:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===r}(e)}(e)},r="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function n(e,t){return!1!==t.clone&&t.isMergeableObject(e)?a((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function i(e,t,r){return e.concat(t).map((function(e){return n(e,r)}))}function s(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function o(e,t){try{return t in e}catch(e){return!1}}function a(e,r,l){(l=l||{}).arrayMerge=l.arrayMerge||i,l.isMergeableObject=l.isMergeableObject||t,l.cloneUnlessOtherwiseSpecified=n;var c=Array.isArray(r);return c===Array.isArray(e)?c?l.arrayMerge(e,r,l):function(e,t,r){var i={};return r.isMergeableObject(e)&&s(e).forEach((function(t){i[t]=n(e[t],r)})),s(t).forEach((function(s){(function(e,t){return o(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,s)||(o(e,s)&&r.isMergeableObject(t[s])?i[s]=function(e,t){if(!t.customMerge)return a;var r=t.customMerge(e);return"function"==typeof r?r:a}(s,r)(e[s],t[s],r):i[s]=n(t[s],r))})),i}(e,r,l):n(r,l)}a.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,r){return a(e,r,t)}),{})};var l=a;e.exports=l},9899:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.attributeNames=t.elementNames=void 0,t.elementNames=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((function(e){return[e.toLowerCase(),e]}))),t.attributeNames=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((function(e){return[e.toLowerCase(),e]})))},9901:(e,t,r)=>{"use strict";let n,i,s=r(9062);class o extends s{constructor(e){super(e),this.type="root",this.nodes||(this.nodes=[])}normalize(e,t,r){let n=super.normalize(e);if(t)if("prepend"===r)this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let e of n)e.raws.before=t.raws.before;return n}removeChild(e,t){let r=this.index(e);return!t&&0===r&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}toResult(e={}){return new n(new i,this,e).stringify()}}o.registerLazyResult=e=>{n=e},o.registerProcessor=e=>{i=e},e.exports=o,o.default=o,s.registerRoot(o)}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},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),(()=>{"use strict";const e=function(e){let t=e.closest("label");return e.id&&!t&&(t=e.getRootNode().querySelector(`label[for="${e.id}"]`)),t?(t.querySelectorAll("input, select, textarea").forEach((e=>e.remove())),t.innerHTML):""},t=function(e){const t=e.closest("fieldset")?.querySelector?.("legend");return t?(t.querySelectorAll("input, select, textarea").forEach((e=>e.remove())),t.innerHTML):""},n=function(t){const r={name:t.name,class_name:t.className,default:t.value,label:e(t),required:t.required};return t.hasAttribute("min")&&(r.min=t.min),t.hasAttribute("max")&&(r.max=t.max),r},i=function(t){return"#text"===t?.nextSibling?.nodeName?t.nextSibling.nodeValue:e(t)},{mimes:s}=window.JetFormBuilderParserConfig,o={email:a,tel:a,url:a,password:a,text:a,color:function*(t){const r={name:t.name,class_name:t.className,default:t.value,label:e(t),required:t.required};yield{name:"jet-forms/color-picker-field",attributes:r,innerBlocks:[]}},radio:function*(r){if(r.jfbObserved)return;const n=r.getRootNode(),s=Array.from(n.querySelectorAll(`input[type="radio"][name="${r.name}"]`));s.forEach((e=>{e.jfbObserved=!0}));const o={name:r.name,class_name:r.className,field_options:[],label:t(r)||e(r),required:r.required};for(const e of s)o.field_options.push({value:e.value,label:i(e)}),e.checked&&(o.default=e.value);yield{name:"jet-forms/radio-field",attributes:o,innerBlocks:[]}},checkbox:function*(r){if(r.jfbObserved)return;const n=r.getRootNode(),s=Array.from(n.querySelectorAll(`input[type="checkbox"][name="${r.name}"]`));s.forEach((e=>{e.jfbObserved=!0}));const o={name:r.name,class_name:r.className,field_options:[],label:t(r)||e(r),required:r.required};for(const e of s)o.field_options.push({value:e.value,label:i(e)}),e.checked&&(o.default=e.value);yield{name:"jet-forms/checkbox-field",attributes:o,innerBlocks:[]}},date:function*(e){yield{name:"jet-forms/date-field",attributes:n(e),innerBlocks:[]}},datetime:l,"datetime-local":l,time:function*(e){yield{name:"jet-forms/time-field",attributes:n(e),innerBlocks:[]}},file:function*(t){const r={name:t.name,class_name:t.className,label:e(t),required:t.required,allowed_mimes:[]};r.allowed_mimes=t.accept.split(",").map((e=>function(e){let t=!1;for(const r in s){if(!s.hasOwnProperty(r))continue;const n=new RegExp(".("+r+")$","i");e.match(n)&&(t=s[r])}return t}(e.trim()))),yield{name:"jet-forms/media-field",attributes:r,innerBlocks:[]}},hidden:function*(e){yield{name:"jet-forms/hidden-field",attributes:{name:e.name,class_name:e.className,default:e.value},innerBlocks:[]}},number:function*(e){const t=n(e);t.placeholder=e.placeholder,e.hasAttribute("step")&&(t.step=e.step),yield{name:"jet-forms/number-field",attributes:t,innerBlocks:[]}},range:function*(e){const t=n(e);e.hasAttribute("step")&&(t.step=e.step),yield{name:"jet-forms/range-field",attributes:t,innerBlocks:[]}},submit:function*(e){yield{name:"jet-forms/submit-field",attributes:{label:e.value||"Submit",class_name:e.className},innerBlocks:[]}}};function*a(t){const r={field_type:t.type,name:t.name,class_name:t.className,default:t.value,label:e(t),required:t.required,placeholder:t.placeholder};t.hasAttribute("maxlength")&&(r.maxlength=t.maxLength),t.hasAttribute("minlength")&&(r.minlength=t.minLength),yield{name:"jet-forms/text-field",attributes:r,innerBlocks:[]}}function*l(e){yield{name:"jet-forms/datetime-field",attributes:n(e),innerBlocks:[]}}const{applyFilters:c}=JetPlugins.hooks,u={INPUT:function*(e){if(e.type=e.type||"text",!o.hasOwnProperty(e.type))return;const t=o[e.type];yield*t(e)},SELECT:function*(t){const r={name:t.name,class_name:t.className,label:e(t),required:t.required,field_options:[]},n=Object.entries(t.options);for(const[e,t]of n)0!==+e||t.value?(r.field_options.push({value:t.value,label:t.label}),t.selected&&(r.default=t.value)):r.placeholder=t.label;yield{name:"jet-forms/select-field",attributes:r,innerBlocks:[]}},TEXTAREA:function*(t){const r={name:t.name,class_name:t.className,label:e(t),required:t.required,placeholder:t.placeholder};t.hasAttribute("maxlength")&&(r.maxlength=t.maxLength),t.hasAttribute("minlength")&&(r.minlength=t.minLength),yield{name:"jet-forms/textarea-field",attributes:r,innerBlocks:[]}},BUTTON:function*(e){!e.type||e.type&&"submit"!==e.type||(yield{name:"jet-forms/submit-field",attributes:{label:e.innerHTML.trim(),class_name:e.className},innerBlocks:[]})}};var h=r(8059),d=r.n(h);document.createElement("div");window.JetFormBuilderParser={parseHTMLtoBlocks:function(e){const t=document.createElement("div");t.innerHTML=e;const r=[],n=t.querySelectorAll("input, textarea, select, button");for(const e of n){const t=c("jet.fb.parse.node",!1,e);if(Array.isArray(t)){r.push(...t);continue}const n=u[e.nodeName];r.push(...Array.from(n(e)))}return r},resolveLabel:e,getFormInnerFields:function(e){const t=d()(e,{allowedTags:["form","input","select","option","textarea","button","fieldset","legend","label","div","h1","h2","h3","h4","h5","h6","span","p","br"],allowedAttributes:!1}),r=document.createElement("div");r.innerHTML=t;const n=r.querySelector("form");return n?n.innerHTML:""}}})()})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "../../../../node_modules/deepmerge/dist/cjs.js": +/*!******************************************************!*\ + !*** ../../../../node_modules/deepmerge/dist/cjs.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + + +var isMergeableObject = function isMergeableObject(value) { + return isNonNullObject(value) + && !isSpecial(value) +}; + +function isNonNullObject(value) { + return !!value && typeof value === 'object' +} + +function isSpecial(value) { + var stringValue = Object.prototype.toString.call(value); + + return stringValue === '[object RegExp]' + || stringValue === '[object Date]' + || isReactElement(value) +} + +// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25 +var canUseSymbol = typeof Symbol === 'function' && Symbol.for; +var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7; + +function isReactElement(value) { + return value.$$typeof === REACT_ELEMENT_TYPE +} + +function emptyTarget(val) { + return Array.isArray(val) ? [] : {} +} + +function cloneUnlessOtherwiseSpecified(value, options) { + return (options.clone !== false && options.isMergeableObject(value)) + ? deepmerge(emptyTarget(value), value, options) + : value +} + +function defaultArrayMerge(target, source, options) { + return target.concat(source).map(function(element) { + return cloneUnlessOtherwiseSpecified(element, options) + }) +} + +function getMergeFunction(key, options) { + if (!options.customMerge) { + return deepmerge + } + var customMerge = options.customMerge(key); + return typeof customMerge === 'function' ? customMerge : deepmerge +} + +function getEnumerableOwnPropertySymbols(target) { + return Object.getOwnPropertySymbols + ? Object.getOwnPropertySymbols(target).filter(function(symbol) { + return Object.propertyIsEnumerable.call(target, symbol) + }) + : [] +} + +function getKeys(target) { + return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)) +} + +function propertyIsOnObject(object, property) { + try { + return property in object + } catch(_) { + return false + } +} + +// Protects from prototype poisoning and unexpected merging up the prototype chain. +function propertyIsUnsafe(target, key) { + return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet, + && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain, + && Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable. +} + +function mergeObject(target, source, options) { + var destination = {}; + if (options.isMergeableObject(target)) { + getKeys(target).forEach(function(key) { + destination[key] = cloneUnlessOtherwiseSpecified(target[key], options); + }); + } + getKeys(source).forEach(function(key) { + if (propertyIsUnsafe(target, key)) { + return + } + + if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) { + destination[key] = getMergeFunction(key, options)(target[key], source[key], options); + } else { + destination[key] = cloneUnlessOtherwiseSpecified(source[key], options); + } + }); + return destination +} + +function deepmerge(target, source, options) { + options = options || {}; + options.arrayMerge = options.arrayMerge || defaultArrayMerge; + options.isMergeableObject = options.isMergeableObject || isMergeableObject; + // cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge() + // implementations can use it. The caller may not replace it. + options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified; + + var sourceIsArray = Array.isArray(source); + var targetIsArray = Array.isArray(target); + var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; + + if (!sourceAndTargetTypesMatch) { + return cloneUnlessOtherwiseSpecified(source, options) + } else if (sourceIsArray) { + return options.arrayMerge(target, source, options) + } else { + return mergeObject(target, source, options) + } +} + +deepmerge.all = function deepmergeAll(array, options) { + if (!Array.isArray(array)) { + throw new Error('first argument should be an array') + } + + return array.reduce(function(prev, next) { + return deepmerge(prev, next, options) + }, {}) +}; + +var deepmerge_1 = deepmerge; + +module.exports = deepmerge_1; + + +/***/ }), + +/***/ "../../../../node_modules/dom-serializer/lib/foreignNames.js": +/*!*******************************************************************!*\ + !*** ../../../../node_modules/dom-serializer/lib/foreignNames.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.attributeNames = exports.elementNames = void 0; +exports.elementNames = new Map([ + "altGlyph", + "altGlyphDef", + "altGlyphItem", + "animateColor", + "animateMotion", + "animateTransform", + "clipPath", + "feBlend", + "feColorMatrix", + "feComponentTransfer", + "feComposite", + "feConvolveMatrix", + "feDiffuseLighting", + "feDisplacementMap", + "feDistantLight", + "feDropShadow", + "feFlood", + "feFuncA", + "feFuncB", + "feFuncG", + "feFuncR", + "feGaussianBlur", + "feImage", + "feMerge", + "feMergeNode", + "feMorphology", + "feOffset", + "fePointLight", + "feSpecularLighting", + "feSpotLight", + "feTile", + "feTurbulence", + "foreignObject", + "glyphRef", + "linearGradient", + "radialGradient", + "textPath", +].map(function (val) { return [val.toLowerCase(), val]; })); +exports.attributeNames = new Map([ + "definitionURL", + "attributeName", + "attributeType", + "baseFrequency", + "baseProfile", + "calcMode", + "clipPathUnits", + "diffuseConstant", + "edgeMode", + "filterUnits", + "glyphRef", + "gradientTransform", + "gradientUnits", + "kernelMatrix", + "kernelUnitLength", + "keyPoints", + "keySplines", + "keyTimes", + "lengthAdjust", + "limitingConeAngle", + "markerHeight", + "markerUnits", + "markerWidth", + "maskContentUnits", + "maskUnits", + "numOctaves", + "pathLength", + "patternContentUnits", + "patternTransform", + "patternUnits", + "pointsAtX", + "pointsAtY", + "pointsAtZ", + "preserveAlpha", + "preserveAspectRatio", + "primitiveUnits", + "refX", + "refY", + "repeatCount", + "repeatDur", + "requiredExtensions", + "requiredFeatures", + "specularConstant", + "specularExponent", + "spreadMethod", + "startOffset", + "stdDeviation", + "stitchTiles", + "surfaceScale", + "systemLanguage", + "tableValues", + "targetX", + "targetY", + "textLength", + "viewBox", + "viewTarget", + "xChannelSelector", + "yChannelSelector", + "zoomAndPan", +].map(function (val) { return [val.toLowerCase(), val]; })); + + +/***/ }), + +/***/ "../../../../node_modules/dom-serializer/lib/index.js": +/*!************************************************************!*\ + !*** ../../../../node_modules/dom-serializer/lib/index.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.render = void 0; +/* + * Module dependencies + */ +var ElementType = __importStar(__webpack_require__(/*! domelementtype */ "../../../../node_modules/domelementtype/lib/index.js")); +var entities_1 = __webpack_require__(/*! entities */ "../../../../node_modules/entities/lib/index.js"); +/** + * Mixed-case SVG and MathML tags & attributes + * recognized by the HTML parser. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign + */ +var foreignNames_js_1 = __webpack_require__(/*! ./foreignNames.js */ "../../../../node_modules/dom-serializer/lib/foreignNames.js"); +var unencodedElements = new Set([ + "style", + "script", + "xmp", + "iframe", + "noembed", + "noframes", + "plaintext", + "noscript", +]); +function replaceQuotes(value) { + return value.replace(/"/g, """); +} +/** + * Format attributes + */ +function formatAttributes(attributes, opts) { + var _a; + if (!attributes) + return; + var encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false + ? replaceQuotes + : opts.xmlMode || opts.encodeEntities !== "utf8" + ? entities_1.encodeXML + : entities_1.escapeAttribute; + return Object.keys(attributes) + .map(function (key) { + var _a, _b; + var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : ""; + if (opts.xmlMode === "foreign") { + /* Fix up mixed-case attribute names */ + key = (_b = foreignNames_js_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key; + } + if (!opts.emptyAttrs && !opts.xmlMode && value === "") { + return key; + } + return "".concat(key, "=\"").concat(encode(value), "\""); + }) + .join(" "); +} +/** + * Self-enclosing tags + */ +var singleTag = new Set([ + "area", + "base", + "basefont", + "br", + "col", + "command", + "embed", + "frame", + "hr", + "img", + "input", + "isindex", + "keygen", + "link", + "meta", + "param", + "source", + "track", + "wbr", +]); +/** + * Renders a DOM node or an array of DOM nodes to a string. + * + * Can be thought of as the equivalent of the `outerHTML` of the passed node(s). + * + * @param node Node to be rendered. + * @param options Changes serialization behavior + */ +function render(node, options) { + if (options === void 0) { options = {}; } + var nodes = "length" in node ? node : [node]; + var output = ""; + for (var i = 0; i < nodes.length; i++) { + output += renderNode(nodes[i], options); + } + return output; +} +exports.render = render; +exports["default"] = render; +function renderNode(node, options) { + switch (node.type) { + case ElementType.Root: + return render(node.children, options); + // @ts-expect-error We don't use `Doctype` yet + case ElementType.Doctype: + case ElementType.Directive: + return renderDirective(node); + case ElementType.Comment: + return renderComment(node); + case ElementType.CDATA: + return renderCdata(node); + case ElementType.Script: + case ElementType.Style: + case ElementType.Tag: + return renderTag(node, options); + case ElementType.Text: + return renderText(node, options); + } +} +var foreignModeIntegrationPoints = new Set([ + "mi", + "mo", + "mn", + "ms", + "mtext", + "annotation-xml", + "foreignObject", + "desc", + "title", +]); +var foreignElements = new Set(["svg", "math"]); +function renderTag(elem, opts) { + var _a; + // Handle SVG / MathML in HTML + if (opts.xmlMode === "foreign") { + /* Fix up mixed-case element names */ + elem.name = (_a = foreignNames_js_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name; + /* Exit foreign mode at integration points */ + if (elem.parent && + foreignModeIntegrationPoints.has(elem.parent.name)) { + opts = __assign(__assign({}, opts), { xmlMode: false }); + } + } + if (!opts.xmlMode && foreignElements.has(elem.name)) { + opts = __assign(__assign({}, opts), { xmlMode: "foreign" }); + } + var tag = "<".concat(elem.name); + var attribs = formatAttributes(elem.attribs, opts); + if (attribs) { + tag += " ".concat(attribs); + } + if (elem.children.length === 0 && + (opts.xmlMode + ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags + opts.selfClosingTags !== false + : // User explicitly asked for self-closing tags, even in HTML mode + opts.selfClosingTags && singleTag.has(elem.name))) { + if (!opts.xmlMode) + tag += " "; + tag += "/>"; + } + else { + tag += ">"; + if (elem.children.length > 0) { + tag += render(elem.children, opts); + } + if (opts.xmlMode || !singleTag.has(elem.name)) { + tag += ""); + } + } + return tag; +} +function renderDirective(elem) { + return "<".concat(elem.data, ">"); +} +function renderText(elem, opts) { + var _a; + var data = elem.data || ""; + // If entities weren't decoded, no need to encode them back + if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false && + !(!opts.xmlMode && + elem.parent && + unencodedElements.has(elem.parent.name))) { + data = + opts.xmlMode || opts.encodeEntities !== "utf8" + ? (0, entities_1.encodeXML)(data) + : (0, entities_1.escapeText)(data); + } + return data; +} +function renderCdata(elem) { + return ""); +} +function renderComment(elem) { + return ""); +} + + +/***/ }), + +/***/ "../../../../node_modules/domelementtype/lib/index.js": +/*!************************************************************!*\ + !*** ../../../../node_modules/domelementtype/lib/index.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0; +/** Types of elements found in htmlparser2's DOM */ +var ElementType; +(function (ElementType) { + /** Type for the root element of a document */ + ElementType["Root"] = "root"; + /** Type for Text */ + ElementType["Text"] = "text"; + /** Type for */ + ElementType["Directive"] = "directive"; + /** Type for */ + ElementType["Comment"] = "comment"; + /** Type for `. + this.sequenceIndex = Number(c === CharCodes.Lt); + } + }; + Tokenizer.prototype.stateCDATASequence = function (c) { + if (c === Sequences.Cdata[this.sequenceIndex]) { + if (++this.sequenceIndex === Sequences.Cdata.length) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CdataEnd; + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + } + } + else { + this.sequenceIndex = 0; + this.state = State.InDeclaration; + this.stateInDeclaration(c); // Reconsume the character + } + }; + /** + * When we wait for one specific character, we can speed things up + * by skipping through the buffer until we find it. + * + * @returns Whether the character was found. + */ + Tokenizer.prototype.fastForwardTo = function (c) { + while (++this.index < this.buffer.length + this.offset) { + if (this.buffer.charCodeAt(this.index - this.offset) === c) { + return true; + } + } + /* + * We increment the index at the end of the `parse` loop, + * so set it to `buffer.length - 1` here. + * + * TODO: Refactor `parse` to increment index before calling states. + */ + this.index = this.buffer.length + this.offset - 1; + return false; + }; + /** + * Comments and CDATA end with `-->` and `]]>`. + * + * Their common qualities are: + * - Their end sequences have a distinct character they start with. + * - That character is then repeated, so we have to check multiple repeats. + * - All characters but the start character of the sequence can be skipped. + */ + Tokenizer.prototype.stateInCommentLike = function (c) { + if (c === this.currentSequence[this.sequenceIndex]) { + if (++this.sequenceIndex === this.currentSequence.length) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, this.index, 2); + } + else { + this.cbs.oncomment(this.sectionStart, this.index, 2); + } + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + this.state = State.Text; + } + } + else if (this.sequenceIndex === 0) { + // Fast-forward to the first character of the sequence + if (this.fastForwardTo(this.currentSequence[0])) { + this.sequenceIndex = 1; + } + } + else if (c !== this.currentSequence[this.sequenceIndex - 1]) { + // Allow long sequences, eg. --->, ]]]> + this.sequenceIndex = 0; + } + }; + /** + * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name. + * + * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar). + * We allow anything that wouldn't end the tag. + */ + Tokenizer.prototype.isTagStartChar = function (c) { + return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c); + }; + Tokenizer.prototype.startSpecial = function (sequence, offset) { + this.isSpecial = true; + this.currentSequence = sequence; + this.sequenceIndex = offset; + this.state = State.SpecialStartSequence; + }; + Tokenizer.prototype.stateBeforeTagName = function (c) { + if (c === CharCodes.ExclamationMark) { + this.state = State.BeforeDeclaration; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Questionmark) { + this.state = State.InProcessingInstruction; + this.sectionStart = this.index + 1; + } + else if (this.isTagStartChar(c)) { + var lower = c | 0x20; + this.sectionStart = this.index; + if (!this.xmlMode && lower === Sequences.TitleEnd[2]) { + this.startSpecial(Sequences.TitleEnd, 3); + } + else { + this.state = + !this.xmlMode && lower === Sequences.ScriptEnd[2] + ? State.BeforeSpecialS + : State.InTagName; + } + } + else if (c === CharCodes.Slash) { + this.state = State.BeforeClosingTagName; + } + else { + this.state = State.Text; + this.stateText(c); + } + }; + Tokenizer.prototype.stateInTagName = function (c) { + if (isEndOfTagSection(c)) { + this.cbs.onopentagname(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + }; + Tokenizer.prototype.stateBeforeClosingTagName = function (c) { + if (isWhitespace(c)) { + // Ignore + } + else if (c === CharCodes.Gt) { + this.state = State.Text; + } + else { + this.state = this.isTagStartChar(c) + ? State.InClosingTagName + : State.InSpecialComment; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateInClosingTagName = function (c) { + if (c === CharCodes.Gt || isWhitespace(c)) { + this.cbs.onclosetag(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.AfterClosingTagName; + this.stateAfterClosingTagName(c); + } + }; + Tokenizer.prototype.stateAfterClosingTagName = function (c) { + // Skip everything until ">" + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.state = State.Text; + this.baseState = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeAttributeName = function (c) { + if (c === CharCodes.Gt) { + this.cbs.onopentagend(this.index); + if (this.isSpecial) { + this.state = State.InSpecialTag; + this.sequenceIndex = 0; + } + else { + this.state = State.Text; + } + this.baseState = this.state; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Slash) { + this.state = State.InSelfClosingTag; + } + else if (!isWhitespace(c)) { + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateInSelfClosingTag = function (c) { + if (c === CharCodes.Gt) { + this.cbs.onselfclosingtag(this.index); + this.state = State.Text; + this.baseState = State.Text; + this.sectionStart = this.index + 1; + this.isSpecial = false; // Reset special state, in case of self-closing special tags + } + else if (!isWhitespace(c)) { + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + }; + Tokenizer.prototype.stateInAttributeName = function (c) { + if (c === CharCodes.Eq || isEndOfTagSection(c)) { + this.cbs.onattribname(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.AfterAttributeName; + this.stateAfterAttributeName(c); + } + }; + Tokenizer.prototype.stateAfterAttributeName = function (c) { + if (c === CharCodes.Eq) { + this.state = State.BeforeAttributeValue; + } + else if (c === CharCodes.Slash || c === CharCodes.Gt) { + this.cbs.onattribend(QuoteType.NoValue, this.index); + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (!isWhitespace(c)) { + this.cbs.onattribend(QuoteType.NoValue, this.index); + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateBeforeAttributeValue = function (c) { + if (c === CharCodes.DoubleQuote) { + this.state = State.InAttributeValueDq; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.SingleQuote) { + this.state = State.InAttributeValueSq; + this.sectionStart = this.index + 1; + } + else if (!isWhitespace(c)) { + this.sectionStart = this.index; + this.state = State.InAttributeValueNq; + this.stateInAttributeValueNoQuotes(c); // Reconsume token + } + }; + Tokenizer.prototype.handleInAttributeValue = function (c, quote) { + if (c === quote || + (!this.decodeEntities && this.fastForwardTo(quote))) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(quote === CharCodes.DoubleQuote + ? QuoteType.Double + : QuoteType.Single, this.index); + this.state = State.BeforeAttributeName; + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.baseState = this.state; + this.state = State.BeforeEntity; + } + }; + Tokenizer.prototype.stateInAttributeValueDoubleQuotes = function (c) { + this.handleInAttributeValue(c, CharCodes.DoubleQuote); + }; + Tokenizer.prototype.stateInAttributeValueSingleQuotes = function (c) { + this.handleInAttributeValue(c, CharCodes.SingleQuote); + }; + Tokenizer.prototype.stateInAttributeValueNoQuotes = function (c) { + if (isWhitespace(c) || c === CharCodes.Gt) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(QuoteType.Unquoted, this.index); + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.baseState = this.state; + this.state = State.BeforeEntity; + } + }; + Tokenizer.prototype.stateBeforeDeclaration = function (c) { + if (c === CharCodes.OpeningSquareBracket) { + this.state = State.CDATASequence; + this.sequenceIndex = 0; + } + else { + this.state = + c === CharCodes.Dash + ? State.BeforeComment + : State.InDeclaration; + } + }; + Tokenizer.prototype.stateInDeclaration = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.ondeclaration(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateInProcessingInstruction = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.onprocessinginstruction(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeComment = function (c) { + if (c === CharCodes.Dash) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CommentEnd; + // Allow short comments (eg. ) + this.sequenceIndex = 2; + this.sectionStart = this.index + 1; + } + else { + this.state = State.InDeclaration; + } + }; + Tokenizer.prototype.stateInSpecialComment = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.oncomment(this.sectionStart, this.index, 0); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeSpecialS = function (c) { + var lower = c | 0x20; + if (lower === Sequences.ScriptEnd[3]) { + this.startSpecial(Sequences.ScriptEnd, 4); + } + else if (lower === Sequences.StyleEnd[3]) { + this.startSpecial(Sequences.StyleEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + }; + Tokenizer.prototype.stateBeforeEntity = function (c) { + // Start excess with 1 to include the '&' + this.entityExcess = 1; + this.entityResult = 0; + if (c === CharCodes.Number) { + this.state = State.BeforeNumericEntity; + } + else if (c === CharCodes.Amp) { + // We have two `&` characters in a row. Stay in the current state. + } + else { + this.trieIndex = 0; + this.trieCurrent = this.entityTrie[0]; + this.state = State.InNamedEntity; + this.stateInNamedEntity(c); + } + }; + Tokenizer.prototype.stateInNamedEntity = function (c) { + this.entityExcess += 1; + this.trieIndex = (0, decode_js_1.determineBranch)(this.entityTrie, this.trieCurrent, this.trieIndex + 1, c); + if (this.trieIndex < 0) { + this.emitNamedEntity(); + this.index--; + return; + } + this.trieCurrent = this.entityTrie[this.trieIndex]; + var masked = this.trieCurrent & decode_js_1.BinTrieFlags.VALUE_LENGTH; + // If the branch is a value, store it and continue + if (masked) { + // The mask is the number of bytes of the value, including the current byte. + var valueLength = (masked >> 14) - 1; + // If we have a legacy entity while parsing strictly, just skip the number of bytes + if (!this.allowLegacyEntity() && c !== CharCodes.Semi) { + this.trieIndex += valueLength; + } + else { + // Add 1 as we have already incremented the excess + var entityStart = this.index - this.entityExcess + 1; + if (entityStart > this.sectionStart) { + this.emitPartial(this.sectionStart, entityStart); + } + // If this is a surrogate pair, consume the next two bytes + this.entityResult = this.trieIndex; + this.trieIndex += valueLength; + this.entityExcess = 0; + this.sectionStart = this.index + 1; + if (valueLength === 0) { + this.emitNamedEntity(); + } + } + } + }; + Tokenizer.prototype.emitNamedEntity = function () { + this.state = this.baseState; + if (this.entityResult === 0) { + return; + } + var valueLength = (this.entityTrie[this.entityResult] & decode_js_1.BinTrieFlags.VALUE_LENGTH) >> + 14; + switch (valueLength) { + case 1: { + this.emitCodePoint(this.entityTrie[this.entityResult] & + ~decode_js_1.BinTrieFlags.VALUE_LENGTH); + break; + } + case 2: { + this.emitCodePoint(this.entityTrie[this.entityResult + 1]); + break; + } + case 3: { + this.emitCodePoint(this.entityTrie[this.entityResult + 1]); + this.emitCodePoint(this.entityTrie[this.entityResult + 2]); + } + } + }; + Tokenizer.prototype.stateBeforeNumericEntity = function (c) { + if ((c | 0x20) === CharCodes.LowerX) { + this.entityExcess++; + this.state = State.InHexEntity; + } + else { + this.state = State.InNumericEntity; + this.stateInNumericEntity(c); + } + }; + Tokenizer.prototype.emitNumericEntity = function (strict) { + var entityStart = this.index - this.entityExcess - 1; + var numberStart = entityStart + 2 + Number(this.state === State.InHexEntity); + if (numberStart !== this.index) { + // Emit leading data if any + if (entityStart > this.sectionStart) { + this.emitPartial(this.sectionStart, entityStart); + } + this.sectionStart = this.index + Number(strict); + this.emitCodePoint((0, decode_js_1.replaceCodePoint)(this.entityResult)); + } + this.state = this.baseState; + }; + Tokenizer.prototype.stateInNumericEntity = function (c) { + if (c === CharCodes.Semi) { + this.emitNumericEntity(true); + } + else if (isNumber(c)) { + this.entityResult = this.entityResult * 10 + (c - CharCodes.Zero); + this.entityExcess++; + } + else { + if (this.allowLegacyEntity()) { + this.emitNumericEntity(false); + } + else { + this.state = this.baseState; + } + this.index--; + } + }; + Tokenizer.prototype.stateInHexEntity = function (c) { + if (c === CharCodes.Semi) { + this.emitNumericEntity(true); + } + else if (isNumber(c)) { + this.entityResult = this.entityResult * 16 + (c - CharCodes.Zero); + this.entityExcess++; + } + else if (isHexDigit(c)) { + this.entityResult = + this.entityResult * 16 + ((c | 0x20) - CharCodes.LowerA + 10); + this.entityExcess++; + } + else { + if (this.allowLegacyEntity()) { + this.emitNumericEntity(false); + } + else { + this.state = this.baseState; + } + this.index--; + } + }; + Tokenizer.prototype.allowLegacyEntity = function () { + return (!this.xmlMode && + (this.baseState === State.Text || + this.baseState === State.InSpecialTag)); + }; + /** + * Remove data that has already been consumed from the buffer. + */ + Tokenizer.prototype.cleanup = function () { + // If we are inside of text or attributes, emit what we already have. + if (this.running && this.sectionStart !== this.index) { + if (this.state === State.Text || + (this.state === State.InSpecialTag && this.sequenceIndex === 0)) { + this.cbs.ontext(this.sectionStart, this.index); + this.sectionStart = this.index; + } + else if (this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueNq) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = this.index; + } + } + }; + Tokenizer.prototype.shouldContinue = function () { + return this.index < this.buffer.length + this.offset && this.running; + }; + /** + * Iterates through the buffer, calling the function corresponding to the current state. + * + * States that are more likely to be hit are higher up, as a performance improvement. + */ + Tokenizer.prototype.parse = function () { + while (this.shouldContinue()) { + var c = this.buffer.charCodeAt(this.index - this.offset); + switch (this.state) { + case State.Text: { + this.stateText(c); + break; + } + case State.SpecialStartSequence: { + this.stateSpecialStartSequence(c); + break; + } + case State.InSpecialTag: { + this.stateInSpecialTag(c); + break; + } + case State.CDATASequence: { + this.stateCDATASequence(c); + break; + } + case State.InAttributeValueDq: { + this.stateInAttributeValueDoubleQuotes(c); + break; + } + case State.InAttributeName: { + this.stateInAttributeName(c); + break; + } + case State.InCommentLike: { + this.stateInCommentLike(c); + break; + } + case State.InSpecialComment: { + this.stateInSpecialComment(c); + break; + } + case State.BeforeAttributeName: { + this.stateBeforeAttributeName(c); + break; + } + case State.InTagName: { + this.stateInTagName(c); + break; + } + case State.InClosingTagName: { + this.stateInClosingTagName(c); + break; + } + case State.BeforeTagName: { + this.stateBeforeTagName(c); + break; + } + case State.AfterAttributeName: { + this.stateAfterAttributeName(c); + break; + } + case State.InAttributeValueSq: { + this.stateInAttributeValueSingleQuotes(c); + break; + } + case State.BeforeAttributeValue: { + this.stateBeforeAttributeValue(c); + break; + } + case State.BeforeClosingTagName: { + this.stateBeforeClosingTagName(c); + break; + } + case State.AfterClosingTagName: { + this.stateAfterClosingTagName(c); + break; + } + case State.BeforeSpecialS: { + this.stateBeforeSpecialS(c); + break; + } + case State.InAttributeValueNq: { + this.stateInAttributeValueNoQuotes(c); + break; + } + case State.InSelfClosingTag: { + this.stateInSelfClosingTag(c); + break; + } + case State.InDeclaration: { + this.stateInDeclaration(c); + break; + } + case State.BeforeDeclaration: { + this.stateBeforeDeclaration(c); + break; + } + case State.BeforeComment: { + this.stateBeforeComment(c); + break; + } + case State.InProcessingInstruction: { + this.stateInProcessingInstruction(c); + break; + } + case State.InNamedEntity: { + this.stateInNamedEntity(c); + break; + } + case State.BeforeEntity: { + this.stateBeforeEntity(c); + break; + } + case State.InHexEntity: { + this.stateInHexEntity(c); + break; + } + case State.InNumericEntity: { + this.stateInNumericEntity(c); + break; + } + default: { + // `this._state === State.BeforeNumericEntity` + this.stateBeforeNumericEntity(c); + } + } + this.index++; + } + this.cleanup(); + }; + Tokenizer.prototype.finish = function () { + if (this.state === State.InNamedEntity) { + this.emitNamedEntity(); + } + // If there is remaining data, emit it in a reasonable way + if (this.sectionStart < this.index) { + this.handleTrailingData(); + } + this.cbs.onend(); + }; + /** Handle any trailing data. */ + Tokenizer.prototype.handleTrailingData = function () { + var endIndex = this.buffer.length + this.offset; + if (this.state === State.InCommentLike) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, endIndex, 0); + } + else { + this.cbs.oncomment(this.sectionStart, endIndex, 0); + } + } + else if (this.state === State.InNumericEntity && + this.allowLegacyEntity()) { + this.emitNumericEntity(false); + // All trailing data will have been consumed + } + else if (this.state === State.InHexEntity && + this.allowLegacyEntity()) { + this.emitNumericEntity(false); + // All trailing data will have been consumed + } + else if (this.state === State.InTagName || + this.state === State.BeforeAttributeName || + this.state === State.BeforeAttributeValue || + this.state === State.AfterAttributeName || + this.state === State.InAttributeName || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueNq || + this.state === State.InClosingTagName) { + /* + * If we are currently in an opening or closing tag, us not calling the + * respective callback signals that the tag should be ignored. + */ + } + else { + this.cbs.ontext(this.sectionStart, endIndex); + } + }; + Tokenizer.prototype.emitPartial = function (start, endIndex) { + if (this.baseState !== State.Text && + this.baseState !== State.InSpecialTag) { + this.cbs.onattribdata(start, endIndex); + } + else { + this.cbs.ontext(start, endIndex); + } + }; + Tokenizer.prototype.emitCodePoint = function (cp) { + if (this.baseState !== State.Text && + this.baseState !== State.InSpecialTag) { + this.cbs.onattribentity(cp); + } + else { + this.cbs.ontextentity(cp); + } + }; + return Tokenizer; +}()); +exports["default"] = Tokenizer; +//# sourceMappingURL=Tokenizer.js.map + +/***/ }), + +/***/ "../../../../node_modules/htmlparser2/lib/index.js": +/*!*********************************************************!*\ + !*** ../../../../node_modules/htmlparser2/lib/index.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.Tokenizer = exports.createDomStream = exports.parseDOM = exports.parseDocument = exports.DefaultHandler = exports.DomHandler = exports.Parser = void 0; +var Parser_js_1 = __webpack_require__(/*! ./Parser.js */ "../../../../node_modules/htmlparser2/lib/Parser.js"); +var Parser_js_2 = __webpack_require__(/*! ./Parser.js */ "../../../../node_modules/htmlparser2/lib/Parser.js"); +Object.defineProperty(exports, "Parser", ({ enumerable: true, get: function () { return Parser_js_2.Parser; } })); +var domhandler_1 = __webpack_require__(/*! domhandler */ "../../../../node_modules/domhandler/lib/index.js"); +var domhandler_2 = __webpack_require__(/*! domhandler */ "../../../../node_modules/domhandler/lib/index.js"); +Object.defineProperty(exports, "DomHandler", ({ enumerable: true, get: function () { return domhandler_2.DomHandler; } })); +// Old name for DomHandler +Object.defineProperty(exports, "DefaultHandler", ({ enumerable: true, get: function () { return domhandler_2.DomHandler; } })); +// Helper methods +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM builder. + */ +function parseDocument(data, options) { + var handler = new domhandler_1.DomHandler(undefined, options); + new Parser_js_1.Parser(handler, options).end(data); + return handler.root; +} +exports.parseDocument = parseDocument; +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM builder. + * @deprecated Use `parseDocument` instead. + */ +function parseDOM(data, options) { + return parseDocument(data, options).children; +} +exports.parseDOM = parseDOM; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed. + * @param options Optional options for the parser and DOM builder. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +function createDomStream(callback, options, elementCallback) { + var handler = new domhandler_1.DomHandler(callback, options, elementCallback); + return new Parser_js_1.Parser(handler, options); +} +exports.createDomStream = createDomStream; +var Tokenizer_js_1 = __webpack_require__(/*! ./Tokenizer.js */ "../../../../node_modules/htmlparser2/lib/Tokenizer.js"); +Object.defineProperty(exports, "Tokenizer", ({ enumerable: true, get: function () { return __importDefault(Tokenizer_js_1).default; } })); +/* + * All of the following exports exist for backwards-compatibility. + * They should probably be removed eventually. + */ +exports.ElementType = __importStar(__webpack_require__(/*! domelementtype */ "../../../../node_modules/domelementtype/lib/index.js")); +var domutils_1 = __webpack_require__(/*! domutils */ "../../../../node_modules/domutils/lib/index.js"); +var domutils_2 = __webpack_require__(/*! domutils */ "../../../../node_modules/domutils/lib/index.js"); +Object.defineProperty(exports, "getFeed", ({ enumerable: true, get: function () { return domutils_2.getFeed; } })); +var parseFeedDefaultOptions = { xmlMode: true }; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +function parseFeed(feed, options) { + if (options === void 0) { options = parseFeedDefaultOptions; } + return (0, domutils_1.getFeed)(parseDOM(feed, options)); +} +exports.parseFeed = parseFeed; +exports.DomUtils = __importStar(__webpack_require__(/*! domutils */ "../../../../node_modules/domutils/lib/index.js")); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ "../../../../node_modules/is-plain-object/dist/is-plain-object.js": +/*!************************************************************************!*\ + !*** ../../../../node_modules/is-plain-object/dist/is-plain-object.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +/*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +function isObject(o) { + return Object.prototype.toString.call(o) === '[object Object]'; +} + +function isPlainObject(o) { + var ctor,prot; + + if (isObject(o) === false) return false; + + // If has modified constructor + ctor = o.constructor; + if (ctor === undefined) return true; + + // If has modified prototype + prot = ctor.prototype; + if (isObject(prot) === false) return false; + + // If constructor does not have an Object-specific method + if (prot.hasOwnProperty('isPrototypeOf') === false) { + return false; + } + + // Most likely a plain Object + return true; +} + +exports.isPlainObject = isPlainObject; + + +/***/ }), + +/***/ "../../../../node_modules/nanoid/non-secure/index.cjs": +/*!************************************************************!*\ + !*** ../../../../node_modules/nanoid/non-secure/index.cjs ***! + \************************************************************/ +/***/ ((module) => { + +// This alphabet uses `A-Za-z0-9_-` symbols. +// The order of characters is optimized for better gzip and brotli compression. +// References to the same file (works both for gzip and brotli): +// `'use`, `andom`, and `rict'` +// References to the brotli default dictionary: +// `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf` +let urlAlphabet = + 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' + +let customAlphabet = (alphabet, defaultSize = 21) => { + return (size = defaultSize) => { + let id = '' + // A compact alternative for `for (var i = 0; i < step; i++)`. + let i = size | 0 + while (i--) { + // `| 0` is more compact and faster than `Math.floor()`. + id += alphabet[(Math.random() * alphabet.length) | 0] + } + return id + } +} + +let nanoid = (size = 21) => { + let id = '' + // A compact alternative for `for (var i = 0; i < step; i++)`. + let i = size | 0 + while (i--) { + // `| 0` is more compact and faster than `Math.floor()`. + id += urlAlphabet[(Math.random() * 64) | 0] + } + return id +} + +module.exports = { nanoid, customAlphabet } + + +/***/ }), + +/***/ "../../../../node_modules/parse-srcset/src/parse-srcset.js": +/*!*****************************************************************!*\ + !*** ../../../../node_modules/parse-srcset/src/parse-srcset.js ***! + \*****************************************************************/ +/***/ (function(module, exports) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/** + * Srcset Parser + * + * By Alex Bell | MIT License + * + * JS Parser for the string value that appears in markup + * + * @returns Array [{url: _, d: _, w: _, h:_}, ...] + * + * Based super duper closely on the reference algorithm at: + * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute + * + * Most comments are copied in directly from the spec + * (except for comments in parens). + */ + +(function (root, factory) { + if (true) { + // AMD. Register as an anonymous module. + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} +}(this, function () { + + // 1. Let input be the value passed to this algorithm. + return function (input) { + + // UTILITY FUNCTIONS + + // Manual is faster than RegEx + // http://bjorn.tipling.com/state-and-regular-expressions-in-javascript + // http://jsperf.com/whitespace-character/5 + function isSpace(c) { + return (c === "\u0020" || // space + c === "\u0009" || // horizontal tab + c === "\u000A" || // new line + c === "\u000C" || // form feed + c === "\u000D"); // carriage return + } + + function collectCharacters(regEx) { + var chars, + match = regEx.exec(input.substring(pos)); + if (match) { + chars = match[ 0 ]; + pos += chars.length; + return chars; + } + } + + var inputLength = input.length, + + // (Don't use \s, to avoid matching non-breaking space) + regexLeadingSpaces = /^[ \t\n\r\u000c]+/, + regexLeadingCommasOrSpaces = /^[, \t\n\r\u000c]+/, + regexLeadingNotSpaces = /^[^ \t\n\r\u000c]+/, + regexTrailingCommas = /[,]+$/, + regexNonNegativeInteger = /^\d+$/, + + // ( Positive or negative or unsigned integers or decimals, without or without exponents. + // Must include at least one digit. + // According to spec tests any decimal point must be followed by a digit. + // No leading plus sign is allowed.) + // https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number + regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/, + + url, + descriptors, + currentDescriptor, + state, + c, + + // 2. Let position be a pointer into input, initially pointing at the start + // of the string. + pos = 0, + + // 3. Let candidates be an initially empty source set. + candidates = []; + + // 4. Splitting loop: Collect a sequence of characters that are space + // characters or U+002C COMMA characters. If any U+002C COMMA characters + // were collected, that is a parse error. + while (true) { + collectCharacters(regexLeadingCommasOrSpaces); + + // 5. If position is past the end of input, return candidates and abort these steps. + if (pos >= inputLength) { + return candidates; // (we're done, this is the sole return path) + } + + // 6. Collect a sequence of characters that are not space characters, + // and let that be url. + url = collectCharacters(regexLeadingNotSpaces); + + // 7. Let descriptors be a new empty list. + descriptors = []; + + // 8. If url ends with a U+002C COMMA character (,), follow these substeps: + // (1). Remove all trailing U+002C COMMA characters from url. If this removed + // more than one character, that is a parse error. + if (url.slice(-1) === ",") { + url = url.replace(regexTrailingCommas, ""); + // (Jump ahead to step 9 to skip tokenization and just push the candidate). + parseDescriptors(); + + // Otherwise, follow these substeps: + } else { + tokenize(); + } // (close else of step 8) + + // 16. Return to the step labeled splitting loop. + } // (Close of big while loop.) + + /** + * Tokenizes descriptor properties prior to parsing + * Returns undefined. + */ + function tokenize() { + + // 8.1. Descriptor tokeniser: Skip whitespace + collectCharacters(regexLeadingSpaces); + + // 8.2. Let current descriptor be the empty string. + currentDescriptor = ""; + + // 8.3. Let state be in descriptor. + state = "in descriptor"; + + while (true) { + + // 8.4. Let c be the character at position. + c = input.charAt(pos); + + // Do the following depending on the value of state. + // For the purpose of this step, "EOF" is a special character representing + // that position is past the end of input. + + // In descriptor + if (state === "in descriptor") { + // Do the following, depending on the value of c: + + // Space character + // If current descriptor is not empty, append current descriptor to + // descriptors and let current descriptor be the empty string. + // Set state to after descriptor. + if (isSpace(c)) { + if (currentDescriptor) { + descriptors.push(currentDescriptor); + currentDescriptor = ""; + state = "after descriptor"; + } + + // U+002C COMMA (,) + // Advance position to the next character in input. If current descriptor + // is not empty, append current descriptor to descriptors. Jump to the step + // labeled descriptor parser. + } else if (c === ",") { + pos += 1; + if (currentDescriptor) { + descriptors.push(currentDescriptor); + } + parseDescriptors(); + return; + + // U+0028 LEFT PARENTHESIS (() + // Append c to current descriptor. Set state to in parens. + } else if (c === "\u0028") { + currentDescriptor = currentDescriptor + c; + state = "in parens"; + + // EOF + // If current descriptor is not empty, append current descriptor to + // descriptors. Jump to the step labeled descriptor parser. + } else if (c === "") { + if (currentDescriptor) { + descriptors.push(currentDescriptor); + } + parseDescriptors(); + return; + + // Anything else + // Append c to current descriptor. + } else { + currentDescriptor = currentDescriptor + c; + } + // (end "in descriptor" + + // In parens + } else if (state === "in parens") { + + // U+0029 RIGHT PARENTHESIS ()) + // Append c to current descriptor. Set state to in descriptor. + if (c === ")") { + currentDescriptor = currentDescriptor + c; + state = "in descriptor"; + + // EOF + // Append current descriptor to descriptors. Jump to the step labeled + // descriptor parser. + } else if (c === "") { + descriptors.push(currentDescriptor); + parseDescriptors(); + return; + + // Anything else + // Append c to current descriptor. + } else { + currentDescriptor = currentDescriptor + c; + } + + // After descriptor + } else if (state === "after descriptor") { + + // Do the following, depending on the value of c: + // Space character: Stay in this state. + if (isSpace(c)) { + + // EOF: Jump to the step labeled descriptor parser. + } else if (c === "") { + parseDescriptors(); + return; + + // Anything else + // Set state to in descriptor. Set position to the previous character in input. + } else { + state = "in descriptor"; + pos -= 1; + + } + } + + // Advance position to the next character in input. + pos += 1; + + // Repeat this step. + } // (close while true loop) + } + + /** + * Adds descriptor properties to a candidate, pushes to the candidates array + * @return undefined + */ + // Declared outside of the while loop so that it's only created once. + function parseDescriptors() { + + // 9. Descriptor parser: Let error be no. + var pError = false, + + // 10. Let width be absent. + // 11. Let density be absent. + // 12. Let future-compat-h be absent. (We're implementing it now as h) + w, d, h, i, + candidate = {}, + desc, lastChar, value, intVal, floatVal; + + // 13. For each descriptor in descriptors, run the appropriate set of steps + // from the following list: + for (i = 0 ; i < descriptors.length; i++) { + desc = descriptors[ i ]; + + lastChar = desc[ desc.length - 1 ]; + value = desc.substring(0, desc.length - 1); + intVal = parseInt(value, 10); + floatVal = parseFloat(value); + + // If the descriptor consists of a valid non-negative integer followed by + // a U+0077 LATIN SMALL LETTER W character + if (regexNonNegativeInteger.test(value) && (lastChar === "w")) { + + // If width and density are not both absent, then let error be yes. + if (w || d) {pError = true;} + + // Apply the rules for parsing non-negative integers to the descriptor. + // If the result is zero, let error be yes. + // Otherwise, let width be the result. + if (intVal === 0) {pError = true;} else {w = intVal;} + + // If the descriptor consists of a valid floating-point number followed by + // a U+0078 LATIN SMALL LETTER X character + } else if (regexFloatingPoint.test(value) && (lastChar === "x")) { + + // If width, density and future-compat-h are not all absent, then let error + // be yes. + if (w || d || h) {pError = true;} + + // Apply the rules for parsing floating-point number values to the descriptor. + // If the result is less than zero, let error be yes. Otherwise, let density + // be the result. + if (floatVal < 0) {pError = true;} else {d = floatVal;} + + // If the descriptor consists of a valid non-negative integer followed by + // a U+0068 LATIN SMALL LETTER H character + } else if (regexNonNegativeInteger.test(value) && (lastChar === "h")) { + + // If height and density are not both absent, then let error be yes. + if (h || d) {pError = true;} + + // Apply the rules for parsing non-negative integers to the descriptor. + // If the result is zero, let error be yes. Otherwise, let future-compat-h + // be the result. + if (intVal === 0) {pError = true;} else {h = intVal;} + + // Anything else, Let error be yes. + } else {pError = true;} + } // (close step 13 for loop) + + // 15. If error is still no, then append a new image source to candidates whose + // URL is url, associated with a width width if not absent and a pixel + // density density if not absent. Otherwise, there is a parse error. + if (!pError) { + candidate.url = url; + if (w) { candidate.w = w;} + if (d) { candidate.d = d;} + if (h) { candidate.h = h;} + candidates.push(candidate); + } else if (console && console.log) { + console.log("Invalid srcset descriptor found in '" + + input + "' at '" + desc + "'."); + } + } // (close parseDescriptors fn) + + } +})); + + +/***/ }), + +/***/ "../../../../node_modules/picocolors/picocolors.browser.js": +/*!*****************************************************************!*\ + !*** ../../../../node_modules/picocolors/picocolors.browser.js ***! + \*****************************************************************/ +/***/ ((module) => { + +var x=String; +var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}}; +module.exports=create(); +module.exports.createColors = create; + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/at-rule.js": +/*!*******************************************************!*\ + !*** ../../../../node_modules/postcss/lib/at-rule.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Container = __webpack_require__(/*! ./container */ "../../../../node_modules/postcss/lib/container.js") + +class AtRule extends Container { + constructor(defaults) { + super(defaults) + this.type = 'atrule' + } + + append(...children) { + if (!this.proxyOf.nodes) this.nodes = [] + return super.append(...children) + } + + prepend(...children) { + if (!this.proxyOf.nodes) this.nodes = [] + return super.prepend(...children) + } +} + +module.exports = AtRule +AtRule.default = AtRule + +Container.registerAtRule(AtRule) + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/comment.js": +/*!*******************************************************!*\ + !*** ../../../../node_modules/postcss/lib/comment.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Node = __webpack_require__(/*! ./node */ "../../../../node_modules/postcss/lib/node.js") + +class Comment extends Node { + constructor(defaults) { + super(defaults) + this.type = 'comment' + } +} + +module.exports = Comment +Comment.default = Comment + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/container.js": +/*!*********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/container.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Comment = __webpack_require__(/*! ./comment */ "../../../../node_modules/postcss/lib/comment.js") +let Declaration = __webpack_require__(/*! ./declaration */ "../../../../node_modules/postcss/lib/declaration.js") +let Node = __webpack_require__(/*! ./node */ "../../../../node_modules/postcss/lib/node.js") +let { isClean, my } = __webpack_require__(/*! ./symbols */ "../../../../node_modules/postcss/lib/symbols.js") + +let AtRule, parse, Root, Rule + +function cleanSource(nodes) { + return nodes.map(i => { + if (i.nodes) i.nodes = cleanSource(i.nodes) + delete i.source + return i + }) +} + +function markTreeDirty(node) { + node[isClean] = false + if (node.proxyOf.nodes) { + for (let i of node.proxyOf.nodes) { + markTreeDirty(i) + } + } +} + +class Container extends Node { + get first() { + if (!this.proxyOf.nodes) return undefined + return this.proxyOf.nodes[0] + } + + get last() { + if (!this.proxyOf.nodes) return undefined + return this.proxyOf.nodes[this.proxyOf.nodes.length - 1] + } + + append(...children) { + for (let child of children) { + let nodes = this.normalize(child, this.last) + for (let node of nodes) this.proxyOf.nodes.push(node) + } + + this.markDirty() + + return this + } + + cleanRaws(keepBetween) { + super.cleanRaws(keepBetween) + if (this.nodes) { + for (let node of this.nodes) node.cleanRaws(keepBetween) + } + } + + each(callback) { + if (!this.proxyOf.nodes) return undefined + let iterator = this.getIterator() + + let index, result + while (this.indexes[iterator] < this.proxyOf.nodes.length) { + index = this.indexes[iterator] + result = callback(this.proxyOf.nodes[index], index) + if (result === false) break + + this.indexes[iterator] += 1 + } + + delete this.indexes[iterator] + return result + } + + every(condition) { + return this.nodes.every(condition) + } + + getIterator() { + if (!this.lastEach) this.lastEach = 0 + if (!this.indexes) this.indexes = {} + + this.lastEach += 1 + let iterator = this.lastEach + this.indexes[iterator] = 0 + + return iterator + } + + getProxyProcessor() { + return { + get(node, prop) { + if (prop === 'proxyOf') { + return node + } else if (!node[prop]) { + return node[prop] + } else if ( + prop === 'each' || + (typeof prop === 'string' && prop.startsWith('walk')) + ) { + return (...args) => { + return node[prop]( + ...args.map(i => { + if (typeof i === 'function') { + return (child, index) => i(child.toProxy(), index) + } else { + return i + } + }) + ) + } + } else if (prop === 'every' || prop === 'some') { + return cb => { + return node[prop]((child, ...other) => + cb(child.toProxy(), ...other) + ) + } + } else if (prop === 'root') { + return () => node.root().toProxy() + } else if (prop === 'nodes') { + return node.nodes.map(i => i.toProxy()) + } else if (prop === 'first' || prop === 'last') { + return node[prop].toProxy() + } else { + return node[prop] + } + }, + + set(node, prop, value) { + if (node[prop] === value) return true + node[prop] = value + if (prop === 'name' || prop === 'params' || prop === 'selector') { + node.markDirty() + } + return true + } + } + } + + index(child) { + if (typeof child === 'number') return child + if (child.proxyOf) child = child.proxyOf + return this.proxyOf.nodes.indexOf(child) + } + + insertAfter(exist, add) { + let existIndex = this.index(exist) + let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse() + existIndex = this.index(exist) + for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node) + + let index + for (let id in this.indexes) { + index = this.indexes[id] + if (existIndex < index) { + this.indexes[id] = index + nodes.length + } + } + + this.markDirty() + + return this + } + + insertBefore(exist, add) { + let existIndex = this.index(exist) + let type = existIndex === 0 ? 'prepend' : false + let nodes = this.normalize( + add, + this.proxyOf.nodes[existIndex], + type + ).reverse() + existIndex = this.index(exist) + for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node) + + let index + for (let id in this.indexes) { + index = this.indexes[id] + if (existIndex <= index) { + this.indexes[id] = index + nodes.length + } + } + + this.markDirty() + + return this + } + + normalize(nodes, sample) { + if (typeof nodes === 'string') { + nodes = cleanSource(parse(nodes).nodes) + } else if (typeof nodes === 'undefined') { + nodes = [] + } else if (Array.isArray(nodes)) { + nodes = nodes.slice(0) + for (let i of nodes) { + if (i.parent) i.parent.removeChild(i, 'ignore') + } + } else if (nodes.type === 'root' && this.type !== 'document') { + nodes = nodes.nodes.slice(0) + for (let i of nodes) { + if (i.parent) i.parent.removeChild(i, 'ignore') + } + } else if (nodes.type) { + nodes = [nodes] + } else if (nodes.prop) { + if (typeof nodes.value === 'undefined') { + throw new Error('Value field is missed in node creation') + } else if (typeof nodes.value !== 'string') { + nodes.value = String(nodes.value) + } + nodes = [new Declaration(nodes)] + } else if (nodes.selector || nodes.selectors) { + nodes = [new Rule(nodes)] + } else if (nodes.name) { + nodes = [new AtRule(nodes)] + } else if (nodes.text) { + nodes = [new Comment(nodes)] + } else { + throw new Error('Unknown node type in node creation') + } + + let processed = nodes.map(i => { + /* c8 ignore next */ + if (!i[my]) Container.rebuild(i) + i = i.proxyOf + if (i.parent) i.parent.removeChild(i) + if (i[isClean]) markTreeDirty(i) + + if (!i.raws) i.raws = {} + if (typeof i.raws.before === 'undefined') { + if (sample && typeof sample.raws.before !== 'undefined') { + i.raws.before = sample.raws.before.replace(/\S/g, '') + } + } + i.parent = this.proxyOf + return i + }) + + return processed + } + + prepend(...children) { + children = children.reverse() + for (let child of children) { + let nodes = this.normalize(child, this.first, 'prepend').reverse() + for (let node of nodes) this.proxyOf.nodes.unshift(node) + for (let id in this.indexes) { + this.indexes[id] = this.indexes[id] + nodes.length + } + } + + this.markDirty() + + return this + } + + push(child) { + child.parent = this + this.proxyOf.nodes.push(child) + return this + } + + removeAll() { + for (let node of this.proxyOf.nodes) node.parent = undefined + this.proxyOf.nodes = [] + + this.markDirty() + + return this + } + + removeChild(child) { + child = this.index(child) + this.proxyOf.nodes[child].parent = undefined + this.proxyOf.nodes.splice(child, 1) + + let index + for (let id in this.indexes) { + index = this.indexes[id] + if (index >= child) { + this.indexes[id] = index - 1 + } + } + + this.markDirty() + + return this + } + + replaceValues(pattern, opts, callback) { + if (!callback) { + callback = opts + opts = {} + } + + this.walkDecls(decl => { + if (opts.props && !opts.props.includes(decl.prop)) return + if (opts.fast && !decl.value.includes(opts.fast)) return + + decl.value = decl.value.replace(pattern, callback) + }) + + this.markDirty() + + return this + } + + some(condition) { + return this.nodes.some(condition) + } + + walk(callback) { + return this.each((child, i) => { + let result + try { + result = callback(child, i) + } catch (e) { + throw child.addToError(e) + } + if (result !== false && child.walk) { + result = child.walk(callback) + } + + return result + }) + } + + walkAtRules(name, callback) { + if (!callback) { + callback = name + return this.walk((child, i) => { + if (child.type === 'atrule') { + return callback(child, i) + } + }) + } + if (name instanceof RegExp) { + return this.walk((child, i) => { + if (child.type === 'atrule' && name.test(child.name)) { + return callback(child, i) + } + }) + } + return this.walk((child, i) => { + if (child.type === 'atrule' && child.name === name) { + return callback(child, i) + } + }) + } + + walkComments(callback) { + return this.walk((child, i) => { + if (child.type === 'comment') { + return callback(child, i) + } + }) + } + + walkDecls(prop, callback) { + if (!callback) { + callback = prop + return this.walk((child, i) => { + if (child.type === 'decl') { + return callback(child, i) + } + }) + } + if (prop instanceof RegExp) { + return this.walk((child, i) => { + if (child.type === 'decl' && prop.test(child.prop)) { + return callback(child, i) + } + }) + } + return this.walk((child, i) => { + if (child.type === 'decl' && child.prop === prop) { + return callback(child, i) + } + }) + } + + walkRules(selector, callback) { + if (!callback) { + callback = selector + + return this.walk((child, i) => { + if (child.type === 'rule') { + return callback(child, i) + } + }) + } + if (selector instanceof RegExp) { + return this.walk((child, i) => { + if (child.type === 'rule' && selector.test(child.selector)) { + return callback(child, i) + } + }) + } + return this.walk((child, i) => { + if (child.type === 'rule' && child.selector === selector) { + return callback(child, i) + } + }) + } +} + +Container.registerParse = dependant => { + parse = dependant +} + +Container.registerRule = dependant => { + Rule = dependant +} + +Container.registerAtRule = dependant => { + AtRule = dependant +} + +Container.registerRoot = dependant => { + Root = dependant +} + +module.exports = Container +Container.default = Container + +/* c8 ignore start */ +Container.rebuild = node => { + if (node.type === 'atrule') { + Object.setPrototypeOf(node, AtRule.prototype) + } else if (node.type === 'rule') { + Object.setPrototypeOf(node, Rule.prototype) + } else if (node.type === 'decl') { + Object.setPrototypeOf(node, Declaration.prototype) + } else if (node.type === 'comment') { + Object.setPrototypeOf(node, Comment.prototype) + } else if (node.type === 'root') { + Object.setPrototypeOf(node, Root.prototype) + } + + node[my] = true + + if (node.nodes) { + node.nodes.forEach(child => { + Container.rebuild(child) + }) + } +} +/* c8 ignore stop */ + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/css-syntax-error.js": +/*!****************************************************************!*\ + !*** ../../../../node_modules/postcss/lib/css-syntax-error.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let pico = __webpack_require__(/*! picocolors */ "../../../../node_modules/picocolors/picocolors.browser.js") + +let terminalHighlight = __webpack_require__(/*! ./terminal-highlight */ "?53db") + +class CssSyntaxError extends Error { + constructor(message, line, column, source, file, plugin) { + super(message) + this.name = 'CssSyntaxError' + this.reason = message + + if (file) { + this.file = file + } + if (source) { + this.source = source + } + if (plugin) { + this.plugin = plugin + } + if (typeof line !== 'undefined' && typeof column !== 'undefined') { + if (typeof line === 'number') { + this.line = line + this.column = column + } else { + this.line = line.line + this.column = line.column + this.endLine = column.line + this.endColumn = column.column + } + } + + this.setMessage() + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, CssSyntaxError) + } + } + + setMessage() { + this.message = this.plugin ? this.plugin + ': ' : '' + this.message += this.file ? this.file : '' + if (typeof this.line !== 'undefined') { + this.message += ':' + this.line + ':' + this.column + } + this.message += ': ' + this.reason + } + + showSourceCode(color) { + if (!this.source) return '' + + let css = this.source + if (color == null) color = pico.isColorSupported + + let aside = text => text + let mark = text => text + let highlight = text => text + if (color) { + let { bold, gray, red } = pico.createColors(true) + mark = text => bold(red(text)) + aside = text => gray(text) + if (terminalHighlight) { + highlight = text => terminalHighlight(text) + } + } + + let lines = css.split(/\r?\n/) + let start = Math.max(this.line - 3, 0) + let end = Math.min(this.line + 2, lines.length) + let maxWidth = String(end).length + + return lines + .slice(start, end) + .map((line, index) => { + let number = start + 1 + index + let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ' + if (number === this.line) { + if (line.length > 160) { + let padding = 20 + let subLineStart = Math.max(0, this.column - padding) + let subLineEnd = Math.max( + this.column + padding, + this.endColumn + padding + ) + let subLine = line.slice(subLineStart, subLineEnd) + + let spacing = + aside(gutter.replace(/\d/g, ' ')) + + line + .slice(0, Math.min(this.column - 1, padding - 1)) + .replace(/[^\t]/g, ' ') + + return ( + mark('>') + + aside(gutter) + + highlight(subLine) + + '\n ' + + spacing + + mark('^') + ) + } + + let spacing = + aside(gutter.replace(/\d/g, ' ')) + + line.slice(0, this.column - 1).replace(/[^\t]/g, ' ') + + return ( + mark('>') + + aside(gutter) + + highlight(line) + + '\n ' + + spacing + + mark('^') + ) + } + + return ' ' + aside(gutter) + highlight(line) + }) + .join('\n') + } + + toString() { + let code = this.showSourceCode() + if (code) { + code = '\n\n' + code + '\n' + } + return this.name + ': ' + this.message + code + } +} + +module.exports = CssSyntaxError +CssSyntaxError.default = CssSyntaxError + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/declaration.js": +/*!***********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/declaration.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Node = __webpack_require__(/*! ./node */ "../../../../node_modules/postcss/lib/node.js") + +class Declaration extends Node { + get variable() { + return this.prop.startsWith('--') || this.prop[0] === '$' + } + + constructor(defaults) { + if ( + defaults && + typeof defaults.value !== 'undefined' && + typeof defaults.value !== 'string' + ) { + defaults = { ...defaults, value: String(defaults.value) } + } + super(defaults) + this.type = 'decl' + } +} + +module.exports = Declaration +Declaration.default = Declaration + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/document.js": +/*!********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/document.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Container = __webpack_require__(/*! ./container */ "../../../../node_modules/postcss/lib/container.js") + +let LazyResult, Processor + +class Document extends Container { + constructor(defaults) { + // type needs to be passed to super, otherwise child roots won't be normalized correctly + super({ type: 'document', ...defaults }) + + if (!this.nodes) { + this.nodes = [] + } + } + + toResult(opts = {}) { + let lazy = new LazyResult(new Processor(), this, opts) + + return lazy.stringify() + } +} + +Document.registerLazyResult = dependant => { + LazyResult = dependant +} + +Document.registerProcessor = dependant => { + Processor = dependant +} + +module.exports = Document +Document.default = Document + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/fromJSON.js": +/*!********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/fromJSON.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let AtRule = __webpack_require__(/*! ./at-rule */ "../../../../node_modules/postcss/lib/at-rule.js") +let Comment = __webpack_require__(/*! ./comment */ "../../../../node_modules/postcss/lib/comment.js") +let Declaration = __webpack_require__(/*! ./declaration */ "../../../../node_modules/postcss/lib/declaration.js") +let Input = __webpack_require__(/*! ./input */ "../../../../node_modules/postcss/lib/input.js") +let PreviousMap = __webpack_require__(/*! ./previous-map */ "../../../../node_modules/postcss/lib/previous-map.js") +let Root = __webpack_require__(/*! ./root */ "../../../../node_modules/postcss/lib/root.js") +let Rule = __webpack_require__(/*! ./rule */ "../../../../node_modules/postcss/lib/rule.js") + +function fromJSON(json, inputs) { + if (Array.isArray(json)) return json.map(n => fromJSON(n)) + + let { inputs: ownInputs, ...defaults } = json + if (ownInputs) { + inputs = [] + for (let input of ownInputs) { + let inputHydrated = { ...input, __proto__: Input.prototype } + if (inputHydrated.map) { + inputHydrated.map = { + ...inputHydrated.map, + __proto__: PreviousMap.prototype + } + } + inputs.push(inputHydrated) + } + } + if (defaults.nodes) { + defaults.nodes = json.nodes.map(n => fromJSON(n, inputs)) + } + if (defaults.source) { + let { inputId, ...source } = defaults.source + defaults.source = source + if (inputId != null) { + defaults.source.input = inputs[inputId] + } + } + if (defaults.type === 'root') { + return new Root(defaults) + } else if (defaults.type === 'decl') { + return new Declaration(defaults) + } else if (defaults.type === 'rule') { + return new Rule(defaults) + } else if (defaults.type === 'comment') { + return new Comment(defaults) + } else if (defaults.type === 'atrule') { + return new AtRule(defaults) + } else { + throw new Error('Unknown node type: ' + json.type) + } +} + +module.exports = fromJSON +fromJSON.default = fromJSON + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/input.js": +/*!*****************************************************!*\ + !*** ../../../../node_modules/postcss/lib/input.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let { nanoid } = __webpack_require__(/*! nanoid/non-secure */ "../../../../node_modules/nanoid/non-secure/index.cjs") +let { isAbsolute, resolve } = __webpack_require__(/*! path */ "?53a2") +let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(/*! source-map-js */ "?730d") +let { fileURLToPath, pathToFileURL } = __webpack_require__(/*! url */ "?c768") + +let CssSyntaxError = __webpack_require__(/*! ./css-syntax-error */ "../../../../node_modules/postcss/lib/css-syntax-error.js") +let PreviousMap = __webpack_require__(/*! ./previous-map */ "../../../../node_modules/postcss/lib/previous-map.js") +let terminalHighlight = __webpack_require__(/*! ./terminal-highlight */ "?53db") + +let fromOffsetCache = Symbol('fromOffsetCache') + +let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator) +let pathAvailable = Boolean(resolve && isAbsolute) + +class Input { + get from() { + return this.file || this.id + } + + constructor(css, opts = {}) { + if ( + css === null || + typeof css === 'undefined' || + (typeof css === 'object' && !css.toString) + ) { + throw new Error(`PostCSS received ${css} instead of CSS string`) + } + + this.css = css.toString() + + if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') { + this.hasBOM = true + this.css = this.css.slice(1) + } else { + this.hasBOM = false + } + + this.document = this.css + if (opts.document) this.document = opts.document.toString() + + if (opts.from) { + if ( + !pathAvailable || + /^\w+:\/\//.test(opts.from) || + isAbsolute(opts.from) + ) { + this.file = opts.from + } else { + this.file = resolve(opts.from) + } + } + + if (pathAvailable && sourceMapAvailable) { + let map = new PreviousMap(this.css, opts) + if (map.text) { + this.map = map + let file = map.consumer().file + if (!this.file && file) this.file = this.mapResolve(file) + } + } + + if (!this.file) { + this.id = '' + } + if (this.map) this.map.file = this.from + } + + error(message, line, column, opts = {}) { + let endColumn, endLine, result + + if (line && typeof line === 'object') { + let start = line + let end = column + if (typeof start.offset === 'number') { + let pos = this.fromOffset(start.offset) + line = pos.line + column = pos.col + } else { + line = start.line + column = start.column + } + if (typeof end.offset === 'number') { + let pos = this.fromOffset(end.offset) + endLine = pos.line + endColumn = pos.col + } else { + endLine = end.line + endColumn = end.column + } + } else if (!column) { + let pos = this.fromOffset(line) + line = pos.line + column = pos.col + } + + let origin = this.origin(line, column, endLine, endColumn) + if (origin) { + result = new CssSyntaxError( + message, + origin.endLine === undefined + ? origin.line + : { column: origin.column, line: origin.line }, + origin.endLine === undefined + ? origin.column + : { column: origin.endColumn, line: origin.endLine }, + origin.source, + origin.file, + opts.plugin + ) + } else { + result = new CssSyntaxError( + message, + endLine === undefined ? line : { column, line }, + endLine === undefined ? column : { column: endColumn, line: endLine }, + this.css, + this.file, + opts.plugin + ) + } + + result.input = { column, endColumn, endLine, line, source: this.css } + if (this.file) { + if (pathToFileURL) { + result.input.url = pathToFileURL(this.file).toString() + } + result.input.file = this.file + } + + return result + } + + fromOffset(offset) { + let lastLine, lineToIndex + if (!this[fromOffsetCache]) { + let lines = this.css.split('\n') + lineToIndex = new Array(lines.length) + let prevIndex = 0 + + for (let i = 0, l = lines.length; i < l; i++) { + lineToIndex[i] = prevIndex + prevIndex += lines[i].length + 1 + } + + this[fromOffsetCache] = lineToIndex + } else { + lineToIndex = this[fromOffsetCache] + } + lastLine = lineToIndex[lineToIndex.length - 1] + + let min = 0 + if (offset >= lastLine) { + min = lineToIndex.length - 1 + } else { + let max = lineToIndex.length - 2 + let mid + while (min < max) { + mid = min + ((max - min) >> 1) + if (offset < lineToIndex[mid]) { + max = mid - 1 + } else if (offset >= lineToIndex[mid + 1]) { + min = mid + 1 + } else { + min = mid + break + } + } + } + return { + col: offset - lineToIndex[min] + 1, + line: min + 1 + } + } + + mapResolve(file) { + if (/^\w+:\/\//.test(file)) { + return file + } + return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file) + } + + origin(line, column, endLine, endColumn) { + if (!this.map) return false + let consumer = this.map.consumer() + + let from = consumer.originalPositionFor({ column, line }) + if (!from.source) return false + + let to + if (typeof endLine === 'number') { + to = consumer.originalPositionFor({ column: endColumn, line: endLine }) + } + + let fromUrl + + if (isAbsolute(from.source)) { + fromUrl = pathToFileURL(from.source) + } else { + fromUrl = new URL( + from.source, + this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile) + ) + } + + let result = { + column: from.column, + endColumn: to && to.column, + endLine: to && to.line, + line: from.line, + url: fromUrl.toString() + } + + if (fromUrl.protocol === 'file:') { + if (fileURLToPath) { + result.file = fileURLToPath(fromUrl) + } else { + /* c8 ignore next 2 */ + throw new Error(`file: protocol is not available in this PostCSS build`) + } + } + + let source = consumer.sourceContentFor(from.source) + if (source) result.source = source + + return result + } + + toJSON() { + let json = {} + for (let name of ['hasBOM', 'css', 'file', 'id']) { + if (this[name] != null) { + json[name] = this[name] + } + } + if (this.map) { + json.map = { ...this.map } + if (json.map.consumerCache) { + json.map.consumerCache = undefined + } + } + return json + } +} + +module.exports = Input +Input.default = Input + +if (terminalHighlight && terminalHighlight.registerInput) { + terminalHighlight.registerInput(Input) +} + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/lazy-result.js": +/*!***********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/lazy-result.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Container = __webpack_require__(/*! ./container */ "../../../../node_modules/postcss/lib/container.js") +let Document = __webpack_require__(/*! ./document */ "../../../../node_modules/postcss/lib/document.js") +let MapGenerator = __webpack_require__(/*! ./map-generator */ "../../../../node_modules/postcss/lib/map-generator.js") +let parse = __webpack_require__(/*! ./parse */ "../../../../node_modules/postcss/lib/parse.js") +let Result = __webpack_require__(/*! ./result */ "../../../../node_modules/postcss/lib/result.js") +let Root = __webpack_require__(/*! ./root */ "../../../../node_modules/postcss/lib/root.js") +let stringify = __webpack_require__(/*! ./stringify */ "../../../../node_modules/postcss/lib/stringify.js") +let { isClean, my } = __webpack_require__(/*! ./symbols */ "../../../../node_modules/postcss/lib/symbols.js") +let warnOnce = __webpack_require__(/*! ./warn-once */ "../../../../node_modules/postcss/lib/warn-once.js") + +const TYPE_TO_CLASS_NAME = { + atrule: 'AtRule', + comment: 'Comment', + decl: 'Declaration', + document: 'Document', + root: 'Root', + rule: 'Rule' +} + +const PLUGIN_PROPS = { + AtRule: true, + AtRuleExit: true, + Comment: true, + CommentExit: true, + Declaration: true, + DeclarationExit: true, + Document: true, + DocumentExit: true, + Once: true, + OnceExit: true, + postcssPlugin: true, + prepare: true, + Root: true, + RootExit: true, + Rule: true, + RuleExit: true +} + +const NOT_VISITORS = { + Once: true, + postcssPlugin: true, + prepare: true +} + +const CHILDREN = 0 + +function isPromise(obj) { + return typeof obj === 'object' && typeof obj.then === 'function' +} + +function getEvents(node) { + let key = false + let type = TYPE_TO_CLASS_NAME[node.type] + if (node.type === 'decl') { + key = node.prop.toLowerCase() + } else if (node.type === 'atrule') { + key = node.name.toLowerCase() + } + + if (key && node.append) { + return [ + type, + type + '-' + key, + CHILDREN, + type + 'Exit', + type + 'Exit-' + key + ] + } else if (key) { + return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key] + } else if (node.append) { + return [type, CHILDREN, type + 'Exit'] + } else { + return [type, type + 'Exit'] + } +} + +function toStack(node) { + let events + if (node.type === 'document') { + events = ['Document', CHILDREN, 'DocumentExit'] + } else if (node.type === 'root') { + events = ['Root', CHILDREN, 'RootExit'] + } else { + events = getEvents(node) + } + + return { + eventIndex: 0, + events, + iterator: 0, + node, + visitorIndex: 0, + visitors: [] + } +} + +function cleanMarks(node) { + node[isClean] = false + if (node.nodes) node.nodes.forEach(i => cleanMarks(i)) + return node +} + +let postcss = {} + +class LazyResult { + get content() { + return this.stringify().content + } + + get css() { + return this.stringify().css + } + + get map() { + return this.stringify().map + } + + get messages() { + return this.sync().messages + } + + get opts() { + return this.result.opts + } + + get processor() { + return this.result.processor + } + + get root() { + return this.sync().root + } + + get [Symbol.toStringTag]() { + return 'LazyResult' + } + + constructor(processor, css, opts) { + this.stringified = false + this.processed = false + + let root + if ( + typeof css === 'object' && + css !== null && + (css.type === 'root' || css.type === 'document') + ) { + root = cleanMarks(css) + } else if (css instanceof LazyResult || css instanceof Result) { + root = cleanMarks(css.root) + if (css.map) { + if (typeof opts.map === 'undefined') opts.map = {} + if (!opts.map.inline) opts.map.inline = false + opts.map.prev = css.map + } + } else { + let parser = parse + if (opts.syntax) parser = opts.syntax.parse + if (opts.parser) parser = opts.parser + if (parser.parse) parser = parser.parse + + try { + root = parser(css, opts) + } catch (error) { + this.processed = true + this.error = error + } + + if (root && !root[my]) { + /* c8 ignore next 2 */ + Container.rebuild(root) + } + } + + this.result = new Result(processor, root, opts) + this.helpers = { ...postcss, postcss, result: this.result } + this.plugins = this.processor.plugins.map(plugin => { + if (typeof plugin === 'object' && plugin.prepare) { + return { ...plugin, ...plugin.prepare(this.result) } + } else { + return plugin + } + }) + } + + async() { + if (this.error) return Promise.reject(this.error) + if (this.processed) return Promise.resolve(this.result) + if (!this.processing) { + this.processing = this.runAsync() + } + return this.processing + } + + catch(onRejected) { + return this.async().catch(onRejected) + } + + finally(onFinally) { + return this.async().then(onFinally, onFinally) + } + + getAsyncError() { + throw new Error('Use process(css).then(cb) to work with async plugins') + } + + handleError(error, node) { + let plugin = this.result.lastPlugin + try { + if (node) node.addToError(error) + this.error = error + if (error.name === 'CssSyntaxError' && !error.plugin) { + error.plugin = plugin.postcssPlugin + error.setMessage() + } else if (plugin.postcssVersion) { + if (true) { + let pluginName = plugin.postcssPlugin + let pluginVer = plugin.postcssVersion + let runtimeVer = this.result.processor.version + let a = pluginVer.split('.') + let b = runtimeVer.split('.') + + if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) { + // eslint-disable-next-line no-console + console.error( + 'Unknown error from PostCSS plugin. Your current PostCSS ' + + 'version is ' + + runtimeVer + + ', but ' + + pluginName + + ' uses ' + + pluginVer + + '. Perhaps this is the source of the error below.' + ) + } + } + } + } catch (err) { + /* c8 ignore next 3 */ + // eslint-disable-next-line no-console + if (console && console.error) console.error(err) + } + return error + } + + prepareVisitors() { + this.listeners = {} + let add = (plugin, type, cb) => { + if (!this.listeners[type]) this.listeners[type] = [] + this.listeners[type].push([plugin, cb]) + } + for (let plugin of this.plugins) { + if (typeof plugin === 'object') { + for (let event in plugin) { + if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) { + throw new Error( + `Unknown event ${event} in ${plugin.postcssPlugin}. ` + + `Try to update PostCSS (${this.processor.version} now).` + ) + } + if (!NOT_VISITORS[event]) { + if (typeof plugin[event] === 'object') { + for (let filter in plugin[event]) { + if (filter === '*') { + add(plugin, event, plugin[event][filter]) + } else { + add( + plugin, + event + '-' + filter.toLowerCase(), + plugin[event][filter] + ) + } + } + } else if (typeof plugin[event] === 'function') { + add(plugin, event, plugin[event]) + } + } + } + } + } + this.hasListener = Object.keys(this.listeners).length > 0 + } + + async runAsync() { + this.plugin = 0 + for (let i = 0; i < this.plugins.length; i++) { + let plugin = this.plugins[i] + let promise = this.runOnRoot(plugin) + if (isPromise(promise)) { + try { + await promise + } catch (error) { + throw this.handleError(error) + } + } + } + + this.prepareVisitors() + if (this.hasListener) { + let root = this.result.root + while (!root[isClean]) { + root[isClean] = true + let stack = [toStack(root)] + while (stack.length > 0) { + let promise = this.visitTick(stack) + if (isPromise(promise)) { + try { + await promise + } catch (e) { + let node = stack[stack.length - 1].node + throw this.handleError(e, node) + } + } + } + } + + if (this.listeners.OnceExit) { + for (let [plugin, visitor] of this.listeners.OnceExit) { + this.result.lastPlugin = plugin + try { + if (root.type === 'document') { + let roots = root.nodes.map(subRoot => + visitor(subRoot, this.helpers) + ) + + await Promise.all(roots) + } else { + await visitor(root, this.helpers) + } + } catch (e) { + throw this.handleError(e) + } + } + } + } + + this.processed = true + return this.stringify() + } + + runOnRoot(plugin) { + this.result.lastPlugin = plugin + try { + if (typeof plugin === 'object' && plugin.Once) { + if (this.result.root.type === 'document') { + let roots = this.result.root.nodes.map(root => + plugin.Once(root, this.helpers) + ) + + if (isPromise(roots[0])) { + return Promise.all(roots) + } + + return roots + } + + return plugin.Once(this.result.root, this.helpers) + } else if (typeof plugin === 'function') { + return plugin(this.result.root, this.result) + } + } catch (error) { + throw this.handleError(error) + } + } + + stringify() { + if (this.error) throw this.error + if (this.stringified) return this.result + this.stringified = true + + this.sync() + + let opts = this.result.opts + let str = stringify + if (opts.syntax) str = opts.syntax.stringify + if (opts.stringifier) str = opts.stringifier + if (str.stringify) str = str.stringify + + let map = new MapGenerator(str, this.result.root, this.result.opts) + let data = map.generate() + this.result.css = data[0] + this.result.map = data[1] + + return this.result + } + + sync() { + if (this.error) throw this.error + if (this.processed) return this.result + this.processed = true + + if (this.processing) { + throw this.getAsyncError() + } + + for (let plugin of this.plugins) { + let promise = this.runOnRoot(plugin) + if (isPromise(promise)) { + throw this.getAsyncError() + } + } + + this.prepareVisitors() + if (this.hasListener) { + let root = this.result.root + while (!root[isClean]) { + root[isClean] = true + this.walkSync(root) + } + if (this.listeners.OnceExit) { + if (root.type === 'document') { + for (let subRoot of root.nodes) { + this.visitSync(this.listeners.OnceExit, subRoot) + } + } else { + this.visitSync(this.listeners.OnceExit, root) + } + } + } + + return this.result + } + + then(onFulfilled, onRejected) { + if (true) { + if (!('from' in this.opts)) { + warnOnce( + 'Without `from` option PostCSS could generate wrong source map ' + + 'and will not find Browserslist config. Set it to CSS file path ' + + 'or to `undefined` to prevent this warning.' + ) + } + } + return this.async().then(onFulfilled, onRejected) + } + + toString() { + return this.css + } + + visitSync(visitors, node) { + for (let [plugin, visitor] of visitors) { + this.result.lastPlugin = plugin + let promise + try { + promise = visitor(node, this.helpers) + } catch (e) { + throw this.handleError(e, node.proxyOf) + } + if (node.type !== 'root' && node.type !== 'document' && !node.parent) { + return true + } + if (isPromise(promise)) { + throw this.getAsyncError() + } + } + } + + visitTick(stack) { + let visit = stack[stack.length - 1] + let { node, visitors } = visit + + if (node.type !== 'root' && node.type !== 'document' && !node.parent) { + stack.pop() + return + } + + if (visitors.length > 0 && visit.visitorIndex < visitors.length) { + let [plugin, visitor] = visitors[visit.visitorIndex] + visit.visitorIndex += 1 + if (visit.visitorIndex === visitors.length) { + visit.visitors = [] + visit.visitorIndex = 0 + } + this.result.lastPlugin = plugin + try { + return visitor(node.toProxy(), this.helpers) + } catch (e) { + throw this.handleError(e, node) + } + } + + if (visit.iterator !== 0) { + let iterator = visit.iterator + let child + while ((child = node.nodes[node.indexes[iterator]])) { + node.indexes[iterator] += 1 + if (!child[isClean]) { + child[isClean] = true + stack.push(toStack(child)) + return + } + } + visit.iterator = 0 + delete node.indexes[iterator] + } + + let events = visit.events + while (visit.eventIndex < events.length) { + let event = events[visit.eventIndex] + visit.eventIndex += 1 + if (event === CHILDREN) { + if (node.nodes && node.nodes.length) { + node[isClean] = true + visit.iterator = node.getIterator() + } + return + } else if (this.listeners[event]) { + visit.visitors = this.listeners[event] + return + } + } + stack.pop() + } + + walkSync(node) { + node[isClean] = true + let events = getEvents(node) + for (let event of events) { + if (event === CHILDREN) { + if (node.nodes) { + node.each(child => { + if (!child[isClean]) this.walkSync(child) + }) + } + } else { + let visitors = this.listeners[event] + if (visitors) { + if (this.visitSync(visitors, node.toProxy())) return + } + } + } + } + + warnings() { + return this.sync().warnings() + } +} + +LazyResult.registerPostcss = dependant => { + postcss = dependant +} + +module.exports = LazyResult +LazyResult.default = LazyResult + +Root.registerLazyResult(LazyResult) +Document.registerLazyResult(LazyResult) + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/list.js": +/*!****************************************************!*\ + !*** ../../../../node_modules/postcss/lib/list.js ***! + \****************************************************/ +/***/ ((module) => { + +"use strict"; + + +let list = { + comma(string) { + return list.split(string, [','], true) + }, + + space(string) { + let spaces = [' ', '\n', '\t'] + return list.split(string, spaces) + }, + + split(string, separators, last) { + let array = [] + let current = '' + let split = false + + let func = 0 + let inQuote = false + let prevQuote = '' + let escape = false + + for (let letter of string) { + if (escape) { + escape = false + } else if (letter === '\\') { + escape = true + } else if (inQuote) { + if (letter === prevQuote) { + inQuote = false + } + } else if (letter === '"' || letter === "'") { + inQuote = true + prevQuote = letter + } else if (letter === '(') { + func += 1 + } else if (letter === ')') { + if (func > 0) func -= 1 + } else if (func === 0) { + if (separators.includes(letter)) split = true + } + + if (split) { + if (current !== '') array.push(current.trim()) + current = '' + split = false + } else { + current += letter + } + } + + if (last || current !== '') array.push(current.trim()) + return array + } +} + +module.exports = list +list.default = list + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/map-generator.js": +/*!*************************************************************!*\ + !*** ../../../../node_modules/postcss/lib/map-generator.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let { dirname, relative, resolve, sep } = __webpack_require__(/*! path */ "?53a2") +let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(/*! source-map-js */ "?730d") +let { pathToFileURL } = __webpack_require__(/*! url */ "?c768") + +let Input = __webpack_require__(/*! ./input */ "../../../../node_modules/postcss/lib/input.js") + +let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator) +let pathAvailable = Boolean(dirname && resolve && relative && sep) + +class MapGenerator { + constructor(stringify, root, opts, cssString) { + this.stringify = stringify + this.mapOpts = opts.map || {} + this.root = root + this.opts = opts + this.css = cssString + this.originalCSS = cssString + this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute + + this.memoizedFileURLs = new Map() + this.memoizedPaths = new Map() + this.memoizedURLs = new Map() + } + + addAnnotation() { + let content + + if (this.isInline()) { + content = + 'data:application/json;base64,' + this.toBase64(this.map.toString()) + } else if (typeof this.mapOpts.annotation === 'string') { + content = this.mapOpts.annotation + } else if (typeof this.mapOpts.annotation === 'function') { + content = this.mapOpts.annotation(this.opts.to, this.root) + } else { + content = this.outputFile() + '.map' + } + let eol = '\n' + if (this.css.includes('\r\n')) eol = '\r\n' + + this.css += eol + '/*# sourceMappingURL=' + content + ' */' + } + + applyPrevMaps() { + for (let prev of this.previous()) { + let from = this.toUrl(this.path(prev.file)) + let root = prev.root || dirname(prev.file) + let map + + if (this.mapOpts.sourcesContent === false) { + map = new SourceMapConsumer(prev.text) + if (map.sourcesContent) { + map.sourcesContent = null + } + } else { + map = prev.consumer() + } + + this.map.applySourceMap(map, from, this.toUrl(this.path(root))) + } + } + + clearAnnotation() { + if (this.mapOpts.annotation === false) return + + if (this.root) { + let node + for (let i = this.root.nodes.length - 1; i >= 0; i--) { + node = this.root.nodes[i] + if (node.type !== 'comment') continue + if (node.text.startsWith('# sourceMappingURL=')) { + this.root.removeChild(i) + } + } + } else if (this.css) { + this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, '') + } + } + + generate() { + this.clearAnnotation() + if (pathAvailable && sourceMapAvailable && this.isMap()) { + return this.generateMap() + } else { + let result = '' + this.stringify(this.root, i => { + result += i + }) + return [result] + } + } + + generateMap() { + if (this.root) { + this.generateString() + } else if (this.previous().length === 1) { + let prev = this.previous()[0].consumer() + prev.file = this.outputFile() + this.map = SourceMapGenerator.fromSourceMap(prev, { + ignoreInvalidMapping: true + }) + } else { + this.map = new SourceMapGenerator({ + file: this.outputFile(), + ignoreInvalidMapping: true + }) + this.map.addMapping({ + generated: { column: 0, line: 1 }, + original: { column: 0, line: 1 }, + source: this.opts.from + ? this.toUrl(this.path(this.opts.from)) + : '' + }) + } + + if (this.isSourcesContent()) this.setSourcesContent() + if (this.root && this.previous().length > 0) this.applyPrevMaps() + if (this.isAnnotation()) this.addAnnotation() + + if (this.isInline()) { + return [this.css] + } else { + return [this.css, this.map] + } + } + + generateString() { + this.css = '' + this.map = new SourceMapGenerator({ + file: this.outputFile(), + ignoreInvalidMapping: true + }) + + let line = 1 + let column = 1 + + let noSource = '' + let mapping = { + generated: { column: 0, line: 0 }, + original: { column: 0, line: 0 }, + source: '' + } + + let last, lines + this.stringify(this.root, (str, node, type) => { + this.css += str + + if (node && type !== 'end') { + mapping.generated.line = line + mapping.generated.column = column - 1 + if (node.source && node.source.start) { + mapping.source = this.sourcePath(node) + mapping.original.line = node.source.start.line + mapping.original.column = node.source.start.column - 1 + this.map.addMapping(mapping) + } else { + mapping.source = noSource + mapping.original.line = 1 + mapping.original.column = 0 + this.map.addMapping(mapping) + } + } + + lines = str.match(/\n/g) + if (lines) { + line += lines.length + last = str.lastIndexOf('\n') + column = str.length - last + } else { + column += str.length + } + + if (node && type !== 'start') { + let p = node.parent || { raws: {} } + let childless = + node.type === 'decl' || (node.type === 'atrule' && !node.nodes) + if (!childless || node !== p.last || p.raws.semicolon) { + if (node.source && node.source.end) { + mapping.source = this.sourcePath(node) + mapping.original.line = node.source.end.line + mapping.original.column = node.source.end.column - 1 + mapping.generated.line = line + mapping.generated.column = column - 2 + this.map.addMapping(mapping) + } else { + mapping.source = noSource + mapping.original.line = 1 + mapping.original.column = 0 + mapping.generated.line = line + mapping.generated.column = column - 1 + this.map.addMapping(mapping) + } + } + } + }) + } + + isAnnotation() { + if (this.isInline()) { + return true + } + if (typeof this.mapOpts.annotation !== 'undefined') { + return this.mapOpts.annotation + } + if (this.previous().length) { + return this.previous().some(i => i.annotation) + } + return true + } + + isInline() { + if (typeof this.mapOpts.inline !== 'undefined') { + return this.mapOpts.inline + } + + let annotation = this.mapOpts.annotation + if (typeof annotation !== 'undefined' && annotation !== true) { + return false + } + + if (this.previous().length) { + return this.previous().some(i => i.inline) + } + return true + } + + isMap() { + if (typeof this.opts.map !== 'undefined') { + return !!this.opts.map + } + return this.previous().length > 0 + } + + isSourcesContent() { + if (typeof this.mapOpts.sourcesContent !== 'undefined') { + return this.mapOpts.sourcesContent + } + if (this.previous().length) { + return this.previous().some(i => i.withContent()) + } + return true + } + + outputFile() { + if (this.opts.to) { + return this.path(this.opts.to) + } else if (this.opts.from) { + return this.path(this.opts.from) + } else { + return 'to.css' + } + } + + path(file) { + if (this.mapOpts.absolute) return file + if (file.charCodeAt(0) === 60 /* `<` */) return file + if (/^\w+:\/\//.test(file)) return file + let cached = this.memoizedPaths.get(file) + if (cached) return cached + + let from = this.opts.to ? dirname(this.opts.to) : '.' + + if (typeof this.mapOpts.annotation === 'string') { + from = dirname(resolve(from, this.mapOpts.annotation)) + } + + let path = relative(from, file) + this.memoizedPaths.set(file, path) + + return path + } + + previous() { + if (!this.previousMaps) { + this.previousMaps = [] + if (this.root) { + this.root.walk(node => { + if (node.source && node.source.input.map) { + let map = node.source.input.map + if (!this.previousMaps.includes(map)) { + this.previousMaps.push(map) + } + } + }) + } else { + let input = new Input(this.originalCSS, this.opts) + if (input.map) this.previousMaps.push(input.map) + } + } + + return this.previousMaps + } + + setSourcesContent() { + let already = {} + if (this.root) { + this.root.walk(node => { + if (node.source) { + let from = node.source.input.from + if (from && !already[from]) { + already[from] = true + let fromUrl = this.usesFileUrls + ? this.toFileUrl(from) + : this.toUrl(this.path(from)) + this.map.setSourceContent(fromUrl, node.source.input.css) + } + } + }) + } else if (this.css) { + let from = this.opts.from + ? this.toUrl(this.path(this.opts.from)) + : '' + this.map.setSourceContent(from, this.css) + } + } + + sourcePath(node) { + if (this.mapOpts.from) { + return this.toUrl(this.mapOpts.from) + } else if (this.usesFileUrls) { + return this.toFileUrl(node.source.input.from) + } else { + return this.toUrl(this.path(node.source.input.from)) + } + } + + toBase64(str) { + if (Buffer) { + return Buffer.from(str).toString('base64') + } else { + return window.btoa(unescape(encodeURIComponent(str))) + } + } + + toFileUrl(path) { + let cached = this.memoizedFileURLs.get(path) + if (cached) return cached + + if (pathToFileURL) { + let fileURL = pathToFileURL(path).toString() + this.memoizedFileURLs.set(path, fileURL) + + return fileURL + } else { + throw new Error( + '`map.absolute` option is not available in this PostCSS build' + ) + } + } + + toUrl(path) { + let cached = this.memoizedURLs.get(path) + if (cached) return cached + + if (sep === '\\') { + path = path.replace(/\\/g, '/') + } + + let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent) + this.memoizedURLs.set(path, url) + + return url + } +} + +module.exports = MapGenerator + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/no-work-result.js": +/*!**************************************************************!*\ + !*** ../../../../node_modules/postcss/lib/no-work-result.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let MapGenerator = __webpack_require__(/*! ./map-generator */ "../../../../node_modules/postcss/lib/map-generator.js") +let parse = __webpack_require__(/*! ./parse */ "../../../../node_modules/postcss/lib/parse.js") +const Result = __webpack_require__(/*! ./result */ "../../../../node_modules/postcss/lib/result.js") +let stringify = __webpack_require__(/*! ./stringify */ "../../../../node_modules/postcss/lib/stringify.js") +let warnOnce = __webpack_require__(/*! ./warn-once */ "../../../../node_modules/postcss/lib/warn-once.js") + +class NoWorkResult { + get content() { + return this.result.css + } + + get css() { + return this.result.css + } + + get map() { + return this.result.map + } + + get messages() { + return [] + } + + get opts() { + return this.result.opts + } + + get processor() { + return this.result.processor + } + + get root() { + if (this._root) { + return this._root + } + + let root + let parser = parse + + try { + root = parser(this._css, this._opts) + } catch (error) { + this.error = error + } + + if (this.error) { + throw this.error + } else { + this._root = root + return root + } + } + + get [Symbol.toStringTag]() { + return 'NoWorkResult' + } + + constructor(processor, css, opts) { + css = css.toString() + this.stringified = false + + this._processor = processor + this._css = css + this._opts = opts + this._map = undefined + let root + + let str = stringify + this.result = new Result(this._processor, root, this._opts) + this.result.css = css + + let self = this + Object.defineProperty(this.result, 'root', { + get() { + return self.root + } + }) + + let map = new MapGenerator(str, root, this._opts, css) + if (map.isMap()) { + let [generatedCSS, generatedMap] = map.generate() + if (generatedCSS) { + this.result.css = generatedCSS + } + if (generatedMap) { + this.result.map = generatedMap + } + } else { + map.clearAnnotation() + this.result.css = map.css + } + } + + async() { + if (this.error) return Promise.reject(this.error) + return Promise.resolve(this.result) + } + + catch(onRejected) { + return this.async().catch(onRejected) + } + + finally(onFinally) { + return this.async().then(onFinally, onFinally) + } + + sync() { + if (this.error) throw this.error + return this.result + } + + then(onFulfilled, onRejected) { + if (true) { + if (!('from' in this._opts)) { + warnOnce( + 'Without `from` option PostCSS could generate wrong source map ' + + 'and will not find Browserslist config. Set it to CSS file path ' + + 'or to `undefined` to prevent this warning.' + ) + } + } + + return this.async().then(onFulfilled, onRejected) + } + + toString() { + return this._css + } + + warnings() { + return [] + } +} + +module.exports = NoWorkResult +NoWorkResult.default = NoWorkResult + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/node.js": +/*!****************************************************!*\ + !*** ../../../../node_modules/postcss/lib/node.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let CssSyntaxError = __webpack_require__(/*! ./css-syntax-error */ "../../../../node_modules/postcss/lib/css-syntax-error.js") +let Stringifier = __webpack_require__(/*! ./stringifier */ "../../../../node_modules/postcss/lib/stringifier.js") +let stringify = __webpack_require__(/*! ./stringify */ "../../../../node_modules/postcss/lib/stringify.js") +let { isClean, my } = __webpack_require__(/*! ./symbols */ "../../../../node_modules/postcss/lib/symbols.js") + +function cloneNode(obj, parent) { + let cloned = new obj.constructor() + + for (let i in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, i)) { + /* c8 ignore next 2 */ + continue + } + if (i === 'proxyCache') continue + let value = obj[i] + let type = typeof value + + if (i === 'parent' && type === 'object') { + if (parent) cloned[i] = parent + } else if (i === 'source') { + cloned[i] = value + } else if (Array.isArray(value)) { + cloned[i] = value.map(j => cloneNode(j, cloned)) + } else { + if (type === 'object' && value !== null) value = cloneNode(value) + cloned[i] = value + } + } + + return cloned +} + +function sourceOffset(inputCSS, position) { + // Not all custom syntaxes support `offset` in `source.start` and `source.end` + if ( + position && + typeof position.offset !== 'undefined' + ) { + return position.offset; + } + + let column = 1 + let line = 1 + let offset = 0 + + for (let i = 0; i < inputCSS.length; i++) { + if (line === position.line && column === position.column) { + offset = i + break + } + + if (inputCSS[i] === '\n') { + column = 1 + line += 1 + } else { + column += 1 + } + } + + return offset +} + +class Node { + get proxyOf() { + return this + } + + constructor(defaults = {}) { + this.raws = {} + this[isClean] = false + this[my] = true + + for (let name in defaults) { + if (name === 'nodes') { + this.nodes = [] + for (let node of defaults[name]) { + if (typeof node.clone === 'function') { + this.append(node.clone()) + } else { + this.append(node) + } + } + } else { + this[name] = defaults[name] + } + } + } + + addToError(error) { + error.postcssNode = this + if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) { + let s = this.source + error.stack = error.stack.replace( + /\n\s{4}at /, + `$&${s.input.from}:${s.start.line}:${s.start.column}$&` + ) + } + return error + } + + after(add) { + this.parent.insertAfter(this, add) + return this + } + + assign(overrides = {}) { + for (let name in overrides) { + this[name] = overrides[name] + } + return this + } + + before(add) { + this.parent.insertBefore(this, add) + return this + } + + cleanRaws(keepBetween) { + delete this.raws.before + delete this.raws.after + if (!keepBetween) delete this.raws.between + } + + clone(overrides = {}) { + let cloned = cloneNode(this) + for (let name in overrides) { + cloned[name] = overrides[name] + } + return cloned + } + + cloneAfter(overrides = {}) { + let cloned = this.clone(overrides) + this.parent.insertAfter(this, cloned) + return cloned + } + + cloneBefore(overrides = {}) { + let cloned = this.clone(overrides) + this.parent.insertBefore(this, cloned) + return cloned + } + + error(message, opts = {}) { + if (this.source) { + let { end, start } = this.rangeBy(opts) + return this.source.input.error( + message, + { column: start.column, line: start.line }, + { column: end.column, line: end.line }, + opts + ) + } + return new CssSyntaxError(message) + } + + getProxyProcessor() { + return { + get(node, prop) { + if (prop === 'proxyOf') { + return node + } else if (prop === 'root') { + return () => node.root().toProxy() + } else { + return node[prop] + } + }, + + set(node, prop, value) { + if (node[prop] === value) return true + node[prop] = value + if ( + prop === 'prop' || + prop === 'value' || + prop === 'name' || + prop === 'params' || + prop === 'important' || + /* c8 ignore next */ + prop === 'text' + ) { + node.markDirty() + } + return true + } + } + } + + /* c8 ignore next 3 */ + markClean() { + this[isClean] = true + } + + markDirty() { + if (this[isClean]) { + this[isClean] = false + let next = this + while ((next = next.parent)) { + next[isClean] = false + } + } + } + + next() { + if (!this.parent) return undefined + let index = this.parent.index(this) + return this.parent.nodes[index + 1] + } + + positionBy(opts) { + let pos = this.source.start + if (opts.index) { + pos = this.positionInside(opts.index) + } else if (opts.word) { + let inputString = ('document' in this.source.input) + ? this.source.input.document + : this.source.input.css + let stringRepresentation = inputString.slice( + sourceOffset(inputString, this.source.start), + sourceOffset(inputString, this.source.end) + ) + let index = stringRepresentation.indexOf(opts.word) + if (index !== -1) pos = this.positionInside(index) + } + return pos + } + + positionInside(index) { + let column = this.source.start.column + let line = this.source.start.line + let inputString = ('document' in this.source.input) + ? this.source.input.document + : this.source.input.css + let offset = sourceOffset(inputString, this.source.start) + let end = offset + index + + for (let i = offset; i < end; i++) { + if (inputString[i] === '\n') { + column = 1 + line += 1 + } else { + column += 1 + } + } + + return { column, line } + } + + prev() { + if (!this.parent) return undefined + let index = this.parent.index(this) + return this.parent.nodes[index - 1] + } + + rangeBy(opts) { + let start = { + column: this.source.start.column, + line: this.source.start.line + } + let end = this.source.end + ? { + column: this.source.end.column + 1, + line: this.source.end.line + } + : { + column: start.column + 1, + line: start.line + } + + if (opts.word) { + let inputString = ('document' in this.source.input) + ? this.source.input.document + : this.source.input.css + let stringRepresentation = inputString.slice( + sourceOffset(inputString, this.source.start), + sourceOffset(inputString, this.source.end) + ) + let index = stringRepresentation.indexOf(opts.word) + if (index !== -1) { + start = this.positionInside(index) + end = this.positionInside( + index + opts.word.length, + ) + } + } else { + if (opts.start) { + start = { + column: opts.start.column, + line: opts.start.line + } + } else if (opts.index) { + start = this.positionInside(opts.index) + } + + if (opts.end) { + end = { + column: opts.end.column, + line: opts.end.line + } + } else if (typeof opts.endIndex === 'number') { + end = this.positionInside(opts.endIndex) + } else if (opts.index) { + end = this.positionInside(opts.index + 1) + } + } + + if ( + end.line < start.line || + (end.line === start.line && end.column <= start.column) + ) { + end = { column: start.column + 1, line: start.line } + } + + return { end, start } + } + + raw(prop, defaultType) { + let str = new Stringifier() + return str.raw(this, prop, defaultType) + } + + remove() { + if (this.parent) { + this.parent.removeChild(this) + } + this.parent = undefined + return this + } + + replaceWith(...nodes) { + if (this.parent) { + let bookmark = this + let foundSelf = false + for (let node of nodes) { + if (node === this) { + foundSelf = true + } else if (foundSelf) { + this.parent.insertAfter(bookmark, node) + bookmark = node + } else { + this.parent.insertBefore(bookmark, node) + } + } + + if (!foundSelf) { + this.remove() + } + } + + return this + } + + root() { + let result = this + while (result.parent && result.parent.type !== 'document') { + result = result.parent + } + return result + } + + toJSON(_, inputs) { + let fixed = {} + let emitInputs = inputs == null + inputs = inputs || new Map() + let inputsNextIndex = 0 + + for (let name in this) { + if (!Object.prototype.hasOwnProperty.call(this, name)) { + /* c8 ignore next 2 */ + continue + } + if (name === 'parent' || name === 'proxyCache') continue + let value = this[name] + + if (Array.isArray(value)) { + fixed[name] = value.map(i => { + if (typeof i === 'object' && i.toJSON) { + return i.toJSON(null, inputs) + } else { + return i + } + }) + } else if (typeof value === 'object' && value.toJSON) { + fixed[name] = value.toJSON(null, inputs) + } else if (name === 'source') { + let inputId = inputs.get(value.input) + if (inputId == null) { + inputId = inputsNextIndex + inputs.set(value.input, inputsNextIndex) + inputsNextIndex++ + } + fixed[name] = { + end: value.end, + inputId, + start: value.start + } + } else { + fixed[name] = value + } + } + + if (emitInputs) { + fixed.inputs = [...inputs.keys()].map(input => input.toJSON()) + } + + return fixed + } + + toProxy() { + if (!this.proxyCache) { + this.proxyCache = new Proxy(this, this.getProxyProcessor()) + } + return this.proxyCache + } + + toString(stringifier = stringify) { + if (stringifier.stringify) stringifier = stringifier.stringify + let result = '' + stringifier(this, i => { + result += i + }) + return result + } + + warn(result, text, opts) { + let data = { node: this } + for (let i in opts) data[i] = opts[i] + return result.warn(text, data) + } +} + +module.exports = Node +Node.default = Node + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/parse.js": +/*!*****************************************************!*\ + !*** ../../../../node_modules/postcss/lib/parse.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Container = __webpack_require__(/*! ./container */ "../../../../node_modules/postcss/lib/container.js") +let Input = __webpack_require__(/*! ./input */ "../../../../node_modules/postcss/lib/input.js") +let Parser = __webpack_require__(/*! ./parser */ "../../../../node_modules/postcss/lib/parser.js") + +function parse(css, opts) { + let input = new Input(css, opts) + let parser = new Parser(input) + try { + parser.parse() + } catch (e) { + if (true) { + if (e.name === 'CssSyntaxError' && opts && opts.from) { + if (/\.scss$/i.test(opts.from)) { + e.message += + '\nYou tried to parse SCSS with ' + + 'the standard CSS parser; ' + + 'try again with the postcss-scss parser' + } else if (/\.sass/i.test(opts.from)) { + e.message += + '\nYou tried to parse Sass with ' + + 'the standard CSS parser; ' + + 'try again with the postcss-sass parser' + } else if (/\.less$/i.test(opts.from)) { + e.message += + '\nYou tried to parse Less with ' + + 'the standard CSS parser; ' + + 'try again with the postcss-less parser' + } + } + } + throw e + } + + return parser.root +} + +module.exports = parse +parse.default = parse + +Container.registerParse(parse) + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/parser.js": +/*!******************************************************!*\ + !*** ../../../../node_modules/postcss/lib/parser.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let AtRule = __webpack_require__(/*! ./at-rule */ "../../../../node_modules/postcss/lib/at-rule.js") +let Comment = __webpack_require__(/*! ./comment */ "../../../../node_modules/postcss/lib/comment.js") +let Declaration = __webpack_require__(/*! ./declaration */ "../../../../node_modules/postcss/lib/declaration.js") +let Root = __webpack_require__(/*! ./root */ "../../../../node_modules/postcss/lib/root.js") +let Rule = __webpack_require__(/*! ./rule */ "../../../../node_modules/postcss/lib/rule.js") +let tokenizer = __webpack_require__(/*! ./tokenize */ "../../../../node_modules/postcss/lib/tokenize.js") + +const SAFE_COMMENT_NEIGHBOR = { + empty: true, + space: true +} + +function findLastWithPosition(tokens) { + for (let i = tokens.length - 1; i >= 0; i--) { + let token = tokens[i] + let pos = token[3] || token[2] + if (pos) return pos + } +} + +class Parser { + constructor(input) { + this.input = input + + this.root = new Root() + this.current = this.root + this.spaces = '' + this.semicolon = false + + this.createTokenizer() + this.root.source = { input, start: { column: 1, line: 1, offset: 0 } } + } + + atrule(token) { + let node = new AtRule() + node.name = token[1].slice(1) + if (node.name === '') { + this.unnamedAtrule(node, token) + } + this.init(node, token[2]) + + let type + let prev + let shift + let last = false + let open = false + let params = [] + let brackets = [] + + while (!this.tokenizer.endOfFile()) { + token = this.tokenizer.nextToken() + type = token[0] + + if (type === '(' || type === '[') { + brackets.push(type === '(' ? ')' : ']') + } else if (type === '{' && brackets.length > 0) { + brackets.push('}') + } else if (type === brackets[brackets.length - 1]) { + brackets.pop() + } + + if (brackets.length === 0) { + if (type === ';') { + node.source.end = this.getPosition(token[2]) + node.source.end.offset++ + this.semicolon = true + break + } else if (type === '{') { + open = true + break + } else if (type === '}') { + if (params.length > 0) { + shift = params.length - 1 + prev = params[shift] + while (prev && prev[0] === 'space') { + prev = params[--shift] + } + if (prev) { + node.source.end = this.getPosition(prev[3] || prev[2]) + node.source.end.offset++ + } + } + this.end(token) + break + } else { + params.push(token) + } + } else { + params.push(token) + } + + if (this.tokenizer.endOfFile()) { + last = true + break + } + } + + node.raws.between = this.spacesAndCommentsFromEnd(params) + if (params.length) { + node.raws.afterName = this.spacesAndCommentsFromStart(params) + this.raw(node, 'params', params) + if (last) { + token = params[params.length - 1] + node.source.end = this.getPosition(token[3] || token[2]) + node.source.end.offset++ + this.spaces = node.raws.between + node.raws.between = '' + } + } else { + node.raws.afterName = '' + node.params = '' + } + + if (open) { + node.nodes = [] + this.current = node + } + } + + checkMissedSemicolon(tokens) { + let colon = this.colon(tokens) + if (colon === false) return + + let founded = 0 + let token + for (let j = colon - 1; j >= 0; j--) { + token = tokens[j] + if (token[0] !== 'space') { + founded += 1 + if (founded === 2) break + } + } + // If the token is a word, e.g. `!important`, `red` or any other valid property's value. + // Then we need to return the colon after that word token. [3] is the "end" colon of that word. + // And because we need it after that one we do +1 to get the next one. + throw this.input.error( + 'Missed semicolon', + token[0] === 'word' ? token[3] + 1 : token[2] + ) + } + + colon(tokens) { + let brackets = 0 + let prev, token, type + for (let [i, element] of tokens.entries()) { + token = element + type = token[0] + + if (type === '(') { + brackets += 1 + } + if (type === ')') { + brackets -= 1 + } + if (brackets === 0 && type === ':') { + if (!prev) { + this.doubleColon(token) + } else if (prev[0] === 'word' && prev[1] === 'progid') { + continue + } else { + return i + } + } + + prev = token + } + return false + } + + comment(token) { + let node = new Comment() + this.init(node, token[2]) + node.source.end = this.getPosition(token[3] || token[2]) + node.source.end.offset++ + + let text = token[1].slice(2, -2) + if (/^\s*$/.test(text)) { + node.text = '' + node.raws.left = text + node.raws.right = '' + } else { + let match = text.match(/^(\s*)([^]*\S)(\s*)$/) + node.text = match[2] + node.raws.left = match[1] + node.raws.right = match[3] + } + } + + createTokenizer() { + this.tokenizer = tokenizer(this.input) + } + + decl(tokens, customProperty) { + let node = new Declaration() + this.init(node, tokens[0][2]) + + let last = tokens[tokens.length - 1] + if (last[0] === ';') { + this.semicolon = true + tokens.pop() + } + + node.source.end = this.getPosition( + last[3] || last[2] || findLastWithPosition(tokens) + ) + node.source.end.offset++ + + while (tokens[0][0] !== 'word') { + if (tokens.length === 1) this.unknownWord(tokens) + node.raws.before += tokens.shift()[1] + } + node.source.start = this.getPosition(tokens[0][2]) + + node.prop = '' + while (tokens.length) { + let type = tokens[0][0] + if (type === ':' || type === 'space' || type === 'comment') { + break + } + node.prop += tokens.shift()[1] + } + + node.raws.between = '' + + let token + while (tokens.length) { + token = tokens.shift() + + if (token[0] === ':') { + node.raws.between += token[1] + break + } else { + if (token[0] === 'word' && /\w/.test(token[1])) { + this.unknownWord([token]) + } + node.raws.between += token[1] + } + } + + if (node.prop[0] === '_' || node.prop[0] === '*') { + node.raws.before += node.prop[0] + node.prop = node.prop.slice(1) + } + + let firstSpaces = [] + let next + while (tokens.length) { + next = tokens[0][0] + if (next !== 'space' && next !== 'comment') break + firstSpaces.push(tokens.shift()) + } + + this.precheckMissedSemicolon(tokens) + + for (let i = tokens.length - 1; i >= 0; i--) { + token = tokens[i] + if (token[1].toLowerCase() === '!important') { + node.important = true + let string = this.stringFrom(tokens, i) + string = this.spacesFromEnd(tokens) + string + if (string !== ' !important') node.raws.important = string + break + } else if (token[1].toLowerCase() === 'important') { + let cache = tokens.slice(0) + let str = '' + for (let j = i; j > 0; j--) { + let type = cache[j][0] + if (str.trim().startsWith('!') && type !== 'space') { + break + } + str = cache.pop()[1] + str + } + if (str.trim().startsWith('!')) { + node.important = true + node.raws.important = str + tokens = cache + } + } + + if (token[0] !== 'space' && token[0] !== 'comment') { + break + } + } + + let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment') + + if (hasWord) { + node.raws.between += firstSpaces.map(i => i[1]).join('') + firstSpaces = [] + } + this.raw(node, 'value', firstSpaces.concat(tokens), customProperty) + + if (node.value.includes(':') && !customProperty) { + this.checkMissedSemicolon(tokens) + } + } + + doubleColon(token) { + throw this.input.error( + 'Double colon', + { offset: token[2] }, + { offset: token[2] + token[1].length } + ) + } + + emptyRule(token) { + let node = new Rule() + this.init(node, token[2]) + node.selector = '' + node.raws.between = '' + this.current = node + } + + end(token) { + if (this.current.nodes && this.current.nodes.length) { + this.current.raws.semicolon = this.semicolon + } + this.semicolon = false + + this.current.raws.after = (this.current.raws.after || '') + this.spaces + this.spaces = '' + + if (this.current.parent) { + this.current.source.end = this.getPosition(token[2]) + this.current.source.end.offset++ + this.current = this.current.parent + } else { + this.unexpectedClose(token) + } + } + + endFile() { + if (this.current.parent) this.unclosedBlock() + if (this.current.nodes && this.current.nodes.length) { + this.current.raws.semicolon = this.semicolon + } + this.current.raws.after = (this.current.raws.after || '') + this.spaces + this.root.source.end = this.getPosition(this.tokenizer.position()) + } + + freeSemicolon(token) { + this.spaces += token[1] + if (this.current.nodes) { + let prev = this.current.nodes[this.current.nodes.length - 1] + if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) { + prev.raws.ownSemicolon = this.spaces + this.spaces = '' + prev.source.end = this.getPosition(token[2]) + prev.source.end.offset += prev.raws.ownSemicolon.length + } + } + } + + // Helpers + + getPosition(offset) { + let pos = this.input.fromOffset(offset) + return { + column: pos.col, + line: pos.line, + offset + } + } + + init(node, offset) { + this.current.push(node) + node.source = { + input: this.input, + start: this.getPosition(offset) + } + node.raws.before = this.spaces + this.spaces = '' + if (node.type !== 'comment') this.semicolon = false + } + + other(start) { + let end = false + let type = null + let colon = false + let bracket = null + let brackets = [] + let customProperty = start[1].startsWith('--') + + let tokens = [] + let token = start + while (token) { + type = token[0] + tokens.push(token) + + if (type === '(' || type === '[') { + if (!bracket) bracket = token + brackets.push(type === '(' ? ')' : ']') + } else if (customProperty && colon && type === '{') { + if (!bracket) bracket = token + brackets.push('}') + } else if (brackets.length === 0) { + if (type === ';') { + if (colon) { + this.decl(tokens, customProperty) + return + } else { + break + } + } else if (type === '{') { + this.rule(tokens) + return + } else if (type === '}') { + this.tokenizer.back(tokens.pop()) + end = true + break + } else if (type === ':') { + colon = true + } + } else if (type === brackets[brackets.length - 1]) { + brackets.pop() + if (brackets.length === 0) bracket = null + } + + token = this.tokenizer.nextToken() + } + + if (this.tokenizer.endOfFile()) end = true + if (brackets.length > 0) this.unclosedBracket(bracket) + + if (end && colon) { + if (!customProperty) { + while (tokens.length) { + token = tokens[tokens.length - 1][0] + if (token !== 'space' && token !== 'comment') break + this.tokenizer.back(tokens.pop()) + } + } + this.decl(tokens, customProperty) + } else { + this.unknownWord(tokens) + } + } + + parse() { + let token + while (!this.tokenizer.endOfFile()) { + token = this.tokenizer.nextToken() + + switch (token[0]) { + case 'space': + this.spaces += token[1] + break + + case ';': + this.freeSemicolon(token) + break + + case '}': + this.end(token) + break + + case 'comment': + this.comment(token) + break + + case 'at-word': + this.atrule(token) + break + + case '{': + this.emptyRule(token) + break + + default: + this.other(token) + break + } + } + this.endFile() + } + + precheckMissedSemicolon(/* tokens */) { + // Hook for Safe Parser + } + + raw(node, prop, tokens, customProperty) { + let token, type + let length = tokens.length + let value = '' + let clean = true + let next, prev + + for (let i = 0; i < length; i += 1) { + token = tokens[i] + type = token[0] + if (type === 'space' && i === length - 1 && !customProperty) { + clean = false + } else if (type === 'comment') { + prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty' + next = tokens[i + 1] ? tokens[i + 1][0] : 'empty' + if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) { + if (value.slice(-1) === ',') { + clean = false + } else { + value += token[1] + } + } else { + clean = false + } + } else { + value += token[1] + } + } + if (!clean) { + let raw = tokens.reduce((all, i) => all + i[1], '') + node.raws[prop] = { raw, value } + } + node[prop] = value + } + + rule(tokens) { + tokens.pop() + + let node = new Rule() + this.init(node, tokens[0][2]) + + node.raws.between = this.spacesAndCommentsFromEnd(tokens) + this.raw(node, 'selector', tokens) + this.current = node + } + + spacesAndCommentsFromEnd(tokens) { + let lastTokenType + let spaces = '' + while (tokens.length) { + lastTokenType = tokens[tokens.length - 1][0] + if (lastTokenType !== 'space' && lastTokenType !== 'comment') break + spaces = tokens.pop()[1] + spaces + } + return spaces + } + + // Errors + + spacesAndCommentsFromStart(tokens) { + let next + let spaces = '' + while (tokens.length) { + next = tokens[0][0] + if (next !== 'space' && next !== 'comment') break + spaces += tokens.shift()[1] + } + return spaces + } + + spacesFromEnd(tokens) { + let lastTokenType + let spaces = '' + while (tokens.length) { + lastTokenType = tokens[tokens.length - 1][0] + if (lastTokenType !== 'space') break + spaces = tokens.pop()[1] + spaces + } + return spaces + } + + stringFrom(tokens, from) { + let result = '' + for (let i = from; i < tokens.length; i++) { + result += tokens[i][1] + } + tokens.splice(from, tokens.length - from) + return result + } + + unclosedBlock() { + let pos = this.current.source.start + throw this.input.error('Unclosed block', pos.line, pos.column) + } + + unclosedBracket(bracket) { + throw this.input.error( + 'Unclosed bracket', + { offset: bracket[2] }, + { offset: bracket[2] + 1 } + ) + } + + unexpectedClose(token) { + throw this.input.error( + 'Unexpected }', + { offset: token[2] }, + { offset: token[2] + 1 } + ) + } + + unknownWord(tokens) { + throw this.input.error( + 'Unknown word ' + tokens[0][1], + { offset: tokens[0][2] }, + { offset: tokens[0][2] + tokens[0][1].length } + ) + } + + unnamedAtrule(node, token) { + throw this.input.error( + 'At-rule without name', + { offset: token[2] }, + { offset: token[2] + token[1].length } + ) + } +} + +module.exports = Parser + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/postcss.js": +/*!*******************************************************!*\ + !*** ../../../../node_modules/postcss/lib/postcss.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let AtRule = __webpack_require__(/*! ./at-rule */ "../../../../node_modules/postcss/lib/at-rule.js") +let Comment = __webpack_require__(/*! ./comment */ "../../../../node_modules/postcss/lib/comment.js") +let Container = __webpack_require__(/*! ./container */ "../../../../node_modules/postcss/lib/container.js") +let CssSyntaxError = __webpack_require__(/*! ./css-syntax-error */ "../../../../node_modules/postcss/lib/css-syntax-error.js") +let Declaration = __webpack_require__(/*! ./declaration */ "../../../../node_modules/postcss/lib/declaration.js") +let Document = __webpack_require__(/*! ./document */ "../../../../node_modules/postcss/lib/document.js") +let fromJSON = __webpack_require__(/*! ./fromJSON */ "../../../../node_modules/postcss/lib/fromJSON.js") +let Input = __webpack_require__(/*! ./input */ "../../../../node_modules/postcss/lib/input.js") +let LazyResult = __webpack_require__(/*! ./lazy-result */ "../../../../node_modules/postcss/lib/lazy-result.js") +let list = __webpack_require__(/*! ./list */ "../../../../node_modules/postcss/lib/list.js") +let Node = __webpack_require__(/*! ./node */ "../../../../node_modules/postcss/lib/node.js") +let parse = __webpack_require__(/*! ./parse */ "../../../../node_modules/postcss/lib/parse.js") +let Processor = __webpack_require__(/*! ./processor */ "../../../../node_modules/postcss/lib/processor.js") +let Result = __webpack_require__(/*! ./result.js */ "../../../../node_modules/postcss/lib/result.js") +let Root = __webpack_require__(/*! ./root */ "../../../../node_modules/postcss/lib/root.js") +let Rule = __webpack_require__(/*! ./rule */ "../../../../node_modules/postcss/lib/rule.js") +let stringify = __webpack_require__(/*! ./stringify */ "../../../../node_modules/postcss/lib/stringify.js") +let Warning = __webpack_require__(/*! ./warning */ "../../../../node_modules/postcss/lib/warning.js") + +function postcss(...plugins) { + if (plugins.length === 1 && Array.isArray(plugins[0])) { + plugins = plugins[0] + } + return new Processor(plugins) +} + +postcss.plugin = function plugin(name, initializer) { + let warningPrinted = false + function creator(...args) { + // eslint-disable-next-line no-console + if (console && console.warn && !warningPrinted) { + warningPrinted = true + // eslint-disable-next-line no-console + console.warn( + name + + ': postcss.plugin was deprecated. Migration guide:\n' + + 'https://evilmartians.com/chronicles/postcss-8-plugin-migration' + ) + if (process.env.LANG && process.env.LANG.startsWith('cn')) { + /* c8 ignore next 7 */ + // eslint-disable-next-line no-console + console.warn( + name + + ': 里面 postcss.plugin 被弃用. 迁移指南:\n' + + 'https://www.w3ctech.com/topic/2226' + ) + } + } + let transformer = initializer(...args) + transformer.postcssPlugin = name + transformer.postcssVersion = new Processor().version + return transformer + } + + let cache + Object.defineProperty(creator, 'postcss', { + get() { + if (!cache) cache = creator() + return cache + } + }) + + creator.process = function (css, processOpts, pluginOpts) { + return postcss([creator(pluginOpts)]).process(css, processOpts) + } + + return creator +} + +postcss.stringify = stringify +postcss.parse = parse +postcss.fromJSON = fromJSON +postcss.list = list + +postcss.comment = defaults => new Comment(defaults) +postcss.atRule = defaults => new AtRule(defaults) +postcss.decl = defaults => new Declaration(defaults) +postcss.rule = defaults => new Rule(defaults) +postcss.root = defaults => new Root(defaults) +postcss.document = defaults => new Document(defaults) + +postcss.CssSyntaxError = CssSyntaxError +postcss.Declaration = Declaration +postcss.Container = Container +postcss.Processor = Processor +postcss.Document = Document +postcss.Comment = Comment +postcss.Warning = Warning +postcss.AtRule = AtRule +postcss.Result = Result +postcss.Input = Input +postcss.Rule = Rule +postcss.Root = Root +postcss.Node = Node + +LazyResult.registerPostcss(postcss) + +module.exports = postcss +postcss.default = postcss + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/previous-map.js": +/*!************************************************************!*\ + !*** ../../../../node_modules/postcss/lib/previous-map.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let { existsSync, readFileSync } = __webpack_require__(/*! fs */ "?0222") +let { dirname, join } = __webpack_require__(/*! path */ "?53a2") +let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(/*! source-map-js */ "?730d") + +function fromBase64(str) { + if (Buffer) { + return Buffer.from(str, 'base64').toString() + } else { + /* c8 ignore next 2 */ + return window.atob(str) + } +} + +class PreviousMap { + constructor(css, opts) { + if (opts.map === false) return + this.loadAnnotation(css) + this.inline = this.startWith(this.annotation, 'data:') + + let prev = opts.map ? opts.map.prev : undefined + let text = this.loadMap(opts.from, prev) + if (!this.mapFile && opts.from) { + this.mapFile = opts.from + } + if (this.mapFile) this.root = dirname(this.mapFile) + if (text) this.text = text + } + + consumer() { + if (!this.consumerCache) { + this.consumerCache = new SourceMapConsumer(this.text) + } + return this.consumerCache + } + + decodeInline(text) { + let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/ + let baseUri = /^data:application\/json;base64,/ + let charsetUri = /^data:application\/json;charset=utf-?8,/ + let uri = /^data:application\/json,/ + + let uriMatch = text.match(charsetUri) || text.match(uri) + if (uriMatch) { + return decodeURIComponent(text.substr(uriMatch[0].length)) + } + + let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri) + if (baseUriMatch) { + return fromBase64(text.substr(baseUriMatch[0].length)) + } + + let encoding = text.match(/data:application\/json;([^,]+),/)[1] + throw new Error('Unsupported source map encoding ' + encoding) + } + + getAnnotationURL(sourceMapString) { + return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, '').trim() + } + + isMap(map) { + if (typeof map !== 'object') return false + return ( + typeof map.mappings === 'string' || + typeof map._mappings === 'string' || + Array.isArray(map.sections) + ) + } + + loadAnnotation(css) { + let comments = css.match(/\/\*\s*# sourceMappingURL=/g) + if (!comments) return + + // sourceMappingURLs from comments, strings, etc. + let start = css.lastIndexOf(comments.pop()) + let end = css.indexOf('*/', start) + + if (start > -1 && end > -1) { + // Locate the last sourceMappingURL to avoid pickin + this.annotation = this.getAnnotationURL(css.substring(start, end)) + } + } + + loadFile(path) { + this.root = dirname(path) + if (existsSync(path)) { + this.mapFile = path + return readFileSync(path, 'utf-8').toString().trim() + } + } + + loadMap(file, prev) { + if (prev === false) return false + + if (prev) { + if (typeof prev === 'string') { + return prev + } else if (typeof prev === 'function') { + let prevPath = prev(file) + if (prevPath) { + let map = this.loadFile(prevPath) + if (!map) { + throw new Error( + 'Unable to load previous source map: ' + prevPath.toString() + ) + } + return map + } + } else if (prev instanceof SourceMapConsumer) { + return SourceMapGenerator.fromSourceMap(prev).toString() + } else if (prev instanceof SourceMapGenerator) { + return prev.toString() + } else if (this.isMap(prev)) { + return JSON.stringify(prev) + } else { + throw new Error( + 'Unsupported previous source map format: ' + prev.toString() + ) + } + } else if (this.inline) { + return this.decodeInline(this.annotation) + } else if (this.annotation) { + let map = this.annotation + if (file) map = join(dirname(file), map) + return this.loadFile(map) + } + } + + startWith(string, start) { + if (!string) return false + return string.substr(0, start.length) === start + } + + withContent() { + return !!( + this.consumer().sourcesContent && + this.consumer().sourcesContent.length > 0 + ) + } +} + +module.exports = PreviousMap +PreviousMap.default = PreviousMap + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/processor.js": +/*!*********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/processor.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Document = __webpack_require__(/*! ./document */ "../../../../node_modules/postcss/lib/document.js") +let LazyResult = __webpack_require__(/*! ./lazy-result */ "../../../../node_modules/postcss/lib/lazy-result.js") +let NoWorkResult = __webpack_require__(/*! ./no-work-result */ "../../../../node_modules/postcss/lib/no-work-result.js") +let Root = __webpack_require__(/*! ./root */ "../../../../node_modules/postcss/lib/root.js") + +class Processor { + constructor(plugins = []) { + this.version = '8.5.3' + this.plugins = this.normalize(plugins) + } + + normalize(plugins) { + let normalized = [] + for (let i of plugins) { + if (i.postcss === true) { + i = i() + } else if (i.postcss) { + i = i.postcss + } + + if (typeof i === 'object' && Array.isArray(i.plugins)) { + normalized = normalized.concat(i.plugins) + } else if (typeof i === 'object' && i.postcssPlugin) { + normalized.push(i) + } else if (typeof i === 'function') { + normalized.push(i) + } else if (typeof i === 'object' && (i.parse || i.stringify)) { + if (true) { + throw new Error( + 'PostCSS syntaxes cannot be used as plugins. Instead, please use ' + + 'one of the syntax/parser/stringifier options as outlined ' + + 'in your PostCSS runner documentation.' + ) + } + } else { + throw new Error(i + ' is not a PostCSS plugin') + } + } + return normalized + } + + process(css, opts = {}) { + if ( + !this.plugins.length && + !opts.parser && + !opts.stringifier && + !opts.syntax + ) { + return new NoWorkResult(this, css, opts) + } else { + return new LazyResult(this, css, opts) + } + } + + use(plugin) { + this.plugins = this.plugins.concat(this.normalize([plugin])) + return this + } +} + +module.exports = Processor +Processor.default = Processor + +Root.registerProcessor(Processor) +Document.registerProcessor(Processor) + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/result.js": +/*!******************************************************!*\ + !*** ../../../../node_modules/postcss/lib/result.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Warning = __webpack_require__(/*! ./warning */ "../../../../node_modules/postcss/lib/warning.js") + +class Result { + get content() { + return this.css + } + + constructor(processor, root, opts) { + this.processor = processor + this.messages = [] + this.root = root + this.opts = opts + this.css = undefined + this.map = undefined + } + + toString() { + return this.css + } + + warn(text, opts = {}) { + if (!opts.plugin) { + if (this.lastPlugin && this.lastPlugin.postcssPlugin) { + opts.plugin = this.lastPlugin.postcssPlugin + } + } + + let warning = new Warning(text, opts) + this.messages.push(warning) + + return warning + } + + warnings() { + return this.messages.filter(i => i.type === 'warning') + } +} + +module.exports = Result +Result.default = Result + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/root.js": +/*!****************************************************!*\ + !*** ../../../../node_modules/postcss/lib/root.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Container = __webpack_require__(/*! ./container */ "../../../../node_modules/postcss/lib/container.js") + +let LazyResult, Processor + +class Root extends Container { + constructor(defaults) { + super(defaults) + this.type = 'root' + if (!this.nodes) this.nodes = [] + } + + normalize(child, sample, type) { + let nodes = super.normalize(child) + + if (sample) { + if (type === 'prepend') { + if (this.nodes.length > 1) { + sample.raws.before = this.nodes[1].raws.before + } else { + delete sample.raws.before + } + } else if (this.first !== sample) { + for (let node of nodes) { + node.raws.before = sample.raws.before + } + } + } + + return nodes + } + + removeChild(child, ignore) { + let index = this.index(child) + + if (!ignore && index === 0 && this.nodes.length > 1) { + this.nodes[1].raws.before = this.nodes[index].raws.before + } + + return super.removeChild(child) + } + + toResult(opts = {}) { + let lazy = new LazyResult(new Processor(), this, opts) + return lazy.stringify() + } +} + +Root.registerLazyResult = dependant => { + LazyResult = dependant +} + +Root.registerProcessor = dependant => { + Processor = dependant +} + +module.exports = Root +Root.default = Root + +Container.registerRoot(Root) + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/rule.js": +/*!****************************************************!*\ + !*** ../../../../node_modules/postcss/lib/rule.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Container = __webpack_require__(/*! ./container */ "../../../../node_modules/postcss/lib/container.js") +let list = __webpack_require__(/*! ./list */ "../../../../node_modules/postcss/lib/list.js") + +class Rule extends Container { + get selectors() { + return list.comma(this.selector) + } + + set selectors(values) { + let match = this.selector ? this.selector.match(/,\s*/) : null + let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen') + this.selector = values.join(sep) + } + + constructor(defaults) { + super(defaults) + this.type = 'rule' + if (!this.nodes) this.nodes = [] + } +} + +module.exports = Rule +Rule.default = Rule + +Container.registerRule(Rule) + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/stringifier.js": +/*!***********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/stringifier.js ***! + \***********************************************************/ +/***/ ((module) => { + +"use strict"; + + +const DEFAULT_RAW = { + after: '\n', + beforeClose: '\n', + beforeComment: '\n', + beforeDecl: '\n', + beforeOpen: ' ', + beforeRule: '\n', + colon: ': ', + commentLeft: ' ', + commentRight: ' ', + emptyBody: '', + indent: ' ', + semicolon: false +} + +function capitalize(str) { + return str[0].toUpperCase() + str.slice(1) +} + +class Stringifier { + constructor(builder) { + this.builder = builder + } + + atrule(node, semicolon) { + let name = '@' + node.name + let params = node.params ? this.rawValue(node, 'params') : '' + + if (typeof node.raws.afterName !== 'undefined') { + name += node.raws.afterName + } else if (params) { + name += ' ' + } + + if (node.nodes) { + this.block(node, name + params) + } else { + let end = (node.raws.between || '') + (semicolon ? ';' : '') + this.builder(name + params + end, node) + } + } + + beforeAfter(node, detect) { + let value + if (node.type === 'decl') { + value = this.raw(node, null, 'beforeDecl') + } else if (node.type === 'comment') { + value = this.raw(node, null, 'beforeComment') + } else if (detect === 'before') { + value = this.raw(node, null, 'beforeRule') + } else { + value = this.raw(node, null, 'beforeClose') + } + + let buf = node.parent + let depth = 0 + while (buf && buf.type !== 'root') { + depth += 1 + buf = buf.parent + } + + if (value.includes('\n')) { + let indent = this.raw(node, null, 'indent') + if (indent.length) { + for (let step = 0; step < depth; step++) value += indent + } + } + + return value + } + + block(node, start) { + let between = this.raw(node, 'between', 'beforeOpen') + this.builder(start + between + '{', node, 'start') + + let after + if (node.nodes && node.nodes.length) { + this.body(node) + after = this.raw(node, 'after') + } else { + after = this.raw(node, 'after', 'emptyBody') + } + + if (after) this.builder(after) + this.builder('}', node, 'end') + } + + body(node) { + let last = node.nodes.length - 1 + while (last > 0) { + if (node.nodes[last].type !== 'comment') break + last -= 1 + } + + let semicolon = this.raw(node, 'semicolon') + for (let i = 0; i < node.nodes.length; i++) { + let child = node.nodes[i] + let before = this.raw(child, 'before') + if (before) this.builder(before) + this.stringify(child, last !== i || semicolon) + } + } + + comment(node) { + let left = this.raw(node, 'left', 'commentLeft') + let right = this.raw(node, 'right', 'commentRight') + this.builder('/*' + left + node.text + right + '*/', node) + } + + decl(node, semicolon) { + let between = this.raw(node, 'between', 'colon') + let string = node.prop + between + this.rawValue(node, 'value') + + if (node.important) { + string += node.raws.important || ' !important' + } + + if (semicolon) string += ';' + this.builder(string, node) + } + + document(node) { + this.body(node) + } + + raw(node, own, detect) { + let value + if (!detect) detect = own + + // Already had + if (own) { + value = node.raws[own] + if (typeof value !== 'undefined') return value + } + + let parent = node.parent + + if (detect === 'before') { + // Hack for first rule in CSS + if (!parent || (parent.type === 'root' && parent.first === node)) { + return '' + } + + // `root` nodes in `document` should use only their own raws + if (parent && parent.type === 'document') { + return '' + } + } + + // Floating child without parent + if (!parent) return DEFAULT_RAW[detect] + + // Detect style by other nodes + let root = node.root() + if (!root.rawCache) root.rawCache = {} + if (typeof root.rawCache[detect] !== 'undefined') { + return root.rawCache[detect] + } + + if (detect === 'before' || detect === 'after') { + return this.beforeAfter(node, detect) + } else { + let method = 'raw' + capitalize(detect) + if (this[method]) { + value = this[method](root, node) + } else { + root.walk(i => { + value = i.raws[own] + if (typeof value !== 'undefined') return false + }) + } + } + + if (typeof value === 'undefined') value = DEFAULT_RAW[detect] + + root.rawCache[detect] = value + return value + } + + rawBeforeClose(root) { + let value + root.walk(i => { + if (i.nodes && i.nodes.length > 0) { + if (typeof i.raws.after !== 'undefined') { + value = i.raws.after + if (value.includes('\n')) { + value = value.replace(/[^\n]+$/, '') + } + return false + } + } + }) + if (value) value = value.replace(/\S/g, '') + return value + } + + rawBeforeComment(root, node) { + let value + root.walkComments(i => { + if (typeof i.raws.before !== 'undefined') { + value = i.raws.before + if (value.includes('\n')) { + value = value.replace(/[^\n]+$/, '') + } + return false + } + }) + if (typeof value === 'undefined') { + value = this.raw(node, null, 'beforeDecl') + } else if (value) { + value = value.replace(/\S/g, '') + } + return value + } + + rawBeforeDecl(root, node) { + let value + root.walkDecls(i => { + if (typeof i.raws.before !== 'undefined') { + value = i.raws.before + if (value.includes('\n')) { + value = value.replace(/[^\n]+$/, '') + } + return false + } + }) + if (typeof value === 'undefined') { + value = this.raw(node, null, 'beforeRule') + } else if (value) { + value = value.replace(/\S/g, '') + } + return value + } + + rawBeforeOpen(root) { + let value + root.walk(i => { + if (i.type !== 'decl') { + value = i.raws.between + if (typeof value !== 'undefined') return false + } + }) + return value + } + + rawBeforeRule(root) { + let value + root.walk(i => { + if (i.nodes && (i.parent !== root || root.first !== i)) { + if (typeof i.raws.before !== 'undefined') { + value = i.raws.before + if (value.includes('\n')) { + value = value.replace(/[^\n]+$/, '') + } + return false + } + } + }) + if (value) value = value.replace(/\S/g, '') + return value + } + + rawColon(root) { + let value + root.walkDecls(i => { + if (typeof i.raws.between !== 'undefined') { + value = i.raws.between.replace(/[^\s:]/g, '') + return false + } + }) + return value + } + + rawEmptyBody(root) { + let value + root.walk(i => { + if (i.nodes && i.nodes.length === 0) { + value = i.raws.after + if (typeof value !== 'undefined') return false + } + }) + return value + } + + rawIndent(root) { + if (root.raws.indent) return root.raws.indent + let value + root.walk(i => { + let p = i.parent + if (p && p !== root && p.parent && p.parent === root) { + if (typeof i.raws.before !== 'undefined') { + let parts = i.raws.before.split('\n') + value = parts[parts.length - 1] + value = value.replace(/\S/g, '') + return false + } + } + }) + return value + } + + rawSemicolon(root) { + let value + root.walk(i => { + if (i.nodes && i.nodes.length && i.last.type === 'decl') { + value = i.raws.semicolon + if (typeof value !== 'undefined') return false + } + }) + return value + } + + rawValue(node, prop) { + let value = node[prop] + let raw = node.raws[prop] + if (raw && raw.value === value) { + return raw.raw + } + + return value + } + + root(node) { + this.body(node) + if (node.raws.after) this.builder(node.raws.after) + } + + rule(node) { + this.block(node, this.rawValue(node, 'selector')) + if (node.raws.ownSemicolon) { + this.builder(node.raws.ownSemicolon, node, 'end') + } + } + + stringify(node, semicolon) { + /* c8 ignore start */ + if (!this[node.type]) { + throw new Error( + 'Unknown AST node type ' + + node.type + + '. ' + + 'Maybe you need to change PostCSS stringifier.' + ) + } + /* c8 ignore stop */ + this[node.type](node, semicolon) + } +} + +module.exports = Stringifier +Stringifier.default = Stringifier + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/stringify.js": +/*!*********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/stringify.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +let Stringifier = __webpack_require__(/*! ./stringifier */ "../../../../node_modules/postcss/lib/stringifier.js") + +function stringify(node, builder) { + let str = new Stringifier(builder) + str.stringify(node) +} + +module.exports = stringify +stringify.default = stringify + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/symbols.js": +/*!*******************************************************!*\ + !*** ../../../../node_modules/postcss/lib/symbols.js ***! + \*******************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports.isClean = Symbol('isClean') + +module.exports.my = Symbol('my') + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/tokenize.js": +/*!********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/tokenize.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + + +const SINGLE_QUOTE = "'".charCodeAt(0) +const DOUBLE_QUOTE = '"'.charCodeAt(0) +const BACKSLASH = '\\'.charCodeAt(0) +const SLASH = '/'.charCodeAt(0) +const NEWLINE = '\n'.charCodeAt(0) +const SPACE = ' '.charCodeAt(0) +const FEED = '\f'.charCodeAt(0) +const TAB = '\t'.charCodeAt(0) +const CR = '\r'.charCodeAt(0) +const OPEN_SQUARE = '['.charCodeAt(0) +const CLOSE_SQUARE = ']'.charCodeAt(0) +const OPEN_PARENTHESES = '('.charCodeAt(0) +const CLOSE_PARENTHESES = ')'.charCodeAt(0) +const OPEN_CURLY = '{'.charCodeAt(0) +const CLOSE_CURLY = '}'.charCodeAt(0) +const SEMICOLON = ';'.charCodeAt(0) +const ASTERISK = '*'.charCodeAt(0) +const COLON = ':'.charCodeAt(0) +const AT = '@'.charCodeAt(0) + +const RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g +const RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g +const RE_BAD_BRACKET = /.[\r\n"'(/\\]/ +const RE_HEX_ESCAPE = /[\da-f]/i + +module.exports = function tokenizer(input, options = {}) { + let css = input.css.valueOf() + let ignore = options.ignoreErrors + + let code, content, escape, next, quote + let currentToken, escaped, escapePos, n, prev + + let length = css.length + let pos = 0 + let buffer = [] + let returned = [] + + function position() { + return pos + } + + function unclosed(what) { + throw input.error('Unclosed ' + what, pos) + } + + function endOfFile() { + return returned.length === 0 && pos >= length + } + + function nextToken(opts) { + if (returned.length) return returned.pop() + if (pos >= length) return + + let ignoreUnclosed = opts ? opts.ignoreUnclosed : false + + code = css.charCodeAt(pos) + + switch (code) { + case NEWLINE: + case SPACE: + case TAB: + case CR: + case FEED: { + next = pos + do { + next += 1 + code = css.charCodeAt(next) + } while ( + code === SPACE || + code === NEWLINE || + code === TAB || + code === CR || + code === FEED + ) + + currentToken = ['space', css.slice(pos, next)] + pos = next - 1 + break + } + + case OPEN_SQUARE: + case CLOSE_SQUARE: + case OPEN_CURLY: + case CLOSE_CURLY: + case COLON: + case SEMICOLON: + case CLOSE_PARENTHESES: { + let controlChar = String.fromCharCode(code) + currentToken = [controlChar, controlChar, pos] + break + } + + case OPEN_PARENTHESES: { + prev = buffer.length ? buffer.pop()[1] : '' + n = css.charCodeAt(pos + 1) + if ( + prev === 'url' && + n !== SINGLE_QUOTE && + n !== DOUBLE_QUOTE && + n !== SPACE && + n !== NEWLINE && + n !== TAB && + n !== FEED && + n !== CR + ) { + next = pos + do { + escaped = false + next = css.indexOf(')', next + 1) + if (next === -1) { + if (ignore || ignoreUnclosed) { + next = pos + break + } else { + unclosed('bracket') + } + } + escapePos = next + while (css.charCodeAt(escapePos - 1) === BACKSLASH) { + escapePos -= 1 + escaped = !escaped + } + } while (escaped) + + currentToken = ['brackets', css.slice(pos, next + 1), pos, next] + + pos = next + } else { + next = css.indexOf(')', pos + 1) + content = css.slice(pos, next + 1) + + if (next === -1 || RE_BAD_BRACKET.test(content)) { + currentToken = ['(', '(', pos] + } else { + currentToken = ['brackets', content, pos, next] + pos = next + } + } + + break + } + + case SINGLE_QUOTE: + case DOUBLE_QUOTE: { + quote = code === SINGLE_QUOTE ? "'" : '"' + next = pos + do { + escaped = false + next = css.indexOf(quote, next + 1) + if (next === -1) { + if (ignore || ignoreUnclosed) { + next = pos + 1 + break + } else { + unclosed('string') + } + } + escapePos = next + while (css.charCodeAt(escapePos - 1) === BACKSLASH) { + escapePos -= 1 + escaped = !escaped + } + } while (escaped) + + currentToken = ['string', css.slice(pos, next + 1), pos, next] + pos = next + break + } + + case AT: { + RE_AT_END.lastIndex = pos + 1 + RE_AT_END.test(css) + if (RE_AT_END.lastIndex === 0) { + next = css.length - 1 + } else { + next = RE_AT_END.lastIndex - 2 + } + + currentToken = ['at-word', css.slice(pos, next + 1), pos, next] + + pos = next + break + } + + case BACKSLASH: { + next = pos + escape = true + while (css.charCodeAt(next + 1) === BACKSLASH) { + next += 1 + escape = !escape + } + code = css.charCodeAt(next + 1) + if ( + escape && + code !== SLASH && + code !== SPACE && + code !== NEWLINE && + code !== TAB && + code !== CR && + code !== FEED + ) { + next += 1 + if (RE_HEX_ESCAPE.test(css.charAt(next))) { + while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) { + next += 1 + } + if (css.charCodeAt(next + 1) === SPACE) { + next += 1 + } + } + } + + currentToken = ['word', css.slice(pos, next + 1), pos, next] + + pos = next + break + } + + default: { + if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) { + next = css.indexOf('*/', pos + 2) + 1 + if (next === 0) { + if (ignore || ignoreUnclosed) { + next = css.length + } else { + unclosed('comment') + } + } + + currentToken = ['comment', css.slice(pos, next + 1), pos, next] + pos = next + } else { + RE_WORD_END.lastIndex = pos + 1 + RE_WORD_END.test(css) + if (RE_WORD_END.lastIndex === 0) { + next = css.length - 1 + } else { + next = RE_WORD_END.lastIndex - 2 + } + + currentToken = ['word', css.slice(pos, next + 1), pos, next] + buffer.push(currentToken) + pos = next + } + + break + } + } + + pos++ + return currentToken + } + + function back(token) { + returned.push(token) + } + + return { + back, + endOfFile, + nextToken, + position + } +} + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/warn-once.js": +/*!*********************************************************!*\ + !*** ../../../../node_modules/postcss/lib/warn-once.js ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; +/* eslint-disable no-console */ + + +let printed = {} + +module.exports = function warnOnce(message) { + if (printed[message]) return + printed[message] = true + + if (typeof console !== 'undefined' && console.warn) { + console.warn(message) + } +} + + +/***/ }), + +/***/ "../../../../node_modules/postcss/lib/warning.js": +/*!*******************************************************!*\ + !*** ../../../../node_modules/postcss/lib/warning.js ***! + \*******************************************************/ +/***/ ((module) => { + +"use strict"; + + +class Warning { + constructor(text, opts = {}) { + this.type = 'warning' + this.text = text + + if (opts.node && opts.node.source) { + let range = opts.node.rangeBy(opts) + this.line = range.start.line + this.column = range.start.column + this.endLine = range.end.line + this.endColumn = range.end.column + } + + for (let opt in opts) this[opt] = opts[opt] + } + + toString() { + if (this.node) { + return this.node.error(this.text, { + index: this.index, + plugin: this.plugin, + word: this.word + }).message + } + + if (this.plugin) { + return this.plugin + ': ' + this.text + } + + return this.text + } +} + +module.exports = Warning +Warning.default = Warning + + +/***/ }), + +/***/ "../../../../node_modules/sanitize-html/index.js": +/*!*******************************************************!*\ + !*** ../../../../node_modules/sanitize-html/index.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const htmlparser = __webpack_require__(/*! htmlparser2 */ "../../../../node_modules/htmlparser2/lib/index.js"); +const escapeStringRegexp = __webpack_require__(/*! escape-string-regexp */ "../../../../node_modules/escape-string-regexp/index.js"); +const { isPlainObject } = __webpack_require__(/*! is-plain-object */ "../../../../node_modules/is-plain-object/dist/is-plain-object.js"); +const deepmerge = __webpack_require__(/*! deepmerge */ "../../../../node_modules/deepmerge/dist/cjs.js"); +const parseSrcset = __webpack_require__(/*! parse-srcset */ "../../../../node_modules/parse-srcset/src/parse-srcset.js"); +const { parse: postcssParse } = __webpack_require__(/*! postcss */ "../../../../node_modules/postcss/lib/postcss.js"); +// Tags that can conceivably represent stand-alone media. +const mediaTags = [ + 'img', 'audio', 'video', 'picture', 'svg', + 'object', 'map', 'iframe', 'embed' +]; +// Tags that are inherently vulnerable to being used in XSS attacks. +const vulnerableTags = [ 'script', 'style' ]; + +function each(obj, cb) { + if (obj) { + Object.keys(obj).forEach(function (key) { + cb(obj[key], key); + }); + } +} + +// Avoid false positives with .__proto__, .hasOwnProperty, etc. +function has(obj, key) { + return ({}).hasOwnProperty.call(obj, key); +} + +// Returns those elements of `a` for which `cb(a)` returns truthy +function filter(a, cb) { + const n = []; + each(a, function(v) { + if (cb(v)) { + n.push(v); + } + }); + return n; +} + +function isEmptyObject(obj) { + for (const key in obj) { + if (has(obj, key)) { + return false; + } + } + return true; +} + +function stringifySrcset(parsedSrcset) { + return parsedSrcset.map(function(part) { + if (!part.url) { + throw new Error('URL missing'); + } + + return ( + part.url + + (part.w ? ` ${part.w}w` : '') + + (part.h ? ` ${part.h}h` : '') + + (part.d ? ` ${part.d}x` : '') + ); + }).join(', '); +} + +module.exports = sanitizeHtml; + +// A valid attribute name. +// We use a tolerant definition based on the set of strings defined by +// html.spec.whatwg.org/multipage/parsing.html#before-attribute-name-state +// and html.spec.whatwg.org/multipage/parsing.html#attribute-name-state . +// The characters accepted are ones which can be appended to the attribute +// name buffer without triggering a parse error: +// * unexpected-equals-sign-before-attribute-name +// * unexpected-null-character +// * unexpected-character-in-attribute-name +// We exclude the empty string because it's impossible to get to the after +// attribute name state with an empty attribute name buffer. +const VALID_HTML_ATTRIBUTE_NAME = /^[^\0\t\n\f\r /<=>]+$/; + +// Ignore the _recursing flag; it's there for recursive +// invocation as a guard against this exploit: +// https://github.com/fb55/htmlparser2/issues/105 + +function sanitizeHtml(html, options, _recursing) { + if (html == null) { + return ''; + } + if (typeof html === 'number') { + html = html.toString(); + } + + let result = ''; + // Used for hot swapping the result variable with an empty string in order to "capture" the text written to it. + let tempResult = ''; + + function Frame(tag, attribs) { + const that = this; + this.tag = tag; + this.attribs = attribs || {}; + this.tagPosition = result.length; + this.text = ''; // Node inner text + this.openingTagLength = 0; + this.mediaChildren = []; + + this.updateParentNodeText = function() { + if (stack.length) { + const parentFrame = stack[stack.length - 1]; + parentFrame.text += that.text; + } + }; + + this.updateParentNodeMediaChildren = function() { + if (stack.length && mediaTags.includes(this.tag)) { + const parentFrame = stack[stack.length - 1]; + parentFrame.mediaChildren.push(this.tag); + } + }; + } + + options = Object.assign({}, sanitizeHtml.defaults, options); + options.parser = Object.assign({}, htmlParserDefaults, options.parser); + + const tagAllowed = function (name) { + return options.allowedTags === false || (options.allowedTags || []).indexOf(name) > -1; + }; + + // vulnerableTags + vulnerableTags.forEach(function (tag) { + if (tagAllowed(tag) && !options.allowVulnerableTags) { + console.warn(`\n\n⚠️ Your \`allowedTags\` option includes, \`${tag}\`, which is inherently\nvulnerable to XSS attacks. Please remove it from \`allowedTags\`.\nOr, to disable this warning, add the \`allowVulnerableTags\` option\nand ensure you are accounting for this risk.\n\n`); + } + }); + + // Tags that contain something other than HTML, or where discarding + // the text when the tag is disallowed makes sense for other reasons. + // If we are not allowing these tags, we should drop their content too. + // For other tags you would drop the tag but keep its content. + const nonTextTagsArray = options.nonTextTags || [ + 'script', + 'style', + 'textarea', + 'option' + ]; + let allowedAttributesMap; + let allowedAttributesGlobMap; + if (options.allowedAttributes) { + allowedAttributesMap = {}; + allowedAttributesGlobMap = {}; + each(options.allowedAttributes, function(attributes, tag) { + allowedAttributesMap[tag] = []; + const globRegex = []; + attributes.forEach(function(obj) { + if (typeof obj === 'string' && obj.indexOf('*') >= 0) { + globRegex.push(escapeStringRegexp(obj).replace(/\\\*/g, '.*')); + } else { + allowedAttributesMap[tag].push(obj); + } + }); + if (globRegex.length) { + allowedAttributesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$'); + } + }); + } + const allowedClassesMap = {}; + const allowedClassesGlobMap = {}; + const allowedClassesRegexMap = {}; + each(options.allowedClasses, function(classes, tag) { + // Implicitly allows the class attribute + if (allowedAttributesMap) { + if (!has(allowedAttributesMap, tag)) { + allowedAttributesMap[tag] = []; + } + allowedAttributesMap[tag].push('class'); + } + + allowedClassesMap[tag] = classes; + + if (Array.isArray(classes)) { + const globRegex = []; + allowedClassesMap[tag] = []; + allowedClassesRegexMap[tag] = []; + classes.forEach(function(obj) { + if (typeof obj === 'string' && obj.indexOf('*') >= 0) { + globRegex.push(escapeStringRegexp(obj).replace(/\\\*/g, '.*')); + } else if (obj instanceof RegExp) { + allowedClassesRegexMap[tag].push(obj); + } else { + allowedClassesMap[tag].push(obj); + } + }); + if (globRegex.length) { + allowedClassesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$'); + } + } + }); + + const transformTagsMap = {}; + let transformTagsAll; + each(options.transformTags, function(transform, tag) { + let transFun; + if (typeof transform === 'function') { + transFun = transform; + } else if (typeof transform === 'string') { + transFun = sanitizeHtml.simpleTransform(transform); + } + if (tag === '*') { + transformTagsAll = transFun; + } else { + transformTagsMap[tag] = transFun; + } + }); + + let depth; + let stack; + let skipMap; + let transformMap; + let skipText; + let skipTextDepth; + let addedText = false; + + initializeState(); + + const parser = new htmlparser.Parser({ + onopentag: function(name, attribs) { + if (options.onOpenTag) { + options.onOpenTag(name, attribs); + } + + // If `enforceHtmlBoundary` is `true` and this has found the opening + // `html` tag, reset the state. + if (options.enforceHtmlBoundary && name === 'html') { + initializeState(); + } + + if (skipText) { + skipTextDepth++; + return; + } + const frame = new Frame(name, attribs); + stack.push(frame); + + let skip = false; + const hasText = !!frame.text; + let transformedTag; + if (has(transformTagsMap, name)) { + transformedTag = transformTagsMap[name](name, attribs); + + frame.attribs = attribs = transformedTag.attribs; + + if (transformedTag.text !== undefined) { + frame.innerText = transformedTag.text; + } + + if (name !== transformedTag.tagName) { + frame.name = name = transformedTag.tagName; + transformMap[depth] = transformedTag.tagName; + } + } + if (transformTagsAll) { + transformedTag = transformTagsAll(name, attribs); + + frame.attribs = attribs = transformedTag.attribs; + if (name !== transformedTag.tagName) { + frame.name = name = transformedTag.tagName; + transformMap[depth] = transformedTag.tagName; + } + } + + if (!tagAllowed(name) || (options.disallowedTagsMode === 'recursiveEscape' && !isEmptyObject(skipMap)) || (options.nestingLimit != null && depth >= options.nestingLimit)) { + skip = true; + skipMap[depth] = true; + if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') { + if (nonTextTagsArray.indexOf(name) !== -1) { + skipText = true; + skipTextDepth = 1; + } + } + } + depth++; + if (skip) { + if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') { + // We want the contents but not this tag + if (frame.innerText && !hasText) { + const escaped = escapeHtml(frame.innerText); + if (options.textFilter) { + result += options.textFilter(escaped, name); + } else { + result += escaped; + } + addedText = true; + } + return; + } + tempResult = result; + result = ''; + } + result += '<' + name; + + if (name === 'script') { + if (options.allowedScriptHostnames || options.allowedScriptDomains) { + frame.innerText = ''; + } + } + + if (!allowedAttributesMap || has(allowedAttributesMap, name) || allowedAttributesMap['*']) { + each(attribs, function(value, a) { + if (!VALID_HTML_ATTRIBUTE_NAME.test(a)) { + // This prevents part of an attribute name in the output from being + // interpreted as the end of an attribute, or end of a tag. + delete frame.attribs[a]; + return; + } + // If the value is empty, check if the attribute is in the allowedEmptyAttributes array. + // If it is not in the allowedEmptyAttributes array, and it is a known non-boolean attribute, delete it + // List taken from https://html.spec.whatwg.org/multipage/indices.html#attributes-3 + if (value === '' && (!options.allowedEmptyAttributes.includes(a)) && + (options.nonBooleanAttributes.includes(a) || options.nonBooleanAttributes.includes('*'))) { + delete frame.attribs[a]; + return; + } + // check allowedAttributesMap for the element and attribute and modify the value + // as necessary if there are specific values defined. + let passedAllowedAttributesMapCheck = false; + if (!allowedAttributesMap || + (has(allowedAttributesMap, name) && allowedAttributesMap[name].indexOf(a) !== -1) || + (allowedAttributesMap['*'] && allowedAttributesMap['*'].indexOf(a) !== -1) || + (has(allowedAttributesGlobMap, name) && allowedAttributesGlobMap[name].test(a)) || + (allowedAttributesGlobMap['*'] && allowedAttributesGlobMap['*'].test(a))) { + passedAllowedAttributesMapCheck = true; + } else if (allowedAttributesMap && allowedAttributesMap[name]) { + for (const o of allowedAttributesMap[name]) { + if (isPlainObject(o) && o.name && (o.name === a)) { + passedAllowedAttributesMapCheck = true; + let newValue = ''; + if (o.multiple === true) { + // verify the values that are allowed + const splitStrArray = value.split(' '); + for (const s of splitStrArray) { + if (o.values.indexOf(s) !== -1) { + if (newValue === '') { + newValue = s; + } else { + newValue += ' ' + s; + } + } + } + } else if (o.values.indexOf(value) >= 0) { + // verified an allowed value matches the entire attribute value + newValue = value; + } + value = newValue; + } + } + } + if (passedAllowedAttributesMapCheck) { + if (options.allowedSchemesAppliedToAttributes.indexOf(a) !== -1) { + if (naughtyHref(name, value)) { + delete frame.attribs[a]; + return; + } + } + + if (name === 'script' && a === 'src') { + + let allowed = true; + + try { + const parsed = parseUrl(value); + + if (options.allowedScriptHostnames || options.allowedScriptDomains) { + const allowedHostname = (options.allowedScriptHostnames || []).find(function (hostname) { + return hostname === parsed.url.hostname; + }); + const allowedDomain = (options.allowedScriptDomains || []).find(function(domain) { + return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`); + }); + allowed = allowedHostname || allowedDomain; + } + } catch (e) { + allowed = false; + } + + if (!allowed) { + delete frame.attribs[a]; + return; + } + } + + if (name === 'iframe' && a === 'src') { + let allowed = true; + try { + const parsed = parseUrl(value); + + if (parsed.isRelativeUrl) { + // default value of allowIframeRelativeUrls is true + // unless allowedIframeHostnames or allowedIframeDomains specified + allowed = has(options, 'allowIframeRelativeUrls') + ? options.allowIframeRelativeUrls + : (!options.allowedIframeHostnames && !options.allowedIframeDomains); + } else if (options.allowedIframeHostnames || options.allowedIframeDomains) { + const allowedHostname = (options.allowedIframeHostnames || []).find(function (hostname) { + return hostname === parsed.url.hostname; + }); + const allowedDomain = (options.allowedIframeDomains || []).find(function(domain) { + return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`); + }); + allowed = allowedHostname || allowedDomain; + } + } catch (e) { + // Unparseable iframe src + allowed = false; + } + if (!allowed) { + delete frame.attribs[a]; + return; + } + } + if (a === 'srcset') { + try { + let parsed = parseSrcset(value); + parsed.forEach(function(value) { + if (naughtyHref('srcset', value.url)) { + value.evil = true; + } + }); + parsed = filter(parsed, function(v) { + return !v.evil; + }); + if (!parsed.length) { + delete frame.attribs[a]; + return; + } else { + value = stringifySrcset(filter(parsed, function(v) { + return !v.evil; + })); + frame.attribs[a] = value; + } + } catch (e) { + // Unparseable srcset + delete frame.attribs[a]; + return; + } + } + if (a === 'class') { + const allowedSpecificClasses = allowedClassesMap[name]; + const allowedWildcardClasses = allowedClassesMap['*']; + const allowedSpecificClassesGlob = allowedClassesGlobMap[name]; + const allowedSpecificClassesRegex = allowedClassesRegexMap[name]; + const allowedWildcardClassesRegex = allowedClassesRegexMap['*']; + const allowedWildcardClassesGlob = allowedClassesGlobMap['*']; + const allowedClassesGlobs = [ + allowedSpecificClassesGlob, + allowedWildcardClassesGlob + ] + .concat(allowedSpecificClassesRegex, allowedWildcardClassesRegex) + .filter(function (t) { + return t; + }); + if (allowedSpecificClasses && allowedWildcardClasses) { + value = filterClasses(value, deepmerge(allowedSpecificClasses, allowedWildcardClasses), allowedClassesGlobs); + } else { + value = filterClasses(value, allowedSpecificClasses || allowedWildcardClasses, allowedClassesGlobs); + } + if (!value.length) { + delete frame.attribs[a]; + return; + } + } + if (a === 'style') { + if (options.parseStyleAttributes) { + try { + const abstractSyntaxTree = postcssParse(name + ' {' + value + '}', { map: false }); + const filteredAST = filterCss(abstractSyntaxTree, options.allowedStyles); + + value = stringifyStyleAttributes(filteredAST); + + if (value.length === 0) { + delete frame.attribs[a]; + return; + } + } catch (e) { + if (typeof window !== 'undefined') { + console.warn('Failed to parse "' + name + ' {' + value + '}' + '", If you\'re running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547'); + } + delete frame.attribs[a]; + return; + } + } else if (options.allowedStyles) { + throw new Error('allowedStyles option cannot be used together with parseStyleAttributes: false.'); + } + } + result += ' ' + a; + if (value && value.length) { + result += '="' + escapeHtml(value, true) + '"'; + } else if (options.allowedEmptyAttributes.includes(a)) { + result += '=""'; + } + } else { + delete frame.attribs[a]; + } + }); + } + if (options.selfClosing.indexOf(name) !== -1) { + result += ' />'; + } else { + result += '>'; + if (frame.innerText && !hasText && !options.textFilter) { + result += escapeHtml(frame.innerText); + addedText = true; + } + } + if (skip) { + result = tempResult + escapeHtml(result); + tempResult = ''; + } + frame.openingTagLength = result.length - frame.tagPosition; + }, + ontext: function(text) { + if (skipText) { + return; + } + const lastFrame = stack[stack.length - 1]; + let tag; + + if (lastFrame) { + tag = lastFrame.tag; + // If inner text was set by transform function then let's use it + text = lastFrame.innerText !== undefined ? lastFrame.innerText : text; + } + + if (options.disallowedTagsMode === 'completelyDiscard' && !tagAllowed(tag)) { + text = ''; + } else if ((options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') && ((tag === 'script') || (tag === 'style'))) { + // htmlparser2 gives us these as-is. Escaping them ruins the content. Allowing + // script tags is, by definition, game over for XSS protection, so if that's + // your concern, don't allow them. The same is essentially true for style tags + // which have their own collection of XSS vectors. + result += text; + } else if (!addedText) { + const escaped = escapeHtml(text, false); + if (options.textFilter) { + result += options.textFilter(escaped, tag); + } else { + result += escaped; + } + } + if (stack.length) { + const frame = stack[stack.length - 1]; + frame.text += text; + } + }, + onclosetag: function(name, isImplied) { + if (options.onCloseTag) { + options.onCloseTag(name, isImplied); + } + + if (skipText) { + skipTextDepth--; + if (!skipTextDepth) { + skipText = false; + } else { + return; + } + } + + const frame = stack.pop(); + if (!frame) { + // Do not crash on bad markup + return; + } + + if (frame.tag !== name) { + // Another case of bad markup. + // Push to stack, so that it will be used in future closing tags. + stack.push(frame); + return; + } + + skipText = options.enforceHtmlBoundary ? name === 'html' : false; + depth--; + const skip = skipMap[depth]; + if (skip) { + delete skipMap[depth]; + if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') { + frame.updateParentNodeText(); + return; + } + tempResult = result; + result = ''; + } + + if (transformMap[depth]) { + name = transformMap[depth]; + delete transformMap[depth]; + } + + if (options.exclusiveFilter) { + const filterResult = options.exclusiveFilter(frame); + if (filterResult === 'excludeTag') { + if (skip) { + // no longer escaping the tag since it's not added at all + result = tempResult; + tempResult = ''; + } + // remove the opening tag from the result + result = result.substring(0, frame.tagPosition) + result.substring(frame.tagPosition + frame.openingTagLength); + return; + } else if (filterResult) { + result = result.substring(0, frame.tagPosition); + return; + } + } + + frame.updateParentNodeMediaChildren(); + frame.updateParentNodeText(); + + if ( + // Already output /> + options.selfClosing.indexOf(name) !== -1 || + // Escaped tag, closing tag is implied + (isImplied && !tagAllowed(name) && [ 'escape', 'recursiveEscape' ].indexOf(options.disallowedTagsMode) >= 0) + ) { + if (skip) { + result = tempResult; + tempResult = ''; + } + return; + } + + result += ''; + if (skip) { + result = tempResult + escapeHtml(result); + tempResult = ''; + } + addedText = false; + } + }, options.parser); + parser.write(html); + parser.end(); + + return result; + + function initializeState() { + result = ''; + depth = 0; + stack = []; + skipMap = {}; + transformMap = {}; + skipText = false; + skipTextDepth = 0; + } + + function escapeHtml(s, quote) { + if (typeof (s) !== 'string') { + s = s + ''; + } + if (options.parser.decodeEntities) { + s = s.replace(/&/g, '&').replace(//g, '>'); + if (quote) { + s = s.replace(/"/g, '"'); + } + } + // TODO: this is inadequate because it will pass `&0;`. This approach + // will not work, each & must be considered with regard to whether it + // is followed by a 100% syntactically valid entity or not, and escaped + // if it is not. If this bothers you, don't set parser.decodeEntities + // to false. (The default is true.) + s = s.replace(/&(?![a-zA-Z0-9#]{1,20};)/g, '&') // Match ampersands not part of existing HTML entity + .replace(//g, '>'); + if (quote) { + s = s.replace(/"/g, '"'); + } + return s; + } + + function naughtyHref(name, href) { + // Browsers ignore character codes of 32 (space) and below in a surprising + // number of situations. Start reading here: + // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Embedded_tab + // eslint-disable-next-line no-control-regex + href = href.replace(/[\x00-\x20]+/g, ''); + // Clobber any comments in URLs, which the browser might + // interpret inside an XML data island, allowing + // a javascript: URL to be snuck through + while (true) { + const firstIndex = href.indexOf('', firstIndex + 4); + if (lastIndex === -1) { + break; + } + href = href.substring(0, firstIndex) + href.substring(lastIndex + 3); + } + // Case insensitive so we don't get faked out by JAVASCRIPT #1 + // Allow more characters after the first so we don't get faked + // out by certain schemes browsers accept + const matches = href.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/); + if (!matches) { + // Protocol-relative URL starting with any combination of '/' and '\' + if (href.match(/^[/\\]{2}/)) { + return !options.allowProtocolRelative; + } + + // No scheme + return false; + } + const scheme = matches[1].toLowerCase(); + + if (has(options.allowedSchemesByTag, name)) { + return options.allowedSchemesByTag[name].indexOf(scheme) === -1; + } + + return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1; + } + + function parseUrl(value) { + value = value.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/, '$1//'); + if (value.startsWith('relative:')) { + // An attempt to exploit our workaround for base URLs being + // mandatory for relative URL validation in the WHATWG + // URL parser, reject it + throw new Error('relative: exploit attempt'); + } + // naughtyHref is in charge of whether protocol relative URLs + // are cool. Here we are concerned just with allowed hostnames and + // whether to allow relative URLs. + // + // Build a placeholder "base URL" against which any reasonable + // relative URL may be parsed successfully + let base = 'relative://relative-site'; + for (let i = 0; (i < 100); i++) { + base += `/${i}`; + } + + const parsed = new URL(value, base); + + const isRelativeUrl = parsed && parsed.hostname === 'relative-site' && parsed.protocol === 'relative:'; + return { + isRelativeUrl, + url: parsed + }; + } + /** + * Filters user input css properties by allowlisted regex attributes. + * Modifies the abstractSyntaxTree object. + * + * @param {object} abstractSyntaxTree - Object representation of CSS attributes. + * @property {array[Declaration]} abstractSyntaxTree.nodes[0] - Each object cointains prop and value key, i.e { prop: 'color', value: 'red' }. + * @param {object} allowedStyles - Keys are properties (i.e color), value is list of permitted regex rules (i.e /green/i). + * @return {object} - The modified tree. + */ + function filterCss(abstractSyntaxTree, allowedStyles) { + if (!allowedStyles) { + return abstractSyntaxTree; + } + + const astRules = abstractSyntaxTree.nodes[0]; + let selectedRule; + + // Merge global and tag-specific styles into new AST. + if (allowedStyles[astRules.selector] && allowedStyles['*']) { + selectedRule = deepmerge( + allowedStyles[astRules.selector], + allowedStyles['*'] + ); + } else { + selectedRule = allowedStyles[astRules.selector] || allowedStyles['*']; + } + + if (selectedRule) { + abstractSyntaxTree.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []); + } + + return abstractSyntaxTree; + } + + /** + * Extracts the style attributes from an AbstractSyntaxTree and formats those + * values in the inline style attribute format. + * + * @param {AbstractSyntaxTree} filteredAST + * @return {string} - Example: "color:yellow;text-align:center !important;font-family:helvetica;" + */ + function stringifyStyleAttributes(filteredAST) { + return filteredAST.nodes[0].nodes + .reduce(function(extractedAttributes, attrObject) { + extractedAttributes.push( + `${attrObject.prop}:${attrObject.value}${attrObject.important ? ' !important' : ''}` + ); + return extractedAttributes; + }, []) + .join(';'); + } + + /** + * Filters the existing attributes for the given property. Discards any attributes + * which don't match the allowlist. + * + * @param {object} selectedRule - Example: { color: red, font-family: helvetica } + * @param {array} allowedDeclarationsList - List of declarations which pass the allowlist. + * @param {object} attributeObject - Object representing the current css property. + * @property {string} attributeObject.type - Typically 'declaration'. + * @property {string} attributeObject.prop - The CSS property, i.e 'color'. + * @property {string} attributeObject.value - The corresponding value to the css property, i.e 'red'. + * @return {function} - When used in Array.reduce, will return an array of Declaration objects + */ + function filterDeclarations(selectedRule) { + return function (allowedDeclarationsList, attributeObject) { + // If this property is allowlisted... + if (has(selectedRule, attributeObject.prop)) { + const matchesRegex = selectedRule[attributeObject.prop].some(function(regularExpression) { + return regularExpression.test(attributeObject.value); + }); + + if (matchesRegex) { + allowedDeclarationsList.push(attributeObject); + } + } + return allowedDeclarationsList; + }; + } + + function filterClasses(classes, allowed, allowedGlobs) { + if (!allowed) { + // The class attribute is allowed without filtering on this tag + return classes; + } + classes = classes.split(/\s+/); + return classes.filter(function(clss) { + return allowed.indexOf(clss) !== -1 || allowedGlobs.some(function(glob) { + return glob.test(clss); + }); + }).join(' '); + } +} + +// Defaults are accessible to you so that you can use them as a starting point +// programmatically if you wish + +const htmlParserDefaults = { + decodeEntities: true +}; +sanitizeHtml.defaults = { + allowedTags: [ + // Sections derived from MDN element categories and limited to the more + // benign categories. + // https://developer.mozilla.org/en-US/docs/Web/HTML/Element + // Content sectioning + 'address', 'article', 'aside', 'footer', 'header', + 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', + 'main', 'nav', 'section', + // Text content + 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure', + 'hr', 'li', 'menu', 'ol', 'p', 'pre', 'ul', + // Inline text semantics + 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn', + 'em', 'i', 'kbd', 'mark', 'q', + 'rb', 'rp', 'rt', 'rtc', 'ruby', + 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr', + // Table content + 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th', + 'thead', 'tr' + ], + // Tags that cannot be boolean + nonBooleanAttributes: [ + 'abbr', 'accept', 'accept-charset', 'accesskey', 'action', + 'allow', 'alt', 'as', 'autocapitalize', 'autocomplete', + 'blocking', 'charset', 'cite', 'class', 'color', 'cols', + 'colspan', 'content', 'contenteditable', 'coords', 'crossorigin', + 'data', 'datetime', 'decoding', 'dir', 'dirname', 'download', + 'draggable', 'enctype', 'enterkeyhint', 'fetchpriority', 'for', + 'form', 'formaction', 'formenctype', 'formmethod', 'formtarget', + 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', + 'http-equiv', 'id', 'imagesizes', 'imagesrcset', 'inputmode', + 'integrity', 'is', 'itemid', 'itemprop', 'itemref', 'itemtype', + 'kind', 'label', 'lang', 'list', 'loading', 'low', 'max', + 'maxlength', 'media', 'method', 'min', 'minlength', 'name', + 'nonce', 'optimum', 'pattern', 'ping', 'placeholder', 'popover', + 'popovertarget', 'popovertargetaction', 'poster', 'preload', + 'referrerpolicy', 'rel', 'rows', 'rowspan', 'sandbox', 'scope', + 'shape', 'size', 'sizes', 'slot', 'span', 'spellcheck', 'src', + 'srcdoc', 'srclang', 'srcset', 'start', 'step', 'style', + 'tabindex', 'target', 'title', 'translate', 'type', 'usemap', + 'value', 'width', 'wrap', + // Event handlers + 'onauxclick', 'onafterprint', 'onbeforematch', 'onbeforeprint', + 'onbeforeunload', 'onbeforetoggle', 'onblur', 'oncancel', + 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose', + 'oncontextlost', 'oncontextmenu', 'oncontextrestored', 'oncopy', + 'oncuechange', 'oncut', 'ondblclick', 'ondrag', 'ondragend', + 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', + 'ondrop', 'ondurationchange', 'onemptied', 'onended', + 'onerror', 'onfocus', 'onformdata', 'onhashchange', 'oninput', + 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', + 'onlanguagechange', 'onload', 'onloadeddata', 'onloadedmetadata', + 'onloadstart', 'onmessage', 'onmessageerror', 'onmousedown', + 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', + 'onmouseover', 'onmouseup', 'onoffline', 'ononline', 'onpagehide', + 'onpageshow', 'onpaste', 'onpause', 'onplay', 'onplaying', + 'onpopstate', 'onprogress', 'onratechange', 'onreset', 'onresize', + 'onrejectionhandled', 'onscroll', 'onscrollend', + 'onsecuritypolicyviolation', 'onseeked', 'onseeking', 'onselect', + 'onslotchange', 'onstalled', 'onstorage', 'onsubmit', 'onsuspend', + 'ontimeupdate', 'ontoggle', 'onunhandledrejection', 'onunload', + 'onvolumechange', 'onwaiting', 'onwheel' + ], + disallowedTagsMode: 'discard', + allowedAttributes: { + a: [ 'href', 'name', 'target' ], + // We don't currently allow img itself by default, but + // these attributes would make sense if we did. + img: [ 'src', 'srcset', 'alt', 'title', 'width', 'height', 'loading' ] + }, + allowedEmptyAttributes: [ + 'alt' + ], + // Lots of these won't come up by default because we don't allow them + selfClosing: [ 'img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta' ], + // URL schemes we permit + allowedSchemes: [ 'http', 'https', 'ftp', 'mailto', 'tel' ], + allowedSchemesByTag: {}, + allowedSchemesAppliedToAttributes: [ 'href', 'src', 'cite' ], + allowProtocolRelative: true, + enforceHtmlBoundary: false, + parseStyleAttributes: true +}; + +sanitizeHtml.simpleTransform = function(newTagName, newAttribs, merge) { + merge = (merge === undefined) ? true : merge; + newAttribs = newAttribs || {}; + + return function(tagName, attribs) { + let attrib; + if (merge) { + for (attrib in newAttribs) { + attribs[attrib] = newAttribs[attrib]; + } + } else { + attribs = newAttribs; + } + + return { + tagName: newTagName, + attribs: attribs + }; + }; +}; + + +/***/ }), + +/***/ "./getFormInnerFields.js": +/*!*******************************!*\ + !*** ./getFormInnerFields.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var sanitize_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sanitize-html */ "../../../../node_modules/sanitize-html/index.js"); +/* harmony import */ var sanitize_html__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sanitize_html__WEBPACK_IMPORTED_MODULE_0__); + +const div = document.createElement('div'); +function getFormInnerHTML(htmlContent) { + const clean = sanitize_html__WEBPACK_IMPORTED_MODULE_0___default()(htmlContent, { + allowedTags: ['form', 'input', 'select', 'option', 'textarea', 'button', 'fieldset', 'legend', 'label', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'p', 'br'], + allowedAttributes: false + }); + const div = document.createElement('div'); + div.innerHTML = clean; + const form = div.querySelector('form'); + return form ? form.innerHTML : ''; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getFormInnerHTML); + +/***/ }), + +/***/ "./getInputNumberAttrs.js": +/*!********************************!*\ + !*** ./getInputNumberAttrs.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _resolveLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./resolveLabel */ "./resolveLabel.js"); + + +/** + * @param input {HTMLInputElement} + */ +function getInputNumberAttrs(input) { + const attributes = { + name: input.name, + class_name: input.className, + default: input.value, + label: (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(input), + required: input.required + }; + if (input.hasAttribute('min')) { + attributes.min = input.min; + } + if (input.hasAttribute('max')) { + attributes.max = input.max; + } + return attributes; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getInputNumberAttrs); + +/***/ }), + +/***/ "./getMimeType.js": +/*!************************!*\ + !*** ./getMimeType.js ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +const { + mimes +} = window.JetFormBuilderParserConfig; +function getMimeType(filename) { + let type = false; + for (const extPreg in mimes) { + if (!mimes.hasOwnProperty(extPreg)) { + continue; + } + const regex = new RegExp('\.(' + extPreg + ')$', 'i'); + + /** + * Do not return too late, + * because same file can match multiple extensions + */ + if (filename.match(regex)) { + type = mimes[extPreg]; + } + } + return type; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getMimeType); + +/***/ }), + +/***/ "./node-parsers/buttonParser.js": +/*!**************************************!*\ + !*** ./node-parsers/buttonParser.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +function* buttonParser(button) { + if (!button.type || button.type && button.type !== 'submit') { + return; + } + yield { + name: 'jet-forms/submit-field', + attributes: { + label: button.innerHTML.trim(), + class_name: button.className + }, + innerBlocks: [] + }; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (buttonParser); + +/***/ }), + +/***/ "./node-parsers/inputParser.js": +/*!*************************************!*\ + !*** ./node-parsers/inputParser.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _resolveLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../resolveLabel */ "./resolveLabel.js"); +/* harmony import */ var _resolveLegend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../resolveLegend */ "./resolveLegend.js"); +/* harmony import */ var _getInputNumberAttrs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../getInputNumberAttrs */ "./getInputNumberAttrs.js"); +/* harmony import */ var _resolveOptionLabel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../resolveOptionLabel */ "./resolveOptionLabel.js"); +/* harmony import */ var _getMimeType__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../getMimeType */ "./getMimeType.js"); + + + + + +const typeMap = { + email: textParser, + tel: textParser, + url: textParser, + password: textParser, + text: textParser, + color: colorPickerParser, + radio: radioParser, + checkbox: checkboxParser, + date: dateParser, + datetime: dateTimeParser, + 'datetime-local': dateTimeParser, + time: timeParser, + file: mediaParser, + hidden: hiddenParser, + number: numberParser, + range: rangeParser, + submit: submitParser +}; +function* inputParser(input) { + input.type = input.type || 'text'; + if (!typeMap.hasOwnProperty(input.type)) { + return; + } + const generator = typeMap[input.type]; + yield* generator(input); +} + +/** + * @param input {HTMLInputElement} + * @returns {Generator<*, (string|{name, field_type})[], *>} + */ +function* textParser(input) { + const attributes = { + field_type: input.type, + name: input.name, + class_name: input.className, + default: input.value, + label: (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(input), + required: input.required, + placeholder: input.placeholder + }; + if (input.hasAttribute('maxlength')) { + attributes.maxlength = input.maxLength; + } + if (input.hasAttribute('minlength')) { + attributes.minlength = input.minLength; + } + yield { + name: 'jet-forms/text-field', + attributes, + innerBlocks: [] + }; +} + +/** + * @param input {HTMLInputElement} + * @returns {Generator<*, (string|{name, field_type})[], *>} + */ +function* colorPickerParser(input) { + const attributes = { + name: input.name, + class_name: input.className, + default: input.value, + label: (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(input), + required: input.required + }; + yield { + name: 'jet-forms/color-picker-field', + attributes, + innerBlocks: [] + }; +} + +/** + * @param input {HTMLInputElement} + * @returns {Generator<*, (string|{name, field_type})[], *>} + */ +function* radioParser(input) { + if (input.jfbObserved) { + return; + } + const root = input.getRootNode(); + + /** + * @type {HTMLInputElement[]} + */ + const optionNodes = Array.from(root.querySelectorAll(`input[type="radio"][name="${input.name}"]`)); + + // prevent parsing future radio nodes + optionNodes.forEach(node => { + node.jfbObserved = true; + }); + const attributes = { + name: input.name, + class_name: input.className, + field_options: [], + label: (0,_resolveLegend__WEBPACK_IMPORTED_MODULE_1__["default"])(input) || (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(input), + required: input.required + }; + for (const optionNode of optionNodes) { + attributes.field_options.push({ + value: optionNode.value, + label: (0,_resolveOptionLabel__WEBPACK_IMPORTED_MODULE_3__["default"])(optionNode) + }); + if (optionNode.checked) { + attributes.default = optionNode.value; + } + } + yield { + name: 'jet-forms/radio-field', + attributes, + innerBlocks: [] + }; +} + +/** + * @param input {HTMLInputElement} + * @returns {Generator<*, (string|{name, field_type})[], *>} + */ +function* checkboxParser(input) { + if (input.jfbObserved) { + return; + } + const root = input.getRootNode(); + + /** + * @type {HTMLInputElement[]} + */ + const optionNodes = Array.from(root.querySelectorAll(`input[type="checkbox"][name="${input.name}"]`)); + + // prevent parsing future radio nodes + optionNodes.forEach(node => { + node.jfbObserved = true; + }); + const attributes = { + name: input.name, + class_name: input.className, + field_options: [], + label: (0,_resolveLegend__WEBPACK_IMPORTED_MODULE_1__["default"])(input) || (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(input), + required: input.required + }; + for (const optionNode of optionNodes) { + attributes.field_options.push({ + value: optionNode.value, + label: (0,_resolveOptionLabel__WEBPACK_IMPORTED_MODULE_3__["default"])(optionNode) + }); + if (optionNode.checked) { + attributes.default = optionNode.value; + } + } + yield { + name: 'jet-forms/checkbox-field', + attributes, + innerBlocks: [] + }; +} +function* dateParser(input) { + yield { + name: 'jet-forms/date-field', + attributes: (0,_getInputNumberAttrs__WEBPACK_IMPORTED_MODULE_2__["default"])(input), + innerBlocks: [] + }; +} +function* dateTimeParser(input) { + yield { + name: 'jet-forms/datetime-field', + attributes: (0,_getInputNumberAttrs__WEBPACK_IMPORTED_MODULE_2__["default"])(input), + innerBlocks: [] + }; +} +function* timeParser(input) { + yield { + name: 'jet-forms/time-field', + attributes: (0,_getInputNumberAttrs__WEBPACK_IMPORTED_MODULE_2__["default"])(input), + innerBlocks: [] + }; +} +function* hiddenParser(input) { + yield { + name: 'jet-forms/hidden-field', + attributes: { + name: input.name, + class_name: input.className, + default: input.value + }, + innerBlocks: [] + }; +} +function* mediaParser(input) { + const attributes = { + name: input.name, + class_name: input.className, + label: (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(input), + required: input.required, + allowed_mimes: [] + }; + attributes.allowed_mimes = input.accept.split(',').map(part => (0,_getMimeType__WEBPACK_IMPORTED_MODULE_4__["default"])(part.trim())); + yield { + name: 'jet-forms/media-field', + attributes, + innerBlocks: [] + }; +} +function* numberParser(input) { + const attributes = (0,_getInputNumberAttrs__WEBPACK_IMPORTED_MODULE_2__["default"])(input); + attributes.placeholder = input.placeholder; + if (input.hasAttribute('step')) { + attributes.step = input.step; + } + yield { + name: 'jet-forms/number-field', + attributes, + innerBlocks: [] + }; +} + +/** + * @param input {HTMLInputElement} + */ +function* rangeParser(input) { + const attributes = (0,_getInputNumberAttrs__WEBPACK_IMPORTED_MODULE_2__["default"])(input); + if (input.hasAttribute('step')) { + attributes.step = input.step; + } + yield { + name: 'jet-forms/range-field', + attributes, + innerBlocks: [] + }; +} +function* submitParser(input) { + yield { + name: 'jet-forms/submit-field', + attributes: { + label: input.value || 'Submit', + class_name: input.className + }, + innerBlocks: [] + }; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (inputParser); + +/***/ }), + +/***/ "./node-parsers/selectParser.js": +/*!**************************************!*\ + !*** ./node-parsers/selectParser.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _resolveLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../resolveLabel */ "./resolveLabel.js"); + +function* selectParser(select) { + const attributes = { + name: select.name, + class_name: select.className, + label: (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(select), + required: select.required, + field_options: [] + }; + const optionEntries = Object.entries(select.options); + for (const [index, option] of optionEntries) { + if (0 === +index && !option.value) { + attributes.placeholder = option.label; + continue; + } + attributes.field_options.push({ + value: option.value, + label: option.label + }); + if (!option.selected) { + continue; + } + attributes.default = option.value; + } + yield { + name: 'jet-forms/select-field', + attributes, + innerBlocks: [] + }; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (selectParser); + +/***/ }), + +/***/ "./node-parsers/textAreaParser.js": +/*!****************************************!*\ + !*** ./node-parsers/textAreaParser.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _resolveLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../resolveLabel */ "./resolveLabel.js"); + + +/** + * @param textarea {HTMLTextAreaElement} + */ +function* textAreaParser(textarea) { + const attributes = { + name: textarea.name, + class_name: textarea.className, + label: (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(textarea), + required: textarea.required, + placeholder: textarea.placeholder + }; + if (textarea.hasAttribute('maxlength')) { + attributes.maxlength = textarea.maxLength; + } + if (textarea.hasAttribute('minlength')) { + attributes.minlength = textarea.minLength; + } + yield { + name: 'jet-forms/textarea-field', + attributes, + innerBlocks: [] + }; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (textAreaParser); + +/***/ }), + +/***/ "./parseHTMLtoBlocks.js": +/*!******************************!*\ + !*** ./parseHTMLtoBlocks.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_parsers_inputParser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node-parsers/inputParser */ "./node-parsers/inputParser.js"); +/* harmony import */ var _node_parsers_selectParser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node-parsers/selectParser */ "./node-parsers/selectParser.js"); +/* harmony import */ var _node_parsers_textAreaParser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node-parsers/textAreaParser */ "./node-parsers/textAreaParser.js"); +/* harmony import */ var _node_parsers_buttonParser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node-parsers/buttonParser */ "./node-parsers/buttonParser.js"); + + + + +const { + applyFilters +} = JetPlugins.hooks; +const nodeParsers = { + INPUT: _node_parsers_inputParser__WEBPACK_IMPORTED_MODULE_0__["default"], + SELECT: _node_parsers_selectParser__WEBPACK_IMPORTED_MODULE_1__["default"], + TEXTAREA: _node_parsers_textAreaParser__WEBPACK_IMPORTED_MODULE_2__["default"], + BUTTON: _node_parsers_buttonParser__WEBPACK_IMPORTED_MODULE_3__["default"] +}; +function parseHTMLtoBlocks(content) { + const element = document.createElement('div'); + element.innerHTML = content; + const blocks = []; + + // input, textarea, select - for fields, and maybe submit button + // button - for submit button + /** + * @type {Node[]} + */ + const fields = element.querySelectorAll('input, textarea, select, button'); + for (const field of fields) { + // for third-party parsers + const preBlocks = applyFilters('jet.fb.parse.node', false, field); + + // should be array of blocks + if (Array.isArray(preBlocks)) { + blocks.push(...preBlocks); + continue; + } + const generator = nodeParsers[field.nodeName]; + blocks.push(...Array.from(generator(field))); + } + return blocks; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parseHTMLtoBlocks); + +/***/ }), + +/***/ "./resolveLabel.js": +/*!*************************!*\ + !*** ./resolveLabel.js ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @param node {Node|Element} + */ +function resolveLabel(node) { + let label = node.closest('label'); + + // try to find label + if (node.id && !label) { + const root = node.getRootNode(); + label = root.querySelector(`label[for="${node.id}"]`); + } + if (!label) { + return ''; + } + label.querySelectorAll('input, select, textarea').forEach(item => item.remove()); + return label.innerHTML; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (resolveLabel); + +/***/ }), + +/***/ "./resolveLegend.js": +/*!**************************!*\ + !*** ./resolveLegend.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @param node {Node|Element} + */ +function resolveLegend(node) { + const legend = node.closest('fieldset')?.querySelector?.('legend'); + if (!legend) { + return ''; + } + legend.querySelectorAll('input, select, textarea').forEach(item => item.remove()); + return legend.innerHTML; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (resolveLegend); + +/***/ }), + +/***/ "./resolveOptionLabel.js": +/*!*******************************!*\ + !*** ./resolveOptionLabel.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _resolveLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./resolveLabel */ "./resolveLabel.js"); +/** + * @param node {Node|Element} + */ + +function resolveOptionLabel(option) { + if ('#text' === option?.nextSibling?.nodeName) { + return option.nextSibling.nodeValue; + } + return (0,_resolveLabel__WEBPACK_IMPORTED_MODULE_0__["default"])(option); +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (resolveOptionLabel); + +/***/ }), + +/***/ "?0222": +/*!********************!*\ + !*** fs (ignored) ***! + \********************/ +/***/ (() => { + +/* (ignored) */ + +/***/ }), + +/***/ "?53a2": +/*!**********************!*\ + !*** path (ignored) ***! + \**********************/ +/***/ (() => { + +/* (ignored) */ + +/***/ }), + +/***/ "?53db": +/*!**************************************!*\ + !*** ./terminal-highlight (ignored) ***! + \**************************************/ +/***/ (() => { + +/* (ignored) */ + +/***/ }), + +/***/ "?730d": +/*!*******************************!*\ + !*** source-map-js (ignored) ***! + \*******************************/ +/***/ (() => { + +/* (ignored) */ + +/***/ }), + +/***/ "?c768": +/*!*********************!*\ + !*** url (ignored) ***! + \*********************/ +/***/ (() => { + +/* (ignored) */ + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. +(() => { +"use strict"; +/*!******************!*\ + !*** ./index.js ***! + \******************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _parseHTMLtoBlocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parseHTMLtoBlocks */ "./parseHTMLtoBlocks.js"); +/* harmony import */ var _resolveLabel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./resolveLabel */ "./resolveLabel.js"); +/* harmony import */ var _getFormInnerFields__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getFormInnerFields */ "./getFormInnerFields.js"); + + + +window.JetFormBuilderParser = { + parseHTMLtoBlocks: _parseHTMLtoBlocks__WEBPACK_IMPORTED_MODULE_0__["default"], + resolveLabel: _resolveLabel__WEBPACK_IMPORTED_MODULE_1__["default"], + getFormInnerFields: _getFormInnerFields__WEBPACK_IMPORTED_MODULE_2__["default"] +}; +})(); + +/******/ })() +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ3BPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDcEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDemRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQzdMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FDdktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQzFKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUM1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUN2aEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ3JnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUN6NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FDelVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzliQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDcmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQy9XQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNqYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbG1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNwR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUN6UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ243QkE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQWdCQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0FDaENBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQ3pCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7OztBQzFSQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFJQTs7Ozs7Ozs7Ozs7Ozs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUNiQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ1BBOzs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWVwbWVyZ2UvZGlzdC9janMuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb20tc2VyaWFsaXplci9saWIvZm9yZWlnbk5hbWVzLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG9tLXNlcmlhbGl6ZXIvbGliL2luZGV4LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG9tZWxlbWVudHR5cGUvbGliL2luZGV4LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG9taGFuZGxlci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb21oYW5kbGVyL2xpYi9ub2RlLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL2ZlZWRzLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb211dGlscy9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb211dGlscy9saWIvbGVnYWN5LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL21hbmlwdWxhdGlvbi5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RvbXV0aWxzL2xpYi9xdWVyeWluZy5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RvbXV0aWxzL2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb211dGlscy9saWIvdHJhdmVyc2FsLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZW50aXRpZXMvbGliL2RlY29kZS5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2xpYi9kZWNvZGVfY29kZXBvaW50LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZW50aXRpZXMvbGliL2VuY29kZS5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2xpYi9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZ2VuZXJhdGVkL2RlY29kZS1kYXRhLWh0bWwuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZ2VuZXJhdGVkL2RlY29kZS1kYXRhLXhtbC5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2xpYi9nZW5lcmF0ZWQvZW5jb2RlLWh0bWwuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9QYXJzZXIuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvVG9rZW5pemVyLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaHRtbHBhcnNlcjIvbGliL2luZGV4LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqZWN0L2Rpc3QvaXMtcGxhaW4tb2JqZWN0LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbmFub2lkL25vbi1zZWN1cmUvaW5kZXguY2pzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcGFyc2Utc3Jjc2V0L3NyYy9wYXJzZS1zcmNzZXQuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9waWNvY29sb3JzL3BpY29jb2xvcnMuYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2F0LXJ1bGUuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9jb21tZW50LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvY29udGFpbmVyLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvY3NzLXN5bnRheC1lcnJvci5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2RlY2xhcmF0aW9uLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvZG9jdW1lbnQuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9mcm9tSlNPTi5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2lucHV0LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvbGF6eS1yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9saXN0LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL25vLXdvcmstcmVzdWx0LmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvbm9kZS5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3BhcnNlLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcGFyc2VyLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcG9zdGNzcy5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3ByZXZpb3VzLW1hcC5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3Byb2Nlc3Nvci5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3Jlc3VsdC5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3Jvb3QuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9ydWxlLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvc3RyaW5naWZpZXIuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9zeW1ib2xzLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvdG9rZW5pemUuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi93YXJuLW9uY2UuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi93YXJuaW5nLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi9nZXRGb3JtSW5uZXJGaWVsZHMuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4vZ2V0SW5wdXROdW1iZXJBdHRycy5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi9nZXRNaW1lVHlwZS5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi9ub2RlLXBhcnNlcnMvYnV0dG9uUGFyc2VyLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uL25vZGUtcGFyc2Vycy9pbnB1dFBhcnNlci5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi9ub2RlLXBhcnNlcnMvc2VsZWN0UGFyc2VyLmpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci8uL25vZGUtcGFyc2Vycy90ZXh0QXJlYVBhcnNlci5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi9wYXJzZUhUTUx0b0Jsb2Nrcy5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi9yZXNvbHZlTGFiZWwuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4vcmVzb2x2ZUxlZ2VuZC5qcyIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvLi9yZXNvbHZlT3B0aW9uTGFiZWwuanMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL2lnbm9yZWR8RTpcXE9wZW5TZXJ2ZXJcXGRvbWFpbnNcXGNyb2NvLmxvY2FsXFx3cC1jb250ZW50XFxwbHVnaW5zXFxqZXRmb3JtYnVpbGRlclxcbm9kZV9tb2R1bGVzXFxwb3N0Y3NzXFxsaWJ8ZnMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL2lnbm9yZWR8RTpcXE9wZW5TZXJ2ZXJcXGRvbWFpbnNcXGNyb2NvLmxvY2FsXFx3cC1jb250ZW50XFxwbHVnaW5zXFxqZXRmb3JtYnVpbGRlclxcbm9kZV9tb2R1bGVzXFxwb3N0Y3NzXFxsaWJ8cGF0aCIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvaWdub3JlZHxFOlxcT3BlblNlcnZlclxcZG9tYWluc1xcY3JvY28ubG9jYWxcXHdwLWNvbnRlbnRcXHBsdWdpbnNcXGpldGZvcm1idWlsZGVyXFxub2RlX21vZHVsZXNcXHBvc3Rjc3NcXGxpYnwuL3Rlcm1pbmFsLWhpZ2hsaWdodCIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvaWdub3JlZHxFOlxcT3BlblNlcnZlclxcZG9tYWluc1xcY3JvY28ubG9jYWxcXHdwLWNvbnRlbnRcXHBsdWdpbnNcXGpldGZvcm1idWlsZGVyXFxub2RlX21vZHVsZXNcXHBvc3Rjc3NcXGxpYnxzb3VyY2UtbWFwLWpzIiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci9pZ25vcmVkfEU6XFxPcGVuU2VydmVyXFxkb21haW5zXFxjcm9jby5sb2NhbFxcd3AtY29udGVudFxccGx1Z2luc1xcamV0Zm9ybWJ1aWxkZXJcXG5vZGVfbW9kdWxlc1xccG9zdGNzc1xcbGlifHVybCIsIndlYnBhY2s6Ly9qZmItaHRtbC1wYXJzZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2pmYi1odG1sLXBhcnNlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vamZiLWh0bWwtcGFyc2VyLy4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNNZXJnZWFibGVPYmplY3QgPSBmdW5jdGlvbiBpc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb25OdWxsT2JqZWN0KHZhbHVlKVxuXHRcdCYmICFpc1NwZWNpYWwodmFsdWUpXG59O1xuXG5mdW5jdGlvbiBpc05vbk51bGxPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1NwZWNpYWwodmFsdWUpIHtcblx0dmFyIHN0cmluZ1ZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuXHRyZXR1cm4gc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG5cdFx0fHwgc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IERhdGVdJ1xuXHRcdHx8IGlzUmVhY3RFbGVtZW50KHZhbHVlKVxufVxuXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYjVhYzk2M2ZiNzkxZDEyOThlN2YzOTYyMzYzODNiYzk1NWY5MTZjMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL2VsZW1lbnQvUmVhY3RFbGVtZW50LmpzI0wyMS1MMjVcbnZhciBjYW5Vc2VTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gY2FuVXNlU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xuXG5mdW5jdGlvbiBpc1JlYWN0RWxlbWVudCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxufVxuXG5mdW5jdGlvbiBlbXB0eVRhcmdldCh2YWwpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IFtdIDoge31cbn1cblxuZnVuY3Rpb24gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodmFsdWUsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChvcHRpb25zLmNsb25lICE9PSBmYWxzZSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSlcblx0XHQ/IGRlZXBtZXJnZShlbXB0eVRhcmdldCh2YWx1ZSksIHZhbHVlLCBvcHRpb25zKVxuXHRcdDogdmFsdWVcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRhcmdldC5jb25jYXQoc291cmNlKS5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChlbGVtZW50LCBvcHRpb25zKVxuXHR9KVxufVxuXG5mdW5jdGlvbiBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykge1xuXHRpZiAoIW9wdGlvbnMuY3VzdG9tTWVyZ2UpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlXG5cdH1cblx0dmFyIGN1c3RvbU1lcmdlID0gb3B0aW9ucy5jdXN0b21NZXJnZShrZXkpO1xuXHRyZXR1cm4gdHlwZW9mIGN1c3RvbU1lcmdlID09PSAnZnVuY3Rpb24nID8gY3VzdG9tTWVyZ2UgOiBkZWVwbWVyZ2Vcbn1cblxuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcblx0XHQ/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24oc3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGFyZ2V0LCBzeW1ib2wpXG5cdFx0fSlcblx0XHQ6IFtdXG59XG5cbmZ1bmN0aW9uIGdldEtleXModGFyZ2V0KSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh0YXJnZXQpLmNvbmNhdChnZXRFbnVtZXJhYmxlT3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpXG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5SXNPbk9iamVjdChvYmplY3QsIHByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5IGluIG9iamVjdFxuXHR9IGNhdGNoKF8pIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxufVxuXG4vLyBQcm90ZWN0cyBmcm9tIHByb3RvdHlwZSBwb2lzb25pbmcgYW5kIHVuZXhwZWN0ZWQgbWVyZ2luZyB1cCB0aGUgcHJvdG90eXBlIGNoYWluLlxuZnVuY3Rpb24gcHJvcGVydHlJc1Vuc2FmZSh0YXJnZXQsIGtleSkge1xuXHRyZXR1cm4gcHJvcGVydHlJc09uT2JqZWN0KHRhcmdldCwga2V5KSAvLyBQcm9wZXJ0aWVzIGFyZSBzYWZlIHRvIG1lcmdlIGlmIHRoZXkgZG9uJ3QgZXhpc3QgaW4gdGhlIHRhcmdldCB5ZXQsXG5cdFx0JiYgIShPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSkgLy8gdW5zYWZlIGlmIHRoZXkgZXhpc3QgdXAgdGhlIHByb3RvdHlwZSBjaGFpbixcblx0XHRcdCYmIE9iamVjdC5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldCwga2V5KSkgLy8gYW5kIGFsc28gdW5zYWZlIGlmIHRoZXkncmUgbm9uZW51bWVyYWJsZS5cbn1cblxuZnVuY3Rpb24gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0dmFyIGRlc3RpbmF0aW9uID0ge307XG5cdGlmIChvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHRhcmdldCkpIHtcblx0XHRnZXRLZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCh0YXJnZXRba2V5XSwgb3B0aW9ucyk7XG5cdFx0fSk7XG5cdH1cblx0Z2V0S2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0aWYgKHByb3BlcnR5SXNVbnNhZmUodGFyZ2V0LCBrZXkpKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAocHJvcGVydHlJc09uT2JqZWN0KHRhcmdldCwga2V5KSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGdldE1lcmdlRnVuY3Rpb24oa2V5LCBvcHRpb25zKSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIG9wdGlvbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoc291cmNlW2tleV0sIG9wdGlvbnMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBkZXN0aW5hdGlvblxufVxuXG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdG9wdGlvbnMuYXJyYXlNZXJnZSA9IG9wdGlvbnMuYXJyYXlNZXJnZSB8fCBkZWZhdWx0QXJyYXlNZXJnZTtcblx0b3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCA9IG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QgfHwgaXNNZXJnZWFibGVPYmplY3Q7XG5cdC8vIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkIGlzIGFkZGVkIHRvIGBvcHRpb25zYCBzbyB0aGF0IGN1c3RvbSBhcnJheU1lcmdlKClcblx0Ly8gaW1wbGVtZW50YXRpb25zIGNhbiB1c2UgaXQuIFRoZSBjYWxsZXIgbWF5IG5vdCByZXBsYWNlIGl0LlxuXHRvcHRpb25zLmNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQ7XG5cblx0dmFyIHNvdXJjZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNvdXJjZSk7XG5cdHZhciB0YXJnZXRJc0FycmF5ID0gQXJyYXkuaXNBcnJheSh0YXJnZXQpO1xuXHR2YXIgc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCA9IHNvdXJjZUlzQXJyYXkgPT09IHRhcmdldElzQXJyYXk7XG5cblx0aWYgKCFzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoKSB7XG5cdFx0cmV0dXJuIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHNvdXJjZSwgb3B0aW9ucylcblx0fSBlbHNlIGlmIChzb3VyY2VJc0FycmF5KSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMuYXJyYXlNZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucylcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpXG5cdH1cbn1cblxuZGVlcG1lcmdlLmFsbCA9IGZ1bmN0aW9uIGRlZXBtZXJnZUFsbChhcnJheSwgb3B0aW9ucykge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXknKVxuXHR9XG5cblx0cmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihwcmV2LCBuZXh0KSB7XG5cdFx0cmV0dXJuIGRlZXBtZXJnZShwcmV2LCBuZXh0LCBvcHRpb25zKVxuXHR9LCB7fSlcbn07XG5cbnZhciBkZWVwbWVyZ2VfMSA9IGRlZXBtZXJnZTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWVwbWVyZ2VfMTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuZWxlbWVudE5hbWVzID0gdm9pZCAwO1xuZXhwb3J0cy5lbGVtZW50TmFtZXMgPSBuZXcgTWFwKFtcbiAgICBcImFsdEdseXBoXCIsXG4gICAgXCJhbHRHbHlwaERlZlwiLFxuICAgIFwiYWx0R2x5cGhJdGVtXCIsXG4gICAgXCJhbmltYXRlQ29sb3JcIixcbiAgICBcImFuaW1hdGVNb3Rpb25cIixcbiAgICBcImFuaW1hdGVUcmFuc2Zvcm1cIixcbiAgICBcImNsaXBQYXRoXCIsXG4gICAgXCJmZUJsZW5kXCIsXG4gICAgXCJmZUNvbG9yTWF0cml4XCIsXG4gICAgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCIsXG4gICAgXCJmZUNvbXBvc2l0ZVwiLFxuICAgIFwiZmVDb252b2x2ZU1hdHJpeFwiLFxuICAgIFwiZmVEaWZmdXNlTGlnaHRpbmdcIixcbiAgICBcImZlRGlzcGxhY2VtZW50TWFwXCIsXG4gICAgXCJmZURpc3RhbnRMaWdodFwiLFxuICAgIFwiZmVEcm9wU2hhZG93XCIsXG4gICAgXCJmZUZsb29kXCIsXG4gICAgXCJmZUZ1bmNBXCIsXG4gICAgXCJmZUZ1bmNCXCIsXG4gICAgXCJmZUZ1bmNHXCIsXG4gICAgXCJmZUZ1bmNSXCIsXG4gICAgXCJmZUdhdXNzaWFuQmx1clwiLFxuICAgIFwiZmVJbWFnZVwiLFxuICAgIFwiZmVNZXJnZVwiLFxuICAgIFwiZmVNZXJnZU5vZGVcIixcbiAgICBcImZlTW9ycGhvbG9neVwiLFxuICAgIFwiZmVPZmZzZXRcIixcbiAgICBcImZlUG9pbnRMaWdodFwiLFxuICAgIFwiZmVTcGVjdWxhckxpZ2h0aW5nXCIsXG4gICAgXCJmZVNwb3RMaWdodFwiLFxuICAgIFwiZmVUaWxlXCIsXG4gICAgXCJmZVR1cmJ1bGVuY2VcIixcbiAgICBcImZvcmVpZ25PYmplY3RcIixcbiAgICBcImdseXBoUmVmXCIsXG4gICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgIFwicmFkaWFsR3JhZGllbnRcIixcbiAgICBcInRleHRQYXRoXCIsXG5dLm1hcChmdW5jdGlvbiAodmFsKSB7IHJldHVybiBbdmFsLnRvTG93ZXJDYXNlKCksIHZhbF07IH0pKTtcbmV4cG9ydHMuYXR0cmlidXRlTmFtZXMgPSBuZXcgTWFwKFtcbiAgICBcImRlZmluaXRpb25VUkxcIixcbiAgICBcImF0dHJpYnV0ZU5hbWVcIixcbiAgICBcImF0dHJpYnV0ZVR5cGVcIixcbiAgICBcImJhc2VGcmVxdWVuY3lcIixcbiAgICBcImJhc2VQcm9maWxlXCIsXG4gICAgXCJjYWxjTW9kZVwiLFxuICAgIFwiY2xpcFBhdGhVbml0c1wiLFxuICAgIFwiZGlmZnVzZUNvbnN0YW50XCIsXG4gICAgXCJlZGdlTW9kZVwiLFxuICAgIFwiZmlsdGVyVW5pdHNcIixcbiAgICBcImdseXBoUmVmXCIsXG4gICAgXCJncmFkaWVudFRyYW5zZm9ybVwiLFxuICAgIFwiZ3JhZGllbnRVbml0c1wiLFxuICAgIFwia2VybmVsTWF0cml4XCIsXG4gICAgXCJrZXJuZWxVbml0TGVuZ3RoXCIsXG4gICAgXCJrZXlQb2ludHNcIixcbiAgICBcImtleVNwbGluZXNcIixcbiAgICBcImtleVRpbWVzXCIsXG4gICAgXCJsZW5ndGhBZGp1c3RcIixcbiAgICBcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXG4gICAgXCJtYXJrZXJIZWlnaHRcIixcbiAgICBcIm1hcmtlclVuaXRzXCIsXG4gICAgXCJtYXJrZXJXaWR0aFwiLFxuICAgIFwibWFza0NvbnRlbnRVbml0c1wiLFxuICAgIFwibWFza1VuaXRzXCIsXG4gICAgXCJudW1PY3RhdmVzXCIsXG4gICAgXCJwYXRoTGVuZ3RoXCIsXG4gICAgXCJwYXR0ZXJuQ29udGVudFVuaXRzXCIsXG4gICAgXCJwYXR0ZXJuVHJhbnNmb3JtXCIsXG4gICAgXCJwYXR0ZXJuVW5pdHNcIixcbiAgICBcInBvaW50c0F0WFwiLFxuICAgIFwicG9pbnRzQXRZXCIsXG4gICAgXCJwb2ludHNBdFpcIixcbiAgICBcInByZXNlcnZlQWxwaGFcIixcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIixcbiAgICBcInByaW1pdGl2ZVVuaXRzXCIsXG4gICAgXCJyZWZYXCIsXG4gICAgXCJyZWZZXCIsXG4gICAgXCJyZXBlYXRDb3VudFwiLFxuICAgIFwicmVwZWF0RHVyXCIsXG4gICAgXCJyZXF1aXJlZEV4dGVuc2lvbnNcIixcbiAgICBcInJlcXVpcmVkRmVhdHVyZXNcIixcbiAgICBcInNwZWN1bGFyQ29uc3RhbnRcIixcbiAgICBcInNwZWN1bGFyRXhwb25lbnRcIixcbiAgICBcInNwcmVhZE1ldGhvZFwiLFxuICAgIFwic3RhcnRPZmZzZXRcIixcbiAgICBcInN0ZERldmlhdGlvblwiLFxuICAgIFwic3RpdGNoVGlsZXNcIixcbiAgICBcInN1cmZhY2VTY2FsZVwiLFxuICAgIFwic3lzdGVtTGFuZ3VhZ2VcIixcbiAgICBcInRhYmxlVmFsdWVzXCIsXG4gICAgXCJ0YXJnZXRYXCIsXG4gICAgXCJ0YXJnZXRZXCIsXG4gICAgXCJ0ZXh0TGVuZ3RoXCIsXG4gICAgXCJ2aWV3Qm94XCIsXG4gICAgXCJ2aWV3VGFyZ2V0XCIsXG4gICAgXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgXCJ6b29tQW5kUGFuXCIsXG5dLm1hcChmdW5jdGlvbiAodmFsKSB7IHJldHVybiBbdmFsLnRvTG93ZXJDYXNlKCksIHZhbF07IH0pKTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZW5kZXIgPSB2b2lkIDA7XG4vKlxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG52YXIgRWxlbWVudFR5cGUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImRvbWVsZW1lbnR0eXBlXCIpKTtcbnZhciBlbnRpdGllc18xID0gcmVxdWlyZShcImVudGl0aWVzXCIpO1xuLyoqXG4gKiBNaXhlZC1jYXNlIFNWRyBhbmQgTWF0aE1MIHRhZ3MgJiBhdHRyaWJ1dGVzXG4gKiByZWNvZ25pemVkIGJ5IHRoZSBIVE1MIHBhcnNlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwYXJzaW5nLW1haW4taW5mb3JlaWduXG4gKi9cbnZhciBmb3JlaWduTmFtZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ZvcmVpZ25OYW1lcy5qc1wiKTtcbnZhciB1bmVuY29kZWRFbGVtZW50cyA9IG5ldyBTZXQoW1xuICAgIFwic3R5bGVcIixcbiAgICBcInNjcmlwdFwiLFxuICAgIFwieG1wXCIsXG4gICAgXCJpZnJhbWVcIixcbiAgICBcIm5vZW1iZWRcIixcbiAgICBcIm5vZnJhbWVzXCIsXG4gICAgXCJwbGFpbnRleHRcIixcbiAgICBcIm5vc2NyaXB0XCIsXG5dKTtcbmZ1bmN0aW9uIHJlcGxhY2VRdW90ZXModmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIik7XG59XG4vKipcbiAqIEZvcm1hdCBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEF0dHJpYnV0ZXMoYXR0cmlidXRlcywgb3B0cykge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIWF0dHJpYnV0ZXMpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgZW5jb2RlID0gKChfYSA9IG9wdHMuZW5jb2RlRW50aXRpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9wdHMuZGVjb2RlRW50aXRpZXMpID09PSBmYWxzZVxuICAgICAgICA/IHJlcGxhY2VRdW90ZXNcbiAgICAgICAgOiBvcHRzLnhtbE1vZGUgfHwgb3B0cy5lbmNvZGVFbnRpdGllcyAhPT0gXCJ1dGY4XCJcbiAgICAgICAgICAgID8gZW50aXRpZXNfMS5lbmNvZGVYTUxcbiAgICAgICAgICAgIDogZW50aXRpZXNfMS5lc2NhcGVBdHRyaWJ1dGU7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgdmFsdWUgPSAoX2EgPSBhdHRyaWJ1dGVzW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCI7XG4gICAgICAgIGlmIChvcHRzLnhtbE1vZGUgPT09IFwiZm9yZWlnblwiKSB7XG4gICAgICAgICAgICAvKiBGaXggdXAgbWl4ZWQtY2FzZSBhdHRyaWJ1dGUgbmFtZXMgKi9cbiAgICAgICAgICAgIGtleSA9IChfYiA9IGZvcmVpZ25OYW1lc19qc18xLmF0dHJpYnV0ZU5hbWVzLmdldChrZXkpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzLmVtcHR5QXR0cnMgJiYgIW9wdHMueG1sTW9kZSAmJiB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoa2V5LCBcIj1cXFwiXCIpLmNvbmNhdChlbmNvZGUodmFsdWUpLCBcIlxcXCJcIik7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCIgXCIpO1xufVxuLyoqXG4gKiBTZWxmLWVuY2xvc2luZyB0YWdzXG4gKi9cbnZhciBzaW5nbGVUYWcgPSBuZXcgU2V0KFtcbiAgICBcImFyZWFcIixcbiAgICBcImJhc2VcIixcbiAgICBcImJhc2Vmb250XCIsXG4gICAgXCJiclwiLFxuICAgIFwiY29sXCIsXG4gICAgXCJjb21tYW5kXCIsXG4gICAgXCJlbWJlZFwiLFxuICAgIFwiZnJhbWVcIixcbiAgICBcImhyXCIsXG4gICAgXCJpbWdcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJpc2luZGV4XCIsXG4gICAgXCJrZXlnZW5cIixcbiAgICBcImxpbmtcIixcbiAgICBcIm1ldGFcIixcbiAgICBcInBhcmFtXCIsXG4gICAgXCJzb3VyY2VcIixcbiAgICBcInRyYWNrXCIsXG4gICAgXCJ3YnJcIixcbl0pO1xuLyoqXG4gKiBSZW5kZXJzIGEgRE9NIG5vZGUgb3IgYW4gYXJyYXkgb2YgRE9NIG5vZGVzIHRvIGEgc3RyaW5nLlxuICpcbiAqIENhbiBiZSB0aG91Z2h0IG9mIGFzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBgb3V0ZXJIVE1MYCBvZiB0aGUgcGFzc2VkIG5vZGUocykuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBiZSByZW5kZXJlZC5cbiAqIEBwYXJhbSBvcHRpb25zIENoYW5nZXMgc2VyaWFsaXphdGlvbiBiZWhhdmlvclxuICovXG5mdW5jdGlvbiByZW5kZXIobm9kZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG5vZGVzID0gXCJsZW5ndGhcIiBpbiBub2RlID8gbm9kZSA6IFtub2RlXTtcbiAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dHB1dCArPSByZW5kZXJOb2RlKG5vZGVzW2ldLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuZXhwb3J0cy5kZWZhdWx0ID0gcmVuZGVyO1xuZnVuY3Rpb24gcmVuZGVyTm9kZShub2RlLCBvcHRpb25zKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5Sb290OlxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihub2RlLmNoaWxkcmVuLCBvcHRpb25zKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBXZSBkb24ndCB1c2UgYERvY3R5cGVgIHlldFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkRvY3R5cGU6XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuRGlyZWN0aXZlOlxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlckRpcmVjdGl2ZShub2RlKTtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5Db21tZW50OlxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlckNvbW1lbnQobm9kZSk7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQ0RBVEE6XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyQ2RhdGEobm9kZSk7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU2NyaXB0OlxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlN0eWxlOlxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRhZzpcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJUYWcobm9kZSwgb3B0aW9ucyk7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVGV4dDpcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJUZXh0KG5vZGUsIG9wdGlvbnMpO1xuICAgIH1cbn1cbnZhciBmb3JlaWduTW9kZUludGVncmF0aW9uUG9pbnRzID0gbmV3IFNldChbXG4gICAgXCJtaVwiLFxuICAgIFwibW9cIixcbiAgICBcIm1uXCIsXG4gICAgXCJtc1wiLFxuICAgIFwibXRleHRcIixcbiAgICBcImFubm90YXRpb24teG1sXCIsXG4gICAgXCJmb3JlaWduT2JqZWN0XCIsXG4gICAgXCJkZXNjXCIsXG4gICAgXCJ0aXRsZVwiLFxuXSk7XG52YXIgZm9yZWlnbkVsZW1lbnRzID0gbmV3IFNldChbXCJzdmdcIiwgXCJtYXRoXCJdKTtcbmZ1bmN0aW9uIHJlbmRlclRhZyhlbGVtLCBvcHRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIEhhbmRsZSBTVkcgLyBNYXRoTUwgaW4gSFRNTFxuICAgIGlmIChvcHRzLnhtbE1vZGUgPT09IFwiZm9yZWlnblwiKSB7XG4gICAgICAgIC8qIEZpeCB1cCBtaXhlZC1jYXNlIGVsZW1lbnQgbmFtZXMgKi9cbiAgICAgICAgZWxlbS5uYW1lID0gKF9hID0gZm9yZWlnbk5hbWVzX2pzXzEuZWxlbWVudE5hbWVzLmdldChlbGVtLm5hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlbGVtLm5hbWU7XG4gICAgICAgIC8qIEV4aXQgZm9yZWlnbiBtb2RlIGF0IGludGVncmF0aW9uIHBvaW50cyAqL1xuICAgICAgICBpZiAoZWxlbS5wYXJlbnQgJiZcbiAgICAgICAgICAgIGZvcmVpZ25Nb2RlSW50ZWdyYXRpb25Qb2ludHMuaGFzKGVsZW0ucGFyZW50Lm5hbWUpKSB7XG4gICAgICAgICAgICBvcHRzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdHMpLCB7IHhtbE1vZGU6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghb3B0cy54bWxNb2RlICYmIGZvcmVpZ25FbGVtZW50cy5oYXMoZWxlbS5uYW1lKSkge1xuICAgICAgICBvcHRzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdHMpLCB7IHhtbE1vZGU6IFwiZm9yZWlnblwiIH0pO1xuICAgIH1cbiAgICB2YXIgdGFnID0gXCI8XCIuY29uY2F0KGVsZW0ubmFtZSk7XG4gICAgdmFyIGF0dHJpYnMgPSBmb3JtYXRBdHRyaWJ1dGVzKGVsZW0uYXR0cmlicywgb3B0cyk7XG4gICAgaWYgKGF0dHJpYnMpIHtcbiAgICAgICAgdGFnICs9IFwiIFwiLmNvbmNhdChhdHRyaWJzKTtcbiAgICB9XG4gICAgaWYgKGVsZW0uY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmXG4gICAgICAgIChvcHRzLnhtbE1vZGVcbiAgICAgICAgICAgID8gLy8gSW4gWE1MIG1vZGUgb3IgZm9yZWlnbiBtb2RlLCBhbmQgdXNlciBoYXNuJ3QgZXhwbGljaXRseSB0dXJuZWQgb2ZmIHNlbGYtY2xvc2luZyB0YWdzXG4gICAgICAgICAgICAgICAgb3B0cy5zZWxmQ2xvc2luZ1RhZ3MgIT09IGZhbHNlXG4gICAgICAgICAgICA6IC8vIFVzZXIgZXhwbGljaXRseSBhc2tlZCBmb3Igc2VsZi1jbG9zaW5nIHRhZ3MsIGV2ZW4gaW4gSFRNTCBtb2RlXG4gICAgICAgICAgICAgICAgb3B0cy5zZWxmQ2xvc2luZ1RhZ3MgJiYgc2luZ2xlVGFnLmhhcyhlbGVtLm5hbWUpKSkge1xuICAgICAgICBpZiAoIW9wdHMueG1sTW9kZSlcbiAgICAgICAgICAgIHRhZyArPSBcIiBcIjtcbiAgICAgICAgdGFnICs9IFwiLz5cIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZyArPSBcIj5cIjtcbiAgICAgICAgaWYgKGVsZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGFnICs9IHJlbmRlcihlbGVtLmNoaWxkcmVuLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy54bWxNb2RlIHx8ICFzaW5nbGVUYWcuaGFzKGVsZW0ubmFtZSkpIHtcbiAgICAgICAgICAgIHRhZyArPSBcIjwvXCIuY29uY2F0KGVsZW0ubmFtZSwgXCI+XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiByZW5kZXJEaXJlY3RpdmUoZWxlbSkge1xuICAgIHJldHVybiBcIjxcIi5jb25jYXQoZWxlbS5kYXRhLCBcIj5cIik7XG59XG5mdW5jdGlvbiByZW5kZXJUZXh0KGVsZW0sIG9wdHMpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGRhdGEgPSBlbGVtLmRhdGEgfHwgXCJcIjtcbiAgICAvLyBJZiBlbnRpdGllcyB3ZXJlbid0IGRlY29kZWQsIG5vIG5lZWQgdG8gZW5jb2RlIHRoZW0gYmFja1xuICAgIGlmICgoKF9hID0gb3B0cy5lbmNvZGVFbnRpdGllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogb3B0cy5kZWNvZGVFbnRpdGllcykgIT09IGZhbHNlICYmXG4gICAgICAgICEoIW9wdHMueG1sTW9kZSAmJlxuICAgICAgICAgICAgZWxlbS5wYXJlbnQgJiZcbiAgICAgICAgICAgIHVuZW5jb2RlZEVsZW1lbnRzLmhhcyhlbGVtLnBhcmVudC5uYW1lKSkpIHtcbiAgICAgICAgZGF0YSA9XG4gICAgICAgICAgICBvcHRzLnhtbE1vZGUgfHwgb3B0cy5lbmNvZGVFbnRpdGllcyAhPT0gXCJ1dGY4XCJcbiAgICAgICAgICAgICAgICA/ICgwLCBlbnRpdGllc18xLmVuY29kZVhNTCkoZGF0YSlcbiAgICAgICAgICAgICAgICA6ICgwLCBlbnRpdGllc18xLmVzY2FwZVRleHQpKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIHJlbmRlckNkYXRhKGVsZW0pIHtcbiAgICByZXR1cm4gXCI8IVtDREFUQVtcIi5jb25jYXQoZWxlbS5jaGlsZHJlblswXS5kYXRhLCBcIl1dPlwiKTtcbn1cbmZ1bmN0aW9uIHJlbmRlckNvbW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBcIjwhLS1cIi5jb25jYXQoZWxlbS5kYXRhLCBcIi0tPlwiKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Eb2N0eXBlID0gZXhwb3J0cy5DREFUQSA9IGV4cG9ydHMuVGFnID0gZXhwb3J0cy5TdHlsZSA9IGV4cG9ydHMuU2NyaXB0ID0gZXhwb3J0cy5Db21tZW50ID0gZXhwb3J0cy5EaXJlY3RpdmUgPSBleHBvcnRzLlRleHQgPSBleHBvcnRzLlJvb3QgPSBleHBvcnRzLmlzVGFnID0gZXhwb3J0cy5FbGVtZW50VHlwZSA9IHZvaWQgMDtcbi8qKiBUeXBlcyBvZiBlbGVtZW50cyBmb3VuZCBpbiBodG1scGFyc2VyMidzIERPTSAqL1xudmFyIEVsZW1lbnRUeXBlO1xuKGZ1bmN0aW9uIChFbGVtZW50VHlwZSkge1xuICAgIC8qKiBUeXBlIGZvciB0aGUgcm9vdCBlbGVtZW50IG9mIGEgZG9jdW1lbnQgKi9cbiAgICBFbGVtZW50VHlwZVtcIlJvb3RcIl0gPSBcInJvb3RcIjtcbiAgICAvKiogVHlwZSBmb3IgVGV4dCAqL1xuICAgIEVsZW1lbnRUeXBlW1wiVGV4dFwiXSA9IFwidGV4dFwiO1xuICAgIC8qKiBUeXBlIGZvciA8PyAuLi4gPz4gKi9cbiAgICBFbGVtZW50VHlwZVtcIkRpcmVjdGl2ZVwiXSA9IFwiZGlyZWN0aXZlXCI7XG4gICAgLyoqIFR5cGUgZm9yIDwhLS0gLi4uIC0tPiAqL1xuICAgIEVsZW1lbnRUeXBlW1wiQ29tbWVudFwiXSA9IFwiY29tbWVudFwiO1xuICAgIC8qKiBUeXBlIGZvciA8c2NyaXB0PiB0YWdzICovXG4gICAgRWxlbWVudFR5cGVbXCJTY3JpcHRcIl0gPSBcInNjcmlwdFwiO1xuICAgIC8qKiBUeXBlIGZvciA8c3R5bGU+IHRhZ3MgKi9cbiAgICBFbGVtZW50VHlwZVtcIlN0eWxlXCJdID0gXCJzdHlsZVwiO1xuICAgIC8qKiBUeXBlIGZvciBBbnkgdGFnICovXG4gICAgRWxlbWVudFR5cGVbXCJUYWdcIl0gPSBcInRhZ1wiO1xuICAgIC8qKiBUeXBlIGZvciA8IVtDREFUQVsgLi4uIF1dPiAqL1xuICAgIEVsZW1lbnRUeXBlW1wiQ0RBVEFcIl0gPSBcImNkYXRhXCI7XG4gICAgLyoqIFR5cGUgZm9yIDwhZG9jdHlwZSAuLi4+ICovXG4gICAgRWxlbWVudFR5cGVbXCJEb2N0eXBlXCJdID0gXCJkb2N0eXBlXCI7XG59KShFbGVtZW50VHlwZSA9IGV4cG9ydHMuRWxlbWVudFR5cGUgfHwgKGV4cG9ydHMuRWxlbWVudFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgYSB0YWcgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBlbGVtIEVsZW1lbnQgdG8gdGVzdFxuICovXG5mdW5jdGlvbiBpc1RhZyhlbGVtKSB7XG4gICAgcmV0dXJuIChlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLlRhZyB8fFxuICAgICAgICBlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLlNjcmlwdCB8fFxuICAgICAgICBlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLlN0eWxlKTtcbn1cbmV4cG9ydHMuaXNUYWcgPSBpc1RhZztcbi8vIEV4cG9ydHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4vKiogVHlwZSBmb3IgdGhlIHJvb3QgZWxlbWVudCBvZiBhIGRvY3VtZW50ICovXG5leHBvcnRzLlJvb3QgPSBFbGVtZW50VHlwZS5Sb290O1xuLyoqIFR5cGUgZm9yIFRleHQgKi9cbmV4cG9ydHMuVGV4dCA9IEVsZW1lbnRUeXBlLlRleHQ7XG4vKiogVHlwZSBmb3IgPD8gLi4uID8+ICovXG5leHBvcnRzLkRpcmVjdGl2ZSA9IEVsZW1lbnRUeXBlLkRpcmVjdGl2ZTtcbi8qKiBUeXBlIGZvciA8IS0tIC4uLiAtLT4gKi9cbmV4cG9ydHMuQ29tbWVudCA9IEVsZW1lbnRUeXBlLkNvbW1lbnQ7XG4vKiogVHlwZSBmb3IgPHNjcmlwdD4gdGFncyAqL1xuZXhwb3J0cy5TY3JpcHQgPSBFbGVtZW50VHlwZS5TY3JpcHQ7XG4vKiogVHlwZSBmb3IgPHN0eWxlPiB0YWdzICovXG5leHBvcnRzLlN0eWxlID0gRWxlbWVudFR5cGUuU3R5bGU7XG4vKiogVHlwZSBmb3IgQW55IHRhZyAqL1xuZXhwb3J0cy5UYWcgPSBFbGVtZW50VHlwZS5UYWc7XG4vKiogVHlwZSBmb3IgPCFbQ0RBVEFbIC4uLiBdXT4gKi9cbmV4cG9ydHMuQ0RBVEEgPSBFbGVtZW50VHlwZS5DREFUQTtcbi8qKiBUeXBlIGZvciA8IWRvY3R5cGUgLi4uPiAqL1xuZXhwb3J0cy5Eb2N0eXBlID0gRWxlbWVudFR5cGUuRG9jdHlwZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRvbUhhbmRsZXIgPSB2b2lkIDA7XG52YXIgZG9tZWxlbWVudHR5cGVfMSA9IHJlcXVpcmUoXCJkb21lbGVtZW50dHlwZVwiKTtcbnZhciBub2RlX2pzXzEgPSByZXF1aXJlKFwiLi9ub2RlLmpzXCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL25vZGUuanNcIiksIGV4cG9ydHMpO1xuLy8gRGVmYXVsdCBvcHRpb25zXG52YXIgZGVmYXVsdE9wdHMgPSB7XG4gICAgd2l0aFN0YXJ0SW5kaWNlczogZmFsc2UsXG4gICAgd2l0aEVuZEluZGljZXM6IGZhbHNlLFxuICAgIHhtbE1vZGU6IGZhbHNlLFxufTtcbnZhciBEb21IYW5kbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsZWQgb25jZSBwYXJzaW5nIGhhcyBjb21wbGV0ZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgU2V0dGluZ3MgZm9yIHRoZSBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBlbGVtZW50Q0IgQ2FsbGJhY2sgd2hlbmV2ZXIgYSB0YWcgaXMgY2xvc2VkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERvbUhhbmRsZXIoY2FsbGJhY2ssIG9wdGlvbnMsIGVsZW1lbnRDQikge1xuICAgICAgICAvKiogVGhlIGVsZW1lbnRzIG9mIHRoZSBET00gKi9cbiAgICAgICAgdGhpcy5kb20gPSBbXTtcbiAgICAgICAgLyoqIFRoZSByb290IGVsZW1lbnQgZm9yIHRoZSBET00gKi9cbiAgICAgICAgdGhpcy5yb290ID0gbmV3IG5vZGVfanNfMS5Eb2N1bWVudCh0aGlzLmRvbSk7XG4gICAgICAgIC8qKiBJbmRpY2F0ZWQgd2hldGhlciBwYXJzaW5nIGhhcyBiZWVuIGNvbXBsZXRlZC4gKi9cbiAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIC8qKiBTdGFjayBvZiBvcGVuIHRhZ3MuICovXG4gICAgICAgIHRoaXMudGFnU3RhY2sgPSBbdGhpcy5yb290XTtcbiAgICAgICAgLyoqIEEgZGF0YSBub2RlIHRoYXQgaXMgc3RpbGwgYmVpbmcgd3JpdHRlbiB0by4gKi9cbiAgICAgICAgdGhpcy5sYXN0Tm9kZSA9IG51bGw7XG4gICAgICAgIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHBhcnNlciBpbnN0YW5jZS4gVXNlZCBmb3IgbG9jYXRpb24gaW5mb3JtYXRpb24uICovXG4gICAgICAgIHRoaXMucGFyc2VyID0gbnVsbDtcbiAgICAgICAgLy8gTWFrZSBpdCBwb3NzaWJsZSB0byBza2lwIGFyZ3VtZW50cywgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBlbGVtZW50Q0IgPSBvcHRpb25zO1xuICAgICAgICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBjYWxsYmFjaztcbiAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjayAhPT0gbnVsbCAmJiBjYWxsYmFjayAhPT0gdm9pZCAwID8gY2FsbGJhY2sgOiBudWxsO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiBkZWZhdWx0T3B0cztcbiAgICAgICAgdGhpcy5lbGVtZW50Q0IgPSBlbGVtZW50Q0IgIT09IG51bGwgJiYgZWxlbWVudENCICE9PSB2b2lkIDAgPyBlbGVtZW50Q0IgOiBudWxsO1xuICAgIH1cbiAgICBEb21IYW5kbGVyLnByb3RvdHlwZS5vbnBhcnNlcmluaXQgPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIH07XG4gICAgLy8gUmVzZXRzIHRoZSBoYW5kbGVyIGJhY2sgdG8gc3RhcnRpbmcgc3RhdGVcbiAgICBEb21IYW5kbGVyLnByb3RvdHlwZS5vbnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRvbSA9IFtdO1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXcgbm9kZV9qc18xLkRvY3VtZW50KHRoaXMuZG9tKTtcbiAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFnU3RhY2sgPSBbdGhpcy5yb290XTtcbiAgICAgICAgdGhpcy5sYXN0Tm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbnVsbDtcbiAgICB9O1xuICAgIC8vIFNpZ25hbHMgdGhlIGhhbmRsZXIgdGhhdCBwYXJzaW5nIGlzIGRvbmVcbiAgICBEb21IYW5kbGVyLnByb3RvdHlwZS5vbmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYXJzZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gICAgRG9tSGFuZGxlci5wcm90b3R5cGUub25lcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKGVycm9yKTtcbiAgICB9O1xuICAgIERvbUhhbmRsZXIucHJvdG90eXBlLm9uY2xvc2V0YWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubGFzdE5vZGUgPSBudWxsO1xuICAgICAgICB2YXIgZWxlbSA9IHRoaXMudGFnU3RhY2sucG9wKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMud2l0aEVuZEluZGljZXMpIHtcbiAgICAgICAgICAgIGVsZW0uZW5kSW5kZXggPSB0aGlzLnBhcnNlci5lbmRJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbGVtZW50Q0IpXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRDQihlbGVtKTtcbiAgICB9O1xuICAgIERvbUhhbmRsZXIucHJvdG90eXBlLm9ub3BlbnRhZyA9IGZ1bmN0aW9uIChuYW1lLCBhdHRyaWJzKSB7XG4gICAgICAgIHZhciB0eXBlID0gdGhpcy5vcHRpb25zLnhtbE1vZGUgPyBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlRhZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBuZXcgbm9kZV9qc18xLkVsZW1lbnQobmFtZSwgYXR0cmlicywgdW5kZWZpbmVkLCB0eXBlKTtcbiAgICAgICAgdGhpcy5hZGROb2RlKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLnRhZ1N0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgfTtcbiAgICBEb21IYW5kbGVyLnByb3RvdHlwZS5vbnRleHQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgbGFzdE5vZGUgPSB0aGlzLmxhc3ROb2RlO1xuICAgICAgICBpZiAobGFzdE5vZGUgJiYgbGFzdE5vZGUudHlwZSA9PT0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5UZXh0KSB7XG4gICAgICAgICAgICBsYXN0Tm9kZS5kYXRhICs9IGRhdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLndpdGhFbmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgICAgbGFzdE5vZGUuZW5kSW5kZXggPSB0aGlzLnBhcnNlci5lbmRJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbmV3IG5vZGVfanNfMS5UZXh0KGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5hZGROb2RlKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5sYXN0Tm9kZSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERvbUhhbmRsZXIucHJvdG90eXBlLm9uY29tbWVudCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3ROb2RlICYmIHRoaXMubGFzdE5vZGUudHlwZSA9PT0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5Db21tZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3ROb2RlLmRhdGEgKz0gZGF0YTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbm9kZSA9IG5ldyBub2RlX2pzXzEuQ29tbWVudChkYXRhKTtcbiAgICAgICAgdGhpcy5hZGROb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmxhc3ROb2RlID0gbm9kZTtcbiAgICB9O1xuICAgIERvbUhhbmRsZXIucHJvdG90eXBlLm9uY29tbWVudGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5sYXN0Tm9kZSA9IG51bGw7XG4gICAgfTtcbiAgICBEb21IYW5kbGVyLnByb3RvdHlwZS5vbmNkYXRhc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gbmV3IG5vZGVfanNfMS5UZXh0KFwiXCIpO1xuICAgICAgICB2YXIgbm9kZSA9IG5ldyBub2RlX2pzXzEuQ0RBVEEoW3RleHRdKTtcbiAgICAgICAgdGhpcy5hZGROb2RlKG5vZGUpO1xuICAgICAgICB0ZXh0LnBhcmVudCA9IG5vZGU7XG4gICAgICAgIHRoaXMubGFzdE5vZGUgPSB0ZXh0O1xuICAgIH07XG4gICAgRG9tSGFuZGxlci5wcm90b3R5cGUub25jZGF0YWVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5sYXN0Tm9kZSA9IG51bGw7XG4gICAgfTtcbiAgICBEb21IYW5kbGVyLnByb3RvdHlwZS5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChuYW1lLCBkYXRhKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV3IG5vZGVfanNfMS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obmFtZSwgZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkTm9kZShub2RlKTtcbiAgICB9O1xuICAgIERvbUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUNhbGxiYWNrID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrKGVycm9yLCB0aGlzLmRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEb21IYW5kbGVyLnByb3RvdHlwZS5hZGROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMudGFnU3RhY2tbdGhpcy50YWdTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHBhcmVudC5jaGlsZHJlbltwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMud2l0aFN0YXJ0SW5kaWNlcykge1xuICAgICAgICAgICAgbm9kZS5zdGFydEluZGV4ID0gdGhpcy5wYXJzZXIuc3RhcnRJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLndpdGhFbmRJbmRpY2VzKSB7XG4gICAgICAgICAgICBub2RlLmVuZEluZGV4ID0gdGhpcy5wYXJzZXIuZW5kSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIG5vZGUucHJldiA9IHByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgIHByZXZpb3VzU2libGluZy5uZXh0ID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5sYXN0Tm9kZSA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gRG9tSGFuZGxlcjtcbn0oKSk7XG5leHBvcnRzLkRvbUhhbmRsZXIgPSBEb21IYW5kbGVyO1xuZXhwb3J0cy5kZWZhdWx0ID0gRG9tSGFuZGxlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNsb25lTm9kZSA9IGV4cG9ydHMuaGFzQ2hpbGRyZW4gPSBleHBvcnRzLmlzRG9jdW1lbnQgPSBleHBvcnRzLmlzRGlyZWN0aXZlID0gZXhwb3J0cy5pc0NvbW1lbnQgPSBleHBvcnRzLmlzVGV4dCA9IGV4cG9ydHMuaXNDREFUQSA9IGV4cG9ydHMuaXNUYWcgPSBleHBvcnRzLkVsZW1lbnQgPSBleHBvcnRzLkRvY3VtZW50ID0gZXhwb3J0cy5DREFUQSA9IGV4cG9ydHMuTm9kZVdpdGhDaGlsZHJlbiA9IGV4cG9ydHMuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZXhwb3J0cy5Db21tZW50ID0gZXhwb3J0cy5UZXh0ID0gZXhwb3J0cy5EYXRhTm9kZSA9IGV4cG9ydHMuTm9kZSA9IHZvaWQgMDtcbnZhciBkb21lbGVtZW50dHlwZV8xID0gcmVxdWlyZShcImRvbWVsZW1lbnR0eXBlXCIpO1xuLyoqXG4gKiBUaGlzIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3RvdHlwZSBmb3IgTm9kZXMgd2hlbiBjcmVhdGluZyBhXG4gKiBET00tTGV2ZWwtMS1jb21wbGlhbnQgc3RydWN0dXJlLlxuICovXG52YXIgTm9kZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb2RlKCkge1xuICAgICAgICAvKiogUGFyZW50IG9mIHRoZSBub2RlICovXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICAgICAgLyoqIFByZXZpb3VzIHNpYmxpbmcgKi9cbiAgICAgICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICAgICAgLyoqIE5leHQgc2libGluZyAqL1xuICAgICAgICB0aGlzLm5leHQgPSBudWxsO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBub2RlLiBSZXF1aXJlcyBgd2l0aFN0YXJ0SW5kaWNlc2Agb24gdGhlIGhhbmRsZXIgdG8gYmUgYHRydWUuICovXG4gICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IG51bGw7XG4gICAgICAgIC8qKiBUaGUgZW5kIGluZGV4IG9mIHRoZSBub2RlLiBSZXF1aXJlcyBgd2l0aEVuZEluZGljZXNgIG9uIHRoZSBoYW5kbGVyIHRvIGJlIGB0cnVlLiAqL1xuICAgICAgICB0aGlzLmVuZEluZGV4ID0gbnVsbDtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcInBhcmVudE5vZGVcIiwge1xuICAgICAgICAvLyBSZWFkLXdyaXRlIGFsaWFzZXMgZm9yIHByb3BlcnRpZXNcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIHBhcmVudH0uXG4gICAgICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwicHJldmlvdXNTaWJsaW5nXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIHByZXZ9LlxuICAgICAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJldjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJldikge1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJuZXh0U2libGluZ1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYW1lIGFzIHtAbGluayBuZXh0fS5cbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5leHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dCA9IG5leHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBDbG9uZSB0aGlzIG5vZGUsIGFuZCBvcHRpb25hbGx5IGl0cyBjaGlsZHJlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWN1cnNpdmUgQ2xvbmUgY2hpbGQgbm9kZXMgYXMgd2VsbC5cbiAgICAgKiBAcmV0dXJucyBBIGNsb25lIG9mIHRoZSBub2RlLlxuICAgICAqL1xuICAgIE5vZGUucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcbiAgICAgICAgaWYgKHJlY3Vyc2l2ZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2l2ZSA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBjbG9uZU5vZGUodGhpcywgcmVjdXJzaXZlKTtcbiAgICB9O1xuICAgIHJldHVybiBOb2RlO1xufSgpKTtcbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG4vKipcbiAqIEEgbm9kZSB0aGF0IGNvbnRhaW5zIHNvbWUgZGF0YS5cbiAqL1xudmFyIERhdGFOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEYXRhTm9kZSwgX3N1cGVyKTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgY29udGVudCBvZiB0aGUgZGF0YSBub2RlXG4gICAgICovXG4gICAgZnVuY3Rpb24gRGF0YU5vZGUoZGF0YSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YU5vZGUucHJvdG90eXBlLCBcIm5vZGVWYWx1ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYW1lIGFzIHtAbGluayBkYXRhfS5cbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gRGF0YU5vZGU7XG59KE5vZGUpKTtcbmV4cG9ydHMuRGF0YU5vZGUgPSBEYXRhTm9kZTtcbi8qKlxuICogVGV4dCB3aXRoaW4gdGhlIGRvY3VtZW50LlxuICovXG52YXIgVGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGV4dCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUZXh0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHlwZSA9IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuVGV4dDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dC5wcm90b3R5cGUsIFwibm9kZVR5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIFRleHQ7XG59KERhdGFOb2RlKSk7XG5leHBvcnRzLlRleHQgPSBUZXh0O1xuLyoqXG4gKiBDb21tZW50cyB3aXRoaW4gdGhlIGRvY3VtZW50LlxuICovXG52YXIgQ29tbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29tbWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb21tZW50KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHlwZSA9IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tbWVudC5wcm90b3R5cGUsIFwibm9kZVR5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIENvbW1lbnQ7XG59KERhdGFOb2RlKSk7XG5leHBvcnRzLkNvbW1lbnQgPSBDb21tZW50O1xuLyoqXG4gKiBQcm9jZXNzaW5nIGluc3RydWN0aW9ucywgaW5jbHVkaW5nIGRvYyB0eXBlcy5cbiAqL1xudmFyIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUHJvY2Vzc2luZ0luc3RydWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFByb2Nlc3NpbmdJbnN0cnVjdGlvbihuYW1lLCBkYXRhKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRhdGEpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBfdGhpcy50eXBlID0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5EaXJlY3RpdmU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUsIFwibm9kZVR5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjtcbn0oRGF0YU5vZGUpKTtcbmV4cG9ydHMuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gUHJvY2Vzc2luZ0luc3RydWN0aW9uO1xuLyoqXG4gKiBBIGBOb2RlYCB0aGF0IGNhbiBoYXZlIGNoaWxkcmVuLlxuICovXG52YXIgTm9kZVdpdGhDaGlsZHJlbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTm9kZVdpdGhDaGlsZHJlbiwgX3N1cGVyKTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY2hpbGRyZW4gQ2hpbGRyZW4gb2YgdGhlIG5vZGUuIE9ubHkgY2VydGFpbiBub2RlIHR5cGVzIGNhbiBoYXZlIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE5vZGVXaXRoQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZVdpdGhDaGlsZHJlbi5wcm90b3R5cGUsIFwiZmlyc3RDaGlsZFwiLCB7XG4gICAgICAgIC8vIEFsaWFzZXNcbiAgICAgICAgLyoqIEZpcnN0IGNoaWxkIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmNoaWxkcmVuWzBdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVXaXRoQ2hpbGRyZW4ucHJvdG90eXBlLCBcImxhc3RDaGlsZFwiLCB7XG4gICAgICAgIC8qKiBMYXN0IGNoaWxkIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlV2l0aENoaWxkcmVuLnByb3RvdHlwZSwgXCJjaGlsZE5vZGVzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhbWUgYXMge0BsaW5rIGNoaWxkcmVufS5cbiAgICAgICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIE5vZGVXaXRoQ2hpbGRyZW47XG59KE5vZGUpKTtcbmV4cG9ydHMuTm9kZVdpdGhDaGlsZHJlbiA9IE5vZGVXaXRoQ2hpbGRyZW47XG52YXIgQ0RBVEEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENEQVRBLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENEQVRBKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHlwZSA9IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuQ0RBVEE7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENEQVRBLnByb3RvdHlwZSwgXCJub2RlVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gQ0RBVEE7XG59KE5vZGVXaXRoQ2hpbGRyZW4pKTtcbmV4cG9ydHMuQ0RBVEEgPSBDREFUQTtcbi8qKlxuICogVGhlIHJvb3Qgbm9kZSBvZiB0aGUgZG9jdW1lbnQuXG4gKi9cbnZhciBEb2N1bWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRG9jdW1lbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRG9jdW1lbnQoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50eXBlID0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5Sb290O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwibm9kZVR5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiA5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIERvY3VtZW50O1xufShOb2RlV2l0aENoaWxkcmVuKSk7XG5leHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7XG4vKipcbiAqIEFuIGVsZW1lbnQgd2l0aGluIHRoZSBET00uXG4gKi9cbnZhciBFbGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhFbGVtZW50LCBfc3VwZXIpO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHRhZywgZWcuIGBkaXZgLCBgc3BhbmAuXG4gICAgICogQHBhcmFtIGF0dHJpYnMgT2JqZWN0IG1hcHBpbmcgYXR0cmlidXRlIG5hbWVzIHRvIGF0dHJpYnV0ZSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGNoaWxkcmVuIENoaWxkcmVuIG9mIHRoZSBub2RlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEVsZW1lbnQobmFtZSwgYXR0cmlicywgY2hpbGRyZW4sIHR5cGUpIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuID09PSB2b2lkIDApIHsgY2hpbGRyZW4gPSBbXTsgfVxuICAgICAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBuYW1lID09PSBcInNjcmlwdFwiXG4gICAgICAgICAgICA/IGRvbWVsZW1lbnR0eXBlXzEuRWxlbWVudFR5cGUuU2NyaXB0XG4gICAgICAgICAgICA6IG5hbWUgPT09IFwic3R5bGVcIlxuICAgICAgICAgICAgICAgID8gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5TdHlsZVxuICAgICAgICAgICAgICAgIDogZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5UYWc7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgY2hpbGRyZW4pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBfdGhpcy5hdHRyaWJzID0gYXR0cmlicztcbiAgICAgICAgX3RoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcIm5vZGVUeXBlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJ0YWdOYW1lXCIsIHtcbiAgICAgICAgLy8gRE9NIExldmVsIDEgYWxpYXNlc1xuICAgICAgICAvKipcbiAgICAgICAgICogU2FtZSBhcyB7QGxpbmsgbmFtZX0uXG4gICAgICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIHJldHVybiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3RoaXMuYXR0cmlic1tuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiAoX2EgPSBfdGhpc1tcIngtYXR0cmlic05hbWVzcGFjZVwiXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IChfYiA9IF90aGlzW1wieC1hdHRyaWJzUHJlZml4XCJdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbbmFtZV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBFbGVtZW50O1xufShOb2RlV2l0aENoaWxkcmVuKSk7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgYEVsZW1lbnRgLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNUYWcobm9kZSkge1xuICAgIHJldHVybiAoMCwgZG9tZWxlbWVudHR5cGVfMS5pc1RhZykobm9kZSk7XG59XG5leHBvcnRzLmlzVGFnID0gaXNUYWc7XG4vKipcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaGFzIHRoZSB0eXBlIGBDREFUQWAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0NEQVRBKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkNEQVRBO1xufVxuZXhwb3J0cy5pc0NEQVRBID0gaXNDREFUQTtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYFRleHRgLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNUZXh0KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlRleHQ7XG59XG5leHBvcnRzLmlzVGV4dCA9IGlzVGV4dDtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYENvbW1lbnRgLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNDb21tZW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLkNvbW1lbnQ7XG59XG5leHBvcnRzLmlzQ29tbWVudCA9IGlzQ29tbWVudDtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgdGhlIHR5cGUgYFByb2Nlc3NpbmdJbnN0cnVjdGlvbmAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0RpcmVjdGl2ZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5EaXJlY3RpdmU7XG59XG5leHBvcnRzLmlzRGlyZWN0aXZlID0gaXNEaXJlY3RpdmU7XG4vKipcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaGFzIHRoZSB0eXBlIGBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25gLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNEb2N1bWVudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gZG9tZWxlbWVudHR5cGVfMS5FbGVtZW50VHlwZS5Sb290O1xufVxuZXhwb3J0cy5pc0RvY3VtZW50ID0gaXNEb2N1bWVudDtcbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBoYXMgY2hpbGRyZW4sIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBoYXNDaGlsZHJlbihub2RlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBcImNoaWxkcmVuXCIpO1xufVxuZXhwb3J0cy5oYXNDaGlsZHJlbiA9IGhhc0NoaWxkcmVuO1xuLyoqXG4gKiBDbG9uZSBhIG5vZGUsIGFuZCBvcHRpb25hbGx5IGl0cyBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gcmVjdXJzaXZlIENsb25lIGNoaWxkIG5vZGVzIGFzIHdlbGwuXG4gKiBAcmV0dXJucyBBIGNsb25lIG9mIHRoZSBub2RlLlxuICovXG5mdW5jdGlvbiBjbG9uZU5vZGUobm9kZSwgcmVjdXJzaXZlKSB7XG4gICAgaWYgKHJlY3Vyc2l2ZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2l2ZSA9IGZhbHNlOyB9XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoaXNUZXh0KG5vZGUpKSB7XG4gICAgICAgIHJlc3VsdCA9IG5ldyBUZXh0KG5vZGUuZGF0YSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQ29tbWVudChub2RlKSkge1xuICAgICAgICByZXN1bHQgPSBuZXcgQ29tbWVudChub2RlLmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1RhZyhub2RlKSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSByZWN1cnNpdmUgPyBjbG9uZUNoaWxkcmVuKG5vZGUuY2hpbGRyZW4pIDogW107XG4gICAgICAgIHZhciBjbG9uZV8xID0gbmV3IEVsZW1lbnQobm9kZS5uYW1lLCBfX2Fzc2lnbih7fSwgbm9kZS5hdHRyaWJzKSwgY2hpbGRyZW4pO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gKGNoaWxkLnBhcmVudCA9IGNsb25lXzEpOyB9KTtcbiAgICAgICAgaWYgKG5vZGUubmFtZXNwYWNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNsb25lXzEubmFtZXNwYWNlID0gbm9kZS5uYW1lc3BhY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVbXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIl0pIHtcbiAgICAgICAgICAgIGNsb25lXzFbXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIl0gPSBfX2Fzc2lnbih7fSwgbm9kZVtcIngtYXR0cmlic05hbWVzcGFjZVwiXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVbXCJ4LWF0dHJpYnNQcmVmaXhcIl0pIHtcbiAgICAgICAgICAgIGNsb25lXzFbXCJ4LWF0dHJpYnNQcmVmaXhcIl0gPSBfX2Fzc2lnbih7fSwgbm9kZVtcIngtYXR0cmlic1ByZWZpeFwiXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gY2xvbmVfMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDREFUQShub2RlKSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSByZWN1cnNpdmUgPyBjbG9uZUNoaWxkcmVuKG5vZGUuY2hpbGRyZW4pIDogW107XG4gICAgICAgIHZhciBjbG9uZV8yID0gbmV3IENEQVRBKGNoaWxkcmVuKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIChjaGlsZC5wYXJlbnQgPSBjbG9uZV8yKTsgfSk7XG4gICAgICAgIHJlc3VsdCA9IGNsb25lXzI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gcmVjdXJzaXZlID8gY2xvbmVDaGlsZHJlbihub2RlLmNoaWxkcmVuKSA6IFtdO1xuICAgICAgICB2YXIgY2xvbmVfMyA9IG5ldyBEb2N1bWVudChjaGlsZHJlbik7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAoY2hpbGQucGFyZW50ID0gY2xvbmVfMyk7IH0pO1xuICAgICAgICBpZiAobm9kZVtcIngtbW9kZVwiXSkge1xuICAgICAgICAgICAgY2xvbmVfM1tcIngtbW9kZVwiXSA9IG5vZGVbXCJ4LW1vZGVcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gY2xvbmVfMztcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNEaXJlY3RpdmUobm9kZSkpIHtcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihub2RlLm5hbWUsIG5vZGUuZGF0YSk7XG4gICAgICAgIGlmIChub2RlW1wieC1uYW1lXCJdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluc3RydWN0aW9uW1wieC1uYW1lXCJdID0gbm9kZVtcIngtbmFtZVwiXTtcbiAgICAgICAgICAgIGluc3RydWN0aW9uW1wieC1wdWJsaWNJZFwiXSA9IG5vZGVbXCJ4LXB1YmxpY0lkXCJdO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bXCJ4LXN5c3RlbUlkXCJdID0gbm9kZVtcIngtc3lzdGVtSWRcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gaW5zdHJ1Y3Rpb247XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0OiBcIi5jb25jYXQobm9kZS50eXBlKSk7XG4gICAgfVxuICAgIHJlc3VsdC5zdGFydEluZGV4ID0gbm9kZS5zdGFydEluZGV4O1xuICAgIHJlc3VsdC5lbmRJbmRleCA9IG5vZGUuZW5kSW5kZXg7XG4gICAgaWYgKG5vZGUuc291cmNlQ29kZUxvY2F0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnNvdXJjZUNvZGVMb2NhdGlvbiA9IG5vZGUuc291cmNlQ29kZUxvY2F0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5jbG9uZU5vZGUgPSBjbG9uZU5vZGU7XG5mdW5jdGlvbiBjbG9uZUNoaWxkcmVuKGNoaWxkcykge1xuICAgIHZhciBjaGlsZHJlbiA9IGNoaWxkcy5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjbG9uZU5vZGUoY2hpbGQsIHRydWUpOyB9KTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnByZXYgPSBjaGlsZHJlbltpIC0gMV07XG4gICAgICAgIGNoaWxkcmVuW2kgLSAxXS5uZXh0ID0gY2hpbGRyZW5baV07XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRGZWVkID0gZ2V0RmVlZDtcbnZhciBzdHJpbmdpZnlfanNfMSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbnZhciBsZWdhY3lfanNfMSA9IHJlcXVpcmUoXCIuL2xlZ2FjeS5qc1wiKTtcbi8qKlxuICogR2V0IHRoZSBmZWVkIG9iamVjdCBmcm9tIHRoZSByb290IG9mIGEgRE9NIHRyZWUuXG4gKlxuICogQGNhdGVnb3J5IEZlZWRzXG4gKiBAcGFyYW0gZG9jIC0gVGhlIERPTSB0byB0byBleHRyYWN0IHRoZSBmZWVkIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZmVlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RmVlZChkb2MpIHtcbiAgICB2YXIgZmVlZFJvb3QgPSBnZXRPbmVFbGVtZW50KGlzVmFsaWRGZWVkLCBkb2MpO1xuICAgIHJldHVybiAhZmVlZFJvb3RcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogZmVlZFJvb3QubmFtZSA9PT0gXCJmZWVkXCJcbiAgICAgICAgICAgID8gZ2V0QXRvbUZlZWQoZmVlZFJvb3QpXG4gICAgICAgICAgICA6IGdldFJzc0ZlZWQoZmVlZFJvb3QpO1xufVxuLyoqXG4gKiBQYXJzZSBhbiBBdG9tIGZlZWQuXG4gKlxuICogQHBhcmFtIGZlZWRSb290IFRoZSByb290IG9mIHRoZSBmZWVkLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBmZWVkLlxuICovXG5mdW5jdGlvbiBnZXRBdG9tRmVlZChmZWVkUm9vdCkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgY2hpbGRzID0gZmVlZFJvb3QuY2hpbGRyZW47XG4gICAgdmFyIGZlZWQgPSB7XG4gICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICBpdGVtczogKDAsIGxlZ2FjeV9qc18xLmdldEVsZW1lbnRzQnlUYWdOYW1lKShcImVudHJ5XCIsIGNoaWxkcykubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuO1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0geyBtZWRpYTogZ2V0TWVkaWFFbGVtZW50cyhjaGlsZHJlbikgfTtcbiAgICAgICAgICAgIGFkZENvbmRpdGlvbmFsbHkoZW50cnksIFwiaWRcIiwgXCJpZFwiLCBjaGlsZHJlbik7XG4gICAgICAgICAgICBhZGRDb25kaXRpb25hbGx5KGVudHJ5LCBcInRpdGxlXCIsIFwidGl0bGVcIiwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgdmFyIGhyZWYgPSAoX2EgPSBnZXRPbmVFbGVtZW50KFwibGlua1wiLCBjaGlsZHJlbikpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdHRyaWJzW1wiaHJlZlwiXTtcbiAgICAgICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgICAgICAgZW50cnkubGluayA9IGhyZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBmZXRjaChcInN1bW1hcnlcIiwgY2hpbGRyZW4pIHx8IGZldGNoKFwiY29udGVudFwiLCBjaGlsZHJlbik7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHB1YkRhdGUgPSBmZXRjaChcInVwZGF0ZWRcIiwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgaWYgKHB1YkRhdGUpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5wdWJEYXRlID0gbmV3IERhdGUocHViRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gICAgYWRkQ29uZGl0aW9uYWxseShmZWVkLCBcImlkXCIsIFwiaWRcIiwgY2hpbGRzKTtcbiAgICBhZGRDb25kaXRpb25hbGx5KGZlZWQsIFwidGl0bGVcIiwgXCJ0aXRsZVwiLCBjaGlsZHMpO1xuICAgIHZhciBocmVmID0gKF9hID0gZ2V0T25lRWxlbWVudChcImxpbmtcIiwgY2hpbGRzKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmF0dHJpYnNbXCJocmVmXCJdO1xuICAgIGlmIChocmVmKSB7XG4gICAgICAgIGZlZWQubGluayA9IGhyZWY7XG4gICAgfVxuICAgIGFkZENvbmRpdGlvbmFsbHkoZmVlZCwgXCJkZXNjcmlwdGlvblwiLCBcInN1YnRpdGxlXCIsIGNoaWxkcyk7XG4gICAgdmFyIHVwZGF0ZWQgPSBmZXRjaChcInVwZGF0ZWRcIiwgY2hpbGRzKTtcbiAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICBmZWVkLnVwZGF0ZWQgPSBuZXcgRGF0ZSh1cGRhdGVkKTtcbiAgICB9XG4gICAgYWRkQ29uZGl0aW9uYWxseShmZWVkLCBcImF1dGhvclwiLCBcImVtYWlsXCIsIGNoaWxkcywgdHJ1ZSk7XG4gICAgcmV0dXJuIGZlZWQ7XG59XG4vKipcbiAqIFBhcnNlIGEgUlNTIGZlZWQuXG4gKlxuICogQHBhcmFtIGZlZWRSb290IFRoZSByb290IG9mIHRoZSBmZWVkLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBmZWVkLlxuICovXG5mdW5jdGlvbiBnZXRSc3NGZWVkKGZlZWRSb290KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgY2hpbGRzID0gKF9iID0gKF9hID0gZ2V0T25lRWxlbWVudChcImNoYW5uZWxcIiwgZmVlZFJvb3QuY2hpbGRyZW4pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2hpbGRyZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdO1xuICAgIHZhciBmZWVkID0ge1xuICAgICAgICB0eXBlOiBmZWVkUm9vdC5uYW1lLnN1YnN0cigwLCAzKSxcbiAgICAgICAgaWQ6IFwiXCIsXG4gICAgICAgIGl0ZW1zOiAoMCwgbGVnYWN5X2pzXzEuZ2V0RWxlbWVudHNCeVRhZ05hbWUpKFwiaXRlbVwiLCBmZWVkUm9vdC5jaGlsZHJlbikubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuO1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0geyBtZWRpYTogZ2V0TWVkaWFFbGVtZW50cyhjaGlsZHJlbikgfTtcbiAgICAgICAgICAgIGFkZENvbmRpdGlvbmFsbHkoZW50cnksIFwiaWRcIiwgXCJndWlkXCIsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIGFkZENvbmRpdGlvbmFsbHkoZW50cnksIFwidGl0bGVcIiwgXCJ0aXRsZVwiLCBjaGlsZHJlbik7XG4gICAgICAgICAgICBhZGRDb25kaXRpb25hbGx5KGVudHJ5LCBcImxpbmtcIiwgXCJsaW5rXCIsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIGFkZENvbmRpdGlvbmFsbHkoZW50cnksIFwiZGVzY3JpcHRpb25cIiwgXCJkZXNjcmlwdGlvblwiLCBjaGlsZHJlbik7XG4gICAgICAgICAgICB2YXIgcHViRGF0ZSA9IGZldGNoKFwicHViRGF0ZVwiLCBjaGlsZHJlbikgfHwgZmV0Y2goXCJkYzpkYXRlXCIsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIGlmIChwdWJEYXRlKVxuICAgICAgICAgICAgICAgIGVudHJ5LnB1YkRhdGUgPSBuZXcgRGF0ZShwdWJEYXRlKTtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgICBhZGRDb25kaXRpb25hbGx5KGZlZWQsIFwidGl0bGVcIiwgXCJ0aXRsZVwiLCBjaGlsZHMpO1xuICAgIGFkZENvbmRpdGlvbmFsbHkoZmVlZCwgXCJsaW5rXCIsIFwibGlua1wiLCBjaGlsZHMpO1xuICAgIGFkZENvbmRpdGlvbmFsbHkoZmVlZCwgXCJkZXNjcmlwdGlvblwiLCBcImRlc2NyaXB0aW9uXCIsIGNoaWxkcyk7XG4gICAgdmFyIHVwZGF0ZWQgPSBmZXRjaChcImxhc3RCdWlsZERhdGVcIiwgY2hpbGRzKTtcbiAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICBmZWVkLnVwZGF0ZWQgPSBuZXcgRGF0ZSh1cGRhdGVkKTtcbiAgICB9XG4gICAgYWRkQ29uZGl0aW9uYWxseShmZWVkLCBcImF1dGhvclwiLCBcIm1hbmFnaW5nRWRpdG9yXCIsIGNoaWxkcywgdHJ1ZSk7XG4gICAgcmV0dXJuIGZlZWQ7XG59XG52YXIgTUVESUFfS0VZU19TVFJJTkcgPSBbXCJ1cmxcIiwgXCJ0eXBlXCIsIFwibGFuZ1wiXTtcbnZhciBNRURJQV9LRVlTX0lOVCA9IFtcbiAgICBcImZpbGVTaXplXCIsXG4gICAgXCJiaXRyYXRlXCIsXG4gICAgXCJmcmFtZXJhdGVcIixcbiAgICBcInNhbXBsaW5ncmF0ZVwiLFxuICAgIFwiY2hhbm5lbHNcIixcbiAgICBcImR1cmF0aW9uXCIsXG4gICAgXCJoZWlnaHRcIixcbiAgICBcIndpZHRoXCIsXG5dO1xuLyoqXG4gKiBHZXQgYWxsIG1lZGlhIGVsZW1lbnRzIG9mIGEgZmVlZCBpdGVtLlxuICpcbiAqIEBwYXJhbSB3aGVyZSBOb2RlcyB0byBzZWFyY2ggaW4uXG4gKiBAcmV0dXJucyBNZWRpYSBlbGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gZ2V0TWVkaWFFbGVtZW50cyh3aGVyZSkge1xuICAgIHJldHVybiAoMCwgbGVnYWN5X2pzXzEuZ2V0RWxlbWVudHNCeVRhZ05hbWUpKFwibWVkaWE6Y29udGVudFwiLCB3aGVyZSkubWFwKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgIHZhciBhdHRyaWJzID0gZWxlbS5hdHRyaWJzO1xuICAgICAgICB2YXIgbWVkaWEgPSB7XG4gICAgICAgICAgICBtZWRpdW06IGF0dHJpYnNbXCJtZWRpdW1cIl0sXG4gICAgICAgICAgICBpc0RlZmF1bHQ6ICEhYXR0cmlic1tcImlzRGVmYXVsdFwiXSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBNRURJQV9LRVlTX1NUUklOR18xID0gTUVESUFfS0VZU19TVFJJTkc7IF9pIDwgTUVESUFfS0VZU19TVFJJTkdfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBhdHRyaWIgPSBNRURJQV9LRVlTX1NUUklOR18xW19pXTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJzW2F0dHJpYl0pIHtcbiAgICAgICAgICAgICAgICBtZWRpYVthdHRyaWJdID0gYXR0cmlic1thdHRyaWJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIF9hID0gMCwgTUVESUFfS0VZU19JTlRfMSA9IE1FRElBX0tFWVNfSU5UOyBfYSA8IE1FRElBX0tFWVNfSU5UXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgICAgICB2YXIgYXR0cmliID0gTUVESUFfS0VZU19JTlRfMVtfYV07XG4gICAgICAgICAgICBpZiAoYXR0cmlic1thdHRyaWJdKSB7XG4gICAgICAgICAgICAgICAgbWVkaWFbYXR0cmliXSA9IHBhcnNlSW50KGF0dHJpYnNbYXR0cmliXSwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRyaWJzW1wiZXhwcmVzc2lvblwiXSkge1xuICAgICAgICAgICAgbWVkaWEuZXhwcmVzc2lvbiA9IGF0dHJpYnNbXCJleHByZXNzaW9uXCJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZWRpYTtcbiAgICB9KTtcbn1cbi8qKlxuICogR2V0IG9uZSBlbGVtZW50IGJ5IHRhZyBuYW1lLlxuICpcbiAqIEBwYXJhbSB0YWdOYW1lIFRhZyBuYW1lIHRvIGxvb2sgZm9yXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIHNlYXJjaCBpblxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbFxuICovXG5mdW5jdGlvbiBnZXRPbmVFbGVtZW50KHRhZ05hbWUsIG5vZGUpIHtcbiAgICByZXR1cm4gKDAsIGxlZ2FjeV9qc18xLmdldEVsZW1lbnRzQnlUYWdOYW1lKSh0YWdOYW1lLCBub2RlLCB0cnVlLCAxKVswXTtcbn1cbi8qKlxuICogR2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudCB3aXRoIGEgY2VydGFpbiB0YWcgbmFtZS5cbiAqXG4gKiBAcGFyYW0gdGFnTmFtZSBUYWcgbmFtZSB0byBsb29rIGZvci5cbiAqIEBwYXJhbSB3aGVyZSBOb2RlIHRvIHNlYXJjaCBpbi5cbiAqIEBwYXJhbSByZWN1cnNlIFdoZXRoZXIgdG8gcmVjdXJzZSBpbnRvIGNoaWxkIG5vZGVzLlxuICogQHJldHVybnMgVGhlIHRleHQgY29udGVudCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gZmV0Y2godGFnTmFtZSwgd2hlcmUsIHJlY3Vyc2UpIHtcbiAgICBpZiAocmVjdXJzZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2UgPSBmYWxzZTsgfVxuICAgIHJldHVybiAoMCwgc3RyaW5naWZ5X2pzXzEudGV4dENvbnRlbnQpKCgwLCBsZWdhY3lfanNfMS5nZXRFbGVtZW50c0J5VGFnTmFtZSkodGFnTmFtZSwgd2hlcmUsIHJlY3Vyc2UsIDEpKS50cmltKCk7XG59XG4vKipcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0byBhbiBvYmplY3QgaWYgaXQgaGFzIGEgdmFsdWUuXG4gKlxuICogQHBhcmFtIG9iaiBPYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEBwYXJhbSB0YWdOYW1lIFRhZyBuYW1lIHRoYXQgY29udGFpbnMgdGhlIGNvbmRpdGlvbmFsbHkgYWRkZWQgcHJvcGVydHlcbiAqIEBwYXJhbSB3aGVyZSBFbGVtZW50IHRvIHNlYXJjaCBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gcmVjdXJzZSBXaGV0aGVyIHRvIHJlY3Vyc2UgaW50byBjaGlsZCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gYWRkQ29uZGl0aW9uYWxseShvYmosIHByb3AsIHRhZ05hbWUsIHdoZXJlLCByZWN1cnNlKSB7XG4gICAgaWYgKHJlY3Vyc2UgPT09IHZvaWQgMCkgeyByZWN1cnNlID0gZmFsc2U7IH1cbiAgICB2YXIgdmFsID0gZmV0Y2godGFnTmFtZSwgd2hlcmUsIHJlY3Vyc2UpO1xuICAgIGlmICh2YWwpXG4gICAgICAgIG9ialtwcm9wXSA9IHZhbDtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaXMgYSBmZWVkIHJvb3Qgbm9kZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIGFuIGVsZW1lbnQgaXMgYSBmZWVkIHJvb3Qgbm9kZS5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEZlZWQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IFwicnNzXCIgfHwgdmFsdWUgPT09IFwiZmVlZFwiIHx8IHZhbHVlID09PSBcInJkZjpSREZcIjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZlZWRzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Eb2N1bWVudFBvc2l0aW9uID0gdm9pZCAwO1xuZXhwb3J0cy5yZW1vdmVTdWJzZXRzID0gcmVtb3ZlU3Vic2V0cztcbmV4cG9ydHMuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPSBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcbmV4cG9ydHMudW5pcXVlU29ydCA9IHVuaXF1ZVNvcnQ7XG52YXIgZG9taGFuZGxlcl8xID0gcmVxdWlyZShcImRvbWhhbmRsZXJcIik7XG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIG5vZGVzLCByZW1vdmUgYW55IG1lbWJlciB0aGF0IGlzIGNvbnRhaW5lZCBieSBhbm90aGVyXG4gKiBtZW1iZXIuXG4gKlxuICogQGNhdGVnb3J5IEhlbHBlcnNcbiAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBmaWx0ZXIuXG4gKiBAcmV0dXJucyBSZW1haW5pbmcgbm9kZXMgdGhhdCBhcmVuJ3QgY29udGFpbmVkIGJ5IG90aGVyIG5vZGVzLlxuICovXG5mdW5jdGlvbiByZW1vdmVTdWJzZXRzKG5vZGVzKSB7XG4gICAgdmFyIGlkeCA9IG5vZGVzLmxlbmd0aDtcbiAgICAvKlxuICAgICAqIENoZWNrIGlmIGVhY2ggbm9kZSAob3Igb25lIG9mIGl0cyBhbmNlc3RvcnMpIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZVxuICAgICAqIGFycmF5LlxuICAgICAqL1xuICAgIHdoaWxlICgtLWlkeCA+PSAwKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaWR4XTtcbiAgICAgICAgLypcbiAgICAgICAgICogUmVtb3ZlIHRoZSBub2RlIGlmIGl0IGlzIG5vdCB1bmlxdWUuXG4gICAgICAgICAqIFdlIGFyZSBnb2luZyB0aHJvdWdoIHRoZSBhcnJheSBmcm9tIHRoZSBlbmQsIHNvIHdlIG9ubHlcbiAgICAgICAgICogaGF2ZSB0byBjaGVjayBub2RlcyB0aGF0IHByZWNlZWQgdGhlIG5vZGUgdW5kZXIgY29uc2lkZXJhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaWR4ID4gMCAmJiBub2Rlcy5sYXN0SW5kZXhPZihub2RlLCBpZHggLSAxKSA+PSAwKSB7XG4gICAgICAgICAgICBub2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGFuY2VzdG9yID0gbm9kZS5wYXJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKG5vZGVzLmluY2x1ZGVzKGFuY2VzdG9yKSkge1xuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2Rlcztcbn1cbi8qKlxuICogQGNhdGVnb3J5IEhlbHBlcnNcbiAqIEBzZWUge0BsaW5rIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tbm9kZS1jb21wYXJlZG9jdW1lbnRwb3NpdGlvbn1cbiAqL1xudmFyIERvY3VtZW50UG9zaXRpb247XG4oZnVuY3Rpb24gKERvY3VtZW50UG9zaXRpb24pIHtcbiAgICBEb2N1bWVudFBvc2l0aW9uW0RvY3VtZW50UG9zaXRpb25bXCJESVNDT05ORUNURURcIl0gPSAxXSA9IFwiRElTQ09OTkVDVEVEXCI7XG4gICAgRG9jdW1lbnRQb3NpdGlvbltEb2N1bWVudFBvc2l0aW9uW1wiUFJFQ0VESU5HXCJdID0gMl0gPSBcIlBSRUNFRElOR1wiO1xuICAgIERvY3VtZW50UG9zaXRpb25bRG9jdW1lbnRQb3NpdGlvbltcIkZPTExPV0lOR1wiXSA9IDRdID0gXCJGT0xMT1dJTkdcIjtcbiAgICBEb2N1bWVudFBvc2l0aW9uW0RvY3VtZW50UG9zaXRpb25bXCJDT05UQUlOU1wiXSA9IDhdID0gXCJDT05UQUlOU1wiO1xuICAgIERvY3VtZW50UG9zaXRpb25bRG9jdW1lbnRQb3NpdGlvbltcIkNPTlRBSU5FRF9CWVwiXSA9IDE2XSA9IFwiQ09OVEFJTkVEX0JZXCI7XG59KShEb2N1bWVudFBvc2l0aW9uIHx8IChleHBvcnRzLkRvY3VtZW50UG9zaXRpb24gPSBEb2N1bWVudFBvc2l0aW9uID0ge30pKTtcbi8qKlxuICogQ29tcGFyZSB0aGUgcG9zaXRpb24gb2Ygb25lIG5vZGUgYWdhaW5zdCBhbm90aGVyIG5vZGUgaW4gYW55IG90aGVyIGRvY3VtZW50LFxuICogcmV0dXJuaW5nIGEgYml0bWFzayB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB7QGxpbmsgRG9jdW1lbnRQb3NpdGlvbn0uXG4gKlxuICogRG9jdW1lbnQgb3JkZXI6XG4gKiA+IFRoZXJlIGlzIGFuIG9yZGVyaW5nLCBkb2N1bWVudCBvcmRlciwgZGVmaW5lZCBvbiBhbGwgdGhlIG5vZGVzIGluIHRoZVxuICogPiBkb2N1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICogPiBYTUwgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBub2RlIG9jY3VycyBpbiB0aGUgWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICogPiBkb2N1bWVudCBhZnRlciBleHBhbnNpb24gb2YgZ2VuZXJhbCBlbnRpdGllcy4gVGh1cywgdGhlIGRvY3VtZW50IGVsZW1lbnRcbiAqID4gbm9kZSB3aWxsIGJlIHRoZSBmaXJzdCBub2RlLiBFbGVtZW50IG5vZGVzIG9jY3VyIGJlZm9yZSB0aGVpciBjaGlsZHJlbi5cbiAqID4gVGh1cywgZG9jdW1lbnQgb3JkZXIgb3JkZXJzIGVsZW1lbnQgbm9kZXMgaW4gb3JkZXIgb2YgdGhlIG9jY3VycmVuY2Ugb2ZcbiAqID4gdGhlaXIgc3RhcnQtdGFnIGluIHRoZSBYTUwgKGFmdGVyIGV4cGFuc2lvbiBvZiBlbnRpdGllcykuIFRoZSBhdHRyaWJ1dGVcbiAqID4gbm9kZXMgb2YgYW4gZWxlbWVudCBvY2N1ciBhZnRlciB0aGUgZWxlbWVudCBhbmQgYmVmb3JlIGl0cyBjaGlsZHJlbi4gVGhlXG4gKiA+IHJlbGF0aXZlIG9yZGVyIG9mIGF0dHJpYnV0ZSBub2RlcyBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuXG4gKlxuICogU291cmNlOlxuICogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29yZS9nbG9zc2FyeS5odG1sI2R0LWRvY3VtZW50LW9yZGVyXG4gKlxuICogQGNhdGVnb3J5IEhlbHBlcnNcbiAqIEBwYXJhbSBub2RlQSBUaGUgZmlyc3Qgbm9kZSB0byB1c2UgaW4gdGhlIGNvbXBhcmlzb25cbiAqIEBwYXJhbSBub2RlQiBUaGUgc2Vjb25kIG5vZGUgdG8gdXNlIGluIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBIGJpdG1hc2sgZGVzY3JpYmluZyB0aGUgaW5wdXQgbm9kZXMnIHJlbGF0aXZlIHBvc2l0aW9uLlxuICpcbiAqIFNlZSBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLW5vZGUtY29tcGFyZWRvY3VtZW50cG9zaXRpb24gZm9yXG4gKiBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZUEsIG5vZGVCKSB7XG4gICAgdmFyIGFQYXJlbnRzID0gW107XG4gICAgdmFyIGJQYXJlbnRzID0gW107XG4gICAgaWYgKG5vZGVBID09PSBub2RlQikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdmFyIGN1cnJlbnQgPSAoMCwgZG9taGFuZGxlcl8xLmhhc0NoaWxkcmVuKShub2RlQSkgPyBub2RlQSA6IG5vZGVBLnBhcmVudDtcbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICBhUGFyZW50cy51bnNoaWZ0KGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSAoMCwgZG9taGFuZGxlcl8xLmhhc0NoaWxkcmVuKShub2RlQikgPyBub2RlQiA6IG5vZGVCLnBhcmVudDtcbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICBiUGFyZW50cy51bnNoaWZ0KGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIHZhciBtYXhJZHggPSBNYXRoLm1pbihhUGFyZW50cy5sZW5ndGgsIGJQYXJlbnRzLmxlbmd0aCk7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgd2hpbGUgKGlkeCA8IG1heElkeCAmJiBhUGFyZW50c1tpZHhdID09PSBiUGFyZW50c1tpZHhdKSB7XG4gICAgICAgIGlkeCsrO1xuICAgIH1cbiAgICBpZiAoaWR4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBEb2N1bWVudFBvc2l0aW9uLkRJU0NPTk5FQ1RFRDtcbiAgICB9XG4gICAgdmFyIHNoYXJlZFBhcmVudCA9IGFQYXJlbnRzW2lkeCAtIDFdO1xuICAgIHZhciBzaWJsaW5ncyA9IHNoYXJlZFBhcmVudC5jaGlsZHJlbjtcbiAgICB2YXIgYVNpYmxpbmcgPSBhUGFyZW50c1tpZHhdO1xuICAgIHZhciBiU2libGluZyA9IGJQYXJlbnRzW2lkeF07XG4gICAgaWYgKHNpYmxpbmdzLmluZGV4T2YoYVNpYmxpbmcpID4gc2libGluZ3MuaW5kZXhPZihiU2libGluZykpIHtcbiAgICAgICAgaWYgKHNoYXJlZFBhcmVudCA9PT0gbm9kZUIpIHtcbiAgICAgICAgICAgIHJldHVybiBEb2N1bWVudFBvc2l0aW9uLkZPTExPV0lORyB8IERvY3VtZW50UG9zaXRpb24uQ09OVEFJTkVEX0JZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBEb2N1bWVudFBvc2l0aW9uLkZPTExPV0lORztcbiAgICB9XG4gICAgaWYgKHNoYXJlZFBhcmVudCA9PT0gbm9kZUEpIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uUFJFQ0VESU5HIHwgRG9jdW1lbnRQb3NpdGlvbi5DT05UQUlOUztcbiAgICB9XG4gICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uUFJFQ0VESU5HO1xufVxuLyoqXG4gKiBTb3J0IGFuIGFycmF5IG9mIG5vZGVzIGJhc2VkIG9uIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudCxcbiAqIHJlbW92aW5nIGFueSBkdXBsaWNhdGUgbm9kZXMuIElmIHRoZSBhcnJheSBjb250YWlucyBub2RlcyB0aGF0IGRvIG5vdCBiZWxvbmdcbiAqIHRvIHRoZSBzYW1lIGRvY3VtZW50LCBzb3J0IG9yZGVyIGlzIHVuc3BlY2lmaWVkLlxuICpcbiAqIEBjYXRlZ29yeSBIZWxwZXJzXG4gKiBAcGFyYW0gbm9kZXMgQXJyYXkgb2YgRE9NIG5vZGVzLlxuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiB1bmlxdWUgbm9kZXMsIHNvcnRlZCBpbiBkb2N1bWVudCBvcmRlci5cbiAqL1xuZnVuY3Rpb24gdW5pcXVlU29ydChub2Rlcykge1xuICAgIG5vZGVzID0gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlLCBpLCBhcnIpIHsgcmV0dXJuICFhcnIuaW5jbHVkZXMobm9kZSwgaSArIDEpOyB9KTtcbiAgICBub2Rlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHZhciByZWxhdGl2ZSA9IGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEsIGIpO1xuICAgICAgICBpZiAocmVsYXRpdmUgJiBEb2N1bWVudFBvc2l0aW9uLlBSRUNFRElORykge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJlbGF0aXZlICYgRG9jdW1lbnRQb3NpdGlvbi5GT0xMT1dJTkcpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICAgIHJldHVybiBub2Rlcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaGFzQ2hpbGRyZW4gPSBleHBvcnRzLmlzRG9jdW1lbnQgPSBleHBvcnRzLmlzQ29tbWVudCA9IGV4cG9ydHMuaXNUZXh0ID0gZXhwb3J0cy5pc0NEQVRBID0gZXhwb3J0cy5pc1RhZyA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyYXZlcnNhbC5qc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbWFuaXB1bGF0aW9uLmpzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9xdWVyeWluZy5qc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGVnYWN5LmpzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9oZWxwZXJzLmpzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9mZWVkcy5qc1wiKSwgZXhwb3J0cyk7XG4vKiogQGRlcHJlY2F0ZWQgVXNlIHRoZXNlIG1ldGhvZHMgZnJvbSBgZG9taGFuZGxlcmAgZGlyZWN0bHkuICovXG52YXIgZG9taGFuZGxlcl8xID0gcmVxdWlyZShcImRvbWhhbmRsZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1RhZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9taGFuZGxlcl8xLmlzVGFnOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDREFUQVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9taGFuZGxlcl8xLmlzQ0RBVEE7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1RleHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbWhhbmRsZXJfMS5pc1RleHQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0NvbW1lbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbWhhbmRsZXJfMS5pc0NvbW1lbnQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RvY3VtZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb21oYW5kbGVyXzEuaXNEb2N1bWVudDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhc0NoaWxkcmVuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb21oYW5kbGVyXzEuaGFzQ2hpbGRyZW47IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGVzdEVsZW1lbnQgPSB0ZXN0RWxlbWVudDtcbmV4cG9ydHMuZ2V0RWxlbWVudHMgPSBnZXRFbGVtZW50cztcbmV4cG9ydHMuZ2V0RWxlbWVudEJ5SWQgPSBnZXRFbGVtZW50QnlJZDtcbmV4cG9ydHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBnZXRFbGVtZW50c0J5VGFnTmFtZTtcbmV4cG9ydHMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGdldEVsZW1lbnRzQnlDbGFzc05hbWU7XG5leHBvcnRzLmdldEVsZW1lbnRzQnlUYWdUeXBlID0gZ2V0RWxlbWVudHNCeVRhZ1R5cGU7XG52YXIgZG9taGFuZGxlcl8xID0gcmVxdWlyZShcImRvbWhhbmRsZXJcIik7XG52YXIgcXVlcnlpbmdfanNfMSA9IHJlcXVpcmUoXCIuL3F1ZXJ5aW5nLmpzXCIpO1xuLyoqXG4gKiBBIG1hcCBvZiBmdW5jdGlvbnMgdG8gY2hlY2sgbm9kZXMgYWdhaW5zdC5cbiAqL1xudmFyIENoZWNrcyA9IHtcbiAgICB0YWdfbmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gKDAsIGRvbWhhbmRsZXJfMS5pc1RhZykoZWxlbSkgJiYgbmFtZShlbGVtLm5hbWUpOyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9taGFuZGxlcl8xLmlzVGFnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gKDAsIGRvbWhhbmRsZXJfMS5pc1RhZykoZWxlbSkgJiYgZWxlbS5uYW1lID09PSBuYW1lOyB9O1xuICAgIH0sXG4gICAgdGFnX3R5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIHR5cGUoZWxlbS50eXBlKTsgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGVsZW0udHlwZSA9PT0gdHlwZTsgfTtcbiAgICB9LFxuICAgIHRhZ19jb250YWluczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gKDAsIGRvbWhhbmRsZXJfMS5pc1RleHQpKGVsZW0pICYmIGRhdGEoZWxlbS5kYXRhKTsgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuICgwLCBkb21oYW5kbGVyXzEuaXNUZXh0KShlbGVtKSAmJiBlbGVtLmRhdGEgPT09IGRhdGE7IH07XG4gICAgfSxcbn07XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGEgbm9kZSBoYXMgYW4gYXR0cmlidXRlIHdpdGggYSBwYXJ0aWN1bGFyXG4gKiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gYXR0cmliIEF0dHJpYnV0ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGEgbm9kZSBoYXMgYW4gYXR0cmlidXRlIHdpdGggYVxuICogICBwYXJ0aWN1bGFyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRBdHRyaWJDaGVjayhhdHRyaWIsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gKDAsIGRvbWhhbmRsZXJfMS5pc1RhZykoZWxlbSkgJiYgdmFsdWUoZWxlbS5hdHRyaWJzW2F0dHJpYl0pOyB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuICgwLCBkb21oYW5kbGVyXzEuaXNUYWcpKGVsZW0pICYmIGVsZW0uYXR0cmlic1thdHRyaWJdID09PSB2YWx1ZTsgfTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdHJ1ZWAgaWYgZWl0aGVyIG9mIHRoZSBpbnB1dCBmdW5jdGlvbnNcbiAqIHJldHVybnMgYHRydWVgIGZvciBhIG5vZGUuXG4gKlxuICogQHBhcmFtIGEgRmlyc3QgZnVuY3Rpb24gdG8gY29tYmluZS5cbiAqIEBwYXJhbSBiIFNlY29uZCBmdW5jdGlvbiB0byBjb21iaW5lLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0YWtpbmcgYSBub2RlIGFuZCByZXR1cm5pbmcgYHRydWVgIGlmIGVpdGhlciBvZiB0aGUgaW5wdXRcbiAqICAgZnVuY3Rpb25zIHJldHVybnMgYHRydWVgIGZvciB0aGUgbm9kZS5cbiAqL1xuZnVuY3Rpb24gY29tYmluZUZ1bmNzKGEsIGIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGEoZWxlbSkgfHwgYihlbGVtKTsgfTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYWxsIGNoZWNrcyBpbiBgb3B0aW9uc2AgYW5kIHJldHVybnMgYHRydWVgXG4gKiBpZiBhbnkgb2YgdGhlbSBtYXRjaCBhIG5vZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgQW4gb2JqZWN0IGRlc2NyaWJpbmcgbm9kZXMgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYWxsIGNoZWNrcyBpbiBgb3B0aW9uc2AgYW5kIHJldHVybnMgYHRydWVgXG4gKiAgIGlmIGFueSBvZiB0aGVtIG1hdGNoIGEgbm9kZS5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVRlc3Qob3B0aW9ucykge1xuICAgIHZhciBmdW5jcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChDaGVja3MsIGtleSlcbiAgICAgICAgICAgID8gQ2hlY2tzW2tleV0odmFsdWUpXG4gICAgICAgICAgICA6IGdldEF0dHJpYkNoZWNrKGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBmdW5jcy5sZW5ndGggPT09IDAgPyBudWxsIDogZnVuY3MucmVkdWNlKGNvbWJpbmVGdW5jcyk7XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBtYXRjaGVzIHRoZSBkZXNjcmlwdGlvbiBpbiBgb3B0aW9uc2AuXG4gKlxuICogQGNhdGVnb3J5IExlZ2FjeSBRdWVyeSBGdW5jdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zIEFuIG9iamVjdCBkZXNjcmliaW5nIG5vZGVzIHRvIGxvb2sgZm9yLlxuICogQHBhcmFtIG5vZGUgVGhlIGVsZW1lbnQgdG8gdGVzdC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgZGVzY3JpcHRpb24gaW4gYG9wdGlvbnNgLlxuICovXG5mdW5jdGlvbiB0ZXN0RWxlbWVudChvcHRpb25zLCBub2RlKSB7XG4gICAgdmFyIHRlc3QgPSBjb21waWxlVGVzdChvcHRpb25zKTtcbiAgICByZXR1cm4gdGVzdCA/IHRlc3Qobm9kZSkgOiB0cnVlO1xufVxuLyoqXG4gKiBSZXR1cm5zIGFsbCBub2RlcyB0aGF0IG1hdGNoIGBvcHRpb25zYC5cbiAqXG4gKiBAY2F0ZWdvcnkgTGVnYWN5IFF1ZXJ5IEZ1bmN0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMgQW4gb2JqZWN0IGRlc2NyaWJpbmcgbm9kZXMgdG8gbG9vayBmb3IuXG4gKiBAcGFyYW0gbm9kZXMgTm9kZXMgdG8gc2VhcmNoIHRocm91Z2guXG4gKiBAcGFyYW0gcmVjdXJzZSBBbHNvIGNvbnNpZGVyIGNoaWxkIG5vZGVzLlxuICogQHBhcmFtIGxpbWl0IE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHRvIHJldHVybi5cbiAqIEByZXR1cm5zIEFsbCBub2RlcyB0aGF0IG1hdGNoIGBvcHRpb25zYC5cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudHMob3B0aW9ucywgbm9kZXMsIHJlY3Vyc2UsIGxpbWl0KSB7XG4gICAgaWYgKGxpbWl0ID09PSB2b2lkIDApIHsgbGltaXQgPSBJbmZpbml0eTsgfVxuICAgIHZhciB0ZXN0ID0gY29tcGlsZVRlc3Qob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRlc3QgPyAoMCwgcXVlcnlpbmdfanNfMS5maWx0ZXIpKHRlc3QsIG5vZGVzLCByZWN1cnNlLCBsaW1pdCkgOiBbXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBJRC5cbiAqXG4gKiBAY2F0ZWdvcnkgTGVnYWN5IFF1ZXJ5IEZ1bmN0aW9uc1xuICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgSUQgYXR0cmlidXRlIHZhbHVlIHRvIGxvb2sgZm9yLlxuICogQHBhcmFtIG5vZGVzIE5vZGVzIHRvIHNlYXJjaCB0aHJvdWdoLlxuICogQHBhcmFtIHJlY3Vyc2UgQWxzbyBjb25zaWRlciBjaGlsZCBub2Rlcy5cbiAqIEByZXR1cm5zIFRoZSBub2RlIHdpdGggdGhlIHN1cHBsaWVkIElELlxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50QnlJZChpZCwgbm9kZXMsIHJlY3Vyc2UpIHtcbiAgICBpZiAocmVjdXJzZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2UgPSB0cnVlOyB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGVzKSlcbiAgICAgICAgbm9kZXMgPSBbbm9kZXNdO1xuICAgIHJldHVybiAoMCwgcXVlcnlpbmdfanNfMS5maW5kT25lKShnZXRBdHRyaWJDaGVjayhcImlkXCIsIGlkKSwgbm9kZXMsIHJlY3Vyc2UpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGFsbCBub2RlcyB3aXRoIHRoZSBzdXBwbGllZCBgdGFnTmFtZWAuXG4gKlxuICogQGNhdGVnb3J5IExlZ2FjeSBRdWVyeSBGdW5jdGlvbnNcbiAqIEBwYXJhbSB0YWdOYW1lIFRhZyBuYW1lIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0gbm9kZXMgTm9kZXMgdG8gc2VhcmNoIHRocm91Z2guXG4gKiBAcGFyYW0gcmVjdXJzZSBBbHNvIGNvbnNpZGVyIGNoaWxkIG5vZGVzLlxuICogQHBhcmFtIGxpbWl0IE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHRvIHJldHVybi5cbiAqIEByZXR1cm5zIEFsbCBub2RlcyB3aXRoIHRoZSBzdXBwbGllZCBgdGFnTmFtZWAuXG4gKi9cbmZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUsIG5vZGVzLCByZWN1cnNlLCBsaW1pdCkge1xuICAgIGlmIChyZWN1cnNlID09PSB2b2lkIDApIHsgcmVjdXJzZSA9IHRydWU7IH1cbiAgICBpZiAobGltaXQgPT09IHZvaWQgMCkgeyBsaW1pdCA9IEluZmluaXR5OyB9XG4gICAgcmV0dXJuICgwLCBxdWVyeWluZ19qc18xLmZpbHRlcikoQ2hlY2tzW1widGFnX25hbWVcIl0odGFnTmFtZSksIG5vZGVzLCByZWN1cnNlLCBsaW1pdCk7XG59XG4vKipcbiAqIFJldHVybnMgYWxsIG5vZGVzIHdpdGggdGhlIHN1cHBsaWVkIGBjbGFzc05hbWVgLlxuICpcbiAqIEBjYXRlZ29yeSBMZWdhY3kgUXVlcnkgRnVuY3Rpb25zXG4gKiBAcGFyYW0gY2xhc3NOYW1lIENsYXNzIG5hbWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBzZWFyY2ggdGhyb3VnaC5cbiAqIEBwYXJhbSByZWN1cnNlIEFsc28gY29uc2lkZXIgY2hpbGQgbm9kZXMuXG4gKiBAcGFyYW0gbGltaXQgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgdG8gcmV0dXJuLlxuICogQHJldHVybnMgQWxsIG5vZGVzIHdpdGggdGhlIHN1cHBsaWVkIGBjbGFzc05hbWVgLlxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSwgbm9kZXMsIHJlY3Vyc2UsIGxpbWl0KSB7XG4gICAgaWYgKHJlY3Vyc2UgPT09IHZvaWQgMCkgeyByZWN1cnNlID0gdHJ1ZTsgfVxuICAgIGlmIChsaW1pdCA9PT0gdm9pZCAwKSB7IGxpbWl0ID0gSW5maW5pdHk7IH1cbiAgICByZXR1cm4gKDAsIHF1ZXJ5aW5nX2pzXzEuZmlsdGVyKShnZXRBdHRyaWJDaGVjayhcImNsYXNzXCIsIGNsYXNzTmFtZSksIG5vZGVzLCByZWN1cnNlLCBsaW1pdCk7XG59XG4vKipcbiAqIFJldHVybnMgYWxsIG5vZGVzIHdpdGggdGhlIHN1cHBsaWVkIGB0eXBlYC5cbiAqXG4gKiBAY2F0ZWdvcnkgTGVnYWN5IFF1ZXJ5IEZ1bmN0aW9uc1xuICogQHBhcmFtIHR5cGUgRWxlbWVudCB0eXBlIHRvIGxvb2sgZm9yLlxuICogQHBhcmFtIG5vZGVzIE5vZGVzIHRvIHNlYXJjaCB0aHJvdWdoLlxuICogQHBhcmFtIHJlY3Vyc2UgQWxzbyBjb25zaWRlciBjaGlsZCBub2Rlcy5cbiAqIEBwYXJhbSBsaW1pdCBNYXhpbXVtIG51bWJlciBvZiBub2RlcyB0byByZXR1cm4uXG4gKiBAcmV0dXJucyBBbGwgbm9kZXMgd2l0aCB0aGUgc3VwcGxpZWQgYHR5cGVgLlxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnVHlwZSh0eXBlLCBub2RlcywgcmVjdXJzZSwgbGltaXQpIHtcbiAgICBpZiAocmVjdXJzZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2UgPSB0cnVlOyB9XG4gICAgaWYgKGxpbWl0ID09PSB2b2lkIDApIHsgbGltaXQgPSBJbmZpbml0eTsgfVxuICAgIHJldHVybiAoMCwgcXVlcnlpbmdfanNfMS5maWx0ZXIpKENoZWNrc1tcInRhZ190eXBlXCJdKHR5cGUpLCBub2RlcywgcmVjdXJzZSwgbGltaXQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGVnYWN5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZW1vdmVFbGVtZW50ID0gcmVtb3ZlRWxlbWVudDtcbmV4cG9ydHMucmVwbGFjZUVsZW1lbnQgPSByZXBsYWNlRWxlbWVudDtcbmV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBhcHBlbmRDaGlsZDtcbmV4cG9ydHMuYXBwZW5kID0gYXBwZW5kO1xuZXhwb3J0cy5wcmVwZW5kQ2hpbGQgPSBwcmVwZW5kQ2hpbGQ7XG5leHBvcnRzLnByZXBlbmQgPSBwcmVwZW5kO1xuLyoqXG4gKiBSZW1vdmUgYW4gZWxlbWVudCBmcm9tIHRoZSBkb21cbiAqXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAcGFyYW0gZWxlbSBUaGUgZWxlbWVudCB0byBiZSByZW1vdmVkXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZWxlbSkge1xuICAgIGlmIChlbGVtLnByZXYpXG4gICAgICAgIGVsZW0ucHJldi5uZXh0ID0gZWxlbS5uZXh0O1xuICAgIGlmIChlbGVtLm5leHQpXG4gICAgICAgIGVsZW0ubmV4dC5wcmV2ID0gZWxlbS5wcmV2O1xuICAgIGlmIChlbGVtLnBhcmVudCkge1xuICAgICAgICB2YXIgY2hpbGRzID0gZWxlbS5wYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIHZhciBjaGlsZHNJbmRleCA9IGNoaWxkcy5sYXN0SW5kZXhPZihlbGVtKTtcbiAgICAgICAgaWYgKGNoaWxkc0luZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNoaWxkcy5zcGxpY2UoY2hpbGRzSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsZW0ubmV4dCA9IG51bGw7XG4gICAgZWxlbS5wcmV2ID0gbnVsbDtcbiAgICBlbGVtLnBhcmVudCA9IG51bGw7XG59XG4vKipcbiAqIFJlcGxhY2UgYW4gZWxlbWVudCBpbiB0aGUgZG9tXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQHBhcmFtIGVsZW0gVGhlIGVsZW1lbnQgdG8gYmUgcmVwbGFjZWRcbiAqIEBwYXJhbSByZXBsYWNlbWVudCBUaGUgZWxlbWVudCB0byBiZSBhZGRlZFxuICovXG5mdW5jdGlvbiByZXBsYWNlRWxlbWVudChlbGVtLCByZXBsYWNlbWVudCkge1xuICAgIHZhciBwcmV2ID0gKHJlcGxhY2VtZW50LnByZXYgPSBlbGVtLnByZXYpO1xuICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYubmV4dCA9IHJlcGxhY2VtZW50O1xuICAgIH1cbiAgICB2YXIgbmV4dCA9IChyZXBsYWNlbWVudC5uZXh0ID0gZWxlbS5uZXh0KTtcbiAgICBpZiAobmV4dCkge1xuICAgICAgICBuZXh0LnByZXYgPSByZXBsYWNlbWVudDtcbiAgICB9XG4gICAgdmFyIHBhcmVudCA9IChyZXBsYWNlbWVudC5wYXJlbnQgPSBlbGVtLnBhcmVudCk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICB2YXIgY2hpbGRzID0gcGFyZW50LmNoaWxkcmVuO1xuICAgICAgICBjaGlsZHNbY2hpbGRzLmxhc3RJbmRleE9mKGVsZW0pXSA9IHJlcGxhY2VtZW50O1xuICAgICAgICBlbGVtLnBhcmVudCA9IG51bGw7XG4gICAgfVxufVxuLyoqXG4gKiBBcHBlbmQgYSBjaGlsZCB0byBhbiBlbGVtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBwYXJhbSBwYXJlbnQgVGhlIGVsZW1lbnQgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGNoaWxkIFRoZSBlbGVtZW50IHRvIGJlIGFkZGVkIGFzIGEgY2hpbGQuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudCwgY2hpbGQpIHtcbiAgICByZW1vdmVFbGVtZW50KGNoaWxkKTtcbiAgICBjaGlsZC5uZXh0ID0gbnVsbDtcbiAgICBjaGlsZC5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgaWYgKHBhcmVudC5jaGlsZHJlbi5wdXNoKGNoaWxkKSA+IDEpIHtcbiAgICAgICAgdmFyIHNpYmxpbmcgPSBwYXJlbnQuY2hpbGRyZW5bcGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDJdO1xuICAgICAgICBzaWJsaW5nLm5leHQgPSBjaGlsZDtcbiAgICAgICAgY2hpbGQucHJldiA9IHNpYmxpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaGlsZC5wcmV2ID0gbnVsbDtcbiAgICB9XG59XG4vKipcbiAqIEFwcGVuZCBhbiBlbGVtZW50IGFmdGVyIGFub3RoZXIuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQHBhcmFtIGVsZW0gVGhlIGVsZW1lbnQgdG8gYXBwZW5kIGFmdGVyLlxuICogQHBhcmFtIG5leHQgVGhlIGVsZW1lbnQgYmUgYWRkZWQuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZChlbGVtLCBuZXh0KSB7XG4gICAgcmVtb3ZlRWxlbWVudChuZXh0KTtcbiAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnQ7XG4gICAgdmFyIGN1cnJOZXh0ID0gZWxlbS5uZXh0O1xuICAgIG5leHQubmV4dCA9IGN1cnJOZXh0O1xuICAgIG5leHQucHJldiA9IGVsZW07XG4gICAgZWxlbS5uZXh0ID0gbmV4dDtcbiAgICBuZXh0LnBhcmVudCA9IHBhcmVudDtcbiAgICBpZiAoY3Vyck5leHQpIHtcbiAgICAgICAgY3Vyck5leHQucHJldiA9IG5leHQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHZhciBjaGlsZHMgPSBwYXJlbnQuY2hpbGRyZW47XG4gICAgICAgICAgICBjaGlsZHMuc3BsaWNlKGNoaWxkcy5sYXN0SW5kZXhPZihjdXJyTmV4dCksIDAsIG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChuZXh0KTtcbiAgICB9XG59XG4vKipcbiAqIFByZXBlbmQgYSBjaGlsZCB0byBhbiBlbGVtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBwYXJhbSBwYXJlbnQgVGhlIGVsZW1lbnQgdG8gcHJlcGVuZCBiZWZvcmUuXG4gKiBAcGFyYW0gY2hpbGQgVGhlIGVsZW1lbnQgdG8gYmUgYWRkZWQgYXMgYSBjaGlsZC5cbiAqL1xuZnVuY3Rpb24gcHJlcGVuZENoaWxkKHBhcmVudCwgY2hpbGQpIHtcbiAgICByZW1vdmVFbGVtZW50KGNoaWxkKTtcbiAgICBjaGlsZC5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgY2hpbGQucHJldiA9IG51bGw7XG4gICAgaWYgKHBhcmVudC5jaGlsZHJlbi51bnNoaWZ0KGNoaWxkKSAhPT0gMSkge1xuICAgICAgICB2YXIgc2libGluZyA9IHBhcmVudC5jaGlsZHJlblsxXTtcbiAgICAgICAgc2libGluZy5wcmV2ID0gY2hpbGQ7XG4gICAgICAgIGNoaWxkLm5leHQgPSBzaWJsaW5nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2hpbGQubmV4dCA9IG51bGw7XG4gICAgfVxufVxuLyoqXG4gKiBQcmVwZW5kIGFuIGVsZW1lbnQgYmVmb3JlIGFub3RoZXIuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQHBhcmFtIGVsZW0gVGhlIGVsZW1lbnQgdG8gcHJlcGVuZCBiZWZvcmUuXG4gKiBAcGFyYW0gcHJldiBUaGUgZWxlbWVudCBiZSBhZGRlZC5cbiAqL1xuZnVuY3Rpb24gcHJlcGVuZChlbGVtLCBwcmV2KSB7XG4gICAgcmVtb3ZlRWxlbWVudChwcmV2KTtcbiAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnQ7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICB2YXIgY2hpbGRzID0gcGFyZW50LmNoaWxkcmVuO1xuICAgICAgICBjaGlsZHMuc3BsaWNlKGNoaWxkcy5pbmRleE9mKGVsZW0pLCAwLCBwcmV2KTtcbiAgICB9XG4gICAgaWYgKGVsZW0ucHJldikge1xuICAgICAgICBlbGVtLnByZXYubmV4dCA9IHByZXY7XG4gICAgfVxuICAgIHByZXYucGFyZW50ID0gcGFyZW50O1xuICAgIHByZXYucHJldiA9IGVsZW0ucHJldjtcbiAgICBwcmV2Lm5leHQgPSBlbGVtO1xuICAgIGVsZW0ucHJldiA9IHByZXY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYW5pcHVsYXRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbmV4cG9ydHMuZmluZCA9IGZpbmQ7XG5leHBvcnRzLmZpbmRPbmVDaGlsZCA9IGZpbmRPbmVDaGlsZDtcbmV4cG9ydHMuZmluZE9uZSA9IGZpbmRPbmU7XG5leHBvcnRzLmV4aXN0c09uZSA9IGV4aXN0c09uZTtcbmV4cG9ydHMuZmluZEFsbCA9IGZpbmRBbGw7XG52YXIgZG9taGFuZGxlcl8xID0gcmVxdWlyZShcImRvbWhhbmRsZXJcIik7XG4vKipcbiAqIFNlYXJjaCBhIG5vZGUgYW5kIGl0cyBjaGlsZHJlbiBmb3Igbm9kZXMgcGFzc2luZyBhIHRlc3QgZnVuY3Rpb24uIElmIGBub2RlYCBpcyBub3QgYW4gYXJyYXksIGl0IHdpbGwgYmUgd3JhcHBlZCBpbiBvbmUuXG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5aW5nXG4gKiBAcGFyYW0gdGVzdCBGdW5jdGlvbiB0byB0ZXN0IG5vZGVzIG9uLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBzZWFyY2guIFdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdCBzZXQgaWYgaXQgbWF0Y2hlcy5cbiAqIEBwYXJhbSByZWN1cnNlIEFsc28gY29uc2lkZXIgY2hpbGQgbm9kZXMuXG4gKiBAcGFyYW0gbGltaXQgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgdG8gcmV0dXJuLlxuICogQHJldHVybnMgQWxsIG5vZGVzIHBhc3NpbmcgYHRlc3RgLlxuICovXG5mdW5jdGlvbiBmaWx0ZXIodGVzdCwgbm9kZSwgcmVjdXJzZSwgbGltaXQpIHtcbiAgICBpZiAocmVjdXJzZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2UgPSB0cnVlOyB9XG4gICAgaWYgKGxpbWl0ID09PSB2b2lkIDApIHsgbGltaXQgPSBJbmZpbml0eTsgfVxuICAgIHJldHVybiBmaW5kKHRlc3QsIEFycmF5LmlzQXJyYXkobm9kZSkgPyBub2RlIDogW25vZGVdLCByZWN1cnNlLCBsaW1pdCk7XG59XG4vKipcbiAqIFNlYXJjaCBhbiBhcnJheSBvZiBub2RlcyBhbmQgdGhlaXIgY2hpbGRyZW4gZm9yIG5vZGVzIHBhc3NpbmcgYSB0ZXN0IGZ1bmN0aW9uLlxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeWluZ1xuICogQHBhcmFtIHRlc3QgRnVuY3Rpb24gdG8gdGVzdCBub2RlcyBvbi5cbiAqIEBwYXJhbSBub2RlcyBBcnJheSBvZiBub2RlcyB0byBzZWFyY2guXG4gKiBAcGFyYW0gcmVjdXJzZSBBbHNvIGNvbnNpZGVyIGNoaWxkIG5vZGVzLlxuICogQHBhcmFtIGxpbWl0IE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHRvIHJldHVybi5cbiAqIEByZXR1cm5zIEFsbCBub2RlcyBwYXNzaW5nIGB0ZXN0YC5cbiAqL1xuZnVuY3Rpb24gZmluZCh0ZXN0LCBub2RlcywgcmVjdXJzZSwgbGltaXQpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgLyoqIFN0YWNrIG9mIHRoZSBhcnJheXMgd2UgYXJlIGxvb2tpbmcgYXQuICovXG4gICAgdmFyIG5vZGVTdGFjayA9IFtBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXV07XG4gICAgLyoqIFN0YWNrIG9mIHRoZSBpbmRpY2VzIHdpdGhpbiB0aGUgYXJyYXlzLiAqL1xuICAgIHZhciBpbmRleFN0YWNrID0gWzBdO1xuICAgIGZvciAoOzspIHtcbiAgICAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHRoZSBjdXJyZW50IGFycmF5IGhhcyBhbnkgbW9yZSBlbGVtZW50cyB0byBsb29rIGF0LlxuICAgICAgICBpZiAoaW5kZXhTdGFja1swXSA+PSBub2RlU3RhY2tbMF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIG1vcmUgYXJyYXlzIHRvIGxvb2sgYXQsIHdlIGFyZSBkb25lLlxuICAgICAgICAgICAgaWYgKGluZGV4U3RhY2subGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgcmVtb3ZlIHRoZSBjdXJyZW50IGFycmF5IGZyb20gdGhlIHN0YWNrLlxuICAgICAgICAgICAgbm9kZVN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBpbmRleFN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAvLyBMb29wIGJhY2sgdG8gdGhlIHN0YXJ0IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgYXJyYXkuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWxlbSA9IG5vZGVTdGFja1swXVtpbmRleFN0YWNrWzBdKytdO1xuICAgICAgICBpZiAodGVzdChlbGVtKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZWxlbSk7XG4gICAgICAgICAgICBpZiAoLS1saW1pdCA8PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3Vyc2UgJiYgKDAsIGRvbWhhbmRsZXJfMS5oYXNDaGlsZHJlbikoZWxlbSkgJiYgZWxlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogQWRkIHRoZSBjaGlsZHJlbiB0byB0aGUgc3RhY2suIFdlIGFyZSBkZXB0aC1maXJzdCwgc28gdGhpcyBpc1xuICAgICAgICAgICAgICogdGhlIG5leHQgYXJyYXkgd2UgbG9vayBhdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaW5kZXhTdGFjay51bnNoaWZ0KDApO1xuICAgICAgICAgICAgbm9kZVN0YWNrLnVuc2hpZnQoZWxlbS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluc2lkZSBvZiBhbiBhcnJheSB0aGF0IG1hdGNoZXMgYSB0ZXN0IGZ1bmN0aW9uLiBUaGlzIGlzIGFuIGFsaWFzIGZvciBgQXJyYXkucHJvdG90eXBlLmZpbmRgLlxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeWluZ1xuICogQHBhcmFtIHRlc3QgRnVuY3Rpb24gdG8gdGVzdCBub2RlcyBvbi5cbiAqIEBwYXJhbSBub2RlcyBBcnJheSBvZiBub2RlcyB0byBzZWFyY2guXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgbm9kZSBpbiB0aGUgYXJyYXkgdGhhdCBwYXNzZXMgYHRlc3RgLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBBcnJheS5wcm90b3R5cGUuZmluZGAgZGlyZWN0bHkuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPbmVDaGlsZCh0ZXN0LCBub2Rlcykge1xuICAgIHJldHVybiBub2Rlcy5maW5kKHRlc3QpO1xufVxuLyoqXG4gKiBGaW5kcyBvbmUgZWxlbWVudCBpbiBhIHRyZWUgdGhhdCBwYXNzZXMgYSB0ZXN0LlxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeWluZ1xuICogQHBhcmFtIHRlc3QgRnVuY3Rpb24gdG8gdGVzdCBub2RlcyBvbi5cbiAqIEBwYXJhbSBub2RlcyBOb2RlIG9yIGFycmF5IG9mIG5vZGVzIHRvIHNlYXJjaC5cbiAqIEBwYXJhbSByZWN1cnNlIEFsc28gY29uc2lkZXIgY2hpbGQgbm9kZXMuXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgbm9kZSB0aGF0IHBhc3NlcyBgdGVzdGAuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPbmUodGVzdCwgbm9kZXMsIHJlY3Vyc2UpIHtcbiAgICBpZiAocmVjdXJzZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2UgPSB0cnVlOyB9XG4gICAgdmFyIHNlYXJjaGVkTm9kZXMgPSBBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlYXJjaGVkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBzZWFyY2hlZE5vZGVzW2ldO1xuICAgICAgICBpZiAoKDAsIGRvbWhhbmRsZXJfMS5pc1RhZykobm9kZSkgJiYgdGVzdChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3Vyc2UgJiYgKDAsIGRvbWhhbmRsZXJfMS5oYXNDaGlsZHJlbikobm9kZSkgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgZm91bmQgPSBmaW5kT25lKHRlc3QsIG5vZGUuY2hpbGRyZW4sIHRydWUpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGEgdHJlZSBvZiBub2RlcyBjb250YWlucyBhdCBsZWFzdCBvbmUgbm9kZSBwYXNzaW5nIGEgdGVzdC5cbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlpbmdcbiAqIEBwYXJhbSB0ZXN0IEZ1bmN0aW9uIHRvIHRlc3Qgbm9kZXMgb24uXG4gKiBAcGFyYW0gbm9kZXMgQXJyYXkgb2Ygbm9kZXMgdG8gc2VhcmNoLlxuICogQHJldHVybnMgV2hldGhlciBhIHRyZWUgb2Ygbm9kZXMgY29udGFpbnMgYXQgbGVhc3Qgb25lIG5vZGUgcGFzc2luZyB0aGUgdGVzdC5cbiAqL1xuZnVuY3Rpb24gZXhpc3RzT25lKHRlc3QsIG5vZGVzKSB7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXSkuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gKCgwLCBkb21oYW5kbGVyXzEuaXNUYWcpKG5vZGUpICYmIHRlc3Qobm9kZSkpIHx8XG4gICAgICAgICAgICAoKDAsIGRvbWhhbmRsZXJfMS5oYXNDaGlsZHJlbikobm9kZSkgJiYgZXhpc3RzT25lKHRlc3QsIG5vZGUuY2hpbGRyZW4pKTtcbiAgICB9KTtcbn1cbi8qKlxuICogU2VhcmNoIGFuIGFycmF5IG9mIG5vZGVzIGFuZCB0aGVpciBjaGlsZHJlbiBmb3IgZWxlbWVudHMgcGFzc2luZyBhIHRlc3QgZnVuY3Rpb24uXG4gKlxuICogU2FtZSBhcyBgZmluZGAsIGJ1dCBsaW1pdGVkIHRvIGVsZW1lbnRzIGFuZCB3aXRoIGxlc3Mgb3B0aW9ucywgbGVhZGluZyB0byByZWR1Y2VkIGNvbXBsZXhpdHkuXG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5aW5nXG4gKiBAcGFyYW0gdGVzdCBGdW5jdGlvbiB0byB0ZXN0IG5vZGVzIG9uLlxuICogQHBhcmFtIG5vZGVzIEFycmF5IG9mIG5vZGVzIHRvIHNlYXJjaC5cbiAqIEByZXR1cm5zIEFsbCBub2RlcyBwYXNzaW5nIGB0ZXN0YC5cbiAqL1xuZnVuY3Rpb24gZmluZEFsbCh0ZXN0LCBub2Rlcykge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgbm9kZVN0YWNrID0gW0FycmF5LmlzQXJyYXkobm9kZXMpID8gbm9kZXMgOiBbbm9kZXNdXTtcbiAgICB2YXIgaW5kZXhTdGFjayA9IFswXTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIGlmIChpbmRleFN0YWNrWzBdID49IG5vZGVTdGFja1swXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgcmVtb3ZlIHRoZSBjdXJyZW50IGFycmF5IGZyb20gdGhlIHN0YWNrLlxuICAgICAgICAgICAgbm9kZVN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBpbmRleFN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAvLyBMb29wIGJhY2sgdG8gdGhlIHN0YXJ0IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgYXJyYXkuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWxlbSA9IG5vZGVTdGFja1swXVtpbmRleFN0YWNrWzBdKytdO1xuICAgICAgICBpZiAoKDAsIGRvbWhhbmRsZXJfMS5pc1RhZykoZWxlbSkgJiYgdGVzdChlbGVtKSlcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVsZW0pO1xuICAgICAgICBpZiAoKDAsIGRvbWhhbmRsZXJfMS5oYXNDaGlsZHJlbikoZWxlbSkgJiYgZWxlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpbmRleFN0YWNrLnVuc2hpZnQoMCk7XG4gICAgICAgICAgICBub2RlU3RhY2sudW5zaGlmdChlbGVtLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXJ5aW5nLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPdXRlckhUTUwgPSBnZXRPdXRlckhUTUw7XG5leHBvcnRzLmdldElubmVySFRNTCA9IGdldElubmVySFRNTDtcbmV4cG9ydHMuZ2V0VGV4dCA9IGdldFRleHQ7XG5leHBvcnRzLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG5leHBvcnRzLmlubmVyVGV4dCA9IGlubmVyVGV4dDtcbnZhciBkb21oYW5kbGVyXzEgPSByZXF1aXJlKFwiZG9taGFuZGxlclwiKTtcbnZhciBkb21fc2VyaWFsaXplcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkb20tc2VyaWFsaXplclwiKSk7XG52YXIgZG9tZWxlbWVudHR5cGVfMSA9IHJlcXVpcmUoXCJkb21lbGVtZW50dHlwZVwiKTtcbi8qKlxuICogQGNhdGVnb3J5IFN0cmluZ2lmeVxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgZG9tLXNlcmlhbGl6ZXJgIG1vZHVsZSBkaXJlY3RseS5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gZ2V0IHRoZSBvdXRlciBIVE1MIG9mLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIGBub2RlYCdzIG91dGVyIEhUTUwuXG4gKi9cbmZ1bmN0aW9uIGdldE91dGVySFRNTChub2RlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBkb21fc2VyaWFsaXplcl8xLmRlZmF1bHQpKG5vZGUsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBAY2F0ZWdvcnkgU3RyaW5naWZ5XG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBkb20tc2VyaWFsaXplcmAgbW9kdWxlIGRpcmVjdGx5LlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBnZXQgdGhlIGlubmVyIEhUTUwgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBzZXJpYWxpemF0aW9uLlxuICogQHJldHVybnMgYG5vZGVgJ3MgaW5uZXIgSFRNTC5cbiAqL1xuZnVuY3Rpb24gZ2V0SW5uZXJIVE1MKG5vZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIGRvbWhhbmRsZXJfMS5oYXNDaGlsZHJlbikobm9kZSlcbiAgICAgICAgPyBub2RlLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZ2V0T3V0ZXJIVE1MKG5vZGUsIG9wdGlvbnMpOyB9KS5qb2luKFwiXCIpXG4gICAgICAgIDogXCJcIjtcbn1cbi8qKlxuICogR2V0IGEgbm9kZSdzIGlubmVyIHRleHQuIFNhbWUgYXMgYHRleHRDb250ZW50YCwgYnV0IGluc2VydHMgbmV3bGluZXMgZm9yIGA8YnI+YCB0YWdzLiBJZ25vcmVzIGNvbW1lbnRzLlxuICpcbiAqIEBjYXRlZ29yeSBTdHJpbmdpZnlcbiAqIEBkZXByZWNhdGVkIFVzZSBgdGV4dENvbnRlbnRgIGluc3RlYWQuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGdldCB0aGUgaW5uZXIgdGV4dCBvZi5cbiAqIEByZXR1cm5zIGBub2RlYCdzIGlubmVyIHRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRleHQobm9kZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKVxuICAgICAgICByZXR1cm4gbm9kZS5tYXAoZ2V0VGV4dCkuam9pbihcIlwiKTtcbiAgICBpZiAoKDAsIGRvbWhhbmRsZXJfMS5pc1RhZykobm9kZSkpXG4gICAgICAgIHJldHVybiBub2RlLm5hbWUgPT09IFwiYnJcIiA/IFwiXFxuXCIgOiBnZXRUZXh0KG5vZGUuY2hpbGRyZW4pO1xuICAgIGlmICgoMCwgZG9taGFuZGxlcl8xLmlzQ0RBVEEpKG5vZGUpKVxuICAgICAgICByZXR1cm4gZ2V0VGV4dChub2RlLmNoaWxkcmVuKTtcbiAgICBpZiAoKDAsIGRvbWhhbmRsZXJfMS5pc1RleHQpKG5vZGUpKVxuICAgICAgICByZXR1cm4gbm9kZS5kYXRhO1xuICAgIHJldHVybiBcIlwiO1xufVxuLyoqXG4gKiBHZXQgYSBub2RlJ3MgdGV4dCBjb250ZW50LiBJZ25vcmVzIGNvbW1lbnRzLlxuICpcbiAqIEBjYXRlZ29yeSBTdHJpbmdpZnlcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gZ2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YuXG4gKiBAcmV0dXJucyBgbm9kZWAncyB0ZXh0IGNvbnRlbnQuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS90ZXh0Q29udGVudH1cbiAqL1xuZnVuY3Rpb24gdGV4dENvbnRlbnQobm9kZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKVxuICAgICAgICByZXR1cm4gbm9kZS5tYXAodGV4dENvbnRlbnQpLmpvaW4oXCJcIik7XG4gICAgaWYgKCgwLCBkb21oYW5kbGVyXzEuaGFzQ2hpbGRyZW4pKG5vZGUpICYmICEoMCwgZG9taGFuZGxlcl8xLmlzQ29tbWVudCkobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRleHRDb250ZW50KG5vZGUuY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoKDAsIGRvbWhhbmRsZXJfMS5pc1RleHQpKG5vZGUpKVxuICAgICAgICByZXR1cm4gbm9kZS5kYXRhO1xuICAgIHJldHVybiBcIlwiO1xufVxuLyoqXG4gKiBHZXQgYSBub2RlJ3MgaW5uZXIgdGV4dCwgaWdub3JpbmcgYDxzY3JpcHQ+YCBhbmQgYDxzdHlsZT5gIHRhZ3MuIElnbm9yZXMgY29tbWVudHMuXG4gKlxuICogQGNhdGVnb3J5IFN0cmluZ2lmeVxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBnZXQgdGhlIGlubmVyIHRleHQgb2YuXG4gKiBAcmV0dXJucyBgbm9kZWAncyBpbm5lciB0ZXh0LlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvaW5uZXJUZXh0fVxuICovXG5mdW5jdGlvbiBpbm5lclRleHQobm9kZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKVxuICAgICAgICByZXR1cm4gbm9kZS5tYXAoaW5uZXJUZXh0KS5qb2luKFwiXCIpO1xuICAgIGlmICgoMCwgZG9taGFuZGxlcl8xLmhhc0NoaWxkcmVuKShub2RlKSAmJiAobm9kZS50eXBlID09PSBkb21lbGVtZW50dHlwZV8xLkVsZW1lbnRUeXBlLlRhZyB8fCAoMCwgZG9taGFuZGxlcl8xLmlzQ0RBVEEpKG5vZGUpKSkge1xuICAgICAgICByZXR1cm4gaW5uZXJUZXh0KG5vZGUuY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoKDAsIGRvbWhhbmRsZXJfMS5pc1RleHQpKG5vZGUpKVxuICAgICAgICByZXR1cm4gbm9kZS5kYXRhO1xuICAgIHJldHVybiBcIlwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5naWZ5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDaGlsZHJlbiA9IGdldENoaWxkcmVuO1xuZXhwb3J0cy5nZXRQYXJlbnQgPSBnZXRQYXJlbnQ7XG5leHBvcnRzLmdldFNpYmxpbmdzID0gZ2V0U2libGluZ3M7XG5leHBvcnRzLmdldEF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlVmFsdWU7XG5leHBvcnRzLmhhc0F0dHJpYiA9IGhhc0F0dHJpYjtcbmV4cG9ydHMuZ2V0TmFtZSA9IGdldE5hbWU7XG5leHBvcnRzLm5leHRFbGVtZW50U2libGluZyA9IG5leHRFbGVtZW50U2libGluZztcbmV4cG9ydHMucHJldkVsZW1lbnRTaWJsaW5nID0gcHJldkVsZW1lbnRTaWJsaW5nO1xudmFyIGRvbWhhbmRsZXJfMSA9IHJlcXVpcmUoXCJkb21oYW5kbGVyXCIpO1xuLyoqXG4gKiBHZXQgYSBub2RlJ3MgY2hpbGRyZW4uXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNhbFxuICogQHBhcmFtIGVsZW0gTm9kZSB0byBnZXQgdGhlIGNoaWxkcmVuIG9mLlxuICogQHJldHVybnMgYGVsZW1gJ3MgY2hpbGRyZW4sIG9yIGFuIGVtcHR5IGFycmF5LlxuICovXG5mdW5jdGlvbiBnZXRDaGlsZHJlbihlbGVtKSB7XG4gICAgcmV0dXJuICgwLCBkb21oYW5kbGVyXzEuaGFzQ2hpbGRyZW4pKGVsZW0pID8gZWxlbS5jaGlsZHJlbiA6IFtdO1xufVxuLyoqXG4gKiBHZXQgYSBub2RlJ3MgcGFyZW50LlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzYWxcbiAqIEBwYXJhbSBlbGVtIE5vZGUgdG8gZ2V0IHRoZSBwYXJlbnQgb2YuXG4gKiBAcmV0dXJucyBgZWxlbWAncyBwYXJlbnQgbm9kZSwgb3IgYG51bGxgIGlmIGBlbGVtYCBpcyBhIHJvb3Qgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZ2V0UGFyZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5wYXJlbnQgfHwgbnVsbDtcbn1cbi8qKlxuICogR2V0cyBhbiBlbGVtZW50cyBzaWJsaW5ncywgaW5jbHVkaW5nIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAqXG4gKiBBdHRlbXB0cyB0byBnZXQgdGhlIGNoaWxkcmVuIHRocm91Z2ggdGhlIGVsZW1lbnQncyBwYXJlbnQgZmlyc3QuIElmIHdlIGRvbid0XG4gKiBoYXZlIGEgcGFyZW50ICh0aGUgZWxlbWVudCBpcyBhIHJvb3Qgbm9kZSksIHdlIHdhbGsgdGhlIGVsZW1lbnQncyBgcHJldmAgJlxuICogYG5leHRgIHRvIGdldCBhbGwgcmVtYWluaW5nIG5vZGVzLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzYWxcbiAqIEBwYXJhbSBlbGVtIEVsZW1lbnQgdG8gZ2V0IHRoZSBzaWJsaW5ncyBvZi5cbiAqIEByZXR1cm5zIGBlbGVtYCdzIHNpYmxpbmdzLCBpbmNsdWRpbmcgYGVsZW1gLlxuICovXG5mdW5jdGlvbiBnZXRTaWJsaW5ncyhlbGVtKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW0pO1xuICAgIGlmIChwYXJlbnQgIT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGdldENoaWxkcmVuKHBhcmVudCk7XG4gICAgdmFyIHNpYmxpbmdzID0gW2VsZW1dO1xuICAgIHZhciBwcmV2ID0gZWxlbS5wcmV2LCBuZXh0ID0gZWxlbS5uZXh0O1xuICAgIHdoaWxlIChwcmV2ICE9IG51bGwpIHtcbiAgICAgICAgc2libGluZ3MudW5zaGlmdChwcmV2KTtcbiAgICAgICAgKF9hID0gcHJldiwgcHJldiA9IF9hLnByZXYpO1xuICAgIH1cbiAgICB3aGlsZSAobmV4dCAhPSBudWxsKSB7XG4gICAgICAgIHNpYmxpbmdzLnB1c2gobmV4dCk7XG4gICAgICAgIChfYiA9IG5leHQsIG5leHQgPSBfYi5uZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNpYmxpbmdzO1xufVxuLyoqXG4gKiBHZXRzIGFuIGF0dHJpYnV0ZSBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNhbFxuICogQHBhcmFtIGVsZW0gRWxlbWVudCB0byBjaGVjay5cbiAqIEBwYXJhbSBuYW1lIEF0dHJpYnV0ZSBuYW1lIHRvIHJldHJpZXZlLlxuICogQHJldHVybnMgVGhlIGVsZW1lbnQncyBhdHRyaWJ1dGUgdmFsdWUsIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBlbGVtLmF0dHJpYnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtuYW1lXTtcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZWxlbWVudCBoYXMgYW4gYXR0cmlidXRlLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzYWxcbiAqIEBwYXJhbSBlbGVtIEVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcGFyYW0gbmFtZSBBdHRyaWJ1dGUgbmFtZSB0byBsb29rIGZvci5cbiAqIEByZXR1cm5zIFJldHVybnMgd2hldGhlciBgZWxlbWAgaGFzIHRoZSBhdHRyaWJ1dGUgYG5hbWVgLlxuICovXG5mdW5jdGlvbiBoYXNBdHRyaWIoZWxlbSwgbmFtZSkge1xuICAgIHJldHVybiAoZWxlbS5hdHRyaWJzICE9IG51bGwgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVsZW0uYXR0cmlicywgbmFtZSkgJiZcbiAgICAgICAgZWxlbS5hdHRyaWJzW25hbWVdICE9IG51bGwpO1xufVxuLyoqXG4gKiBHZXQgdGhlIHRhZyBuYW1lIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNhbFxuICogQHBhcmFtIGVsZW0gVGhlIGVsZW1lbnQgdG8gZ2V0IHRoZSBuYW1lIGZvci5cbiAqIEByZXR1cm5zIFRoZSB0YWcgbmFtZSBvZiBgZWxlbWAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hbWUoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLm5hbWU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5leHQgZWxlbWVudCBzaWJsaW5nIG9mIGEgbm9kZS5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2FsXG4gKiBAcGFyYW0gZWxlbSBUaGUgZWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZi5cbiAqIEByZXR1cm5zIGBlbGVtYCdzIG5leHQgc2libGluZyB0aGF0IGlzIGEgdGFnLCBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gbmV4dFxuICogc2libGluZy5cbiAqL1xuZnVuY3Rpb24gbmV4dEVsZW1lbnRTaWJsaW5nKGVsZW0pIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIG5leHQgPSBlbGVtLm5leHQ7XG4gICAgd2hpbGUgKG5leHQgIT09IG51bGwgJiYgISgwLCBkb21oYW5kbGVyXzEuaXNUYWcpKG5leHQpKVxuICAgICAgICAoX2EgPSBuZXh0LCBuZXh0ID0gX2EubmV4dCk7XG4gICAgcmV0dXJuIG5leHQ7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHByZXZpb3VzIGVsZW1lbnQgc2libGluZyBvZiBhIG5vZGUuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNhbFxuICogQHBhcmFtIGVsZW0gVGhlIGVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mLlxuICogQHJldHVybnMgYGVsZW1gJ3MgcHJldmlvdXMgc2libGluZyB0aGF0IGlzIGEgdGFnLCBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm9cbiAqIHByZXZpb3VzIHNpYmxpbmcuXG4gKi9cbmZ1bmN0aW9uIHByZXZFbGVtZW50U2libGluZyhlbGVtKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBwcmV2ID0gZWxlbS5wcmV2O1xuICAgIHdoaWxlIChwcmV2ICE9PSBudWxsICYmICEoMCwgZG9taGFuZGxlcl8xLmlzVGFnKShwcmV2KSlcbiAgICAgICAgKF9hID0gcHJldiwgcHJldiA9IF9hLnByZXYpO1xuICAgIHJldHVybiBwcmV2O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhdmVyc2FsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29kZVhNTCA9IGV4cG9ydHMuZGVjb2RlSFRNTFN0cmljdCA9IGV4cG9ydHMuZGVjb2RlSFRNTEF0dHJpYnV0ZSA9IGV4cG9ydHMuZGVjb2RlSFRNTCA9IGV4cG9ydHMuZGV0ZXJtaW5lQnJhbmNoID0gZXhwb3J0cy5FbnRpdHlEZWNvZGVyID0gZXhwb3J0cy5EZWNvZGluZ01vZGUgPSBleHBvcnRzLkJpblRyaWVGbGFncyA9IGV4cG9ydHMuZnJvbUNvZGVQb2ludCA9IGV4cG9ydHMucmVwbGFjZUNvZGVQb2ludCA9IGV4cG9ydHMuZGVjb2RlQ29kZVBvaW50ID0gZXhwb3J0cy54bWxEZWNvZGVUcmVlID0gZXhwb3J0cy5odG1sRGVjb2RlVHJlZSA9IHZvaWQgMDtcbnZhciBkZWNvZGVfZGF0YV9odG1sX2pzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZ2VuZXJhdGVkL2RlY29kZS1kYXRhLWh0bWwuanNcIikpO1xuZXhwb3J0cy5odG1sRGVjb2RlVHJlZSA9IGRlY29kZV9kYXRhX2h0bWxfanNfMS5kZWZhdWx0O1xudmFyIGRlY29kZV9kYXRhX3htbF9qc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9kZWNvZGUtZGF0YS14bWwuanNcIikpO1xuZXhwb3J0cy54bWxEZWNvZGVUcmVlID0gZGVjb2RlX2RhdGFfeG1sX2pzXzEuZGVmYXVsdDtcbnZhciBkZWNvZGVfY29kZXBvaW50X2pzXzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vZGVjb2RlX2NvZGVwb2ludC5qc1wiKSk7XG5leHBvcnRzLmRlY29kZUNvZGVQb2ludCA9IGRlY29kZV9jb2RlcG9pbnRfanNfMS5kZWZhdWx0O1xudmFyIGRlY29kZV9jb2RlcG9pbnRfanNfMiA9IHJlcXVpcmUoXCIuL2RlY29kZV9jb2RlcG9pbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXBsYWNlQ29kZVBvaW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGVfY29kZXBvaW50X2pzXzIucmVwbGFjZUNvZGVQb2ludDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyb21Db2RlUG9pbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29kZV9jb2RlcG9pbnRfanNfMi5mcm9tQ29kZVBvaW50OyB9IH0pO1xudmFyIENoYXJDb2RlcztcbihmdW5jdGlvbiAoQ2hhckNvZGVzKSB7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIk5VTVwiXSA9IDM1XSA9IFwiTlVNXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIlNFTUlcIl0gPSA1OV0gPSBcIlNFTUlcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiRVFVQUxTXCJdID0gNjFdID0gXCJFUVVBTFNcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiWkVST1wiXSA9IDQ4XSA9IFwiWkVST1wiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJOSU5FXCJdID0gNTddID0gXCJOSU5FXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkxPV0VSX0FcIl0gPSA5N10gPSBcIkxPV0VSX0FcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiTE9XRVJfRlwiXSA9IDEwMl0gPSBcIkxPV0VSX0ZcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiTE9XRVJfWFwiXSA9IDEyMF0gPSBcIkxPV0VSX1hcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiTE9XRVJfWlwiXSA9IDEyMl0gPSBcIkxPV0VSX1pcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiVVBQRVJfQVwiXSA9IDY1XSA9IFwiVVBQRVJfQVwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJVUFBFUl9GXCJdID0gNzBdID0gXCJVUFBFUl9GXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIlVQUEVSX1pcIl0gPSA5MF0gPSBcIlVQUEVSX1pcIjtcbn0pKENoYXJDb2RlcyB8fCAoQ2hhckNvZGVzID0ge30pKTtcbi8qKiBCaXQgdGhhdCBuZWVkcyB0byBiZSBzZXQgdG8gY29udmVydCBhbiB1cHBlciBjYXNlIEFTQ0lJIGNoYXJhY3RlciB0byBsb3dlciBjYXNlICovXG52YXIgVE9fTE9XRVJfQklUID0gMzI7XG52YXIgQmluVHJpZUZsYWdzO1xuKGZ1bmN0aW9uIChCaW5UcmllRmxhZ3MpIHtcbiAgICBCaW5UcmllRmxhZ3NbQmluVHJpZUZsYWdzW1wiVkFMVUVfTEVOR1RIXCJdID0gNDkxNTJdID0gXCJWQUxVRV9MRU5HVEhcIjtcbiAgICBCaW5UcmllRmxhZ3NbQmluVHJpZUZsYWdzW1wiQlJBTkNIX0xFTkdUSFwiXSA9IDE2MjU2XSA9IFwiQlJBTkNIX0xFTkdUSFwiO1xuICAgIEJpblRyaWVGbGFnc1tCaW5UcmllRmxhZ3NbXCJKVU1QX1RBQkxFXCJdID0gMTI3XSA9IFwiSlVNUF9UQUJMRVwiO1xufSkoQmluVHJpZUZsYWdzID0gZXhwb3J0cy5CaW5UcmllRmxhZ3MgfHwgKGV4cG9ydHMuQmluVHJpZUZsYWdzID0ge30pKTtcbmZ1bmN0aW9uIGlzTnVtYmVyKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZSA+PSBDaGFyQ29kZXMuWkVSTyAmJiBjb2RlIDw9IENoYXJDb2Rlcy5OSU5FO1xufVxuZnVuY3Rpb24gaXNIZXhhZGVjaW1hbENoYXJhY3Rlcihjb2RlKSB7XG4gICAgcmV0dXJuICgoY29kZSA+PSBDaGFyQ29kZXMuVVBQRVJfQSAmJiBjb2RlIDw9IENoYXJDb2Rlcy5VUFBFUl9GKSB8fFxuICAgICAgICAoY29kZSA+PSBDaGFyQ29kZXMuTE9XRVJfQSAmJiBjb2RlIDw9IENoYXJDb2Rlcy5MT1dFUl9GKSk7XG59XG5mdW5jdGlvbiBpc0FzY2lpQWxwaGFOdW1lcmljKGNvZGUpIHtcbiAgICByZXR1cm4gKChjb2RlID49IENoYXJDb2Rlcy5VUFBFUl9BICYmIGNvZGUgPD0gQ2hhckNvZGVzLlVQUEVSX1opIHx8XG4gICAgICAgIChjb2RlID49IENoYXJDb2Rlcy5MT1dFUl9BICYmIGNvZGUgPD0gQ2hhckNvZGVzLkxPV0VSX1opIHx8XG4gICAgICAgIGlzTnVtYmVyKGNvZGUpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBlbmQgY2hhcmFjdGVyIGZvciBhbiBlbnRpdHkgaW4gYW4gYXR0cmlidXRlLlxuICpcbiAqIEF0dHJpYnV0ZSB2YWx1ZXMgdGhhdCBhcmVuJ3QgdGVybWluYXRlZCBwcm9wZXJseSBhcmVuJ3QgcGFyc2VkLCBhbmQgc2hvdWxkbid0IGxlYWQgdG8gYSBwYXJzZXIgZXJyb3IuXG4gKiBTZWUgdGhlIGV4YW1wbGUgaW4gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2Utc3RhdGVcbiAqL1xuZnVuY3Rpb24gaXNFbnRpdHlJbkF0dHJpYnV0ZUludmFsaWRFbmQoY29kZSkge1xuICAgIHJldHVybiBjb2RlID09PSBDaGFyQ29kZXMuRVFVQUxTIHx8IGlzQXNjaWlBbHBoYU51bWVyaWMoY29kZSk7XG59XG52YXIgRW50aXR5RGVjb2RlclN0YXRlO1xuKGZ1bmN0aW9uIChFbnRpdHlEZWNvZGVyU3RhdGUpIHtcbiAgICBFbnRpdHlEZWNvZGVyU3RhdGVbRW50aXR5RGVjb2RlclN0YXRlW1wiRW50aXR5U3RhcnRcIl0gPSAwXSA9IFwiRW50aXR5U3RhcnRcIjtcbiAgICBFbnRpdHlEZWNvZGVyU3RhdGVbRW50aXR5RGVjb2RlclN0YXRlW1wiTnVtZXJpY1N0YXJ0XCJdID0gMV0gPSBcIk51bWVyaWNTdGFydFwiO1xuICAgIEVudGl0eURlY29kZXJTdGF0ZVtFbnRpdHlEZWNvZGVyU3RhdGVbXCJOdW1lcmljRGVjaW1hbFwiXSA9IDJdID0gXCJOdW1lcmljRGVjaW1hbFwiO1xuICAgIEVudGl0eURlY29kZXJTdGF0ZVtFbnRpdHlEZWNvZGVyU3RhdGVbXCJOdW1lcmljSGV4XCJdID0gM10gPSBcIk51bWVyaWNIZXhcIjtcbiAgICBFbnRpdHlEZWNvZGVyU3RhdGVbRW50aXR5RGVjb2RlclN0YXRlW1wiTmFtZWRFbnRpdHlcIl0gPSA0XSA9IFwiTmFtZWRFbnRpdHlcIjtcbn0pKEVudGl0eURlY29kZXJTdGF0ZSB8fCAoRW50aXR5RGVjb2RlclN0YXRlID0ge30pKTtcbnZhciBEZWNvZGluZ01vZGU7XG4oZnVuY3Rpb24gKERlY29kaW5nTW9kZSkge1xuICAgIC8qKiBFbnRpdGllcyBpbiB0ZXh0IG5vZGVzIHRoYXQgY2FuIGVuZCB3aXRoIGFueSBjaGFyYWN0ZXIuICovXG4gICAgRGVjb2RpbmdNb2RlW0RlY29kaW5nTW9kZVtcIkxlZ2FjeVwiXSA9IDBdID0gXCJMZWdhY3lcIjtcbiAgICAvKiogT25seSBhbGxvdyBlbnRpdGllcyB0ZXJtaW5hdGVkIHdpdGggYSBzZW1pY29sb24uICovXG4gICAgRGVjb2RpbmdNb2RlW0RlY29kaW5nTW9kZVtcIlN0cmljdFwiXSA9IDFdID0gXCJTdHJpY3RcIjtcbiAgICAvKiogRW50aXRpZXMgaW4gYXR0cmlidXRlcyBoYXZlIGxpbWl0YXRpb25zIG9uIGVuZGluZyBjaGFyYWN0ZXJzLiAqL1xuICAgIERlY29kaW5nTW9kZVtEZWNvZGluZ01vZGVbXCJBdHRyaWJ1dGVcIl0gPSAyXSA9IFwiQXR0cmlidXRlXCI7XG59KShEZWNvZGluZ01vZGUgPSBleHBvcnRzLkRlY29kaW5nTW9kZSB8fCAoZXhwb3J0cy5EZWNvZGluZ01vZGUgPSB7fSkpO1xuLyoqXG4gKiBUb2tlbiBkZWNvZGVyIHdpdGggc3VwcG9ydCBvZiB3cml0aW5nIHBhcnRpYWwgZW50aXRpZXMuXG4gKi9cbnZhciBFbnRpdHlEZWNvZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVudGl0eURlY29kZXIoXG4gICAgLyoqIFRoZSB0cmVlIHVzZWQgdG8gZGVjb2RlIGVudGl0aWVzLiAqL1xuICAgIGRlY29kZVRyZWUsIFxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgY29kZXBvaW50IGlzIGRlY29kZWQuXG4gICAgICpcbiAgICAgKiBGb3IgbXVsdGktYnl0ZSBuYW1lZCBlbnRpdGllcywgdGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyxcbiAgICAgKiB3aXRoIHRoZSBzZWNvbmQgY29kZXBvaW50LCBhbmQgdGhlIHNhbWUgYGNvbnN1bWVkYCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb2RlcG9pbnQgVGhlIGRlY29kZWQgY29kZXBvaW50LlxuICAgICAqIEBwYXJhbSBjb25zdW1lZCBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGJ5IHRoZSBkZWNvZGVyLlxuICAgICAqL1xuICAgIGVtaXRDb2RlUG9pbnQsIFxuICAgIC8qKiBBbiBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHByb2R1Y2UgZXJyb3JzLiAqL1xuICAgIGVycm9ycykge1xuICAgICAgICB0aGlzLmRlY29kZVRyZWUgPSBkZWNvZGVUcmVlO1xuICAgICAgICB0aGlzLmVtaXRDb2RlUG9pbnQgPSBlbWl0Q29kZVBvaW50O1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgLyoqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkZWNvZGVyLiAqL1xuICAgICAgICB0aGlzLnN0YXRlID0gRW50aXR5RGVjb2RlclN0YXRlLkVudGl0eVN0YXJ0O1xuICAgICAgICAvKiogQ2hhcmFjdGVycyB0aGF0IHdlcmUgY29uc3VtZWQgd2hpbGUgcGFyc2luZyBhbiBlbnRpdHkuICovXG4gICAgICAgIHRoaXMuY29uc3VtZWQgPSAxO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBFaXRoZXIgdGhlIHJlc3VsdCBpbmRleCBvZiBhIG51bWVyaWMgZW50aXR5LCBvciB0aGUgY29kZXBvaW50IG9mIGFcbiAgICAgICAgICogbnVtZXJpYyBlbnRpdHkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlc3VsdCA9IDA7XG4gICAgICAgIC8qKiBUaGUgY3VycmVudCBpbmRleCBpbiB0aGUgZGVjb2RlIHRyZWUuICovXG4gICAgICAgIHRoaXMudHJlZUluZGV4ID0gMDtcbiAgICAgICAgLyoqIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdlcmUgY29uc3VtZWQgaW4gZXhjZXNzLiAqL1xuICAgICAgICB0aGlzLmV4Y2VzcyA9IDE7XG4gICAgICAgIC8qKiBUaGUgbW9kZSBpbiB3aGljaCB0aGUgZGVjb2RlciBpcyBvcGVyYXRpbmcuICovXG4gICAgICAgIHRoaXMuZGVjb2RlTW9kZSA9IERlY29kaW5nTW9kZS5TdHJpY3Q7XG4gICAgfVxuICAgIC8qKiBSZXNldHMgdGhlIGluc3RhbmNlIHRvIG1ha2UgaXQgcmV1c2FibGUuICovXG4gICAgRW50aXR5RGVjb2Rlci5wcm90b3R5cGUuc3RhcnRFbnRpdHkgPSBmdW5jdGlvbiAoZGVjb2RlTW9kZSkge1xuICAgICAgICB0aGlzLmRlY29kZU1vZGUgPSBkZWNvZGVNb2RlO1xuICAgICAgICB0aGlzLnN0YXRlID0gRW50aXR5RGVjb2RlclN0YXRlLkVudGl0eVN0YXJ0O1xuICAgICAgICB0aGlzLnJlc3VsdCA9IDA7XG4gICAgICAgIHRoaXMudHJlZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5leGNlc3MgPSAxO1xuICAgICAgICB0aGlzLmNvbnN1bWVkID0gMTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFdyaXRlIGFuIGVudGl0eSB0byB0aGUgZGVjb2Rlci4gVGhpcyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggcGFydGlhbCBlbnRpdGllcy5cbiAgICAgKiBJZiB0aGUgZW50aXR5IGlzIGluY29tcGxldGUsIHRoZSBkZWNvZGVyIHdpbGwgcmV0dXJuIC0xLlxuICAgICAqXG4gICAgICogTWlycm9ycyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldERlY29kZXJgLCBidXQgd2l0aCB0aGUgYWJpbGl0eSB0byBzdG9wIGRlY29kaW5nIGlmIHRoZVxuICAgICAqIGVudGl0eSBpcyBpbmNvbXBsZXRlLCBhbmQgcmVzdW1lIHdoZW4gdGhlIG5leHQgc3RyaW5nIGlzIHdyaXR0ZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZW50aXR5IChvciBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgZW50aXR5KS5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGVudGl0eSBiZWdpbnMuIFNob3VsZCBiZSAwIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBjYWxsLlxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdlcmUgY29uc3VtZWQsIG9yIC0xIGlmIHRoZSBlbnRpdHkgaXMgaW5jb21wbGV0ZS5cbiAgICAgKi9cbiAgICBFbnRpdHlEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIsIG9mZnNldCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgRW50aXR5RGVjb2RlclN0YXRlLkVudGl0eVN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ci5jaGFyQ29kZUF0KG9mZnNldCkgPT09IENoYXJDb2Rlcy5OVU0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEVudGl0eURlY29kZXJTdGF0ZS5OdW1lcmljU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVOdW1lcmljU3RhcnQoc3RyLCBvZmZzZXQgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEVudGl0eURlY29kZXJTdGF0ZS5OYW1lZEVudGl0eTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZU5hbWVkRW50aXR5KHN0ciwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRW50aXR5RGVjb2RlclN0YXRlLk51bWVyaWNTdGFydDoge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlTnVtZXJpY1N0YXJ0KHN0ciwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRW50aXR5RGVjb2RlclN0YXRlLk51bWVyaWNEZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVOdW1lcmljRGVjaW1hbChzdHIsIG9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEVudGl0eURlY29kZXJTdGF0ZS5OdW1lcmljSGV4OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVOdW1lcmljSGV4KHN0ciwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRW50aXR5RGVjb2RlclN0YXRlLk5hbWVkRW50aXR5OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVOYW1lZEVudGl0eShzdHIsIG9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN3aXRjaGVzIGJldHdlZW4gdGhlIG51bWVyaWMgZGVjaW1hbCBhbmQgaGV4YWRlY2ltYWwgc3RhdGVzLlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byB0aGUgYE51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZSBzdGF0ZWAgaW4gdGhlIEhUTUwgc3BlYy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBlbnRpdHkgKG9yIGEgY29udGludWF0aW9uIG9mIHRoZSBlbnRpdHkpLlxuICAgICAqIEBwYXJhbSBvZmZzZXQgVGhlIGN1cnJlbnQgb2Zmc2V0LlxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdlcmUgY29uc3VtZWQsIG9yIC0xIGlmIHRoZSBlbnRpdHkgaXMgaW5jb21wbGV0ZS5cbiAgICAgKi9cbiAgICBFbnRpdHlEZWNvZGVyLnByb3RvdHlwZS5zdGF0ZU51bWVyaWNTdGFydCA9IGZ1bmN0aW9uIChzdHIsIG9mZnNldCkge1xuICAgICAgICBpZiAob2Zmc2V0ID49IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHN0ci5jaGFyQ29kZUF0KG9mZnNldCkgfCBUT19MT1dFUl9CSVQpID09PSBDaGFyQ29kZXMuTE9XRVJfWCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEVudGl0eURlY29kZXJTdGF0ZS5OdW1lcmljSGV4O1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lZCArPSAxO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVOdW1lcmljSGV4KHN0ciwgb2Zmc2V0ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IEVudGl0eURlY29kZXJTdGF0ZS5OdW1lcmljRGVjaW1hbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVOdW1lcmljRGVjaW1hbChzdHIsIG9mZnNldCk7XG4gICAgfTtcbiAgICBFbnRpdHlEZWNvZGVyLnByb3RvdHlwZS5hZGRUb051bWVyaWNSZXN1bHQgPSBmdW5jdGlvbiAoc3RyLCBzdGFydCwgZW5kLCBiYXNlKSB7XG4gICAgICAgIGlmIChzdGFydCAhPT0gZW5kKSB7XG4gICAgICAgICAgICB2YXIgZGlnaXRDb3VudCA9IGVuZCAtIHN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPVxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ICogTWF0aC5wb3coYmFzZSwgZGlnaXRDb3VudCkgK1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChzdHIuc3Vic3RyKHN0YXJ0LCBkaWdpdENvdW50KSwgYmFzZSk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVkICs9IGRpZ2l0Q291bnQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIGhleGFkZWNpbWFsIG51bWVyaWMgZW50aXR5LlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byB0aGUgYEhleGFkZW1pY2FsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhdGVgIGluIHRoZSBIVE1MIHNwZWMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZW50aXR5IChvciBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgZW50aXR5KS5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBjdXJyZW50IG9mZnNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGNvbnN1bWVkLCBvciAtMSBpZiB0aGUgZW50aXR5IGlzIGluY29tcGxldGUuXG4gICAgICovXG4gICAgRW50aXR5RGVjb2Rlci5wcm90b3R5cGUuc3RhdGVOdW1lcmljSGV4ID0gZnVuY3Rpb24gKHN0ciwgb2Zmc2V0KSB7XG4gICAgICAgIHZhciBzdGFydElkeCA9IG9mZnNldDtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBjaGFyID0gc3RyLmNoYXJDb2RlQXQob2Zmc2V0KTtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihjaGFyKSB8fCBpc0hleGFkZWNpbWFsQ2hhcmFjdGVyKGNoYXIpKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvTnVtZXJpY1Jlc3VsdChzdHIsIHN0YXJ0SWR4LCBvZmZzZXQsIDE2KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbWl0TnVtZXJpY0VudGl0eShjaGFyLCAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZFRvTnVtZXJpY1Jlc3VsdChzdHIsIHN0YXJ0SWR4LCBvZmZzZXQsIDE2KTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgZGVjaW1hbCBudW1lcmljIGVudGl0eS5cbiAgICAgKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gdGhlIGBEZWNpbWFsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhdGVgIGluIHRoZSBIVE1MIHNwZWMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZW50aXR5IChvciBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgZW50aXR5KS5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBjdXJyZW50IG9mZnNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGNvbnN1bWVkLCBvciAtMSBpZiB0aGUgZW50aXR5IGlzIGluY29tcGxldGUuXG4gICAgICovXG4gICAgRW50aXR5RGVjb2Rlci5wcm90b3R5cGUuc3RhdGVOdW1lcmljRGVjaW1hbCA9IGZ1bmN0aW9uIChzdHIsIG9mZnNldCkge1xuICAgICAgICB2YXIgc3RhcnRJZHggPSBvZmZzZXQ7XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgY2hhciA9IHN0ci5jaGFyQ29kZUF0KG9mZnNldCk7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoY2hhcikpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9OdW1lcmljUmVzdWx0KHN0ciwgc3RhcnRJZHgsIG9mZnNldCwgMTApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVtaXROdW1lcmljRW50aXR5KGNoYXIsIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkVG9OdW1lcmljUmVzdWx0KHN0ciwgc3RhcnRJZHgsIG9mZnNldCwgMTApO1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBhbmQgZW1pdCBhIG51bWVyaWMgZW50aXR5LlxuICAgICAqXG4gICAgICogSW1wbGVtZW50cyB0aGUgbG9naWMgZnJvbSB0aGUgYEhleGFkZW1pY2FsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhcnRcbiAgICAgKiBzdGF0ZWAgYW5kIGBOdW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2UgZW5kIHN0YXRlYCBpbiB0aGUgSFRNTCBzcGVjLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhc3RDcCBUaGUgbGFzdCBjb2RlIHBvaW50IG9mIHRoZSBlbnRpdHkuIFVzZWQgdG8gc2VlIGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgZW50aXR5IHdhcyB0ZXJtaW5hdGVkIHdpdGggYSBzZW1pY29sb24uXG4gICAgICogQHBhcmFtIGV4cGVjdGVkTGVuZ3RoIFRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGJlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVkLiBVc2VkIHRvIHZhbGlkYXRlIHRoYXQgYXQgbGVhc3Qgb25lIGRpZ2l0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgIHdhcyBjb25zdW1lZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGNvbnN1bWVkLlxuICAgICAqL1xuICAgIEVudGl0eURlY29kZXIucHJvdG90eXBlLmVtaXROdW1lcmljRW50aXR5ID0gZnVuY3Rpb24gKGxhc3RDcCwgZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvLyBFbnN1cmUgd2UgY29uc3VtZWQgYXQgbGVhc3Qgb25lIGRpZ2l0LlxuICAgICAgICBpZiAodGhpcy5jb25zdW1lZCA8PSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5lcnJvcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYnNlbmNlT2ZEaWdpdHNJbk51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodGhpcy5jb25zdW1lZCk7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSBsZWdpdCBlbmQgb2YgdGhlIGVudGl0eVxuICAgICAgICBpZiAobGFzdENwID09PSBDaGFyQ29kZXMuU0VNSSkge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lZCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVjb2RlTW9kZSA9PT0gRGVjb2RpbmdNb2RlLlN0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Q29kZVBvaW50KCgwLCBkZWNvZGVfY29kZXBvaW50X2pzXzEucmVwbGFjZUNvZGVQb2ludCkodGhpcy5yZXN1bHQpLCB0aGlzLmNvbnN1bWVkKTtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAobGFzdENwICE9PSBDaGFyQ29kZXMuU0VNSSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLm1pc3NpbmdTZW1pY29sb25BZnRlckNoYXJhY3RlclJlZmVyZW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lcnJvcnMudmFsaWRhdGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKHRoaXMucmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lZDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIG5hbWVkIGVudGl0eS5cbiAgICAgKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gdGhlIGBOYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXRlYCBpbiB0aGUgSFRNTCBzcGVjLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVudGl0eSAob3IgYSBjb250aW51YXRpb24gb2YgdGhlIGVudGl0eSkuXG4gICAgICogQHBhcmFtIG9mZnNldCBUaGUgY3VycmVudCBvZmZzZXQuXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBjb25zdW1lZCwgb3IgLTEgaWYgdGhlIGVudGl0eSBpcyBpbmNvbXBsZXRlLlxuICAgICAqL1xuICAgIEVudGl0eURlY29kZXIucHJvdG90eXBlLnN0YXRlTmFtZWRFbnRpdHkgPSBmdW5jdGlvbiAoc3RyLCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIGRlY29kZVRyZWUgPSB0aGlzLmRlY29kZVRyZWU7XG4gICAgICAgIHZhciBjdXJyZW50ID0gZGVjb2RlVHJlZVt0aGlzLnRyZWVJbmRleF07XG4gICAgICAgIC8vIFRoZSBtYXNrIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIHZhbHVlLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgYnl0ZS5cbiAgICAgICAgdmFyIHZhbHVlTGVuZ3RoID0gKGN1cnJlbnQgJiBCaW5UcmllRmxhZ3MuVkFMVUVfTEVOR1RIKSA+PiAxNDtcbiAgICAgICAgZm9yICg7IG9mZnNldCA8IHN0ci5sZW5ndGg7IG9mZnNldCsrLCB0aGlzLmV4Y2VzcysrKSB7XG4gICAgICAgICAgICB2YXIgY2hhciA9IHN0ci5jaGFyQ29kZUF0KG9mZnNldCk7XG4gICAgICAgICAgICB0aGlzLnRyZWVJbmRleCA9IGRldGVybWluZUJyYW5jaChkZWNvZGVUcmVlLCBjdXJyZW50LCB0aGlzLnRyZWVJbmRleCArIE1hdGgubWF4KDEsIHZhbHVlTGVuZ3RoKSwgY2hhcik7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBwYXJzaW5nIGFuIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgICAodGhpcy5kZWNvZGVNb2RlID09PSBEZWNvZGluZ01vZGUuQXR0cmlidXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBjb25zdW1lZCBhbnkgY2hhcmFjdGVycyBhZnRlciB0aGUgZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlTGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIHRoZXJlIHNob3VsZCBiZSBubyBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFbnRpdHlJbkF0dHJpYnV0ZUludmFsaWRFbmQoY2hhcikpKVxuICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmVtaXROb3RUZXJtaW5hdGVkTmFtZWRFbnRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSBkZWNvZGVUcmVlW3RoaXMudHJlZUluZGV4XTtcbiAgICAgICAgICAgIHZhbHVlTGVuZ3RoID0gKGN1cnJlbnQgJiBCaW5UcmllRmxhZ3MuVkFMVUVfTEVOR1RIKSA+PiAxNDtcbiAgICAgICAgICAgIC8vIElmIHRoZSBicmFuY2ggaXMgYSB2YWx1ZSwgc3RvcmUgaXQgYW5kIGNvbnRpbnVlXG4gICAgICAgICAgICBpZiAodmFsdWVMZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZW50aXR5IGlzIHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24sIHdlIGFyZSBkb25lLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSBDaGFyQ29kZXMuU0VNSSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbWl0TmFtZWRFbnRpdHlEYXRhKHRoaXMudHJlZUluZGV4LCB2YWx1ZUxlbmd0aCwgdGhpcy5jb25zdW1lZCArIHRoaXMuZXhjZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgbm9uLXRlcm1pbmF0ZWQgKGxlZ2FjeSkgZW50aXR5IHdoaWxlIHBhcnNpbmcgc3RyaWN0bHksIHRoZW4gaWdub3JlIGl0LlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlY29kZU1vZGUgIT09IERlY29kaW5nTW9kZS5TdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLnRyZWVJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lZCArPSB0aGlzLmV4Y2VzcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNlc3MgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFbWl0IGEgbmFtZWQgZW50aXR5IHRoYXQgd2FzIG5vdCB0ZXJtaW5hdGVkIHdpdGggYSBzZW1pY29sb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3VtZWQuXG4gICAgICovXG4gICAgRW50aXR5RGVjb2Rlci5wcm90b3R5cGUuZW1pdE5vdFRlcm1pbmF0ZWROYW1lZEVudGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgX2IgPSB0aGlzLCByZXN1bHQgPSBfYi5yZXN1bHQsIGRlY29kZVRyZWUgPSBfYi5kZWNvZGVUcmVlO1xuICAgICAgICB2YXIgdmFsdWVMZW5ndGggPSAoZGVjb2RlVHJlZVtyZXN1bHRdICYgQmluVHJpZUZsYWdzLlZBTFVFX0xFTkdUSCkgPj4gMTQ7XG4gICAgICAgIHRoaXMuZW1pdE5hbWVkRW50aXR5RGF0YShyZXN1bHQsIHZhbHVlTGVuZ3RoLCB0aGlzLmNvbnN1bWVkKTtcbiAgICAgICAgKF9hID0gdGhpcy5lcnJvcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZWQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFbWl0IGEgbmFtZWQgZW50aXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCBUaGUgaW5kZXggb2YgdGhlIGVudGl0eSBpbiB0aGUgZGVjb2RlIHRyZWUuXG4gICAgICogQHBhcmFtIHZhbHVlTGVuZ3RoIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGVudGl0eS5cbiAgICAgKiBAcGFyYW0gY29uc3VtZWQgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnN1bWVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnN1bWVkLlxuICAgICAqL1xuICAgIEVudGl0eURlY29kZXIucHJvdG90eXBlLmVtaXROYW1lZEVudGl0eURhdGEgPSBmdW5jdGlvbiAocmVzdWx0LCB2YWx1ZUxlbmd0aCwgY29uc3VtZWQpIHtcbiAgICAgICAgdmFyIGRlY29kZVRyZWUgPSB0aGlzLmRlY29kZVRyZWU7XG4gICAgICAgIHRoaXMuZW1pdENvZGVQb2ludCh2YWx1ZUxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgPyBkZWNvZGVUcmVlW3Jlc3VsdF0gJiB+QmluVHJpZUZsYWdzLlZBTFVFX0xFTkdUSFxuICAgICAgICAgICAgOiBkZWNvZGVUcmVlW3Jlc3VsdCArIDFdLCBjb25zdW1lZCk7XG4gICAgICAgIGlmICh2YWx1ZUxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgLy8gRm9yIG11bHRpLWJ5dGUgdmFsdWVzLCB3ZSBuZWVkIHRvIGVtaXQgdGhlIHNlY29uZCBieXRlLlxuICAgICAgICAgICAgdGhpcy5lbWl0Q29kZVBvaW50KGRlY29kZVRyZWVbcmVzdWx0ICsgMl0sIGNvbnN1bWVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29uc3VtZWQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTaWduYWwgdG8gdGhlIHBhcnNlciB0aGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IHdhcyByZWFjaGVkLlxuICAgICAqXG4gICAgICogUmVtYWluaW5nIGRhdGEgd2lsbCBiZSBlbWl0dGVkIGFuZCByZWxldmFudCBlcnJvcnMgd2lsbCBiZSBwcm9kdWNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZC5cbiAgICAgKi9cbiAgICBFbnRpdHlEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlIEVudGl0eURlY29kZXJTdGF0ZS5OYW1lZEVudGl0eToge1xuICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBuYW1lZCBlbnRpdHkgaWYgd2UgaGF2ZSBvbmUuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0ICE9PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmRlY29kZU1vZGUgIT09IERlY29kaW5nTW9kZS5BdHRyaWJ1dGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ID09PSB0aGlzLnRyZWVJbmRleClcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmVtaXROb3RUZXJtaW5hdGVkTmFtZWRFbnRpdHkoKVxuICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIGVtaXQgYSBudW1lcmljIGVudGl0eSBpZiB3ZSBoYXZlIG9uZS5cbiAgICAgICAgICAgIGNhc2UgRW50aXR5RGVjb2RlclN0YXRlLk51bWVyaWNEZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1pdE51bWVyaWNFbnRpdHkoMCwgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEVudGl0eURlY29kZXJTdGF0ZS5OdW1lcmljSGV4OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1pdE51bWVyaWNFbnRpdHkoMCwgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEVudGl0eURlY29kZXJTdGF0ZS5OdW1lcmljU3RhcnQ6IHtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLmVycm9ycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSh0aGlzLmNvbnN1bWVkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRW50aXR5RGVjb2RlclN0YXRlLkVudGl0eVN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIDAgaWYgd2UgaGF2ZSBubyBlbnRpdHkuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBFbnRpdHlEZWNvZGVyO1xufSgpKTtcbmV4cG9ydHMuRW50aXR5RGVjb2RlciA9IEVudGl0eURlY29kZXI7XG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGRlY29kZXMgZW50aXRpZXMgaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGRlY29kZVRyZWUgVGhlIGRlY29kZSB0cmVlLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IGRlY29kZXMgZW50aXRpZXMgaW4gYSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldERlY29kZXIoZGVjb2RlVHJlZSkge1xuICAgIHZhciByZXQgPSBcIlwiO1xuICAgIHZhciBkZWNvZGVyID0gbmV3IEVudGl0eURlY29kZXIoZGVjb2RlVHJlZSwgZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gKHJldCArPSAoMCwgZGVjb2RlX2NvZGVwb2ludF9qc18xLmZyb21Db2RlUG9pbnQpKHN0cikpOyB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVjb2RlV2l0aFRyaWUoc3RyLCBkZWNvZGVNb2RlKSB7XG4gICAgICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgd2hpbGUgKChvZmZzZXQgPSBzdHIuaW5kZXhPZihcIiZcIiwgb2Zmc2V0KSkgPj0gMCkge1xuICAgICAgICAgICAgcmV0ICs9IHN0ci5zbGljZShsYXN0SW5kZXgsIG9mZnNldCk7XG4gICAgICAgICAgICBkZWNvZGVyLnN0YXJ0RW50aXR5KGRlY29kZU1vZGUpO1xuICAgICAgICAgICAgdmFyIGxlbiA9IGRlY29kZXIud3JpdGUoc3RyLCBcbiAgICAgICAgICAgIC8vIFNraXAgdGhlIFwiJlwiXG4gICAgICAgICAgICBvZmZzZXQgKyAxKTtcbiAgICAgICAgICAgIGlmIChsZW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gb2Zmc2V0ICsgZGVjb2Rlci5lbmQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IG9mZnNldCArIGxlbjtcbiAgICAgICAgICAgIC8vIElmIGBsZW5gIGlzIDAsIHNraXAgdGhlIGN1cnJlbnQgYCZgIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgIG9mZnNldCA9IGxlbiA9PT0gMCA/IGxhc3RJbmRleCArIDEgOiBsYXN0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IHJldCArIHN0ci5zbGljZShsYXN0SW5kZXgpO1xuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgZmluYWwgc3RyaW5nLlxuICAgICAgICByZXQgPSBcIlwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59XG4vKipcbiAqIERldGVybWluZXMgdGhlIGJyYW5jaCBvZiB0aGUgY3VycmVudCBub2RlIHRoYXQgaXMgdGFrZW4gZ2l2ZW4gdGhlIGN1cnJlbnRcbiAqIGNoYXJhY3Rlci4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSB0cmllLlxuICpcbiAqIEBwYXJhbSBkZWNvZGVUcmVlIFRoZSB0cmllLlxuICogQHBhcmFtIGN1cnJlbnQgVGhlIGN1cnJlbnQgbm9kZS5cbiAqIEBwYXJhbSBub2RlSWR4IFRoZSBpbmRleCByaWdodCBhZnRlciB0aGUgY3VycmVudCBub2RlIGFuZCBpdHMgdmFsdWUuXG4gKiBAcGFyYW0gY2hhciBUaGUgY3VycmVudCBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgaW5kZXggb2YgdGhlIG5leHQgbm9kZSwgb3IgLTEgaWYgbm8gYnJhbmNoIGlzIHRha2VuLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVCcmFuY2goZGVjb2RlVHJlZSwgY3VycmVudCwgbm9kZUlkeCwgY2hhcikge1xuICAgIHZhciBicmFuY2hDb3VudCA9IChjdXJyZW50ICYgQmluVHJpZUZsYWdzLkJSQU5DSF9MRU5HVEgpID4+IDc7XG4gICAgdmFyIGp1bXBPZmZzZXQgPSBjdXJyZW50ICYgQmluVHJpZUZsYWdzLkpVTVBfVEFCTEU7XG4gICAgLy8gQ2FzZSAxOiBTaW5nbGUgYnJhbmNoIGVuY29kZWQgaW4ganVtcCBvZmZzZXRcbiAgICBpZiAoYnJhbmNoQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGp1bXBPZmZzZXQgIT09IDAgJiYgY2hhciA9PT0ganVtcE9mZnNldCA/IG5vZGVJZHggOiAtMTtcbiAgICB9XG4gICAgLy8gQ2FzZSAyOiBNdWx0aXBsZSBicmFuY2hlcyBlbmNvZGVkIGluIGp1bXAgdGFibGVcbiAgICBpZiAoanVtcE9mZnNldCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBjaGFyIC0ganVtcE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSBicmFuY2hDb3VudFxuICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgOiBkZWNvZGVUcmVlW25vZGVJZHggKyB2YWx1ZV0gLSAxO1xuICAgIH1cbiAgICAvLyBDYXNlIDM6IE11bHRpcGxlIGJyYW5jaGVzIGVuY29kZWQgaW4gZGljdGlvbmFyeVxuICAgIC8vIEJpbmFyeSBzZWFyY2ggZm9yIHRoZSBjaGFyYWN0ZXIuXG4gICAgdmFyIGxvID0gbm9kZUlkeDtcbiAgICB2YXIgaGkgPSBsbyArIGJyYW5jaENvdW50IC0gMTtcbiAgICB3aGlsZSAobG8gPD0gaGkpIHtcbiAgICAgICAgdmFyIG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgdmFyIG1pZFZhbCA9IGRlY29kZVRyZWVbbWlkXTtcbiAgICAgICAgaWYgKG1pZFZhbCA8IGNoYXIpIHtcbiAgICAgICAgICAgIGxvID0gbWlkICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaWRWYWwgPiBjaGFyKSB7XG4gICAgICAgICAgICBoaSA9IG1pZCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlVHJlZVttaWQgKyBicmFuY2hDb3VudF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuZXhwb3J0cy5kZXRlcm1pbmVCcmFuY2ggPSBkZXRlcm1pbmVCcmFuY2g7XG52YXIgaHRtbERlY29kZXIgPSBnZXREZWNvZGVyKGRlY29kZV9kYXRhX2h0bWxfanNfMS5kZWZhdWx0KTtcbnZhciB4bWxEZWNvZGVyID0gZ2V0RGVjb2RlcihkZWNvZGVfZGF0YV94bWxfanNfMS5kZWZhdWx0KTtcbi8qKlxuICogRGVjb2RlcyBhbiBIVE1MIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gZGVjb2RlLlxuICogQHBhcmFtIG1vZGUgVGhlIGRlY29kaW5nIG1vZGUuXG4gKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUhUTUwoc3RyLCBtb2RlKSB7XG4gICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gRGVjb2RpbmdNb2RlLkxlZ2FjeTsgfVxuICAgIHJldHVybiBodG1sRGVjb2RlcihzdHIsIG1vZGUpO1xufVxuZXhwb3J0cy5kZWNvZGVIVE1MID0gZGVjb2RlSFRNTDtcbi8qKlxuICogRGVjb2RlcyBhbiBIVE1MIHN0cmluZyBpbiBhbiBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGRlY29kZS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlSFRNTEF0dHJpYnV0ZShzdHIpIHtcbiAgICByZXR1cm4gaHRtbERlY29kZXIoc3RyLCBEZWNvZGluZ01vZGUuQXR0cmlidXRlKTtcbn1cbmV4cG9ydHMuZGVjb2RlSFRNTEF0dHJpYnV0ZSA9IGRlY29kZUhUTUxBdHRyaWJ1dGU7XG4vKipcbiAqIERlY29kZXMgYW4gSFRNTCBzdHJpbmcsIHJlcXVpcmluZyBhbGwgZW50aXRpZXMgdG8gYmUgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbi5cbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gZGVjb2RlLlxuICogQHJldHVybnMgVGhlIGRlY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBkZWNvZGVIVE1MU3RyaWN0KHN0cikge1xuICAgIHJldHVybiBodG1sRGVjb2RlcihzdHIsIERlY29kaW5nTW9kZS5TdHJpY3QpO1xufVxuZXhwb3J0cy5kZWNvZGVIVE1MU3RyaWN0ID0gZGVjb2RlSFRNTFN0cmljdDtcbi8qKlxuICogRGVjb2RlcyBhbiBYTUwgc3RyaW5nLCByZXF1aXJpbmcgYWxsIGVudGl0aWVzIHRvIGJlIHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24uXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGRlY29kZS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlWE1MKHN0cikge1xuICAgIHJldHVybiB4bWxEZWNvZGVyKHN0ciwgRGVjb2RpbmdNb2RlLlN0cmljdCk7XG59XG5leHBvcnRzLmRlY29kZVhNTCA9IGRlY29kZVhNTDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlY29kZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9oZS9ibG9iLzM2YWZlMTc5MzkyMjI2Y2YxYjZjY2RiMTZlYmJiN2E1YTg0NGQ5M2Evc3JjL2hlLmpzI0wxMDYtTDEzNFxudmFyIF9hO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXBsYWNlQ29kZVBvaW50ID0gZXhwb3J0cy5mcm9tQ29kZVBvaW50ID0gdm9pZCAwO1xudmFyIGRlY29kZU1hcCA9IG5ldyBNYXAoW1xuICAgIFswLCA2NTUzM10sXG4gICAgLy8gQzEgVW5pY29kZSBjb250cm9sIGNoYXJhY3RlciByZWZlcmVuY2UgcmVwbGFjZW1lbnRzXG4gICAgWzEyOCwgODM2NF0sXG4gICAgWzEzMCwgODIxOF0sXG4gICAgWzEzMSwgNDAyXSxcbiAgICBbMTMyLCA4MjIyXSxcbiAgICBbMTMzLCA4MjMwXSxcbiAgICBbMTM0LCA4MjI0XSxcbiAgICBbMTM1LCA4MjI1XSxcbiAgICBbMTM2LCA3MTBdLFxuICAgIFsxMzcsIDgyNDBdLFxuICAgIFsxMzgsIDM1Ml0sXG4gICAgWzEzOSwgODI0OV0sXG4gICAgWzE0MCwgMzM4XSxcbiAgICBbMTQyLCAzODFdLFxuICAgIFsxNDUsIDgyMTZdLFxuICAgIFsxNDYsIDgyMTddLFxuICAgIFsxNDcsIDgyMjBdLFxuICAgIFsxNDgsIDgyMjFdLFxuICAgIFsxNDksIDgyMjZdLFxuICAgIFsxNTAsIDgyMTFdLFxuICAgIFsxNTEsIDgyMTJdLFxuICAgIFsxNTIsIDczMl0sXG4gICAgWzE1MywgODQ4Ml0sXG4gICAgWzE1NCwgMzUzXSxcbiAgICBbMTU1LCA4MjUwXSxcbiAgICBbMTU2LCAzMzldLFxuICAgIFsxNTgsIDM4Ml0sXG4gICAgWzE1OSwgMzc2XSxcbl0pO1xuLyoqXG4gKiBQb2x5ZmlsbCBmb3IgYFN0cmluZy5mcm9tQ29kZVBvaW50YC4gSXQgaXMgdXNlZCB0byBjcmVhdGUgYSBzdHJpbmcgZnJvbSBhIFVuaWNvZGUgY29kZSBwb2ludC5cbiAqL1xuZXhwb3J0cy5mcm9tQ29kZVBvaW50ID0gXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiwgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGluc1xuKF9hID0gU3RyaW5nLmZyb21Db2RlUG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZ1bmN0aW9uIChjb2RlUG9pbnQpIHtcbiAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICBpZiAoY29kZVBvaW50ID4gMHhmZmZmKSB7XG4gICAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwO1xuICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGNvZGVQb2ludCA+Pj4gMTApICYgMHgzZmYpIHwgMHhkODAwKTtcbiAgICAgICAgY29kZVBvaW50ID0gMHhkYzAwIHwgKGNvZGVQb2ludCAmIDB4M2ZmKTtcbiAgICB9XG4gICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KTtcbiAgICByZXR1cm4gb3V0cHV0O1xufTtcbi8qKlxuICogUmVwbGFjZSB0aGUgZ2l2ZW4gY29kZSBwb2ludCB3aXRoIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlmIGl0IGlzIGFcbiAqIHN1cnJvZ2F0ZSBvciBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZS4gT3RoZXJ3aXNlIHJldHVybiB0aGUgY29kZVxuICogcG9pbnQgdW5jaGFuZ2VkLlxuICovXG5mdW5jdGlvbiByZXBsYWNlQ29kZVBvaW50KGNvZGVQb2ludCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKGNvZGVQb2ludCA+PSAweGQ4MDAgJiYgY29kZVBvaW50IDw9IDB4ZGZmZikgfHwgY29kZVBvaW50ID4gMHgxMGZmZmYpIHtcbiAgICAgICAgcmV0dXJuIDB4ZmZmZDtcbiAgICB9XG4gICAgcmV0dXJuIChfYSA9IGRlY29kZU1hcC5nZXQoY29kZVBvaW50KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29kZVBvaW50O1xufVxuZXhwb3J0cy5yZXBsYWNlQ29kZVBvaW50ID0gcmVwbGFjZUNvZGVQb2ludDtcbi8qKlxuICogUmVwbGFjZSB0aGUgY29kZSBwb2ludCBpZiByZWxldmFudCwgdGhlbiBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBgZnJvbUNvZGVQb2ludChyZXBsYWNlQ29kZVBvaW50KGNvZGVQb2ludCkpYCBpbnN0ZWFkLlxuICogQHBhcmFtIGNvZGVQb2ludCBUaGUgY29kZSBwb2ludCB0byBkZWNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBjb2RlIHBvaW50LlxuICovXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnQoY29kZVBvaW50KSB7XG4gICAgcmV0dXJuICgwLCBleHBvcnRzLmZyb21Db2RlUG9pbnQpKHJlcGxhY2VDb2RlUG9pbnQoY29kZVBvaW50KSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBkZWNvZGVDb2RlUG9pbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWNvZGVfY29kZXBvaW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lbmNvZGVOb25Bc2NpaUhUTUwgPSBleHBvcnRzLmVuY29kZUhUTUwgPSB2b2lkIDA7XG52YXIgZW5jb2RlX2h0bWxfanNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9nZW5lcmF0ZWQvZW5jb2RlLWh0bWwuanNcIikpO1xudmFyIGVzY2FwZV9qc18xID0gcmVxdWlyZShcIi4vZXNjYXBlLmpzXCIpO1xudmFyIGh0bWxSZXBsYWNlciA9IC9bXFx0XFxuIS0sLi86LUBbLWBcXGZ7LX0kXFx4ODAtXFx1RkZGRl0vZztcbi8qKlxuICogRW5jb2RlcyBhbGwgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgdXNpbmcgSFRNTCBlbnRpdGllcy4gVGhpcyBpbmNsdWRlc1xuICogY2hhcmFjdGVycyB0aGF0IGFyZSB2YWxpZCBBU0NJSSBjaGFyYWN0ZXJzIGluIEhUTUwgZG9jdW1lbnRzLCBzdWNoIGFzIGAjYC5cbiAqXG4gKiBUbyBnZXQgYSBtb3JlIGNvbXBhY3Qgb3V0cHV0LCBjb25zaWRlciB1c2luZyB0aGUgYGVuY29kZU5vbkFzY2lpSFRNTGBcbiAqIGZ1bmN0aW9uLCB3aGljaCB3aWxsIG9ubHkgZW5jb2RlIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHZhbGlkIGluIEhUTUxcbiAqIGRvY3VtZW50cywgYXMgd2VsbCBhcyBub24tQVNDSUkgY2hhcmFjdGVycy5cbiAqXG4gKiBJZiBhIGNoYXJhY3RlciBoYXMgbm8gZXF1aXZhbGVudCBlbnRpdHksIGEgbnVtZXJpYyBoZXhhZGVjaW1hbCByZWZlcmVuY2VcbiAqIChlZy4gYCYjeGZjO2ApIHdpbGwgYmUgdXNlZC5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlSFRNTChkYXRhKSB7XG4gICAgcmV0dXJuIGVuY29kZUhUTUxUcmllUmUoaHRtbFJlcGxhY2VyLCBkYXRhKTtcbn1cbmV4cG9ydHMuZW5jb2RlSFRNTCA9IGVuY29kZUhUTUw7XG4vKipcbiAqIEVuY29kZXMgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBhcyB3ZWxsIGFzIGNoYXJhY3RlcnMgbm90IHZhbGlkIGluIEhUTUxcbiAqIGRvY3VtZW50cyB1c2luZyBIVE1MIGVudGl0aWVzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGVuY29kZSBjaGFyYWN0ZXJzIHRoYXRcbiAqIGFyZSB2YWxpZCBpbiBIVE1MIGRvY3VtZW50cywgc3VjaCBhcyBgI2AuXG4gKlxuICogSWYgYSBjaGFyYWN0ZXIgaGFzIG5vIGVxdWl2YWxlbnQgZW50aXR5LCBhIG51bWVyaWMgaGV4YWRlY2ltYWwgcmVmZXJlbmNlXG4gKiAoZWcuIGAmI3hmYztgKSB3aWxsIGJlIHVzZWQuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZU5vbkFzY2lpSFRNTChkYXRhKSB7XG4gICAgcmV0dXJuIGVuY29kZUhUTUxUcmllUmUoZXNjYXBlX2pzXzEueG1sUmVwbGFjZXIsIGRhdGEpO1xufVxuZXhwb3J0cy5lbmNvZGVOb25Bc2NpaUhUTUwgPSBlbmNvZGVOb25Bc2NpaUhUTUw7XG5mdW5jdGlvbiBlbmNvZGVIVE1MVHJpZVJlKHJlZ0V4cCwgc3RyKSB7XG4gICAgdmFyIHJldCA9IFwiXCI7XG4gICAgdmFyIGxhc3RJZHggPSAwO1xuICAgIHZhciBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDtcbiAgICAgICAgcmV0ICs9IHN0ci5zdWJzdHJpbmcobGFzdElkeCwgaSk7XG4gICAgICAgIHZhciBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBuZXh0ID0gZW5jb2RlX2h0bWxfanNfMS5kZWZhdWx0LmdldChjaGFyKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBXZSBhcmUgaW4gYSBicmFuY2guIFRyeSB0byBtYXRjaCB0aGUgbmV4dCBjaGFyLlxuICAgICAgICAgICAgaWYgKGkgKyAxIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0Q2hhciA9IHN0ci5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0eXBlb2YgbmV4dC5uID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgID8gbmV4dC5uID09PSBuZXh0Q2hhclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXh0Lm9cbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogbmV4dC5uLmdldChuZXh0Q2hhcik7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ICs9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBsYXN0SWR4ID0gcmVnRXhwLmxhc3RJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0ID0gbmV4dC52O1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgYSB0cmVlIG5vZGUgd2l0aG91dCBhIHZhbHVlOyBza2lwIGFuZCB1c2UgYSBudW1lcmljIGVudGl0eS5cbiAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0ICs9IG5leHQ7XG4gICAgICAgICAgICBsYXN0SWR4ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY3AgPSAoMCwgZXNjYXBlX2pzXzEuZ2V0Q29kZVBvaW50KShzdHIsIGkpO1xuICAgICAgICAgICAgcmV0ICs9IFwiJiN4XCIuY29uY2F0KGNwLnRvU3RyaW5nKDE2KSwgXCI7XCIpO1xuICAgICAgICAgICAgLy8gSW5jcmVhc2UgYnkgMSBpZiB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgICAgIGxhc3RJZHggPSByZWdFeHAubGFzdEluZGV4ICs9IE51bWJlcihjcCAhPT0gY2hhcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldCArIHN0ci5zdWJzdHIobGFzdElkeCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbmNvZGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVzY2FwZVRleHQgPSBleHBvcnRzLmVzY2FwZUF0dHJpYnV0ZSA9IGV4cG9ydHMuZXNjYXBlVVRGOCA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5lbmNvZGVYTUwgPSBleHBvcnRzLmdldENvZGVQb2ludCA9IGV4cG9ydHMueG1sUmVwbGFjZXIgPSB2b2lkIDA7XG5leHBvcnRzLnhtbFJlcGxhY2VyID0gL1tcIiYnPD4kXFx4ODAtXFx1RkZGRl0vZztcbnZhciB4bWxDb2RlTWFwID0gbmV3IE1hcChbXG4gICAgWzM0LCBcIiZxdW90O1wiXSxcbiAgICBbMzgsIFwiJmFtcDtcIl0sXG4gICAgWzM5LCBcIiZhcG9zO1wiXSxcbiAgICBbNjAsIFwiJmx0O1wiXSxcbiAgICBbNjIsIFwiJmd0O1wiXSxcbl0pO1xuLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub2RlIDwgNCwgd2Ugd3JhcCBgY29kZVBvaW50QXRgXG5leHBvcnRzLmdldENvZGVQb2ludCA9IFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cblN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQgIT0gbnVsbFxuICAgID8gZnVuY3Rpb24gKHN0ciwgaW5kZXgpIHsgcmV0dXJuIHN0ci5jb2RlUG9pbnRBdChpbmRleCk7IH1cbiAgICA6IC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgIGZ1bmN0aW9uIChjLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIChjLmNoYXJDb2RlQXQoaW5kZXgpICYgMHhmYzAwKSA9PT0gMHhkODAwXG4gICAgICAgICAgICAgICAgPyAoYy5jaGFyQ29kZUF0KGluZGV4KSAtIDB4ZDgwMCkgKiAweDQwMCArXG4gICAgICAgICAgICAgICAgICAgIGMuY2hhckNvZGVBdChpbmRleCArIDEpIC1cbiAgICAgICAgICAgICAgICAgICAgMHhkYzAwICtcbiAgICAgICAgICAgICAgICAgICAgMHgxMDAwMFxuICAgICAgICAgICAgICAgIDogYy5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgfTtcbi8qKlxuICogRW5jb2RlcyBhbGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzIHdlbGwgYXMgY2hhcmFjdGVycyBub3QgdmFsaWQgaW4gWE1MXG4gKiBkb2N1bWVudHMgdXNpbmcgWE1MIGVudGl0aWVzLlxuICpcbiAqIElmIGEgY2hhcmFjdGVyIGhhcyBubyBlcXVpdmFsZW50IGVudGl0eSwgYVxuICogbnVtZXJpYyBoZXhhZGVjaW1hbCByZWZlcmVuY2UgKGVnLiBgJiN4ZmM7YCkgd2lsbCBiZSB1c2VkLlxuICovXG5mdW5jdGlvbiBlbmNvZGVYTUwoc3RyKSB7XG4gICAgdmFyIHJldCA9IFwiXCI7XG4gICAgdmFyIGxhc3RJZHggPSAwO1xuICAgIHZhciBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gZXhwb3J0cy54bWxSZXBsYWNlci5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIHZhciBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBuZXh0ID0geG1sQ29kZU1hcC5nZXQoY2hhcik7XG4gICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldCArPSBzdHIuc3Vic3RyaW5nKGxhc3RJZHgsIGkpICsgbmV4dDtcbiAgICAgICAgICAgIGxhc3RJZHggPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldCArPSBcIlwiLmNvbmNhdChzdHIuc3Vic3RyaW5nKGxhc3RJZHgsIGkpLCBcIiYjeFwiKS5jb25jYXQoKDAsIGV4cG9ydHMuZ2V0Q29kZVBvaW50KShzdHIsIGkpLnRvU3RyaW5nKDE2KSwgXCI7XCIpO1xuICAgICAgICAgICAgLy8gSW5jcmVhc2UgYnkgMSBpZiB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgICAgIGxhc3RJZHggPSBleHBvcnRzLnhtbFJlcGxhY2VyLmxhc3RJbmRleCArPSBOdW1iZXIoKGNoYXIgJiAweGZjMDApID09PSAweGQ4MDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQgKyBzdHIuc3Vic3RyKGxhc3RJZHgpO1xufVxuZXhwb3J0cy5lbmNvZGVYTUwgPSBlbmNvZGVYTUw7XG4vKipcbiAqIEVuY29kZXMgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBhcyB3ZWxsIGFzIGNoYXJhY3RlcnMgbm90IHZhbGlkIGluIFhNTFxuICogZG9jdW1lbnRzIHVzaW5nIG51bWVyaWMgaGV4YWRlY2ltYWwgcmVmZXJlbmNlIChlZy4gYCYjeGZjO2ApLlxuICpcbiAqIEhhdmUgYSBsb29rIGF0IGBlc2NhcGVVVEY4YCBpZiB5b3Ugd2FudCBhIG1vcmUgY29uY2lzZSBvdXRwdXQgYXQgdGhlIGV4cGVuc2VcbiAqIG9mIHJlZHVjZWQgdHJhbnNwb3J0YWJpbGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YSBTdHJpbmcgdG8gZXNjYXBlLlxuICovXG5leHBvcnRzLmVzY2FwZSA9IGVuY29kZVhNTDtcbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZXNjYXBlcyBhbGwgY2hhcmFjdGVycyBtYXRjaGVkIGJ5IHRoZSBnaXZlbiByZWd1bGFyXG4gKiBleHByZXNzaW9uIHVzaW5nIHRoZSBnaXZlbiBtYXAgb2YgY2hhcmFjdGVycyB0byBlc2NhcGUgdG8gdGhlaXIgZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHJlZ2V4IFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBjaGFyYWN0ZXJzIHRvIGVzY2FwZS5cbiAqIEBwYXJhbSBtYXAgTWFwIG9mIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHRvIHRoZWlyIGVudGl0aWVzLlxuICpcbiAqIEByZXR1cm5zIEZ1bmN0aW9uIHRoYXQgZXNjYXBlcyBhbGwgY2hhcmFjdGVycyBtYXRjaGVkIGJ5IHRoZSBnaXZlbiByZWd1bGFyXG4gKiBleHByZXNzaW9uIHVzaW5nIHRoZSBnaXZlbiBtYXAgb2YgY2hhcmFjdGVycyB0byBlc2NhcGUgdG8gdGhlaXIgZW50aXRpZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEVzY2FwZXIocmVnZXgsIG1hcCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBlc2NhcGUoZGF0YSkge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIHZhciBsYXN0SWR4ID0gMDtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKGRhdGEpKSkge1xuICAgICAgICAgICAgaWYgKGxhc3RJZHggIT09IG1hdGNoLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGRhdGEuc3Vic3RyaW5nKGxhc3RJZHgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGNoYXJhY3RlciB3aWxsIGJlIGluIHRoZSBtYXAuXG4gICAgICAgICAgICByZXN1bHQgKz0gbWFwLmdldChtYXRjaFswXS5jaGFyQ29kZUF0KDApKTtcbiAgICAgICAgICAgIC8vIEV2ZXJ5IG1hdGNoIHdpbGwgYmUgb2YgbGVuZ3RoIDFcbiAgICAgICAgICAgIGxhc3RJZHggPSBtYXRjaC5pbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdCArIGRhdGEuc3Vic3RyaW5nKGxhc3RJZHgpO1xuICAgIH07XG59XG4vKipcbiAqIEVuY29kZXMgYWxsIGNoYXJhY3RlcnMgbm90IHZhbGlkIGluIFhNTCBkb2N1bWVudHMgdXNpbmcgWE1MIGVudGl0aWVzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgb3V0cHV0IHdpbGwgYmUgY2hhcmFjdGVyLXNldCBkZXBlbmRlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgU3RyaW5nIHRvIGVzY2FwZS5cbiAqL1xuZXhwb3J0cy5lc2NhcGVVVEY4ID0gZ2V0RXNjYXBlcigvWyY8PidcIl0vZywgeG1sQ29kZU1hcCk7XG4vKipcbiAqIEVuY29kZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRvIGJlIGVzY2FwZWQgaW4gSFRNTCBhdHRyaWJ1dGVzLFxuICogZm9sbG93aW5nIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjZXNjYXBpbmdTdHJpbmd9LlxuICpcbiAqIEBwYXJhbSBkYXRhIFN0cmluZyB0byBlc2NhcGUuXG4gKi9cbmV4cG9ydHMuZXNjYXBlQXR0cmlidXRlID0gZ2V0RXNjYXBlcigvW1wiJlxcdTAwQTBdL2csIG5ldyBNYXAoW1xuICAgIFszNCwgXCImcXVvdDtcIl0sXG4gICAgWzM4LCBcIiZhbXA7XCJdLFxuICAgIFsxNjAsIFwiJm5ic3A7XCJdLFxuXSkpO1xuLyoqXG4gKiBFbmNvZGVzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0byBiZSBlc2NhcGVkIGluIEhUTUwgdGV4dCxcbiAqIGZvbGxvd2luZyB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2VzY2FwaW5nU3RyaW5nfS5cbiAqXG4gKiBAcGFyYW0gZGF0YSBTdHJpbmcgdG8gZXNjYXBlLlxuICovXG5leHBvcnRzLmVzY2FwZVRleHQgPSBnZXRFc2NhcGVyKC9bJjw+XFx1MDBBMF0vZywgbmV3IE1hcChbXG4gICAgWzM4LCBcIiZhbXA7XCJdLFxuICAgIFs2MCwgXCImbHQ7XCJdLFxuICAgIFs2MiwgXCImZ3Q7XCJdLFxuICAgIFsxNjAsIFwiJm5ic3A7XCJdLFxuXSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNjYXBlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuLy8gR2VuZXJhdGVkIHVzaW5nIHNjcmlwdHMvd3JpdGUtZGVjb2RlLW1hcC50c1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gbmV3IFVpbnQxNkFycmF5KFxuLy8gcHJldHRpZXItaWdub3JlXG5cIlxcdTFkNDE8XFx4ZDVcXHUwMTMxXFx1MDI4YVxcdTA0OWRcXHUwNTdiXFx1MDVkMFxcdTA2NzVcXHUwNmRlXFx1MDdhMlxcdTA3ZDZcXHUwODBmXFx1MGE0YVxcdTBhOTFcXHUwZGExXFx1MGU2ZFxcdTBmMDlcXHUwZjI2XFx1MTBjYVxcdTEyMjhcXHUxMmUxXFx1MTQxNVxcdTE0OWRcXHUxNGMzXFx1MTRkZlxcdTE1MjVcXDBcXDBcXDBcXDBcXDBcXDBcXHUxNTZiXFx1MTZjZFxcdTE5OGRcXHUxYzEyXFx1MWRkZFxcdTFmN2VcXHUyMDYwXFx1MjFiMFxcdTIyOGRcXHUyM2MwXFx1MjNmYlxcdTI0NDJcXHUyODI0XFx1MjkxMlxcdTJkMDhcXHUyZTQ4XFx1MmZjZVxcdTMwMTZcXHUzMmJhXFx1MzYzOVxcdTM3YWNcXHUzOGZlXFx1M2EyOFxcdTNhNzFcXHUzYWUwXFx1M2IyZVxcdTA4MDBFTWFiY2ZnbG1ub3Byc3R1XFxcXGJmbXNcXHg3ZlxceDg0XFx4OGJcXHg5MFxceDk1XFx4OThcXHhhNlxceGIzXFx4YjlcXHhjOFxceGNmbGlnXFx1ODAzYlxceGM2XFx1NDBjNlBcXHU4MDNiJlxcdTQwMjZjdXRlXFx1ODAzYlxceGMxXFx1NDBjMXJldmU7XFx1NDEwMlxcdTAxMDBpeXh9cmNcXHU4MDNiXFx4YzJcXHU0MGMyO1xcdTQ0MTByO1xcdWMwMDBcXHVkODM1XFx1ZGQwNHJhdmVcXHU4MDNiXFx4YzBcXHU0MGMwcGhhO1xcdTQzOTFhY3I7XFx1NDEwMGQ7XFx1NmE1M1xcdTAxMDBncFxceDlkXFx4YTFvbjtcXHU0MTA0ZjtcXHVjMDAwXFx1ZDgzNVxcdWRkMzhwbHlGdW5jdGlvbjtcXHU2MDYxaW5nXFx1ODAzYlxceGM1XFx1NDBjNVxcdTAxMDBjc1xceGJlXFx4YzNyO1xcdWMwMDBcXHVkODM1XFx1ZGM5Y2lnbjtcXHU2MjU0aWxkZVxcdTgwM2JcXHhjM1xcdTQwYzNtbFxcdTgwM2JcXHhjNFxcdTQwYzRcXHUwNDAwYWNlZm9yc3VcXHhlNVxceGZiXFx4ZmVcXHUwMTE3XFx1MDExY1xcdTAxMjJcXHUwMTI3XFx1MDEyYVxcdTAxMDBjclxceGVhXFx4ZjJrc2xhc2g7XFx1NjIxNlxcdTAxNzZcXHhmNlxceGY4O1xcdTZhZTdlZDtcXHU2MzA2eTtcXHU0NDExXFx1MDE4MGNydFxcdTAxMDVcXHUwMTBiXFx1MDExNGF1c2U7XFx1NjIzNW5vdWxsaXM7XFx1NjEyY2E7XFx1NDM5MnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDA1cGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDM5ZXZlO1xcdTQyZDhjXFx4ZjJcXHUwMTEzbXBlcTtcXHU2MjRlXFx1MDcwMEhPYWNkZWZoaWxvcnN1XFx1MDE0ZFxcdTAxNTFcXHUwMTU2XFx1MDE4MFxcdTAxOWVcXHUwMWEyXFx1MDFiNVxcdTAxYjdcXHUwMWJhXFx1MDFkY1xcdTAyMTVcXHUwMjczXFx1MDI3OFxcdTAyN2VjeTtcXHU0NDI3UFlcXHU4MDNiXFx4YTlcXHU0MGE5XFx1MDE4MGNweVxcdTAxNWRcXHUwMTYyXFx1MDE3YXV0ZTtcXHU0MTA2XFx1MDEwMDtpXFx1MDE2N1xcdTAxNjhcXHU2MmQydGFsRGlmZmVyZW50aWFsRDtcXHU2MTQ1bGV5cztcXHU2MTJkXFx1MDIwMGFlaW9cXHUwMTg5XFx1MDE4ZVxcdTAxOTRcXHUwMTk4cm9uO1xcdTQxMGNkaWxcXHU4MDNiXFx4YzdcXHU0MGM3cmM7XFx1NDEwOG5pbnQ7XFx1NjIzMG90O1xcdTQxMGFcXHUwMTAwZG5cXHUwMWE3XFx1MDFhZGlsbGE7XFx1NDBiOHRlckRvdDtcXHU0MGI3XFx4ZjJcXHUwMTdmaTtcXHU0M2E3cmNsZVxcdTAyMDBETVBUXFx1MDFjN1xcdTAxY2JcXHUwMWQxXFx1MDFkNm90O1xcdTYyOTlpbnVzO1xcdTYyOTZsdXM7XFx1NjI5NWltZXM7XFx1NjI5N29cXHUwMTAwY3NcXHUwMWUyXFx1MDFmOGt3aXNlQ29udG91ckludGVncmFsO1xcdTYyMzJlQ3VybHlcXHUwMTAwRFFcXHUwMjAzXFx1MDIwZm91YmxlUXVvdGU7XFx1NjAxZHVvdGU7XFx1NjAxOVxcdTAyMDBsbnB1XFx1MDIxZVxcdTAyMjhcXHUwMjQ3XFx1MDI1NW9uXFx1MDEwMDtlXFx1MDIyNVxcdTAyMjZcXHU2MjM3O1xcdTZhNzRcXHUwMTgwZ2l0XFx1MDIyZlxcdTAyMzZcXHUwMjNhcnVlbnQ7XFx1NjI2MW50O1xcdTYyMmZvdXJJbnRlZ3JhbDtcXHU2MjJlXFx1MDEwMGZyXFx1MDI0Y1xcdTAyNGU7XFx1NjEwMm9kdWN0O1xcdTYyMTBudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsO1xcdTYyMzNvc3M7XFx1NmEyZmNyO1xcdWMwMDBcXHVkODM1XFx1ZGM5ZXBcXHUwMTAwO0NcXHUwMjg0XFx1MDI4NVxcdTYyZDNhcDtcXHU2MjRkXFx1MDU4MERKU1phY2VmaW9zXFx1MDJhMFxcdTAyYWNcXHUwMmIwXFx1MDJiNFxcdTAyYjhcXHUwMmNiXFx1MDJkN1xcdTAyZTFcXHUwMmU2XFx1MDMzM1xcdTA0OGRcXHUwMTAwO29cXHUwMTc5XFx1MDJhNXRyYWhkO1xcdTY5MTFjeTtcXHU0NDAyY3k7XFx1NDQwNWN5O1xcdTQ0MGZcXHUwMTgwZ3JzXFx1MDJiZlxcdTAyYzRcXHUwMmM3Z2VyO1xcdTYwMjFyO1xcdTYxYTFodjtcXHU2YWU0XFx1MDEwMGF5XFx1MDJkMFxcdTAyZDVyb247XFx1NDEwZTtcXHU0NDE0bFxcdTAxMDA7dFxcdTAyZGRcXHUwMmRlXFx1NjIwN2E7XFx1NDM5NHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDA3XFx1MDEwMGFmXFx1MDJlYlxcdTAzMjdcXHUwMTAwY21cXHUwMmYwXFx1MDMyMnJpdGljYWxcXHUwMjAwQURHVFxcdTAzMDBcXHUwMzA2XFx1MDMxNlxcdTAzMWNjdXRlO1xcdTQwYjRvXFx1MDE3NFxcdTAzMGJcXHUwMzBkO1xcdTQyZDlibGVBY3V0ZTtcXHU0MmRkcmF2ZTtcXHU0MDYwaWxkZTtcXHU0MmRjb25kO1xcdTYyYzRmZXJlbnRpYWxEO1xcdTYxNDZcXHUwNDcwXFx1MDMzZFxcMFxcMFxcMFxcdTAzNDJcXHUwMzU0XFwwXFx1MDQwNWY7XFx1YzAwMFxcdWQ4MzVcXHVkZDNiXFx1MDE4MDtERVxcdTAzNDhcXHUwMzQ5XFx1MDM0ZFxcdTQwYThvdDtcXHU2MGRjcXVhbDtcXHU2MjUwYmxlXFx1MDMwMENETFJVVlxcdTAzNjNcXHUwMzcyXFx1MDM4MlxcdTAzY2ZcXHUwM2UyXFx1MDNmOG9udG91ckludGVncmFcXHhlY1xcdTAyMzlvXFx1MDI3NFxcdTAzNzlcXDBcXDBcXHUwMzdiXFx4YmJcXHUwMzQ5bkFycm93O1xcdTYxZDNcXHUwMTAwZW9cXHUwMzg3XFx1MDNhNGZ0XFx1MDE4MEFSVFxcdTAzOTBcXHUwMzk2XFx1MDNhMXJyb3c7XFx1NjFkMGlnaHRBcnJvdztcXHU2MWQ0ZVxceGU1XFx1MDJjYW5nXFx1MDEwMExSXFx1MDNhYlxcdTAzYzRlZnRcXHUwMTAwQVJcXHUwM2IzXFx1MDNiOXJyb3c7XFx1NjdmOGlnaHRBcnJvdztcXHU2N2ZhaWdodEFycm93O1xcdTY3ZjlpZ2h0XFx1MDEwMEFUXFx1MDNkOFxcdTAzZGVycm93O1xcdTYxZDJlZTtcXHU2MmE4cFxcdTAyNDFcXHUwM2U5XFwwXFwwXFx1MDNlZnJyb3c7XFx1NjFkMW93bkFycm93O1xcdTYxZDVlcnRpY2FsQmFyO1xcdTYyMjVuXFx1MDMwMEFCTFJUYVxcdTA0MTJcXHUwNDJhXFx1MDQzMFxcdTA0NWVcXHUwNDdmXFx1MDM3Y3Jyb3dcXHUwMTgwO0JVXFx1MDQxZFxcdTA0MWVcXHUwNDIyXFx1NjE5M2FyO1xcdTY5MTNwQXJyb3c7XFx1NjFmNXJldmU7XFx1NDMxMWVmdFxcdTAyZDJcXHUwNDNhXFwwXFx1MDQ0NlxcMFxcdTA0NTBpZ2h0VmVjdG9yO1xcdTY5NTBlZVZlY3RvcjtcXHU2OTVlZWN0b3JcXHUwMTAwO0JcXHUwNDU5XFx1MDQ1YVxcdTYxYmRhcjtcXHU2OTU2aWdodFxcdTAxZDRcXHUwNDY3XFwwXFx1MDQ3MWVlVmVjdG9yO1xcdTY5NWZlY3RvclxcdTAxMDA7QlxcdTA0N2FcXHUwNDdiXFx1NjFjMWFyO1xcdTY5NTdlZVxcdTAxMDA7QVxcdTA0ODZcXHUwNDg3XFx1NjJhNHJyb3c7XFx1NjFhN1xcdTAxMDBjdFxcdTA0OTJcXHUwNDk3cjtcXHVjMDAwXFx1ZDgzNVxcdWRjOWZyb2s7XFx1NDExMFxcdTA4MDBOVGFjZGZnbG1vcHFzdHV4XFx1MDRiZFxcdTA0YzBcXHUwNGM0XFx1MDRjYlxcdTA0ZGVcXHUwNGUyXFx1MDRlN1xcdTA0ZWVcXHUwNGY1XFx1MDUyMVxcdTA1MmZcXHUwNTM2XFx1MDU1MlxcdTA1NWRcXHUwNTYwXFx1MDU2NUc7XFx1NDE0YUhcXHU4MDNiXFx4ZDBcXHU0MGQwY3V0ZVxcdTgwM2JcXHhjOVxcdTQwYzlcXHUwMTgwYWl5XFx1MDRkMlxcdTA0ZDdcXHUwNGRjcm9uO1xcdTQxMWFyY1xcdTgwM2JcXHhjYVxcdTQwY2E7XFx1NDQyZG90O1xcdTQxMTZyO1xcdWMwMDBcXHVkODM1XFx1ZGQwOHJhdmVcXHU4MDNiXFx4YzhcXHU0MGM4ZW1lbnQ7XFx1NjIwOFxcdTAxMDBhcFxcdTA0ZmFcXHUwNGZlY3I7XFx1NDExMnR5XFx1MDI1M1xcdTA1MDZcXDBcXDBcXHUwNTEybWFsbFNxdWFyZTtcXHU2NWZiZXJ5U21hbGxTcXVhcmU7XFx1NjVhYlxcdTAxMDBncFxcdTA1MjZcXHUwNTJhb247XFx1NDExOGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDNjc2lsb247XFx1NDM5NXVcXHUwMTAwYWlcXHUwNTNjXFx1MDU0OWxcXHUwMTAwO1RcXHUwNTQyXFx1MDU0M1xcdTZhNzVpbGRlO1xcdTYyNDJsaWJyaXVtO1xcdTYxY2NcXHUwMTAwY2lcXHUwNTU3XFx1MDU1YXI7XFx1NjEzMG07XFx1NmE3M2E7XFx1NDM5N21sXFx1ODAzYlxceGNiXFx1NDBjYlxcdTAxMDBpcFxcdTA1NmFcXHUwNTZmc3RzO1xcdTYyMDNvbmVudGlhbEU7XFx1NjE0N1xcdTAyODBjZmlvc1xcdTA1ODVcXHUwNTg4XFx1MDU4ZFxcdTA1YjJcXHUwNWNjeTtcXHU0NDI0cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMDlsbGVkXFx1MDI1M1xcdTA1OTdcXDBcXDBcXHUwNWEzbWFsbFNxdWFyZTtcXHU2NWZjZXJ5U21hbGxTcXVhcmU7XFx1NjVhYVxcdTAzNzBcXHUwNWJhXFwwXFx1MDViZlxcMFxcMFxcdTA1YzRmO1xcdWMwMDBcXHVkODM1XFx1ZGQzZEFsbDtcXHU2MjAwcmllcnRyZjtcXHU2MTMxY1xceGYyXFx1MDVjYlxcdTA2MDBKVGFiY2RmZ29yc3RcXHUwNWU4XFx1MDVlY1xcdTA1ZWZcXHUwNWZhXFx1MDYwMFxcdTA2MTJcXHUwNjE2XFx1MDYxYlxcdTA2MWRcXHUwNjIzXFx1MDY2Y1xcdTA2NzJjeTtcXHU0NDAzXFx1ODAzYj5cXHU0MDNlbW1hXFx1MDEwMDtkXFx1MDVmN1xcdTA1ZjhcXHU0MzkzO1xcdTQzZGNyZXZlO1xcdTQxMWVcXHUwMTgwZWl5XFx1MDYwN1xcdTA2MGNcXHUwNjEwZGlsO1xcdTQxMjJyYztcXHU0MTFjO1xcdTQ0MTNvdDtcXHU0MTIwcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMGE7XFx1NjJkOXBmO1xcdWMwMDBcXHVkODM1XFx1ZGQzZWVhdGVyXFx1MDMwMEVGR0xTVFxcdTA2MzVcXHUwNjQ0XFx1MDY0ZVxcdTA2NTZcXHUwNjViXFx1MDY2NnF1YWxcXHUwMTAwO0xcXHUwNjNlXFx1MDYzZlxcdTYyNjVlc3M7XFx1NjJkYnVsbEVxdWFsO1xcdTYyNjdyZWF0ZXI7XFx1NmFhMmVzcztcXHU2Mjc3bGFudEVxdWFsO1xcdTZhN2VpbGRlO1xcdTYyNzNjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYTI7XFx1NjI2YlxcdTA0MDBBYWNmaW9zdVxcdTA2ODVcXHUwNjhiXFx1MDY5NlxcdTA2OWJcXHUwNjllXFx1MDZhYVxcdTA2YmVcXHUwNmNhUkRjeTtcXHU0NDJhXFx1MDEwMGN0XFx1MDY5MFxcdTA2OTRlaztcXHU0MmM3O1xcdTQwNWVpcmM7XFx1NDEyNHI7XFx1NjEwY2xiZXJ0U3BhY2U7XFx1NjEwYlxcdTAxZjBcXHUwNmFmXFwwXFx1MDZiMmY7XFx1NjEwZGl6b250YWxMaW5lO1xcdTY1MDBcXHUwMTAwY3RcXHUwNmMzXFx1MDZjNVxceGYyXFx1MDZhOXJvaztcXHU0MTI2bXBcXHUwMTQ0XFx1MDZkMFxcdTA2ZDhvd25IdW1cXHhmMFxcdTAxMmZxdWFsO1xcdTYyNGZcXHUwNzAwRUpPYWNkZmdtbm9zdHVcXHUwNmZhXFx1MDZmZVxcdTA3MDNcXHUwNzA3XFx1MDcwZVxcdTA3MWFcXHUwNzFlXFx1MDcyMVxcdTA3MjhcXHUwNzQ0XFx1MDc3OFxcdTA3OGJcXHUwNzhmXFx1MDc5NWN5O1xcdTQ0MTVsaWc7XFx1NDEzMmN5O1xcdTQ0MDFjdXRlXFx1ODAzYlxceGNkXFx1NDBjZFxcdTAxMDBpeVxcdTA3MTNcXHUwNzE4cmNcXHU4MDNiXFx4Y2VcXHU0MGNlO1xcdTQ0MThvdDtcXHU0MTMwcjtcXHU2MTExcmF2ZVxcdTgwM2JcXHhjY1xcdTQwY2NcXHUwMTgwO2FwXFx1MDcyMFxcdTA3MmZcXHUwNzNmXFx1MDEwMGNnXFx1MDczNFxcdTA3MzdyO1xcdTQxMmFpbmFyeUk7XFx1NjE0OGxpZVxceGYzXFx1MDNkZFxcdTAxZjRcXHUwNzQ5XFwwXFx1MDc2MlxcdTAxMDA7ZVxcdTA3NGRcXHUwNzRlXFx1NjIyY1xcdTAxMDBnclxcdTA3NTNcXHUwNzU4cmFsO1xcdTYyMmJzZWN0aW9uO1xcdTYyYzJpc2libGVcXHUwMTAwQ1RcXHUwNzZjXFx1MDc3Mm9tbWE7XFx1NjA2M2ltZXM7XFx1NjA2MlxcdTAxODBncHRcXHUwNzdmXFx1MDc4M1xcdTA3ODhvbjtcXHU0MTJlZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNDBhO1xcdTQzOTljcjtcXHU2MTEwaWxkZTtcXHU0MTI4XFx1MDFlYlxcdTA3OWFcXDBcXHUwNzllY3k7XFx1NDQwNmxcXHU4MDNiXFx4Y2ZcXHU0MGNmXFx1MDI4MGNmb3N1XFx1MDdhY1xcdTA3YjdcXHUwN2JjXFx1MDdjMlxcdTA3ZDBcXHUwMTAwaXlcXHUwN2IxXFx1MDdiNXJjO1xcdTQxMzQ7XFx1NDQxOXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDBkcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDQxXFx1MDFlM1xcdTA3YzdcXDBcXHUwN2NjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYTVyY3k7XFx1NDQwOGtjeTtcXHU0NDA0XFx1MDM4MEhKYWNmb3NcXHUwN2U0XFx1MDdlOFxcdTA3ZWNcXHUwN2YxXFx1MDdmZFxcdTA4MDJcXHUwODA4Y3k7XFx1NDQyNWN5O1xcdTQ0MGNwcGE7XFx1NDM5YVxcdTAxMDBleVxcdTA3ZjZcXHUwN2ZiZGlsO1xcdTQxMzY7XFx1NDQxYXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDBlcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDQyY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2E2XFx1MDU4MEpUYWNlZmxtb3N0XFx1MDgyNVxcdTA4MjlcXHUwODJjXFx1MDg1MFxcdTA4NjNcXHUwOWIzXFx1MDliOFxcdTA5YzdcXHUwOWNkXFx1MGEzN1xcdTBhNDdjeTtcXHU0NDA5XFx1ODAzYjxcXHU0MDNjXFx1MDI4MGNtbnByXFx1MDgzN1xcdTA4M2NcXHUwODQxXFx1MDg0NFxcdTA4NGR1dGU7XFx1NDEzOWJkYTtcXHU0MzliZztcXHU2N2VhbGFjZXRyZjtcXHU2MTEycjtcXHU2MTllXFx1MDE4MGFleVxcdTA4NTdcXHUwODVjXFx1MDg2MXJvbjtcXHU0MTNkZGlsO1xcdTQxM2I7XFx1NDQxYlxcdTAxMDBmc1xcdTA4NjhcXHUwOTcwdFxcdTA1MDBBQ0RGUlRVVmFyXFx1MDg3ZVxcdTA4YTlcXHUwOGIxXFx1MDhlMFxcdTA4ZTZcXHUwOGZjXFx1MDkyZlxcdTA5NWJcXHUwMzkwXFx1MDk2YVxcdTAxMDBuclxcdTA4ODNcXHUwODhmZ2xlQnJhY2tldDtcXHU2N2U4cm93XFx1MDE4MDtCUlxcdTA4OTlcXHUwODlhXFx1MDg5ZVxcdTYxOTBhcjtcXHU2MWU0aWdodEFycm93O1xcdTYxYzZlaWxpbmc7XFx1NjMwOG9cXHUwMWY1XFx1MDhiN1xcMFxcdTA4YzNibGVCcmFja2V0O1xcdTY3ZTZuXFx1MDFkNFxcdTA4YzhcXDBcXHUwOGQyZWVWZWN0b3I7XFx1Njk2MWVjdG9yXFx1MDEwMDtCXFx1MDhkYlxcdTA4ZGNcXHU2MWMzYXI7XFx1Njk1OWxvb3I7XFx1NjMwYWlnaHRcXHUwMTAwQVZcXHUwOGVmXFx1MDhmNXJyb3c7XFx1NjE5NGVjdG9yO1xcdTY5NGVcXHUwMTAwZXJcXHUwOTAxXFx1MDkxN2VcXHUwMTgwO0FWXFx1MDkwOVxcdTA5MGFcXHUwOTEwXFx1NjJhM3Jyb3c7XFx1NjFhNGVjdG9yO1xcdTY5NWFpYW5nbGVcXHUwMTgwO0JFXFx1MDkyNFxcdTA5MjVcXHUwOTI5XFx1NjJiMmFyO1xcdTY5Y2ZxdWFsO1xcdTYyYjRwXFx1MDE4MERUVlxcdTA5MzdcXHUwOTQyXFx1MDk0Y293blZlY3RvcjtcXHU2OTUxZWVWZWN0b3I7XFx1Njk2MGVjdG9yXFx1MDEwMDtCXFx1MDk1NlxcdTA5NTdcXHU2MWJmYXI7XFx1Njk1OGVjdG9yXFx1MDEwMDtCXFx1MDk2NVxcdTA5NjZcXHU2MWJjYXI7XFx1Njk1MmlnaHRcXHhlMVxcdTAzOWNzXFx1MDMwMEVGR0xTVFxcdTA5N2VcXHUwOThiXFx1MDk5NVxcdTA5OWRcXHUwOWEyXFx1MDlhZHF1YWxHcmVhdGVyO1xcdTYyZGF1bGxFcXVhbDtcXHU2MjY2cmVhdGVyO1xcdTYyNzZlc3M7XFx1NmFhMWxhbnRFcXVhbDtcXHU2YTdkaWxkZTtcXHU2MjcycjtcXHVjMDAwXFx1ZDgzNVxcdWRkMGZcXHUwMTAwO2VcXHUwOWJkXFx1MDliZVxcdTYyZDhmdGFycm93O1xcdTYxZGFpZG90O1xcdTQxM2ZcXHUwMTgwbnB3XFx1MDlkNFxcdTBhMTZcXHUwYTFiZ1xcdTAyMDBMUmxyXFx1MDlkZVxcdTA5ZjdcXHUwYTAyXFx1MGExMGVmdFxcdTAxMDBBUlxcdTA5ZTZcXHUwOWVjcnJvdztcXHU2N2Y1aWdodEFycm93O1xcdTY3ZjdpZ2h0QXJyb3c7XFx1NjdmNmVmdFxcdTAxMDBhclxcdTAzYjNcXHUwYTBhaWdodFxceGUxXFx1MDNiZmlnaHRcXHhlMVxcdTAzY2FmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0M2VyXFx1MDEwMExSXFx1MGEyMlxcdTBhMmNlZnRBcnJvdztcXHU2MTk5aWdodEFycm93O1xcdTYxOThcXHUwMTgwY2h0XFx1MGEzZVxcdTBhNDBcXHUwYTQyXFx4ZjJcXHUwODRjO1xcdTYxYjByb2s7XFx1NDE0MTtcXHU2MjZhXFx1MDQwMGFjZWZpb3N1XFx1MGE1YVxcdTBhNWRcXHUwYTYwXFx1MGE3N1xcdTBhN2NcXHUwYTg1XFx1MGE4YlxcdTBhOGVwO1xcdTY5MDV5O1xcdTQ0MWNcXHUwMTAwZGxcXHUwYTY1XFx1MGE2Zml1bVNwYWNlO1xcdTYwNWZsaW50cmY7XFx1NjEzM3I7XFx1YzAwMFxcdWQ4MzVcXHVkZDEwbnVzUGx1cztcXHU2MjEzcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDQ0Y1xceGYyXFx1MGE3NjtcXHU0MzljXFx1MDQ4MEphY2Vmb3N0dVxcdTBhYTNcXHUwYWE3XFx1MGFhZFxcdTBhYzBcXHUwYjE0XFx1MGIxOVxcdTBkOTFcXHUwZDk3XFx1MGQ5ZWN5O1xcdTQ0MGFjdXRlO1xcdTQxNDNcXHUwMTgwYWV5XFx1MGFiNFxcdTBhYjlcXHUwYWJlcm9uO1xcdTQxNDdkaWw7XFx1NDE0NTtcXHU0NDFkXFx1MDE4MGdzd1xcdTBhYzdcXHUwYWYwXFx1MGIwZWF0aXZlXFx1MDE4ME1UVlxcdTBhZDNcXHUwYWRmXFx1MGFlOGVkaXVtU3BhY2U7XFx1NjAwYmhpXFx1MDEwMGNuXFx1MGFlNlxcdTBhZDhcXHhlYlxcdTBhZDllcnlUaGlcXHhlZVxcdTBhZDl0ZWRcXHUwMTAwR0xcXHUwYWY4XFx1MGIwNnJlYXRlckdyZWF0ZVxceGYyXFx1MDY3M2Vzc0xlc1xceGYzXFx1MGE0OExpbmU7XFx1NDAwYXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDExXFx1MDIwMEJucHRcXHUwYjIyXFx1MGIyOFxcdTBiMzdcXHUwYjNhcmVhaztcXHU2MDYwQnJlYWtpbmdTcGFjZTtcXHU0MGEwZjtcXHU2MTE1XFx1MDY4MDtDREVHSExOUFJTVFZcXHUwYjU1XFx1MGI1NlxcdTBiNmFcXHUwYjdjXFx1MGJhMVxcdTBiZWJcXHUwYzA0XFx1MGM1ZVxcdTBjODRcXHUwY2E2XFx1MGNkOFxcdTBkNjFcXHUwZDg1XFx1NmFlY1xcdTAxMDBvdVxcdTBiNWJcXHUwYjY0bmdydWVudDtcXHU2MjYycENhcDtcXHU2MjZkb3VibGVWZXJ0aWNhbEJhcjtcXHU2MjI2XFx1MDE4MGxxeFxcdTBiODNcXHUwYjhhXFx1MGI5YmVtZW50O1xcdTYyMDl1YWxcXHUwMTAwO1RcXHUwYjkyXFx1MGI5M1xcdTYyNjBpbGRlO1xcdWMwMDBcXHUyMjQyXFx1MDMzOGlzdHM7XFx1NjIwNHJlYXRlclxcdTAzODA7RUZHTFNUXFx1MGJiNlxcdTBiYjdcXHUwYmJkXFx1MGJjOVxcdTBiZDNcXHUwYmQ4XFx1MGJlNVxcdTYyNmZxdWFsO1xcdTYyNzF1bGxFcXVhbDtcXHVjMDAwXFx1MjI2N1xcdTAzMzhyZWF0ZXI7XFx1YzAwMFxcdTIyNmJcXHUwMzM4ZXNzO1xcdTYyNzlsYW50RXF1YWw7XFx1YzAwMFxcdTJhN2VcXHUwMzM4aWxkZTtcXHU2Mjc1dW1wXFx1MDE0NFxcdTBiZjJcXHUwYmZkb3duSHVtcDtcXHVjMDAwXFx1MjI0ZVxcdTAzMzhxdWFsO1xcdWMwMDBcXHUyMjRmXFx1MDMzOGVcXHUwMTAwZnNcXHUwYzBhXFx1MGMyN3RUcmlhbmdsZVxcdTAxODA7QkVcXHUwYzFhXFx1MGMxYlxcdTBjMjFcXHU2MmVhYXI7XFx1YzAwMFxcdTI5Y2ZcXHUwMzM4cXVhbDtcXHU2MmVjc1xcdTAzMDA7RUdMU1RcXHUwYzM1XFx1MGMzNlxcdTBjM2NcXHUwYzQ0XFx1MGM0YlxcdTBjNThcXHU2MjZlcXVhbDtcXHU2MjcwcmVhdGVyO1xcdTYyNzhlc3M7XFx1YzAwMFxcdTIyNmFcXHUwMzM4bGFudEVxdWFsO1xcdWMwMDBcXHUyYTdkXFx1MDMzOGlsZGU7XFx1NjI3NGVzdGVkXFx1MDEwMEdMXFx1MGM2OFxcdTBjNzlyZWF0ZXJHcmVhdGVyO1xcdWMwMDBcXHUyYWEyXFx1MDMzOGVzc0xlc3M7XFx1YzAwMFxcdTJhYTFcXHUwMzM4cmVjZWRlc1xcdTAxODA7RVNcXHUwYzkyXFx1MGM5M1xcdTBjOWJcXHU2MjgwcXVhbDtcXHVjMDAwXFx1MmFhZlxcdTAzMzhsYW50RXF1YWw7XFx1NjJlMFxcdTAxMDBlaVxcdTBjYWJcXHUwY2I5dmVyc2VFbGVtZW50O1xcdTYyMGNnaHRUcmlhbmdsZVxcdTAxODA7QkVcXHUwY2NiXFx1MGNjY1xcdTBjZDJcXHU2MmViYXI7XFx1YzAwMFxcdTI5ZDBcXHUwMzM4cXVhbDtcXHU2MmVkXFx1MDEwMHF1XFx1MGNkZFxcdTBkMGN1YXJlU3VcXHUwMTAwYnBcXHUwY2U4XFx1MGNmOXNldFxcdTAxMDA7RVxcdTBjZjBcXHUwY2YzXFx1YzAwMFxcdTIyOGZcXHUwMzM4cXVhbDtcXHU2MmUyZXJzZXRcXHUwMTAwO0VcXHUwZDAzXFx1MGQwNlxcdWMwMDBcXHUyMjkwXFx1MDMzOHF1YWw7XFx1NjJlM1xcdTAxODBiY3BcXHUwZDEzXFx1MGQyNFxcdTBkNGVzZXRcXHUwMTAwO0VcXHUwZDFiXFx1MGQxZVxcdWMwMDBcXHUyMjgyXFx1MjBkMnF1YWw7XFx1NjI4OGNlZWRzXFx1MDIwMDtFU1RcXHUwZDMyXFx1MGQzM1xcdTBkM2JcXHUwZDQ2XFx1NjI4MXF1YWw7XFx1YzAwMFxcdTJhYjBcXHUwMzM4bGFudEVxdWFsO1xcdTYyZTFpbGRlO1xcdWMwMDBcXHUyMjdmXFx1MDMzOGVyc2V0XFx1MDEwMDtFXFx1MGQ1OFxcdTBkNWJcXHVjMDAwXFx1MjI4M1xcdTIwZDJxdWFsO1xcdTYyODlpbGRlXFx1MDIwMDtFRlRcXHUwZDZlXFx1MGQ2ZlxcdTBkNzVcXHUwZDdmXFx1NjI0MXF1YWw7XFx1NjI0NHVsbEVxdWFsO1xcdTYyNDdpbGRlO1xcdTYyNDllcnRpY2FsQmFyO1xcdTYyMjRjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYTlpbGRlXFx1ODAzYlxceGQxXFx1NDBkMTtcXHU0MzlkXFx1MDcwMEVhY2RmZ21vcHJzdHV2XFx1MGRiZFxcdTBkYzJcXHUwZGM5XFx1MGRkNVxcdTBkZGJcXHUwZGUwXFx1MGRlN1xcdTBkZmNcXHUwZTAyXFx1MGUyMFxcdTBlMjJcXHUwZTMyXFx1MGUzZlxcdTBlNDRsaWc7XFx1NDE1MmN1dGVcXHU4MDNiXFx4ZDNcXHU0MGQzXFx1MDEwMGl5XFx1MGRjZVxcdTBkZDNyY1xcdTgwM2JcXHhkNFxcdTQwZDQ7XFx1NDQxZWJsYWM7XFx1NDE1MHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDEycmF2ZVxcdTgwM2JcXHhkMlxcdTQwZDJcXHUwMTgwYWVpXFx1MGRlZVxcdTBkZjJcXHUwZGY2Y3I7XFx1NDE0Y2dhO1xcdTQzYTljcm9uO1xcdTQzOWZwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNDZlbkN1cmx5XFx1MDEwMERRXFx1MGUwZVxcdTBlMWFvdWJsZVF1b3RlO1xcdTYwMWN1b3RlO1xcdTYwMTg7XFx1NmE1NFxcdTAxMDBjbFxcdTBlMjdcXHUwZTJjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYWFhc2hcXHU4MDNiXFx4ZDhcXHU0MGQ4aVxcdTAxNmNcXHUwZTM3XFx1MGUzY2RlXFx1ODAzYlxceGQ1XFx1NDBkNWVzO1xcdTZhMzdtbFxcdTgwM2JcXHhkNlxcdTQwZDZlclxcdTAxMDBCUFxcdTBlNGJcXHUwZTYwXFx1MDEwMGFyXFx1MGU1MFxcdTBlNTNyO1xcdTYwM2VhY1xcdTAxMDBla1xcdTBlNWFcXHUwZTVjO1xcdTYzZGVldDtcXHU2M2I0YXJlbnRoZXNpcztcXHU2M2RjXFx1MDQ4MGFjZmhpbG9yc1xcdTBlN2ZcXHUwZTg3XFx1MGU4YVxcdTBlOGZcXHUwZTkyXFx1MGU5NFxcdTBlOWRcXHUwZWIwXFx1MGVmY3J0aWFsRDtcXHU2MjAyeTtcXHU0NDFmcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMTNpO1xcdTQzYTY7XFx1NDNhMHVzTWludXM7XFx1NDBiMVxcdTAxMDBpcFxcdTBlYTJcXHUwZWFkbmNhcmVwbGFuXFx4ZTVcXHUwNjlkZjtcXHU2MTE5XFx1MDIwMDtlaW9cXHUwZWI5XFx1MGViYVxcdTBlZTBcXHUwZWU0XFx1NmFiYmNlZGVzXFx1MDIwMDtFU1RcXHUwZWM4XFx1MGVjOVxcdTBlY2ZcXHUwZWRhXFx1NjI3YXF1YWw7XFx1NmFhZmxhbnRFcXVhbDtcXHU2MjdjaWxkZTtcXHU2MjdlbWU7XFx1NjAzM1xcdTAxMDBkcFxcdTBlZTlcXHUwZWVldWN0O1xcdTYyMGZvcnRpb25cXHUwMTAwO2FcXHUwMjI1XFx1MGVmOWw7XFx1NjIxZFxcdTAxMDBjaVxcdTBmMDFcXHUwZjA2cjtcXHVjMDAwXFx1ZDgzNVxcdWRjYWI7XFx1NDNhOFxcdTAyMDBVZm9zXFx1MGYxMVxcdTBmMTZcXHUwZjFiXFx1MGYxZk9UXFx1ODAzYlxcXCJcXHU0MDIycjtcXHVjMDAwXFx1ZDgzNVxcdWRkMTRwZjtcXHU2MTFhY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2FjXFx1MDYwMEJFYWNlZmhpb3JzdVxcdTBmM2VcXHUwZjQzXFx1MGY0N1xcdTBmNjBcXHUwZjczXFx1MGZhN1xcdTBmYWFcXHUwZmFkXFx1MTA5NlxcdTEwYTlcXHUxMGI0XFx1MTBiZWFycjtcXHU2OTEwR1xcdTgwM2JcXHhhZVxcdTQwYWVcXHUwMTgwY25yXFx1MGY0ZVxcdTBmNTNcXHUwZjU2dXRlO1xcdTQxNTRnO1xcdTY3ZWJyXFx1MDEwMDt0XFx1MGY1Y1xcdTBmNWRcXHU2MWEwbDtcXHU2OTE2XFx1MDE4MGFleVxcdTBmNjdcXHUwZjZjXFx1MGY3MXJvbjtcXHU0MTU4ZGlsO1xcdTQxNTY7XFx1NDQyMFxcdTAxMDA7dlxcdTBmNzhcXHUwZjc5XFx1NjExY2Vyc2VcXHUwMTAwRVVcXHUwZjgyXFx1MGY5OVxcdTAxMDBscVxcdTBmODdcXHUwZjhlZW1lbnQ7XFx1NjIwYnVpbGlicml1bTtcXHU2MWNicEVxdWlsaWJyaXVtO1xcdTY5NmZyXFx4YmJcXHUwZjc5bztcXHU0M2ExZ2h0XFx1MDQwMEFDREZUVVZhXFx1MGZjMVxcdTBmZWJcXHUwZmYzXFx1MTAyMlxcdTEwMjhcXHUxMDViXFx1MTA4N1xcdTAzZDhcXHUwMTAwbnJcXHUwZmM2XFx1MGZkMmdsZUJyYWNrZXQ7XFx1NjdlOXJvd1xcdTAxODA7QkxcXHUwZmRjXFx1MGZkZFxcdTBmZTFcXHU2MTkyYXI7XFx1NjFlNWVmdEFycm93O1xcdTYxYzRlaWxpbmc7XFx1NjMwOW9cXHUwMWY1XFx1MGZmOVxcMFxcdTEwMDVibGVCcmFja2V0O1xcdTY3ZTduXFx1MDFkNFxcdTEwMGFcXDBcXHUxMDE0ZWVWZWN0b3I7XFx1Njk1ZGVjdG9yXFx1MDEwMDtCXFx1MTAxZFxcdTEwMWVcXHU2MWMyYXI7XFx1Njk1NWxvb3I7XFx1NjMwYlxcdTAxMDBlclxcdTEwMmRcXHUxMDQzZVxcdTAxODA7QVZcXHUxMDM1XFx1MTAzNlxcdTEwM2NcXHU2MmEycnJvdztcXHU2MWE2ZWN0b3I7XFx1Njk1YmlhbmdsZVxcdTAxODA7QkVcXHUxMDUwXFx1MTA1MVxcdTEwNTVcXHU2MmIzYXI7XFx1NjlkMHF1YWw7XFx1NjJiNXBcXHUwMTgwRFRWXFx1MTA2M1xcdTEwNmVcXHUxMDc4b3duVmVjdG9yO1xcdTY5NGZlZVZlY3RvcjtcXHU2OTVjZWN0b3JcXHUwMTAwO0JcXHUxMDgyXFx1MTA4M1xcdTYxYmVhcjtcXHU2OTU0ZWN0b3JcXHUwMTAwO0JcXHUxMDkxXFx1MTA5MlxcdTYxYzBhcjtcXHU2OTUzXFx1MDEwMHB1XFx1MTA5YlxcdTEwOWVmO1xcdTYxMWRuZEltcGxpZXM7XFx1Njk3MGlnaHRhcnJvdztcXHU2MWRiXFx1MDEwMGNoXFx1MTBiOVxcdTEwYmNyO1xcdTYxMWI7XFx1NjFiMWxlRGVsYXllZDtcXHU2OWY0XFx1MDY4MEhPYWNmaGltb3FzdHVcXHUxMGU0XFx1MTBmMVxcdTEwZjdcXHUxMGZkXFx1MTExOVxcdTExMWVcXHUxMTUxXFx1MTE1NlxcdTExNjFcXHUxMTY3XFx1MTFiNVxcdTExYmJcXHUxMWJmXFx1MDEwMENjXFx1MTBlOVxcdTEwZWVIY3k7XFx1NDQyOXk7XFx1NDQyOEZUY3k7XFx1NDQyY2N1dGU7XFx1NDE1YVxcdTAyODA7YWVpeVxcdTExMDhcXHUxMTA5XFx1MTEwZVxcdTExMTNcXHUxMTE3XFx1NmFiY3JvbjtcXHU0MTYwZGlsO1xcdTQxNWVyYztcXHU0MTVjO1xcdTQ0MjFyO1xcdWMwMDBcXHVkODM1XFx1ZGQxNm9ydFxcdTAyMDBETFJVXFx1MTEyYVxcdTExMzRcXHUxMTNlXFx1MTE0OW93bkFycm93XFx4YmJcXHUwNDFlZWZ0QXJyb3dcXHhiYlxcdTA4OWFpZ2h0QXJyb3dcXHhiYlxcdTBmZGRwQXJyb3c7XFx1NjE5MWdtYTtcXHU0M2EzYWxsQ2lyY2xlO1xcdTYyMThwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNGFcXHUwMjcyXFx1MTE2ZFxcMFxcMFxcdTExNzB0O1xcdTYyMWFhcmVcXHUwMjAwO0lTVVxcdTExN2JcXHUxMTdjXFx1MTE4OVxcdTExYWZcXHU2NWExbnRlcnNlY3Rpb247XFx1NjI5M3VcXHUwMTAwYnBcXHUxMThmXFx1MTE5ZXNldFxcdTAxMDA7RVxcdTExOTdcXHUxMTk4XFx1NjI4ZnF1YWw7XFx1NjI5MWVyc2V0XFx1MDEwMDtFXFx1MTFhOFxcdTExYTlcXHU2MjkwcXVhbDtcXHU2MjkybmlvbjtcXHU2Mjk0Y3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2FlYXI7XFx1NjJjNlxcdTAyMDBiY21wXFx1MTFjOFxcdTExZGJcXHUxMjA5XFx1MTIwYlxcdTAxMDA7c1xcdTExY2RcXHUxMWNlXFx1NjJkMGV0XFx1MDEwMDtFXFx1MTFjZFxcdTExZDVxdWFsO1xcdTYyODZcXHUwMTAwY2hcXHUxMWUwXFx1MTIwNWVlZHNcXHUwMjAwO0VTVFxcdTExZWRcXHUxMWVlXFx1MTFmNFxcdTExZmZcXHU2MjdicXVhbDtcXHU2YWIwbGFudEVxdWFsO1xcdTYyN2RpbGRlO1xcdTYyN2ZUaFxceGUxXFx1MGY4YztcXHU2MjExXFx1MDE4MDtlc1xcdTEyMTJcXHUxMjEzXFx1MTIyM1xcdTYyZDFyc2V0XFx1MDEwMDtFXFx1MTIxY1xcdTEyMWRcXHU2MjgzcXVhbDtcXHU2Mjg3ZXRcXHhiYlxcdTEyMTNcXHUwNTgwSFJTYWNmaGlvcnNcXHUxMjNlXFx1MTI0NFxcdTEyNDlcXHUxMjU1XFx1MTI1ZVxcdTEyNzFcXHUxMjc2XFx1MTI5ZlxcdTEyYzJcXHUxMmM4XFx1MTJkMU9STlxcdTgwM2JcXHhkZVxcdTQwZGVBREU7XFx1NjEyMlxcdTAxMDBIY1xcdTEyNGVcXHUxMjUyY3k7XFx1NDQwYnk7XFx1NDQyNlxcdTAxMDBidVxcdTEyNWFcXHUxMjVjO1xcdTQwMDk7XFx1NDNhNFxcdTAxODBhZXlcXHUxMjY1XFx1MTI2YVxcdTEyNmZyb247XFx1NDE2NGRpbDtcXHU0MTYyO1xcdTQ0MjJyO1xcdWMwMDBcXHVkODM1XFx1ZGQxN1xcdTAxMDBlaVxcdTEyN2JcXHUxMjg5XFx1MDFmMlxcdTEyODBcXDBcXHUxMjg3ZWZvcmU7XFx1NjIzNGE7XFx1NDM5OFxcdTAxMDBjblxcdTEyOGVcXHUxMjk4a1NwYWNlO1xcdWMwMDBcXHUyMDVmXFx1MjAwYVNwYWNlO1xcdTYwMDlsZGVcXHUwMjAwO0VGVFxcdTEyYWJcXHUxMmFjXFx1MTJiMlxcdTEyYmNcXHU2MjNjcXVhbDtcXHU2MjQzdWxsRXF1YWw7XFx1NjI0NWlsZGU7XFx1NjI0OHBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0YmlwbGVEb3Q7XFx1NjBkYlxcdTAxMDBjdFxcdTEyZDZcXHUxMmRicjtcXHVjMDAwXFx1ZDgzNVxcdWRjYWZyb2s7XFx1NDE2NlxcdTBhZTFcXHUxMmY3XFx1MTMwZVxcdTEzMWFcXHUxMzI2XFwwXFx1MTMyY1xcdTEzMzFcXDBcXDBcXDBcXDBcXDBcXHUxMzM4XFx1MTMzZFxcdTEzNzdcXHUxMzg1XFwwXFx1MTNmZlxcdTE0MDRcXHUxNDBhXFx1MTQxMFxcdTAxMDBjclxcdTEyZmJcXHUxMzAxdXRlXFx1ODAzYlxceGRhXFx1NDBkYXJcXHUwMTAwO29cXHUxMzA3XFx1MTMwOFxcdTYxOWZjaXI7XFx1Njk0OXJcXHUwMWUzXFx1MTMxM1xcMFxcdTEzMTZ5O1xcdTQ0MGV2ZTtcXHU0MTZjXFx1MDEwMGl5XFx1MTMxZVxcdTEzMjNyY1xcdTgwM2JcXHhkYlxcdTQwZGI7XFx1NDQyM2JsYWM7XFx1NDE3MHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDE4cmF2ZVxcdTgwM2JcXHhkOVxcdTQwZDlhY3I7XFx1NDE2YVxcdTAxMDBkaVxcdTEzNDFcXHUxMzY5ZXJcXHUwMTAwQlBcXHUxMzQ4XFx1MTM1ZFxcdTAxMDBhclxcdTEzNGRcXHUxMzUwcjtcXHU0MDVmYWNcXHUwMTAwZWtcXHUxMzU3XFx1MTM1OTtcXHU2M2RmZXQ7XFx1NjNiNWFyZW50aGVzaXM7XFx1NjNkZG9uXFx1MDEwMDtQXFx1MTM3MFxcdTEzNzFcXHU2MmMzbHVzO1xcdTYyOGVcXHUwMTAwZ3BcXHUxMzdiXFx1MTM3Zm9uO1xcdTQxNzJmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0Y1xcdTA0MDBBREVUYWRwc1xcdTEzOTVcXHUxM2FlXFx1MTNiOFxcdTEzYzRcXHUwM2U4XFx1MTNkMlxcdTEzZDdcXHUxM2YzcnJvd1xcdTAxODA7QkRcXHUxMTUwXFx1MTNhMFxcdTEzYTRhcjtcXHU2OTEyb3duQXJyb3c7XFx1NjFjNW93bkFycm93O1xcdTYxOTVxdWlsaWJyaXVtO1xcdTY5NmVlZVxcdTAxMDA7QVxcdTEzY2JcXHUxM2NjXFx1NjJhNXJyb3c7XFx1NjFhNW93blxceGUxXFx1MDNmM2VyXFx1MDEwMExSXFx1MTNkZVxcdTEzZThlZnRBcnJvdztcXHU2MTk2aWdodEFycm93O1xcdTYxOTdpXFx1MDEwMDtsXFx1MTNmOVxcdTEzZmFcXHU0M2Qyb247XFx1NDNhNWluZztcXHU0MTZlY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2IwaWxkZTtcXHU0MTY4bWxcXHU4MDNiXFx4ZGNcXHU0MGRjXFx1MDQ4MERiY2RlZm9zdlxcdTE0MjdcXHUxNDJjXFx1MTQzMFxcdTE0MzNcXHUxNDNlXFx1MTQ4NVxcdTE0OGFcXHUxNDkwXFx1MTQ5NmFzaDtcXHU2MmFiYXI7XFx1NmFlYnk7XFx1NDQxMmFzaFxcdTAxMDA7bFxcdTE0M2JcXHUxNDNjXFx1NjJhOTtcXHU2YWU2XFx1MDEwMGVyXFx1MTQ0M1xcdTE0NDU7XFx1NjJjMVxcdTAxODBidHlcXHUxNDRjXFx1MTQ1MFxcdTE0N2FhcjtcXHU2MDE2XFx1MDEwMDtpXFx1MTQ0ZlxcdTE0NTVjYWxcXHUwMjAwQkxTVFxcdTE0NjFcXHUxNDY1XFx1MTQ2YVxcdTE0NzRhcjtcXHU2MjIzaW5lO1xcdTQwN2NlcGFyYXRvcjtcXHU2NzU4aWxkZTtcXHU2MjQwVGhpblNwYWNlO1xcdTYwMGFyO1xcdWMwMDBcXHVkODM1XFx1ZGQxOXBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0ZGNyO1xcdWMwMDBcXHVkODM1XFx1ZGNiMWRhc2g7XFx1NjJhYVxcdTAyODBjZWZvc1xcdTE0YTdcXHUxNGFjXFx1MTRiMVxcdTE0YjZcXHUxNGJjaXJjO1xcdTQxNzRkZ2U7XFx1NjJjMHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDFhcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDRlY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2IyXFx1MDIwMGZpb3NcXHUxNGNiXFx1MTRkMFxcdTE0ZDJcXHUxNGQ4cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMWI7XFx1NDM5ZXBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0ZmNyO1xcdWMwMDBcXHVkODM1XFx1ZGNiM1xcdTA0ODBBSVVhY2Zvc3VcXHUxNGYxXFx1MTRmNVxcdTE0ZjlcXHUxNGZkXFx1MTUwNFxcdTE1MGZcXHUxNTE0XFx1MTUxYVxcdTE1MjBjeTtcXHU0NDJmY3k7XFx1NDQwN2N5O1xcdTQ0MmVjdXRlXFx1ODAzYlxceGRkXFx1NDBkZFxcdTAxMDBpeVxcdTE1MDlcXHUxNTBkcmM7XFx1NDE3NjtcXHU0NDJicjtcXHVjMDAwXFx1ZDgzNVxcdWRkMWNwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNTBjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYjRtbDtcXHU0MTc4XFx1MDQwMEhhY2RlZm9zXFx1MTUzNVxcdTE1MzlcXHUxNTNmXFx1MTU0YlxcdTE1NGZcXHUxNTVkXFx1MTU2MFxcdTE1NjRjeTtcXHU0NDE2Y3V0ZTtcXHU0MTc5XFx1MDEwMGF5XFx1MTU0NFxcdTE1NDlyb247XFx1NDE3ZDtcXHU0NDE3b3Q7XFx1NDE3YlxcdTAxZjJcXHUxNTU0XFwwXFx1MTU1Ym9XaWR0XFx4ZThcXHUwYWQ5YTtcXHU0Mzk2cjtcXHU2MTI4cGY7XFx1NjEyNGNyO1xcdWMwMDBcXHVkODM1XFx1ZGNiNVxcdTBiZTFcXHUxNTgzXFx1MTU4YVxcdTE1OTBcXDBcXHUxNWIwXFx1MTViNlxcdTE1YmZcXDBcXDBcXDBcXDBcXHUxNWM2XFx1MTVkYlxcdTE1ZWJcXHUxNjVmXFx1MTY2ZFxcMFxcdTE2OTVcXHUxNjliXFx1MTZiMlxcdTE2YjlcXDBcXHUxNmJlY3V0ZVxcdTgwM2JcXHhlMVxcdTQwZTFyZXZlO1xcdTQxMDNcXHUwMzAwO0VkaXV5XFx1MTU5Y1xcdTE1OWRcXHUxNWExXFx1MTVhM1xcdTE1YThcXHUxNWFkXFx1NjIzZTtcXHVjMDAwXFx1MjIzZVxcdTAzMzM7XFx1NjIzZnJjXFx1ODAzYlxceGUyXFx1NDBlMnRlXFx1ODBiYlxceGI0XFx1MDMwNjtcXHU0NDMwbGlnXFx1ODAzYlxceGU2XFx1NDBlNlxcdTAxMDA7clxceGIyXFx1MTViYTtcXHVjMDAwXFx1ZDgzNVxcdWRkMWVyYXZlXFx1ODAzYlxceGUwXFx1NDBlMFxcdTAxMDBlcFxcdTE1Y2FcXHUxNWQ2XFx1MDEwMGZwXFx1MTVjZlxcdTE1ZDRzeW07XFx1NjEzNVxceGU4XFx1MTVkM2hhO1xcdTQzYjFcXHUwMTAwYXBcXHUxNWRmY1xcdTAxMDBjbFxcdTE1ZTRcXHUxNWU3cjtcXHU0MTAxZztcXHU2YTNmXFx1MDI2NFxcdTE1ZjBcXDBcXDBcXHUxNjBhXFx1MDI4MDthZHN2XFx1MTVmYVxcdTE1ZmJcXHUxNWZmXFx1MTYwMVxcdTE2MDdcXHU2MjI3bmQ7XFx1NmE1NTtcXHU2YTVjbG9wZTtcXHU2YTU4O1xcdTZhNWFcXHUwMzgwO2VsbXJzelxcdTE2MThcXHUxNjE5XFx1MTYxYlxcdTE2MWVcXHUxNjNmXFx1MTY0ZlxcdTE2NTlcXHU2MjIwO1xcdTY5YTRlXFx4YmJcXHUxNjE5c2RcXHUwMTAwO2FcXHUxNjI1XFx1MTYyNlxcdTYyMjFcXHUwNDYxXFx1MTYzMFxcdTE2MzJcXHUxNjM0XFx1MTYzNlxcdTE2MzhcXHUxNjNhXFx1MTYzY1xcdTE2M2U7XFx1NjlhODtcXHU2OWE5O1xcdTY5YWE7XFx1NjlhYjtcXHU2OWFjO1xcdTY5YWQ7XFx1NjlhZTtcXHU2OWFmdFxcdTAxMDA7dlxcdTE2NDVcXHUxNjQ2XFx1NjIxZmJcXHUwMTAwO2RcXHUxNjRjXFx1MTY0ZFxcdTYyYmU7XFx1Njk5ZFxcdTAxMDBwdFxcdTE2NTRcXHUxNjU3aDtcXHU2MjIyXFx4YmJcXHhiOWFycjtcXHU2MzdjXFx1MDEwMGdwXFx1MTY2M1xcdTE2NjdvbjtcXHU0MTA1ZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNTJcXHUwMzgwO0VhZWlvcFxcdTEyYzFcXHUxNjdiXFx1MTY3ZFxcdTE2ODJcXHUxNjg0XFx1MTY4N1xcdTE2OGE7XFx1NmE3MGNpcjtcXHU2YTZmO1xcdTYyNGFkO1xcdTYyNGJzO1xcdTQwMjdyb3hcXHUwMTAwO2VcXHUxMmMxXFx1MTY5MlxceGYxXFx1MTY4M2luZ1xcdTgwM2JcXHhlNVxcdTQwZTVcXHUwMTgwY3R5XFx1MTZhMVxcdTE2YTZcXHUxNmE4cjtcXHVjMDAwXFx1ZDgzNVxcdWRjYjY7XFx1NDAyYW1wXFx1MDEwMDtlXFx1MTJjMVxcdTE2YWZcXHhmMVxcdTAyODhpbGRlXFx1ODAzYlxceGUzXFx1NDBlM21sXFx1ODAzYlxceGU0XFx1NDBlNFxcdTAxMDBjaVxcdTE2YzJcXHUxNmM4b25pblxceGY0XFx1MDI3Mm50O1xcdTZhMTFcXHUwODAwTmFiY2RlZmlrbG5vcHJzdVxcdTE2ZWRcXHUxNmYxXFx1MTczMFxcdTE3M2NcXHUxNzQzXFx1MTc0OFxcdTE3NzhcXHUxNzdkXFx1MTdlMFxcdTE3ZTZcXHUxODM5XFx1MTg1MFxcdTE3MGRcXHUxOTNkXFx1MTk0OFxcdTE5NzBvdDtcXHU2YWVkXFx1MDEwMGNyXFx1MTZmNlxcdTE3MWVrXFx1MDIwMGNlcHNcXHUxNzAwXFx1MTcwNVxcdTE3MGRcXHUxNzEzb25nO1xcdTYyNGNwc2lsb247XFx1NDNmNnJpbWU7XFx1NjAzNWltXFx1MDEwMDtlXFx1MTcxYVxcdTE3MWJcXHU2MjNkcTtcXHU2MmNkXFx1MDE3NlxcdTE3MjJcXHUxNzI2ZWU7XFx1NjJiZGVkXFx1MDEwMDtnXFx1MTcyY1xcdTE3MmRcXHU2MzA1ZVxceGJiXFx1MTcyZHJrXFx1MDEwMDt0XFx1MTM1Y1xcdTE3Mzdicms7XFx1NjNiNlxcdTAxMDBveVxcdTE3MDFcXHUxNzQxO1xcdTQ0MzFxdW87XFx1NjAxZVxcdTAyODBjbXBydFxcdTE3NTNcXHUxNzViXFx1MTc2MVxcdTE3NjRcXHUxNzY4YXVzXFx1MDEwMDtlXFx1MDEwYVxcdTAxMDlwdHl2O1xcdTY5YjBzXFx4ZTlcXHUxNzBjbm9cXHhmNVxcdTAxMTNcXHUwMTgwYWh3XFx1MTc2ZlxcdTE3NzFcXHUxNzczO1xcdTQzYjI7XFx1NjEzNmVlbjtcXHU2MjZjcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMWZnXFx1MDM4MGNvc3R1dndcXHUxNzhkXFx1MTc5ZFxcdTE3YjNcXHUxN2MxXFx1MTdkNVxcdTE3ZGJcXHUxN2RlXFx1MDE4MGFpdVxcdTE3OTRcXHUxNzk2XFx1MTc5YVxceGYwXFx1MDc2MHJjO1xcdTY1ZWZwXFx4YmJcXHUxMzcxXFx1MDE4MGRwdFxcdTE3YTRcXHUxN2E4XFx1MTdhZG90O1xcdTZhMDBsdXM7XFx1NmEwMWltZXM7XFx1NmEwMlxcdTAyNzFcXHUxN2I5XFwwXFwwXFx1MTdiZWN1cDtcXHU2YTA2YXI7XFx1NjYwNXJpYW5nbGVcXHUwMTAwZHVcXHUxN2NkXFx1MTdkMm93bjtcXHU2NWJkcDtcXHU2NWIzcGx1cztcXHU2YTA0ZVxceGU1XFx1MTQ0NFxceGU1XFx1MTRhZGFyb3c7XFx1NjkwZFxcdTAxODBha29cXHUxN2VkXFx1MTgyNlxcdTE4MzVcXHUwMTAwY25cXHUxN2YyXFx1MTgyM2tcXHUwMTgwbHN0XFx1MTdmYVxcdTA1YWJcXHUxODAyb3plbmdlO1xcdTY5ZWJyaWFuZ2xlXFx1MDIwMDtkbHJcXHUxODEyXFx1MTgxM1xcdTE4MThcXHUxODFkXFx1NjViNG93bjtcXHU2NWJlZWZ0O1xcdTY1YzJpZ2h0O1xcdTY1YjhrO1xcdTY0MjNcXHUwMWIxXFx1MTgyYlxcMFxcdTE4MzNcXHUwMWIyXFx1MTgyZlxcMFxcdTE4MzE7XFx1NjU5MjtcXHU2NTkxNDtcXHU2NTkzY2s7XFx1NjU4OFxcdTAxMDBlb1xcdTE4M2VcXHUxODRkXFx1MDEwMDtxXFx1MTg0M1xcdTE4NDZcXHVjMDAwPVxcdTIwZTV1aXY7XFx1YzAwMFxcdTIyNjFcXHUyMGU1dDtcXHU2MzEwXFx1MDIwMHB0d3hcXHUxODU5XFx1MTg1ZVxcdTE4NjdcXHUxODZjZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNTNcXHUwMTAwO3RcXHUxM2NiXFx1MTg2M29tXFx4YmJcXHUxM2NjdGllO1xcdTYyYzhcXHUwNjAwREhVVmJkaG1wdHV2XFx1MTg4NVxcdTE4OTZcXHUxOGFhXFx1MThiYlxcdTE4ZDdcXHUxOGRiXFx1MThlY1xcdTE4ZmZcXHUxOTA1XFx1MTkwYVxcdTE5MTBcXHUxOTIxXFx1MDIwMExSbHJcXHUxODhlXFx1MTg5MFxcdTE4OTJcXHUxODk0O1xcdTY1NTc7XFx1NjU1NDtcXHU2NTU2O1xcdTY1NTNcXHUwMjgwO0RVZHVcXHUxOGExXFx1MThhMlxcdTE4YTRcXHUxOGE2XFx1MThhOFxcdTY1NTA7XFx1NjU2NjtcXHU2NTY5O1xcdTY1NjQ7XFx1NjU2N1xcdTAyMDBMUmxyXFx1MThiM1xcdTE4YjVcXHUxOGI3XFx1MThiOTtcXHU2NTVkO1xcdTY1NWE7XFx1NjU1YztcXHU2NTU5XFx1MDM4MDtITFJobHJcXHUxOGNhXFx1MThjYlxcdTE4Y2RcXHUxOGNmXFx1MThkMVxcdTE4ZDNcXHUxOGQ1XFx1NjU1MTtcXHU2NTZjO1xcdTY1NjM7XFx1NjU2MDtcXHU2NTZiO1xcdTY1NjI7XFx1NjU1Zm94O1xcdTY5YzlcXHUwMjAwTFJsclxcdTE4ZTRcXHUxOGU2XFx1MThlOFxcdTE4ZWE7XFx1NjU1NTtcXHU2NTUyO1xcdTY1MTA7XFx1NjUwY1xcdTAyODA7RFVkdVxcdTA2YmRcXHUxOGY3XFx1MThmOVxcdTE4ZmJcXHUxOGZkO1xcdTY1NjU7XFx1NjU2ODtcXHU2NTJjO1xcdTY1MzRpbnVzO1xcdTYyOWZsdXM7XFx1NjI5ZWltZXM7XFx1NjJhMFxcdTAyMDBMUmxyXFx1MTkxOVxcdTE5MWJcXHUxOTFkXFx1MTkxZjtcXHU2NTViO1xcdTY1NTg7XFx1NjUxODtcXHU2NTE0XFx1MDM4MDtITFJobHJcXHUxOTMwXFx1MTkzMVxcdTE5MzNcXHUxOTM1XFx1MTkzN1xcdTE5MzlcXHUxOTNiXFx1NjUwMjtcXHU2NTZhO1xcdTY1NjE7XFx1NjU1ZTtcXHU2NTNjO1xcdTY1MjQ7XFx1NjUxY1xcdTAxMDBldlxcdTAxMjNcXHUxOTQyYmFyXFx1ODAzYlxceGE2XFx1NDBhNlxcdTAyMDBjZWlvXFx1MTk1MVxcdTE5NTZcXHUxOTVhXFx1MTk2MHI7XFx1YzAwMFxcdWQ4MzVcXHVkY2I3bWk7XFx1NjA0Zm1cXHUwMTAwO2VcXHUxNzFhXFx1MTcxY2xcXHUwMTgwO2JoXFx1MTk2OFxcdTE5NjlcXHUxOTZiXFx1NDA1YztcXHU2OWM1c3ViO1xcdTY3YzhcXHUwMTZjXFx1MTk3NFxcdTE5N2VsXFx1MDEwMDtlXFx1MTk3OVxcdTE5N2FcXHU2MDIydFxceGJiXFx1MTk3YXBcXHUwMTgwO0VlXFx1MDEyZlxcdTE5ODVcXHUxOTg3O1xcdTZhYWVcXHUwMTAwO3FcXHUwNmRjXFx1MDZkYlxcdTBjZTFcXHUxOWE3XFwwXFx1MTllOFxcdTFhMTFcXHUxYTE1XFx1MWEzMlxcMFxcdTFhMzdcXHUxYTUwXFwwXFwwXFx1MWFiNFxcMFxcMFxcdTFhYzFcXDBcXDBcXHUxYjIxXFx1MWIyZVxcdTFiNGRcXHUxYjUyXFwwXFx1MWJmZFxcMFxcdTFjMGNcXHUwMTgwY3ByXFx1MTlhZFxcdTE5YjJcXHUxOWRkdXRlO1xcdTQxMDdcXHUwMzAwO2FiY2RzXFx1MTliZlxcdTE5YzBcXHUxOWM0XFx1MTljYVxcdTE5ZDVcXHUxOWQ5XFx1NjIyOW5kO1xcdTZhNDRyY3VwO1xcdTZhNDlcXHUwMTAwYXVcXHUxOWNmXFx1MTlkMnA7XFx1NmE0YnA7XFx1NmE0N290O1xcdTZhNDA7XFx1YzAwMFxcdTIyMjlcXHVmZTAwXFx1MDEwMGVvXFx1MTllMlxcdTE5ZTV0O1xcdTYwNDFcXHhlZVxcdTA2OTNcXHUwMjAwYWVpdVxcdTE5ZjBcXHUxOWZiXFx1MWEwMVxcdTFhMDVcXHUwMWYwXFx1MTlmNVxcMFxcdTE5ZjhzO1xcdTZhNGRvbjtcXHU0MTBkZGlsXFx1ODAzYlxceGU3XFx1NDBlN3JjO1xcdTQxMDlwc1xcdTAxMDA7c1xcdTFhMGNcXHUxYTBkXFx1NmE0Y207XFx1NmE1MG90O1xcdTQxMGJcXHUwMTgwZG1uXFx1MWExYlxcdTFhMjBcXHUxYTI2aWxcXHU4MGJiXFx4YjhcXHUwMWFkcHR5djtcXHU2OWIydFxcdTgxMDBcXHhhMjtlXFx1MWEyZFxcdTFhMmVcXHU0MGEyclxceGU0XFx1MDFiMnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDIwXFx1MDE4MGNlaVxcdTFhM2RcXHUxYTQwXFx1MWE0ZHk7XFx1NDQ0N2NrXFx1MDEwMDttXFx1MWE0N1xcdTFhNDhcXHU2NzEzYXJrXFx4YmJcXHUxYTQ4O1xcdTQzYzdyXFx1MDM4MDtFY2VmbXNcXHUxYTVmXFx1MWE2MFxcdTFhNjJcXHUxYTZiXFx1MWFhNFxcdTFhYWFcXHUxYWFlXFx1NjVjYjtcXHU2OWMzXFx1MDE4MDtlbFxcdTFhNjlcXHUxYTZhXFx1MWE2ZFxcdTQyYzZxO1xcdTYyNTdlXFx1MDI2MVxcdTFhNzRcXDBcXDBcXHUxYTg4cnJvd1xcdTAxMDBsclxcdTFhN2NcXHUxYTgxZWZ0O1xcdTYxYmFpZ2h0O1xcdTYxYmJcXHUwMjgwUlNhY2RcXHUxYTkyXFx1MWE5NFxcdTFhOTZcXHUxYTlhXFx1MWE5ZlxceGJiXFx1MGY0NztcXHU2NGM4c3Q7XFx1NjI5YmlyYztcXHU2MjlhYXNoO1xcdTYyOWRuaW50O1xcdTZhMTBpZDtcXHU2YWVmY2lyO1xcdTY5YzJ1YnNcXHUwMTAwO3VcXHUxYWJiXFx1MWFiY1xcdTY2NjNpdFxceGJiXFx1MWFiY1xcdTAyZWNcXHUxYWM3XFx1MWFkNFxcdTFhZmFcXDBcXHUxYjBhb25cXHUwMTAwO2VcXHUxYWNkXFx1MWFjZVxcdTQwM2FcXHUwMTAwO3FcXHhjN1xceGM2XFx1MDI2ZFxcdTFhZDlcXDBcXDBcXHUxYWUyYVxcdTAxMDA7dFxcdTFhZGVcXHUxYWRmXFx1NDAyYztcXHU0MDQwXFx1MDE4MDtmbFxcdTFhZThcXHUxYWU5XFx1MWFlYlxcdTYyMDFcXHhlZVxcdTExNjBlXFx1MDEwMG14XFx1MWFmMVxcdTFhZjZlbnRcXHhiYlxcdTFhZTllXFx4ZjNcXHUwMjRkXFx1MDFlN1xcdTFhZmVcXDBcXHUxYjA3XFx1MDEwMDtkXFx1MTJiYlxcdTFiMDJvdDtcXHU2YTZkblxceGY0XFx1MDI0NlxcdTAxODBmcnlcXHUxYjEwXFx1MWIxNFxcdTFiMTc7XFx1YzAwMFxcdWQ4MzVcXHVkZDU0b1xceGU0XFx1MDI1NFxcdTgxMDBcXHhhOTtzXFx1MDE1NVxcdTFiMWRyO1xcdTYxMTdcXHUwMTAwYW9cXHUxYjI1XFx1MWIyOXJyO1xcdTYxYjVzcztcXHU2NzE3XFx1MDEwMGN1XFx1MWIzMlxcdTFiMzdyO1xcdWMwMDBcXHVkODM1XFx1ZGNiOFxcdTAxMDBicFxcdTFiM2NcXHUxYjQ0XFx1MDEwMDtlXFx1MWI0MVxcdTFiNDJcXHU2YWNmO1xcdTZhZDFcXHUwMTAwO2VcXHUxYjQ5XFx1MWI0YVxcdTZhZDA7XFx1NmFkMmRvdDtcXHU2MmVmXFx1MDM4MGRlbHBydndcXHUxYjYwXFx1MWI2Y1xcdTFiNzdcXHUxYjgyXFx1MWJhY1xcdTFiZDRcXHUxYmY5YXJyXFx1MDEwMGxyXFx1MWI2OFxcdTFiNmE7XFx1NjkzODtcXHU2OTM1XFx1MDI3MFxcdTFiNzJcXDBcXDBcXHUxYjc1cjtcXHU2MmRlYztcXHU2MmRmYXJyXFx1MDEwMDtwXFx1MWI3ZlxcdTFiODBcXHU2MWI2O1xcdTY5M2RcXHUwMzAwO2JjZG9zXFx1MWI4ZlxcdTFiOTBcXHUxYjk2XFx1MWJhMVxcdTFiYTVcXHUxYmE4XFx1NjIyYXJjYXA7XFx1NmE0OFxcdTAxMDBhdVxcdTFiOWJcXHUxYjllcDtcXHU2YTQ2cDtcXHU2YTRhb3Q7XFx1NjI4ZHI7XFx1NmE0NTtcXHVjMDAwXFx1MjIyYVxcdWZlMDBcXHUwMjAwYWxydlxcdTFiYjVcXHUxYmJmXFx1MWJkZVxcdTFiZTNyclxcdTAxMDA7bVxcdTFiYmNcXHUxYmJkXFx1NjFiNztcXHU2OTNjeVxcdTAxODBldndcXHUxYmM3XFx1MWJkNFxcdTFiZDhxXFx1MDI3MFxcdTFiY2VcXDBcXDBcXHUxYmQycmVcXHhlM1xcdTFiNzN1XFx4ZTNcXHUxYjc1ZWU7XFx1NjJjZWVkZ2U7XFx1NjJjZmVuXFx1ODAzYlxceGE0XFx1NDBhNGVhcnJvd1xcdTAxMDBsclxcdTFiZWVcXHUxYmYzZWZ0XFx4YmJcXHUxYjgwaWdodFxceGJiXFx1MWJiZGVcXHhlNFxcdTFiZGRcXHUwMTAwY2lcXHUxYzAxXFx1MWMwN29uaW5cXHhmNFxcdTAxZjdudDtcXHU2MjMxbGN0eTtcXHU2MzJkXFx1MDk4MEFIYWJjZGVmaGlqbG9yc3R1d3pcXHUxYzM4XFx1MWMzYlxcdTFjM2ZcXHUxYzVkXFx1MWM2OVxcdTFjNzVcXHUxYzhhXFx1MWM5ZVxcdTFjYWNcXHUxY2I3XFx1MWNmYlxcdTFjZmZcXHUxZDBkXFx1MWQ3YlxcdTFkOTFcXHUxZGFiXFx1MWRiYlxcdTFkYzZcXHUxZGNkclxceGYyXFx1MDM4MWFyO1xcdTY5NjVcXHUwMjAwZ2xyc1xcdTFjNDhcXHUxYzRkXFx1MWM1MlxcdTFjNTRnZXI7XFx1NjAyMGV0aDtcXHU2MTM4XFx4ZjJcXHUxMTMzaFxcdTAxMDA7dlxcdTFjNWFcXHUxYzViXFx1NjAxMFxceGJiXFx1MDkwYVxcdTAxNmJcXHUxYzYxXFx1MWM2N2Fyb3c7XFx1NjkwZmFcXHhlM1xcdTAzMTVcXHUwMTAwYXlcXHUxYzZlXFx1MWM3M3JvbjtcXHU0MTBmO1xcdTQ0MzRcXHUwMTgwO2FvXFx1MDMzMlxcdTFjN2NcXHUxYzg0XFx1MDEwMGdyXFx1MDJiZlxcdTFjODFyO1xcdTYxY2F0c2VxO1xcdTZhNzdcXHUwMTgwZ2xtXFx1MWM5MVxcdTFjOTRcXHUxYzk4XFx1ODAzYlxceGIwXFx1NDBiMHRhO1xcdTQzYjRwdHl2O1xcdTY5YjFcXHUwMTAwaXJcXHUxY2EzXFx1MWNhOHNodDtcXHU2OTdmO1xcdWMwMDBcXHVkODM1XFx1ZGQyMWFyXFx1MDEwMGxyXFx1MWNiM1xcdTFjYjVcXHhiYlxcdTA4ZGNcXHhiYlxcdTEwMWVcXHUwMjgwYWVnc3ZcXHUxY2MyXFx1MDM3OFxcdTFjZDZcXHUxY2RjXFx1MWNlMG1cXHUwMTgwO29zXFx1MDMyNlxcdTFjY2FcXHUxY2Q0bmRcXHUwMTAwO3NcXHUwMzI2XFx1MWNkMXVpdDtcXHU2NjY2YW1tYTtcXHU0M2RkaW47XFx1NjJmMlxcdTAxODA7aW9cXHUxY2U3XFx1MWNlOFxcdTFjZjhcXHU0MGY3ZGVcXHU4MTAwXFx4Zjc7b1xcdTFjZTdcXHUxY2YwbnRpbWVzO1xcdTYyYzduXFx4ZjhcXHUxY2Y3Y3k7XFx1NDQ1MmNcXHUwMjZmXFx1MWQwNlxcMFxcMFxcdTFkMGFybjtcXHU2MzFlb3A7XFx1NjMwZFxcdTAyODBscHR1d1xcdTFkMThcXHUxZDFkXFx1MWQyMlxcdTFkNDlcXHUxZDU1bGFyO1xcdTQwMjRmO1xcdWMwMDBcXHVkODM1XFx1ZGQ1NVxcdTAyODA7ZW1wc1xcdTAzMGJcXHUxZDJkXFx1MWQzN1xcdTFkM2RcXHUxZDQycVxcdTAxMDA7ZFxcdTAzNTJcXHUxZDMzb3Q7XFx1NjI1MWludXM7XFx1NjIzOGx1cztcXHU2MjE0cXVhcmU7XFx1NjJhMWJsZWJhcndlZGdcXHhlNVxceGZhblxcdTAxODBhZGhcXHUxMTJlXFx1MWQ1ZFxcdTFkNjdvd25hcnJvd1xceGYzXFx1MWM4M2FycG9vblxcdTAxMDBsclxcdTFkNzJcXHUxZDc2ZWZcXHhmNFxcdTFjYjRpZ2hcXHhmNFxcdTFjYjZcXHUwMTYyXFx1MWQ3ZlxcdTFkODVrYXJvXFx4ZjdcXHUwZjQyXFx1MDI2ZlxcdTFkOGFcXDBcXDBcXHUxZDhlcm47XFx1NjMxZm9wO1xcdTYzMGNcXHUwMTgwY290XFx1MWQ5OFxcdTFkYTNcXHUxZGE2XFx1MDEwMHJ5XFx1MWQ5ZFxcdTFkYTE7XFx1YzAwMFxcdWQ4MzVcXHVkY2I5O1xcdTQ0NTVsO1xcdTY5ZjZyb2s7XFx1NDExMVxcdTAxMDBkclxcdTFkYjBcXHUxZGI0b3Q7XFx1NjJmMWlcXHUwMTAwO2ZcXHUxZGJhXFx1MTgxNlxcdTY1YmZcXHUwMTAwYWhcXHUxZGMwXFx1MWRjM3JcXHhmMlxcdTA0MjlhXFx4ZjJcXHUwZmE2YW5nbGU7XFx1NjlhNlxcdTAxMDBjaVxcdTFkZDJcXHUxZGQ1eTtcXHU0NDVmZ3JhcnI7XFx1NjdmZlxcdTA5MDBEYWNkZWZnbG1ub3BxcnN0dXhcXHUxZTAxXFx1MWUwOVxcdTFlMTlcXHUxZTM4XFx1MDU3OFxcdTFlM2NcXHUxZTQ5XFx1MWU2MVxcdTFlN2VcXHUxZWE1XFx1MWVhZlxcdTFlYmRcXHUxZWUxXFx1MWYyYVxcdTFmMzdcXHUxZjQ0XFx1MWY0ZVxcdTFmNWFcXHUwMTAwRG9cXHUxZTA2XFx1MWQzNG9cXHhmNFxcdTFjODlcXHUwMTAwY3NcXHUxZTBlXFx1MWUxNHV0ZVxcdTgwM2JcXHhlOVxcdTQwZTl0ZXI7XFx1NmE2ZVxcdTAyMDBhaW95XFx1MWUyMlxcdTFlMjdcXHUxZTMxXFx1MWUzNnJvbjtcXHU0MTFiclxcdTAxMDA7Y1xcdTFlMmRcXHUxZTJlXFx1NjI1NlxcdTgwM2JcXHhlYVxcdTQwZWFsb247XFx1NjI1NTtcXHU0NDRkb3Q7XFx1NDExN1xcdTAxMDBEclxcdTFlNDFcXHUxZTQ1b3Q7XFx1NjI1MjtcXHVjMDAwXFx1ZDgzNVxcdWRkMjJcXHUwMTgwO3JzXFx1MWU1MFxcdTFlNTFcXHUxZTU3XFx1NmE5YWF2ZVxcdTgwM2JcXHhlOFxcdTQwZThcXHUwMTAwO2RcXHUxZTVjXFx1MWU1ZFxcdTZhOTZvdDtcXHU2YTk4XFx1MDIwMDtpbHNcXHUxZTZhXFx1MWU2YlxcdTFlNzJcXHUxZTc0XFx1NmE5OW50ZXJzO1xcdTYzZTc7XFx1NjExM1xcdTAxMDA7ZFxcdTFlNzlcXHUxZTdhXFx1NmE5NW90O1xcdTZhOTdcXHUwMTgwYXBzXFx1MWU4NVxcdTFlODlcXHUxZTk3Y3I7XFx1NDExM3R5XFx1MDE4MDtzdlxcdTFlOTJcXHUxZTkzXFx1MWU5NVxcdTYyMDVldFxceGJiXFx1MWU5M3BcXHUwMTAwMTtcXHUxZTlkXFx1MWVhNFxcdTAxMzNcXHUxZWExXFx1MWVhMztcXHU2MDA0O1xcdTYwMDVcXHU2MDAzXFx1MDEwMGdzXFx1MWVhYVxcdTFlYWM7XFx1NDE0YnA7XFx1NjAwMlxcdTAxMDBncFxcdTFlYjRcXHUxZWI4b247XFx1NDExOWY7XFx1YzAwMFxcdWQ4MzVcXHVkZDU2XFx1MDE4MGFsc1xcdTFlYzRcXHUxZWNlXFx1MWVkMnJcXHUwMTAwO3NcXHUxZWNhXFx1MWVjYlxcdTYyZDVsO1xcdTY5ZTN1cztcXHU2YTcxaVxcdTAxODA7bHZcXHUxZWRhXFx1MWVkYlxcdTFlZGZcXHU0M2I1b25cXHhiYlxcdTFlZGI7XFx1NDNmNVxcdTAyMDBjc3V2XFx1MWVlYVxcdTFlZjNcXHUxZjBiXFx1MWYyM1xcdTAxMDBpb1xcdTFlZWZcXHUxZTMxcmNcXHhiYlxcdTFlMmVcXHUwMjY5XFx1MWVmOVxcMFxcMFxcdTFlZmJcXHhlZFxcdTA1NDhhbnRcXHUwMTAwZ2xcXHUxZjAyXFx1MWYwNnRyXFx4YmJcXHUxZTVkZXNzXFx4YmJcXHUxZTdhXFx1MDE4MGFlaVxcdTFmMTJcXHUxZjE2XFx1MWYxYWxzO1xcdTQwM2RzdDtcXHU2MjVmdlxcdTAxMDA7RFxcdTAyMzVcXHUxZjIwRDtcXHU2YTc4cGFyc2w7XFx1NjllNVxcdTAxMDBEYVxcdTFmMmZcXHUxZjMzb3Q7XFx1NjI1M3JyO1xcdTY5NzFcXHUwMTgwY2RpXFx1MWYzZVxcdTFmNDFcXHUxZWY4cjtcXHU2MTJmb1xceGY0XFx1MDM1MlxcdTAxMDBhaFxcdTFmNDlcXHUxZjRiO1xcdTQzYjdcXHU4MDNiXFx4ZjBcXHU0MGYwXFx1MDEwMG1yXFx1MWY1M1xcdTFmNTdsXFx1ODAzYlxceGViXFx1NDBlYm87XFx1NjBhY1xcdTAxODBjaXBcXHUxZjYxXFx1MWY2NFxcdTFmNjdsO1xcdTQwMjFzXFx4ZjRcXHUwNTZlXFx1MDEwMGVvXFx1MWY2Y1xcdTFmNzRjdGF0aW9cXHhlZVxcdTA1NTluZW50aWFsXFx4ZTVcXHUwNTc5XFx1MDllMVxcdTFmOTJcXDBcXHUxZjllXFwwXFx1MWZhMVxcdTFmYTdcXDBcXDBcXHUxZmM2XFx1MWZjY1xcMFxcdTFmZDNcXDBcXHUxZmU2XFx1MWZlYVxcdTIwMDBcXDBcXHUyMDA4XFx1MjA1YWxsaW5nZG90c2VcXHhmMVxcdTFlNDR5O1xcdTQ0NDRtYWxlO1xcdTY2NDBcXHUwMTgwaWxyXFx1MWZhZFxcdTFmYjNcXHUxZmMxbGlnO1xcdTgwMDBcXHVmYjAzXFx1MDI2OVxcdTFmYjlcXDBcXDBcXHUxZmJkZztcXHU4MDAwXFx1ZmIwMGlnO1xcdTgwMDBcXHVmYjA0O1xcdWMwMDBcXHVkODM1XFx1ZGQyM2xpZztcXHU4MDAwXFx1ZmIwMWxpZztcXHVjMDAwZmpcXHUwMTgwYWx0XFx1MWZkOVxcdTFmZGNcXHUxZmUxdDtcXHU2NjZkaWc7XFx1ODAwMFxcdWZiMDJucztcXHU2NWIxb2Y7XFx1NDE5MlxcdTAxZjBcXHUxZmVlXFwwXFx1MWZmM2Y7XFx1YzAwMFxcdWQ4MzVcXHVkZDU3XFx1MDEwMGFrXFx1MDViZlxcdTFmZjdcXHUwMTAwO3ZcXHUxZmZjXFx1MWZmZFxcdTYyZDQ7XFx1NmFkOWFydGludDtcXHU2YTBkXFx1MDEwMGFvXFx1MjAwY1xcdTIwNTVcXHUwMTAwY3NcXHUyMDExXFx1MjA1MlxcdTAzYjFcXHUyMDFhXFx1MjAzMFxcdTIwMzhcXHUyMDQ1XFx1MjA0OFxcMFxcdTIwNTBcXHUwM2IyXFx1MjAyMlxcdTIwMjVcXHUyMDI3XFx1MjAyYVxcdTIwMmNcXDBcXHUyMDJlXFx1ODAzYlxceGJkXFx1NDBiZDtcXHU2MTUzXFx1ODAzYlxceGJjXFx1NDBiYztcXHU2MTU1O1xcdTYxNTk7XFx1NjE1YlxcdTAxYjNcXHUyMDM0XFwwXFx1MjAzNjtcXHU2MTU0O1xcdTYxNTZcXHUwMmI0XFx1MjAzZVxcdTIwNDFcXDBcXDBcXHUyMDQzXFx1ODAzYlxceGJlXFx1NDBiZTtcXHU2MTU3O1xcdTYxNWM1O1xcdTYxNThcXHUwMWI2XFx1MjA0Y1xcMFxcdTIwNGU7XFx1NjE1YTtcXHU2MTVkODtcXHU2MTVlbDtcXHU2MDQ0d247XFx1NjMyMmNyO1xcdWMwMDBcXHVkODM1XFx1ZGNiYlxcdTA4ODBFYWJjZGVmZ2lqbG5vcnN0dlxcdTIwODJcXHUyMDg5XFx1MjA5ZlxcdTIwYTVcXHUyMGIwXFx1MjBiNFxcdTIwZjBcXHUyMGY1XFx1MjBmYVxcdTIwZmZcXHUyMTAzXFx1MjExMlxcdTIxMzhcXHUwMzE3XFx1MjEzZVxcdTIxNTJcXHUyMTllXFx1MDEwMDtsXFx1MDY0ZFxcdTIwODc7XFx1NmE4Y1xcdTAxODBjbXBcXHUyMDkwXFx1MjA5NVxcdTIwOWR1dGU7XFx1NDFmNW1hXFx1MDEwMDtkXFx1MjA5Y1xcdTFjZGFcXHU0M2IzO1xcdTZhODZyZXZlO1xcdTQxMWZcXHUwMTAwaXlcXHUyMGFhXFx1MjBhZXJjO1xcdTQxMWQ7XFx1NDQzM290O1xcdTQxMjFcXHUwMjAwO2xxc1xcdTA2M2VcXHUwNjQyXFx1MjBiZFxcdTIwYzlcXHUwMTgwO3FzXFx1MDYzZVxcdTA2NGNcXHUyMGM0bGFuXFx4ZjRcXHUwNjY1XFx1MDIwMDtjZGxcXHUwNjY1XFx1MjBkMlxcdTIwZDVcXHUyMGU1YztcXHU2YWE5b3RcXHUwMTAwO29cXHUyMGRjXFx1MjBkZFxcdTZhODBcXHUwMTAwO2xcXHUyMGUyXFx1MjBlM1xcdTZhODI7XFx1NmE4NFxcdTAxMDA7ZVxcdTIwZWFcXHUyMGVkXFx1YzAwMFxcdTIyZGJcXHVmZTAwcztcXHU2YTk0cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMjRcXHUwMTAwO2dcXHUwNjczXFx1MDYxYm1lbDtcXHU2MTM3Y3k7XFx1NDQ1M1xcdTAyMDA7RWFqXFx1MDY1YVxcdTIxMGNcXHUyMTBlXFx1MjExMDtcXHU2YTkyO1xcdTZhYTU7XFx1NmFhNFxcdTAyMDBFYWVzXFx1MjExYlxcdTIxMWRcXHUyMTI5XFx1MjEzNDtcXHU2MjY5cFxcdTAxMDA7cFxcdTIxMjNcXHUyMTI0XFx1NmE4YXJveFxceGJiXFx1MjEyNFxcdTAxMDA7cVxcdTIxMmVcXHUyMTJmXFx1NmE4OFxcdTAxMDA7cVxcdTIxMmVcXHUyMTFiaW07XFx1NjJlN3BmO1xcdWMwMDBcXHVkODM1XFx1ZGQ1OFxcdTAxMDBjaVxcdTIxNDNcXHUyMTQ2cjtcXHU2MTBhbVxcdTAxODA7ZWxcXHUwNjZiXFx1MjE0ZVxcdTIxNTA7XFx1NmE4ZTtcXHU2YTkwXFx1ODMwMD47Y2RscXJcXHUwNWVlXFx1MjE2MFxcdTIxNmFcXHUyMTZlXFx1MjE3M1xcdTIxNzlcXHUwMTAwY2lcXHUyMTY1XFx1MjE2NztcXHU2YWE3cjtcXHU2YTdhb3Q7XFx1NjJkN1BhcjtcXHU2OTk1dWVzdDtcXHU2YTdjXFx1MDI4MGFkZWxzXFx1MjE4NFxcdTIxNmFcXHUyMTkwXFx1MDY1NlxcdTIxOWJcXHUwMWYwXFx1MjE4OVxcMFxcdTIxOGVwcm9cXHhmOFxcdTIwOWVyO1xcdTY5NzhxXFx1MDEwMGxxXFx1MDYzZlxcdTIxOTZsZXNcXHhmM1xcdTIwODhpXFx4ZWRcXHUwNjZiXFx1MDEwMGVuXFx1MjFhM1xcdTIxYWRydG5lcXE7XFx1YzAwMFxcdTIyNjlcXHVmZTAwXFx4YzVcXHUyMWFhXFx1MDUwMEFhYmNlZmtvc3lcXHUyMWM0XFx1MjFjN1xcdTIxZjFcXHUyMWY1XFx1MjFmYVxcdTIyMThcXHUyMjFkXFx1MjIyZlxcdTIyNjhcXHUyMjdkclxceGYyXFx1MDNhMFxcdTAyMDBpbG1yXFx1MjFkMFxcdTIxZDRcXHUyMWQ3XFx1MjFkYnJzXFx4ZjBcXHUxNDg0ZlxceGJiXFx1MjAyNGlsXFx4ZjRcXHUwNmE5XFx1MDEwMGRyXFx1MjFlMFxcdTIxZTRjeTtcXHU0NDRhXFx1MDE4MDtjd1xcdTA4ZjRcXHUyMWViXFx1MjFlZmlyO1xcdTY5NDg7XFx1NjFhZGFyO1xcdTYxMGZpcmM7XFx1NDEyNVxcdTAxODBhbHJcXHUyMjAxXFx1MjIwZVxcdTIyMTNydHNcXHUwMTAwO3VcXHUyMjA5XFx1MjIwYVxcdTY2NjVpdFxceGJiXFx1MjIwYWxpcDtcXHU2MDI2Y29uO1xcdTYyYjlyO1xcdWMwMDBcXHVkODM1XFx1ZGQyNXNcXHUwMTAwZXdcXHUyMjIzXFx1MjIyOWFyb3c7XFx1NjkyNWFyb3c7XFx1NjkyNlxcdTAyODBhbW9wclxcdTIyM2FcXHUyMjNlXFx1MjI0M1xcdTIyNWVcXHUyMjYzcnI7XFx1NjFmZnRodDtcXHU2MjNia1xcdTAxMDBsclxcdTIyNDlcXHUyMjUzZWZ0YXJyb3c7XFx1NjFhOWlnaHRhcnJvdztcXHU2MWFhZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNTliYXI7XFx1NjAxNVxcdTAxODBjbHRcXHUyMjZmXFx1MjI3NFxcdTIyNzhyO1xcdWMwMDBcXHVkODM1XFx1ZGNiZGFzXFx4ZThcXHUyMWY0cm9rO1xcdTQxMjdcXHUwMTAwYnBcXHUyMjgyXFx1MjI4N3VsbDtcXHU2MDQzaGVuXFx4YmJcXHUxYzViXFx1MGFlMVxcdTIyYTNcXDBcXHUyMmFhXFwwXFx1MjJiOFxcdTIyYzVcXHUyMmNlXFwwXFx1MjJkNVxcdTIyZjNcXDBcXDBcXHUyMmY4XFx1MjMyMlxcdTIzNjdcXHUyMzYyXFx1MjM3ZlxcMFxcdTIzODZcXHUyM2FhXFx1MjNiNGN1dGVcXHU4MDNiXFx4ZWRcXHU0MGVkXFx1MDE4MDtpeVxcdTA3NzFcXHUyMmIwXFx1MjJiNXJjXFx1ODAzYlxceGVlXFx1NDBlZTtcXHU0NDM4XFx1MDEwMGN4XFx1MjJiY1xcdTIyYmZ5O1xcdTQ0MzVjbFxcdTgwM2JcXHhhMVxcdTQwYTFcXHUwMTAwZnJcXHUwMzlmXFx1MjJjOTtcXHVjMDAwXFx1ZDgzNVxcdWRkMjZyYXZlXFx1ODAzYlxceGVjXFx1NDBlY1xcdTAyMDA7aW5vXFx1MDczZVxcdTIyZGRcXHUyMmU5XFx1MjJlZVxcdTAxMDBpblxcdTIyZTJcXHUyMmU2bnQ7XFx1NmEwY3Q7XFx1NjIyZGZpbjtcXHU2OWRjdGE7XFx1NjEyOWxpZztcXHU0MTMzXFx1MDE4MGFvcFxcdTIyZmVcXHUyMzFhXFx1MjMxZFxcdTAxODBjZ3RcXHUyMzA1XFx1MjMwOFxcdTIzMTdyO1xcdTQxMmJcXHUwMTgwZWxwXFx1MDcxZlxcdTIzMGZcXHUyMzEzaW5cXHhlNVxcdTA3OGVhclxceGY0XFx1MDcyMGg7XFx1NDEzMWY7XFx1NjJiN2VkO1xcdTQxYjVcXHUwMjgwO2Nmb3RcXHUwNGY0XFx1MjMyY1xcdTIzMzFcXHUyMzNkXFx1MjM0MWFyZTtcXHU2MTA1aW5cXHUwMTAwO3RcXHUyMzM4XFx1MjMzOVxcdTYyMWVpZTtcXHU2OWRkZG9cXHhmNFxcdTIzMTlcXHUwMjgwO2NlbHBcXHUwNzU3XFx1MjM0Y1xcdTIzNTBcXHUyMzViXFx1MjM2MWFsO1xcdTYyYmFcXHUwMTAwZ3JcXHUyMzU1XFx1MjM1OWVyXFx4ZjNcXHUxNTYzXFx4ZTNcXHUyMzRkYXJoaztcXHU2YTE3cm9kO1xcdTZhM2NcXHUwMjAwY2dwdFxcdTIzNmZcXHUyMzcyXFx1MjM3NlxcdTIzN2J5O1xcdTQ0NTFvbjtcXHU0MTJmZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNWFhO1xcdTQzYjl1ZXN0XFx1ODAzYlxceGJmXFx1NDBiZlxcdTAxMDBjaVxcdTIzOGFcXHUyMzhmcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYmVuXFx1MDI4MDtFZHN2XFx1MDRmNFxcdTIzOWJcXHUyMzlkXFx1MjNhMVxcdTA0ZjM7XFx1NjJmOW90O1xcdTYyZjVcXHUwMTAwO3ZcXHUyM2E2XFx1MjNhN1xcdTYyZjQ7XFx1NjJmM1xcdTAxMDA7aVxcdTA3NzdcXHUyM2FlbGRlO1xcdTQxMjlcXHUwMWViXFx1MjNiOFxcMFxcdTIzYmNjeTtcXHU0NDU2bFxcdTgwM2JcXHhlZlxcdTQwZWZcXHUwMzAwY2Ztb3N1XFx1MjNjY1xcdTIzZDdcXHUyM2RjXFx1MjNlMVxcdTIzZTdcXHUyM2Y1XFx1MDEwMGl5XFx1MjNkMVxcdTIzZDVyYztcXHU0MTM1O1xcdTQ0MzlyO1xcdWMwMDBcXHVkODM1XFx1ZGQyN2F0aDtcXHU0MjM3cGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDViXFx1MDFlM1xcdTIzZWNcXDBcXHUyM2YxcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYmZyY3k7XFx1NDQ1OGtjeTtcXHU0NDU0XFx1MDQwMGFjZmdoam9zXFx1MjQwYlxcdTI0MTZcXHUyNDIyXFx1MjQyN1xcdTI0MmRcXHUyNDMxXFx1MjQzNVxcdTI0M2JwcGFcXHUwMTAwO3ZcXHUyNDEzXFx1MjQxNFxcdTQzYmE7XFx1NDNmMFxcdTAxMDBleVxcdTI0MWJcXHUyNDIwZGlsO1xcdTQxMzc7XFx1NDQzYXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDI4cmVlbjtcXHU0MTM4Y3k7XFx1NDQ0NWN5O1xcdTQ0NWNwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNWNjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYzBcXHUwYjgwQUJFSGFiY2RlZmdoamxtbm9wcnN0dXZcXHUyNDcwXFx1MjQ4MVxcdTI0ODZcXHUyNDhkXFx1MjQ5MVxcdTI1MGVcXHUyNTNkXFx1MjU1YVxcdTI1ODBcXHUyNjRlXFx1MjY1ZVxcdTI2NjVcXHUyNjc5XFx1MjY3ZFxcdTI2OWFcXHUyNmIyXFx1MjZkOFxcdTI3NWRcXHUyNzY4XFx1Mjc4YlxcdTI3YzBcXHUyODAxXFx1MjgxMlxcdTAxODBhcnRcXHUyNDc3XFx1MjQ3YVxcdTI0N2NyXFx4ZjJcXHUwOWM2XFx4ZjJcXHUwMzk1YWlsO1xcdTY5MWJhcnI7XFx1NjkwZVxcdTAxMDA7Z1xcdTA5OTRcXHUyNDhiO1xcdTZhOGJhcjtcXHU2OTYyXFx1MDk2M1xcdTI0YTVcXDBcXHUyNGFhXFwwXFx1MjRiMVxcMFxcMFxcMFxcMFxcMFxcdTI0YjVcXHUyNGJhXFwwXFx1MjRjNlxcdTI0YzhcXHUyNGNkXFwwXFx1MjRmOXV0ZTtcXHU0MTNhbXB0eXY7XFx1NjliNHJhXFx4ZWVcXHUwODRjYmRhO1xcdTQzYmJnXFx1MDE4MDtkbFxcdTA4OGVcXHUyNGMxXFx1MjRjMztcXHU2OTkxXFx4ZTVcXHUwODhlO1xcdTZhODV1b1xcdTgwM2JcXHhhYlxcdTQwYWJyXFx1MDQwMDtiZmhscHN0XFx1MDg5OVxcdTI0ZGVcXHUyNGU2XFx1MjRlOVxcdTI0ZWJcXHUyNGVlXFx1MjRmMVxcdTI0ZjVcXHUwMTAwO2ZcXHUwODlkXFx1MjRlM3M7XFx1NjkxZnM7XFx1NjkxZFxceGViXFx1MjI1MnA7XFx1NjFhYmw7XFx1NjkzOWltO1xcdTY5NzNsO1xcdTYxYTJcXHUwMTgwO2FlXFx1MjRmZlxcdTI1MDBcXHUyNTA0XFx1NmFhYmlsO1xcdTY5MTlcXHUwMTAwO3NcXHUyNTA5XFx1MjUwYVxcdTZhYWQ7XFx1YzAwMFxcdTJhYWRcXHVmZTAwXFx1MDE4MGFiclxcdTI1MTVcXHUyNTE5XFx1MjUxZHJyO1xcdTY5MGNyaztcXHU2NzcyXFx1MDEwMGFrXFx1MjUyMlxcdTI1MmNjXFx1MDEwMGVrXFx1MjUyOFxcdTI1MmE7XFx1NDA3YjtcXHU0MDViXFx1MDEwMGVzXFx1MjUzMVxcdTI1MzM7XFx1Njk4YmxcXHUwMTAwZHVcXHUyNTM5XFx1MjUzYjtcXHU2OThmO1xcdTY5OGRcXHUwMjAwYWV1eVxcdTI1NDZcXHUyNTRiXFx1MjU1NlxcdTI1NThyb247XFx1NDEzZVxcdTAxMDBkaVxcdTI1NTBcXHUyNTU0aWw7XFx1NDEzY1xceGVjXFx1MDhiMFxceGUyXFx1MjUyOTtcXHU0NDNiXFx1MDIwMGNxcnNcXHUyNTYzXFx1MjU2NlxcdTI1NmRcXHUyNTdkYTtcXHU2OTM2dW9cXHUwMTAwO3JcXHUwZTE5XFx1MTc0NlxcdTAxMDBkdVxcdTI1NzJcXHUyNTc3aGFyO1xcdTY5NjdzaGFyO1xcdTY5NGJoO1xcdTYxYjJcXHUwMjgwO2ZncXNcXHUyNThiXFx1MjU4Y1xcdTA5ODlcXHUyNWYzXFx1MjVmZlxcdTYyNjR0XFx1MDI4MGFobHJ0XFx1MjU5OFxcdTI1YTRcXHUyNWI3XFx1MjVjMlxcdTI1ZThycm93XFx1MDEwMDt0XFx1MDg5OVxcdTI1YTFhXFx4ZTlcXHUyNGY2YXJwb29uXFx1MDEwMGR1XFx1MjVhZlxcdTI1YjRvd25cXHhiYlxcdTA0NWFwXFx4YmJcXHUwOTY2ZWZ0YXJyb3dzO1xcdTYxYzdpZ2h0XFx1MDE4MGFoc1xcdTI1Y2RcXHUyNWQ2XFx1MjVkZXJyb3dcXHUwMTAwO3NcXHUwOGY0XFx1MDhhN2FycG9vblxceGYzXFx1MGY5OHF1aWdhcnJvXFx4ZjdcXHUyMWYwaHJlZXRpbWVzO1xcdTYyY2JcXHUwMTgwO3FzXFx1MjU4YlxcdTA5OTNcXHUyNWZhbGFuXFx4ZjRcXHUwOWFjXFx1MDI4MDtjZGdzXFx1MDlhY1xcdTI2MGFcXHUyNjBkXFx1MjYxZFxcdTI2MjhjO1xcdTZhYThvdFxcdTAxMDA7b1xcdTI2MTRcXHUyNjE1XFx1NmE3ZlxcdTAxMDA7clxcdTI2MWFcXHUyNjFiXFx1NmE4MTtcXHU2YTgzXFx1MDEwMDtlXFx1MjYyMlxcdTI2MjVcXHVjMDAwXFx1MjJkYVxcdWZlMDBzO1xcdTZhOTNcXHUwMjgwYWRlZ3NcXHUyNjMzXFx1MjYzOVxcdTI2M2RcXHUyNjQ5XFx1MjY0YnBwcm9cXHhmOFxcdTI0YzZvdDtcXHU2MmQ2cVxcdTAxMDBncVxcdTI2NDNcXHUyNjQ1XFx4ZjRcXHUwOTg5Z3RcXHhmMlxcdTI0OGNcXHhmNFxcdTA5OWJpXFx4ZWRcXHUwOWIyXFx1MDE4MGlsclxcdTI2NTVcXHUwOGUxXFx1MjY1YXNodDtcXHU2OTdjO1xcdWMwMDBcXHVkODM1XFx1ZGQyOVxcdTAxMDA7RVxcdTA5OWNcXHUyNjYzO1xcdTZhOTFcXHUwMTYxXFx1MjY2OVxcdTI2NzZyXFx1MDEwMGR1XFx1MjViMlxcdTI2NmVcXHUwMTAwO2xcXHUwOTY1XFx1MjY3MztcXHU2OTZhbGs7XFx1NjU4NGN5O1xcdTQ0NTlcXHUwMjgwO2FjaHRcXHUwYTQ4XFx1MjY4OFxcdTI2OGJcXHUyNjkxXFx1MjY5NnJcXHhmMlxcdTI1YzFvcm5lXFx4ZjJcXHUxZDA4YXJkO1xcdTY5NmJyaTtcXHU2NWZhXFx1MDEwMGlvXFx1MjY5ZlxcdTI2YTRkb3Q7XFx1NDE0MHVzdFxcdTAxMDA7YVxcdTI2YWNcXHUyNmFkXFx1NjNiMGNoZVxceGJiXFx1MjZhZFxcdTAyMDBFYWVzXFx1MjZiYlxcdTI2YmRcXHUyNmM5XFx1MjZkNDtcXHU2MjY4cFxcdTAxMDA7cFxcdTI2YzNcXHUyNmM0XFx1NmE4OXJveFxceGJiXFx1MjZjNFxcdTAxMDA7cVxcdTI2Y2VcXHUyNmNmXFx1NmE4N1xcdTAxMDA7cVxcdTI2Y2VcXHUyNmJiaW07XFx1NjJlNlxcdTA0MDBhYm5vcHR3elxcdTI2ZTlcXHUyNmY0XFx1MjZmN1xcdTI3MWFcXHUyNzJmXFx1Mjc0MVxcdTI3NDdcXHUyNzUwXFx1MDEwMG5yXFx1MjZlZVxcdTI2ZjFnO1xcdTY3ZWNyO1xcdTYxZmRyXFx4ZWJcXHUwOGMxZ1xcdTAxODBsbXJcXHUyNmZmXFx1MjcwZFxcdTI3MTRlZnRcXHUwMTAwYXJcXHUwOWU2XFx1MjcwN2lnaHRcXHhlMVxcdTA5ZjJhcHN0bztcXHU2N2ZjaWdodFxceGUxXFx1MDlmZHBhcnJvd1xcdTAxMDBsclxcdTI3MjVcXHUyNzI5ZWZcXHhmNFxcdTI0ZWRpZ2h0O1xcdTYxYWNcXHUwMTgwYWZsXFx1MjczNlxcdTI3MzlcXHUyNzNkcjtcXHU2OTg1O1xcdWMwMDBcXHVkODM1XFx1ZGQ1ZHVzO1xcdTZhMmRpbWVzO1xcdTZhMzRcXHUwMTYxXFx1Mjc0YlxcdTI3NGZzdDtcXHU2MjE3XFx4ZTFcXHUxMzRlXFx1MDE4MDtlZlxcdTI3NTdcXHUyNzU4XFx1MTgwMFxcdTY1Y2FuZ2VcXHhiYlxcdTI3NThhclxcdTAxMDA7bFxcdTI3NjRcXHUyNzY1XFx1NDAyOHQ7XFx1Njk5M1xcdTAyODBhY2htdFxcdTI3NzNcXHUyNzc2XFx1Mjc3Y1xcdTI3ODVcXHUyNzg3clxceGYyXFx1MDhhOG9ybmVcXHhmMlxcdTFkOGNhclxcdTAxMDA7ZFxcdTBmOThcXHUyNzgzO1xcdTY5NmQ7XFx1NjAwZXJpO1xcdTYyYmZcXHUwMzAwYWNoaXF0XFx1Mjc5OFxcdTI3OWRcXHUwYTQwXFx1MjdhMlxcdTI3YWVcXHUyN2JicXVvO1xcdTYwMzlyO1xcdWMwMDBcXHVkODM1XFx1ZGNjMW1cXHUwMTgwO2VnXFx1MDliMlxcdTI3YWFcXHUyN2FjO1xcdTZhOGQ7XFx1NmE4ZlxcdTAxMDBidVxcdTI1MmFcXHUyN2Izb1xcdTAxMDA7clxcdTBlMWZcXHUyN2I5O1xcdTYwMWFyb2s7XFx1NDE0MlxcdTg0MDA8O2NkaGlscXJcXHUwODJiXFx1MjdkMlxcdTI2MzlcXHUyN2RjXFx1MjdlMFxcdTI3ZTVcXHUyN2VhXFx1MjdmMFxcdTAxMDBjaVxcdTI3ZDdcXHUyN2Q5O1xcdTZhYTZyO1xcdTZhNzlyZVxceGU1XFx1MjVmMm1lcztcXHU2MmM5YXJyO1xcdTY5NzZ1ZXN0O1xcdTZhN2JcXHUwMTAwUGlcXHUyN2Y1XFx1MjdmOWFyO1xcdTY5OTZcXHUwMTgwO2VmXFx1MjgwMFxcdTA5MmRcXHUxODFiXFx1NjVjM3JcXHUwMTAwZHVcXHUyODA3XFx1MjgwZHNoYXI7XFx1Njk0YWhhcjtcXHU2OTY2XFx1MDEwMGVuXFx1MjgxN1xcdTI4MjFydG5lcXE7XFx1YzAwMFxcdTIyNjhcXHVmZTAwXFx4YzVcXHUyODFlXFx1MDcwMERhY2RlZmhpbG5vcHN1XFx1Mjg0MFxcdTI4NDVcXHUyODgyXFx1Mjg4ZVxcdTI4OTNcXHUyOGEwXFx1MjhhNVxcdTI4YThcXHUyOGRhXFx1MjhlMlxcdTI4ZTRcXHUwYTgzXFx1MjhmM1xcdTI5MDJEb3Q7XFx1NjIzYVxcdTAyMDBjbHByXFx1Mjg0ZVxcdTI4NTJcXHUyODYzXFx1Mjg3ZHJcXHU4MDNiXFx4YWZcXHU0MGFmXFx1MDEwMGV0XFx1Mjg1N1xcdTI4NTk7XFx1NjY0MlxcdTAxMDA7ZVxcdTI4NWVcXHUyODVmXFx1NjcyMHNlXFx4YmJcXHUyODVmXFx1MDEwMDtzXFx1MTAzYlxcdTI4Njh0b1xcdTAyMDA7ZGx1XFx1MTAzYlxcdTI4NzNcXHUyODc3XFx1Mjg3Ym93XFx4ZWVcXHUwNDhjZWZcXHhmNFxcdTA5MGZcXHhmMFxcdTEzZDFrZXI7XFx1NjVhZVxcdTAxMDBveVxcdTI4ODdcXHUyODhjbW1hO1xcdTZhMjk7XFx1NDQzY2FzaDtcXHU2MDE0YXN1cmVkYW5nbGVcXHhiYlxcdTE2MjZyO1xcdWMwMDBcXHVkODM1XFx1ZGQyYW87XFx1NjEyN1xcdTAxODBjZG5cXHUyOGFmXFx1MjhiNFxcdTI4Yzlyb1xcdTgwM2JcXHhiNVxcdTQwYjVcXHUwMjAwO2FjZFxcdTE0NjRcXHUyOGJkXFx1MjhjMFxcdTI4YzRzXFx4ZjRcXHUxNmE3aXI7XFx1NmFmMG90XFx1ODBiYlxceGI3XFx1MDFiNXVzXFx1MDE4MDtiZFxcdTI4ZDJcXHUxOTAzXFx1MjhkM1xcdTYyMTJcXHUwMTAwO3VcXHUxZDNjXFx1MjhkODtcXHU2YTJhXFx1MDE2M1xcdTI4ZGVcXHUyOGUxcDtcXHU2YWRiXFx4ZjJcXHUyMjEyXFx4ZjBcXHUwYTgxXFx1MDEwMGRwXFx1MjhlOVxcdTI4ZWVlbHM7XFx1NjJhN2Y7XFx1YzAwMFxcdWQ4MzVcXHVkZDVlXFx1MDEwMGN0XFx1MjhmOFxcdTI4ZmRyO1xcdWMwMDBcXHVkODM1XFx1ZGNjMnBvc1xceGJiXFx1MTU5ZFxcdTAxODA7bG1cXHUyOTA5XFx1MjkwYVxcdTI5MGRcXHU0M2JjdGltYXA7XFx1NjJiOFxcdTBjMDBHTFJWYWJjZGVmZ2hpamxtb3Byc3R1dndcXHUyOTQyXFx1Mjk1M1xcdTI5N2VcXHUyOTg5XFx1Mjk5OFxcdTI5ZGFcXHUyOWU5XFx1MmExNVxcdTJhMWFcXHUyYTU4XFx1MmE1ZFxcdTJhODNcXHUyYTk1XFx1MmFhNFxcdTJhYThcXHUyYjA0XFx1MmIwN1xcdTJiNDRcXHUyYjdmXFx1MmJhZVxcdTJjMzRcXHUyYzY3XFx1MmM3Y1xcdTJjZTlcXHUwMTAwZ3RcXHUyOTQ3XFx1Mjk0YjtcXHVjMDAwXFx1MjJkOVxcdTAzMzhcXHUwMTAwO3ZcXHUyOTUwXFx1MGJjZlxcdWMwMDBcXHUyMjZiXFx1MjBkMlxcdTAxODBlbHRcXHUyOTVhXFx1Mjk3MlxcdTI5NzZmdFxcdTAxMDBhclxcdTI5NjFcXHUyOTY3cnJvdztcXHU2MWNkaWdodGFycm93O1xcdTYxY2U7XFx1YzAwMFxcdTIyZDhcXHUwMzM4XFx1MDEwMDt2XFx1Mjk3YlxcdTBjNDdcXHVjMDAwXFx1MjI2YVxcdTIwZDJpZ2h0YXJyb3c7XFx1NjFjZlxcdTAxMDBEZFxcdTI5OGVcXHUyOTkzYXNoO1xcdTYyYWZhc2g7XFx1NjJhZVxcdTAyODBiY25wdFxcdTI5YTNcXHUyOWE3XFx1MjlhY1xcdTI5YjFcXHUyOWNjbGFcXHhiYlxcdTAyZGV1dGU7XFx1NDE0NGc7XFx1YzAwMFxcdTIyMjBcXHUyMGQyXFx1MDI4MDtFaW9wXFx1MGQ4NFxcdTI5YmNcXHUyOWMwXFx1MjljNVxcdTI5Yzg7XFx1YzAwMFxcdTJhNzBcXHUwMzM4ZDtcXHVjMDAwXFx1MjI0YlxcdTAzMzhzO1xcdTQxNDlyb1xceGY4XFx1MGQ4NHVyXFx1MDEwMDthXFx1MjlkM1xcdTI5ZDRcXHU2NjZlbFxcdTAxMDA7c1xcdTI5ZDNcXHUwYjM4XFx1MDFmM1xcdTI5ZGZcXDBcXHUyOWUzcFxcdTgwYmJcXHhhMFxcdTBiMzdtcFxcdTAxMDA7ZVxcdTBiZjlcXHUwYzAwXFx1MDI4MGFlb3V5XFx1MjlmNFxcdTI5ZmVcXHUyYTAzXFx1MmExMFxcdTJhMTNcXHUwMWYwXFx1MjlmOVxcMFxcdTI5ZmI7XFx1NmE0M29uO1xcdTQxNDhkaWw7XFx1NDE0Nm5nXFx1MDEwMDtkXFx1MGQ3ZVxcdTJhMGFvdDtcXHVjMDAwXFx1MmE2ZFxcdTAzMzhwO1xcdTZhNDI7XFx1NDQzZGFzaDtcXHU2MDEzXFx1MDM4MDtBYWRxc3hcXHUwYjkyXFx1MmEyOVxcdTJhMmRcXHUyYTNiXFx1MmE0MVxcdTJhNDVcXHUyYTUwcnI7XFx1NjFkN3JcXHUwMTAwaHJcXHUyYTMzXFx1MmEzNms7XFx1NjkyNFxcdTAxMDA7b1xcdTEzZjJcXHUxM2Ywb3Q7XFx1YzAwMFxcdTIyNTBcXHUwMzM4dWlcXHhmNlxcdTBiNjNcXHUwMTAwZWlcXHUyYTRhXFx1MmE0ZWFyO1xcdTY5MjhcXHhlZFxcdTBiOThpc3RcXHUwMTAwO3NcXHUwYmEwXFx1MGI5ZnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDJiXFx1MDIwMEVlc3RcXHUwYmM1XFx1MmE2NlxcdTJhNzlcXHUyYTdjXFx1MDE4MDtxc1xcdTBiYmNcXHUyYTZkXFx1MGJlMVxcdTAxODA7cXNcXHUwYmJjXFx1MGJjNVxcdTJhNzRsYW5cXHhmNFxcdTBiZTJpXFx4ZWRcXHUwYmVhXFx1MDEwMDtyXFx1MGJiNlxcdTJhODFcXHhiYlxcdTBiYjdcXHUwMTgwQWFwXFx1MmE4YVxcdTJhOGRcXHUyYTkxclxceGYyXFx1Mjk3MXJyO1xcdTYxYWVhcjtcXHU2YWYyXFx1MDE4MDtzdlxcdTBmOGRcXHUyYTljXFx1MGY4Y1xcdTAxMDA7ZFxcdTJhYTFcXHUyYWEyXFx1NjJmYztcXHU2MmZhY3k7XFx1NDQ1YVxcdTAzODBBRWFkZXN0XFx1MmFiN1xcdTJhYmFcXHUyYWJlXFx1MmFjMlxcdTJhYzVcXHUyYWY2XFx1MmFmOXJcXHhmMlxcdTI5NjY7XFx1YzAwMFxcdTIyNjZcXHUwMzM4cnI7XFx1NjE5YXI7XFx1NjAyNVxcdTAyMDA7ZnFzXFx1MGMzYlxcdTJhY2VcXHUyYWUzXFx1MmFlZnRcXHUwMTAwYXJcXHUyYWQ0XFx1MmFkOXJyb1xceGY3XFx1MmFjMWlnaHRhcnJvXFx4ZjdcXHUyYTkwXFx1MDE4MDtxc1xcdTBjM2JcXHUyYWJhXFx1MmFlYWxhblxceGY0XFx1MGM1NVxcdTAxMDA7c1xcdTBjNTVcXHUyYWY0XFx4YmJcXHUwYzM2aVxceGVkXFx1MGM1ZFxcdTAxMDA7clxcdTBjMzVcXHUyYWZlaVxcdTAxMDA7ZVxcdTBjMWFcXHUwYzI1aVxceGU0XFx1MGQ5MFxcdTAxMDBwdFxcdTJiMGNcXHUyYjExZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNWZcXHU4MTgwXFx4YWM7aW5cXHUyYjE5XFx1MmIxYVxcdTJiMzZcXHU0MGFjblxcdTAyMDA7RWR2XFx1MGI4OVxcdTJiMjRcXHUyYjI4XFx1MmIyZTtcXHVjMDAwXFx1MjJmOVxcdTAzMzhvdDtcXHVjMDAwXFx1MjJmNVxcdTAzMzhcXHUwMWUxXFx1MGI4OVxcdTJiMzNcXHUyYjM1O1xcdTYyZjc7XFx1NjJmNmlcXHUwMTAwO3ZcXHUwY2I4XFx1MmIzY1xcdTAxZTFcXHUwY2I4XFx1MmI0MVxcdTJiNDM7XFx1NjJmZTtcXHU2MmZkXFx1MDE4MGFvclxcdTJiNGJcXHUyYjYzXFx1MmI2OXJcXHUwMjAwO2FzdFxcdTBiN2JcXHUyYjU1XFx1MmI1YVxcdTJiNWZsbGVcXHhlY1xcdTBiN2JsO1xcdWMwMDBcXHUyYWZkXFx1MjBlNTtcXHVjMDAwXFx1MjIwMlxcdTAzMzhsaW50O1xcdTZhMTRcXHUwMTgwO2NlXFx1MGM5MlxcdTJiNzBcXHUyYjczdVxceGU1XFx1MGNhNVxcdTAxMDA7Y1xcdTBjOThcXHUyYjc4XFx1MDEwMDtlXFx1MGM5MlxcdTJiN2RcXHhmMVxcdTBjOThcXHUwMjAwQWFpdFxcdTJiODhcXHUyYjhiXFx1MmI5ZFxcdTJiYTdyXFx4ZjJcXHUyOTg4cnJcXHUwMTgwO2N3XFx1MmI5NFxcdTJiOTVcXHUyYjk5XFx1NjE5YjtcXHVjMDAwXFx1MjkzM1xcdTAzMzg7XFx1YzAwMFxcdTIxOWRcXHUwMzM4Z2h0YXJyb3dcXHhiYlxcdTJiOTVyaVxcdTAxMDA7ZVxcdTBjY2JcXHUwY2Q2XFx1MDM4MGNoaW1wcXVcXHUyYmJkXFx1MmJjZFxcdTJiZDlcXHUyYjA0XFx1MGI3OFxcdTJiZTRcXHUyYmVmXFx1MDIwMDtjZXJcXHUwZDMyXFx1MmJjNlxcdTBkMzdcXHUyYmM5dVxceGU1XFx1MGQ0NTtcXHVjMDAwXFx1ZDgzNVxcdWRjYzNvcnRcXHUwMjZkXFx1MmIwNVxcMFxcMFxcdTJiZDZhclxceGUxXFx1MmI1Nm1cXHUwMTAwO2VcXHUwZDZlXFx1MmJkZlxcdTAxMDA7cVxcdTBkNzRcXHUwZDczc3VcXHUwMTAwYnBcXHUyYmViXFx1MmJlZFxceGU1XFx1MGNmOFxceGU1XFx1MGQwYlxcdTAxODBiY3BcXHUyYmY2XFx1MmMxMVxcdTJjMTlcXHUwMjAwO0Vlc1xcdTJiZmZcXHUyYzAwXFx1MGQyMlxcdTJjMDRcXHU2Mjg0O1xcdWMwMDBcXHUyYWM1XFx1MDMzOGV0XFx1MDEwMDtlXFx1MGQxYlxcdTJjMGJxXFx1MDEwMDtxXFx1MGQyM1xcdTJjMDBjXFx1MDEwMDtlXFx1MGQzMlxcdTJjMTdcXHhmMVxcdTBkMzhcXHUwMjAwO0Vlc1xcdTJjMjJcXHUyYzIzXFx1MGQ1ZlxcdTJjMjdcXHU2Mjg1O1xcdWMwMDBcXHUyYWM2XFx1MDMzOGV0XFx1MDEwMDtlXFx1MGQ1OFxcdTJjMmVxXFx1MDEwMDtxXFx1MGQ2MFxcdTJjMjNcXHUwMjAwZ2lsclxcdTJjM2RcXHUyYzNmXFx1MmM0NVxcdTJjNDdcXHhlY1xcdTBiZDdsZGVcXHU4MDNiXFx4ZjFcXHU0MGYxXFx4ZTdcXHUwYzQzaWFuZ2xlXFx1MDEwMGxyXFx1MmM1MlxcdTJjNWNlZnRcXHUwMTAwO2VcXHUwYzFhXFx1MmM1YVxceGYxXFx1MGMyNmlnaHRcXHUwMTAwO2VcXHUwY2NiXFx1MmM2NVxceGYxXFx1MGNkN1xcdTAxMDA7bVxcdTJjNmNcXHUyYzZkXFx1NDNiZFxcdTAxODA7ZXNcXHUyYzc0XFx1MmM3NVxcdTJjNzlcXHU0MDIzcm87XFx1NjExNnA7XFx1NjAwN1xcdTA0ODBESGFkZ2lscnNcXHUyYzhmXFx1MmM5NFxcdTJjOTlcXHUyYzllXFx1MmNhM1xcdTJjYjBcXHUyY2I2XFx1MmNkM1xcdTJjZTNhc2g7XFx1NjJhZGFycjtcXHU2OTA0cDtcXHVjMDAwXFx1MjI0ZFxcdTIwZDJhc2g7XFx1NjJhY1xcdTAxMDBldFxcdTJjYThcXHUyY2FjO1xcdWMwMDBcXHUyMjY1XFx1MjBkMjtcXHVjMDAwPlxcdTIwZDJuZmluO1xcdTY5ZGVcXHUwMTgwQWV0XFx1MmNiZFxcdTJjYzFcXHUyY2M1cnI7XFx1NjkwMjtcXHVjMDAwXFx1MjI2NFxcdTIwZDJcXHUwMTAwO3JcXHUyY2NhXFx1MmNjZFxcdWMwMDA8XFx1MjBkMmllO1xcdWMwMDBcXHUyMmI0XFx1MjBkMlxcdTAxMDBBdFxcdTJjZDhcXHUyY2RjcnI7XFx1NjkwM3JpZTtcXHVjMDAwXFx1MjJiNVxcdTIwZDJpbTtcXHVjMDAwXFx1MjIzY1xcdTIwZDJcXHUwMTgwQWFuXFx1MmNmMFxcdTJjZjRcXHUyZDAycnI7XFx1NjFkNnJcXHUwMTAwaHJcXHUyY2ZhXFx1MmNmZGs7XFx1NjkyM1xcdTAxMDA7b1xcdTEzZTdcXHUxM2U1ZWFyO1xcdTY5MjdcXHUxMjUzXFx1MWE5NVxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcdTJkMmRcXDBcXHUyZDM4XFx1MmQ0OFxcdTJkNjBcXHUyZDY1XFx1MmQ3MlxcdTJkODRcXHUxYjA3XFwwXFwwXFx1MmQ4ZFxcdTJkYWJcXDBcXHUyZGM4XFx1MmRjZVxcMFxcdTJkZGNcXHUyZTE5XFx1MmUyYlxcdTJlM2VcXHUyZTQzXFx1MDEwMGNzXFx1MmQzMVxcdTFhOTd1dGVcXHU4MDNiXFx4ZjNcXHU0MGYzXFx1MDEwMGl5XFx1MmQzY1xcdTJkNDVyXFx1MDEwMDtjXFx1MWE5ZVxcdTJkNDJcXHU4MDNiXFx4ZjRcXHU0MGY0O1xcdTQ0M2VcXHUwMjgwYWJpb3NcXHUxYWEwXFx1MmQ1MlxcdTJkNTdcXHUwMWM4XFx1MmQ1YWxhYztcXHU0MTUxdjtcXHU2YTM4b2xkO1xcdTY5YmNsaWc7XFx1NDE1M1xcdTAxMDBjclxcdTJkNjlcXHUyZDZkaXI7XFx1NjliZjtcXHVjMDAwXFx1ZDgzNVxcdWRkMmNcXHUwMzZmXFx1MmQ3OVxcMFxcMFxcdTJkN2NcXDBcXHUyZDgybjtcXHU0MmRiYXZlXFx1ODAzYlxceGYyXFx1NDBmMjtcXHU2OWMxXFx1MDEwMGJtXFx1MmQ4OFxcdTBkZjRhcjtcXHU2OWI1XFx1MDIwMGFjaXRcXHUyZDk1XFx1MmQ5OFxcdTJkYTVcXHUyZGE4clxceGYyXFx1MWE4MFxcdTAxMDBpclxcdTJkOWRcXHUyZGEwcjtcXHU2OWJlb3NzO1xcdTY5YmJuXFx4ZTVcXHUwZTUyO1xcdTY5YzBcXHUwMTgwYWVpXFx1MmRiMVxcdTJkYjVcXHUyZGI5Y3I7XFx1NDE0ZGdhO1xcdTQzYzlcXHUwMTgwY2RuXFx1MmRjMFxcdTJkYzVcXHUwMWNkcm9uO1xcdTQzYmY7XFx1NjliNnBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ2MFxcdTAxODBhZWxcXHUyZGQ0XFx1MmRkN1xcdTAxZDJyO1xcdTY5YjdycDtcXHU2OWI5XFx1MDM4MDthZGlvc3ZcXHUyZGVhXFx1MmRlYlxcdTJkZWVcXHUyZTA4XFx1MmUwZFxcdTJlMTBcXHUyZTE2XFx1NjIyOHJcXHhmMlxcdTFhODZcXHUwMjAwO2VmbVxcdTJkZjdcXHUyZGY4XFx1MmUwMlxcdTJlMDVcXHU2YTVkclxcdTAxMDA7b1xcdTJkZmVcXHUyZGZmXFx1NjEzNGZcXHhiYlxcdTJkZmZcXHU4MDNiXFx4YWFcXHU0MGFhXFx1ODAzYlxceGJhXFx1NDBiYWdvZjtcXHU2MmI2cjtcXHU2YTU2bG9wZTtcXHU2YTU3O1xcdTZhNWJcXHUwMTgwY2xvXFx1MmUxZlxcdTJlMjFcXHUyZTI3XFx4ZjJcXHUyZTAxYXNoXFx1ODAzYlxceGY4XFx1NDBmOGw7XFx1NjI5OGlcXHUwMTZjXFx1MmUyZlxcdTJlMzRkZVxcdTgwM2JcXHhmNVxcdTQwZjVlc1xcdTAxMDA7YVxcdTAxZGJcXHUyZTNhcztcXHU2YTM2bWxcXHU4MDNiXFx4ZjZcXHU0MGY2YmFyO1xcdTYzM2RcXHUwYWUxXFx1MmU1ZVxcMFxcdTJlN2RcXDBcXHUyZTgwXFx1MmU5ZFxcMFxcdTJlYTJcXHUyZWI5XFwwXFwwXFx1MmVjYlxcdTBlOWNcXDBcXHUyZjEzXFwwXFwwXFx1MmYyYlxcdTJmYmNcXDBcXHUyZmM4clxcdTAyMDA7YXN0XFx1MDQwM1xcdTJlNjdcXHUyZTcyXFx1MGU4NVxcdTgxMDBcXHhiNjtsXFx1MmU2ZFxcdTJlNmVcXHU0MGI2bGVcXHhlY1xcdTA0MDNcXHUwMjY5XFx1MmU3OFxcMFxcMFxcdTJlN2JtO1xcdTZhZjM7XFx1NmFmZHk7XFx1NDQzZnJcXHUwMjgwY2ltcHRcXHUyZThiXFx1MmU4ZlxcdTJlOTNcXHUxODY1XFx1MmU5N250O1xcdTQwMjVvZDtcXHU0MDJlaWw7XFx1NjAzMGVuaztcXHU2MDMxcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMmRcXHUwMTgwaW1vXFx1MmVhOFxcdTJlYjBcXHUyZWI0XFx1MDEwMDt2XFx1MmVhZFxcdTJlYWVcXHU0M2M2O1xcdTQzZDVtYVxceGY0XFx1MGE3Nm5lO1xcdTY2MGVcXHUwMTgwO3R2XFx1MmViZlxcdTJlYzBcXHUyZWM4XFx1NDNjMGNoZm9ya1xceGJiXFx1MWZmZDtcXHU0M2Q2XFx1MDEwMGF1XFx1MmVjZlxcdTJlZGZuXFx1MDEwMGNrXFx1MmVkNVxcdTJlZGRrXFx1MDEwMDtoXFx1MjFmNFxcdTJlZGI7XFx1NjEwZVxceGY2XFx1MjFmNHNcXHUwNDgwO2FiY2RlbXN0XFx1MmVmM1xcdTJlZjRcXHUxOTA4XFx1MmVmOVxcdTJlZmRcXHUyZjA0XFx1MmYwNlxcdTJmMGFcXHUyZjBlXFx1NDAyYmNpcjtcXHU2YTIzaXI7XFx1NmEyMlxcdTAxMDBvdVxcdTFkNDBcXHUyZjAyO1xcdTZhMjU7XFx1NmE3Mm5cXHU4MGJiXFx4YjFcXHUwZTlkaW07XFx1NmEyNndvO1xcdTZhMjdcXHUwMTgwaXB1XFx1MmYxOVxcdTJmMjBcXHUyZjI1bnRpbnQ7XFx1NmExNWY7XFx1YzAwMFxcdWQ4MzVcXHVkZDYxbmRcXHU4MDNiXFx4YTNcXHU0MGEzXFx1MDUwMDtFYWNlaW5vc3VcXHUwZWM4XFx1MmYzZlxcdTJmNDFcXHUyZjQ0XFx1MmY0N1xcdTJmODFcXHUyZjg5XFx1MmY5MlxcdTJmN2VcXHUyZmI2O1xcdTZhYjNwO1xcdTZhYjd1XFx4ZTVcXHUwZWQ5XFx1MDEwMDtjXFx1MGVjZVxcdTJmNGNcXHUwMzAwO2FjZW5zXFx1MGVjOFxcdTJmNTlcXHUyZjVmXFx1MmY2NlxcdTJmNjhcXHUyZjdlcHByb1xceGY4XFx1MmY0M3VybHllXFx4ZjFcXHUwZWQ5XFx4ZjFcXHUwZWNlXFx1MDE4MGFlc1xcdTJmNmZcXHUyZjc2XFx1MmY3YXBwcm94O1xcdTZhYjlxcTtcXHU2YWI1aW07XFx1NjJlOGlcXHhlZFxcdTBlZGZtZVxcdTAxMDA7c1xcdTJmODhcXHUwZWFlXFx1NjAzMlxcdTAxODBFYXNcXHUyZjc4XFx1MmY5MFxcdTJmN2FcXHhmMFxcdTJmNzVcXHUwMTgwZGZwXFx1MGVlY1xcdTJmOTlcXHUyZmFmXFx1MDE4MGFsc1xcdTJmYTBcXHUyZmE1XFx1MmZhYWxhcjtcXHU2MzJlaW5lO1xcdTYzMTJ1cmY7XFx1NjMxM1xcdTAxMDA7dFxcdTBlZmJcXHUyZmI0XFx4ZWZcXHUwZWZicmVsO1xcdTYyYjBcXHUwMTAwY2lcXHUyZmMwXFx1MmZjNXI7XFx1YzAwMFxcdWQ4MzVcXHVkY2M1O1xcdTQzYzhuY3NwO1xcdTYwMDhcXHUwMzAwZmlvcHN1XFx1MmZkYVxcdTIyZTJcXHUyZmRmXFx1MmZlNVxcdTJmZWJcXHUyZmYxcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMmVwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNjJyaW1lO1xcdTYwNTdjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYzZcXHUwMTgwYWVvXFx1MmZmOFxcdTMwMDlcXHUzMDEzdFxcdTAxMDBlaVxcdTJmZmVcXHUzMDA1cm5pb25cXHhmM1xcdTA2YjBudDtcXHU2YTE2c3RcXHUwMTAwO2VcXHUzMDEwXFx1MzAxMVxcdTQwM2ZcXHhmMVxcdTFmMTlcXHhmNFxcdTBmMTRcXHUwYTgwQUJIYWJjZGVmaGlsbW5vcHJzdHV4XFx1MzA0MFxcdTMwNTFcXHUzMDU1XFx1MzA1OVxcdTMwZTBcXHUzMTBlXFx1MzEyYlxcdTMxNDdcXHUzMTYyXFx1MzE3MlxcdTMxOGVcXHUzMjA2XFx1MzIxNVxcdTMyMjRcXHUzMjI5XFx1MzI1OFxcdTMyNmVcXHUzMjcyXFx1MzI5MFxcdTMyYjBcXHUzMmI3XFx1MDE4MGFydFxcdTMwNDdcXHUzMDRhXFx1MzA0Y3JcXHhmMlxcdTEwYjNcXHhmMlxcdTAzZGRhaWw7XFx1NjkxY2FyXFx4ZjJcXHUxYzY1YXI7XFx1Njk2NFxcdTAzODBjZGVucXJ0XFx1MzA2OFxcdTMwNzVcXHUzMDc4XFx1MzA3ZlxcdTMwOGZcXHUzMDk0XFx1MzBjY1xcdTAxMDBldVxcdTMwNmRcXHUzMDcxO1xcdWMwMDBcXHUyMjNkXFx1MDMzMXRlO1xcdTQxNTVpXFx4ZTNcXHUxMTZlbXB0eXY7XFx1NjliM2dcXHUwMjAwO2RlbFxcdTBmZDFcXHUzMDg5XFx1MzA4YlxcdTMwOGQ7XFx1Njk5MjtcXHU2OWE1XFx4ZTVcXHUwZmQxdW9cXHU4MDNiXFx4YmJcXHU0MGJiclxcdTA1ODA7YWJjZmhscHN0d1xcdTBmZGNcXHUzMGFjXFx1MzBhZlxcdTMwYjdcXHUzMGI5XFx1MzBiY1xcdTMwYmVcXHUzMGMwXFx1MzBjM1xcdTMwYzdcXHUzMGNhcDtcXHU2OTc1XFx1MDEwMDtmXFx1MGZlMFxcdTMwYjRzO1xcdTY5MjA7XFx1NjkzM3M7XFx1NjkxZVxceGViXFx1MjI1ZFxceGYwXFx1MjcyZWw7XFx1Njk0NWltO1xcdTY5NzRsO1xcdTYxYTM7XFx1NjE5ZFxcdTAxMDBhaVxcdTMwZDFcXHUzMGQ1aWw7XFx1NjkxYW9cXHUwMTAwO25cXHUzMGRiXFx1MzBkY1xcdTYyMzZhbFxceGYzXFx1MGYxZVxcdTAxODBhYnJcXHUzMGU3XFx1MzBlYVxcdTMwZWVyXFx4ZjJcXHUxN2U1cms7XFx1Njc3M1xcdTAxMDBha1xcdTMwZjNcXHUzMGZkY1xcdTAxMDBla1xcdTMwZjlcXHUzMGZiO1xcdTQwN2Q7XFx1NDA1ZFxcdTAxMDBlc1xcdTMxMDJcXHUzMTA0O1xcdTY5OGNsXFx1MDEwMGR1XFx1MzEwYVxcdTMxMGM7XFx1Njk4ZTtcXHU2OTkwXFx1MDIwMGFldXlcXHUzMTE3XFx1MzExY1xcdTMxMjdcXHUzMTI5cm9uO1xcdTQxNTlcXHUwMTAwZGlcXHUzMTIxXFx1MzEyNWlsO1xcdTQxNTdcXHhlY1xcdTBmZjJcXHhlMlxcdTMwZmE7XFx1NDQ0MFxcdTAyMDBjbHFzXFx1MzEzNFxcdTMxMzdcXHUzMTNkXFx1MzE0NGE7XFx1NjkzN2RoYXI7XFx1Njk2OXVvXFx1MDEwMDtyXFx1MDIwZVxcdTAyMGRoO1xcdTYxYjNcXHUwMTgwYWNnXFx1MzE0ZVxcdTMxNWZcXHUwZjQ0bFxcdTAyMDA7aXBzXFx1MGY3OFxcdTMxNThcXHUzMTViXFx1MTA5Y25cXHhlNVxcdTEwYmJhclxceGY0XFx1MGZhOXQ7XFx1NjVhZFxcdTAxODBpbHJcXHUzMTY5XFx1MTAyM1xcdTMxNmVzaHQ7XFx1Njk3ZDtcXHVjMDAwXFx1ZDgzNVxcdWRkMmZcXHUwMTAwYW9cXHUzMTc3XFx1MzE4NnJcXHUwMTAwZHVcXHUzMTdkXFx1MzE3ZlxceGJiXFx1MDQ3YlxcdTAxMDA7bFxcdTEwOTFcXHUzMTg0O1xcdTY5NmNcXHUwMTAwO3ZcXHUzMThiXFx1MzE4Y1xcdTQzYzE7XFx1NDNmMVxcdTAxODBnbnNcXHUzMTk1XFx1MzFmOVxcdTMxZmNodFxcdTAzMDBhaGxyc3RcXHUzMWE0XFx1MzFiMFxcdTMxYzJcXHUzMWQ4XFx1MzFlNFxcdTMxZWVycm93XFx1MDEwMDt0XFx1MGZkY1xcdTMxYWRhXFx4ZTlcXHUzMGM4YXJwb29uXFx1MDEwMGR1XFx1MzFiYlxcdTMxYmZvd1xceGVlXFx1MzE3ZXBcXHhiYlxcdTEwOTJlZnRcXHUwMTAwYWhcXHUzMWNhXFx1MzFkMHJyb3dcXHhmM1xcdTBmZWFhcnBvb25cXHhmM1xcdTA1NTFpZ2h0YXJyb3dzO1xcdTYxYzlxdWlnYXJyb1xceGY3XFx1MzBjYmhyZWV0aW1lcztcXHU2MmNjZztcXHU0MmRhaW5nZG90c2VcXHhmMVxcdTFmMzJcXHUwMTgwYWhtXFx1MzIwZFxcdTMyMTBcXHUzMjEzclxceGYyXFx1MGZlYWFcXHhmMlxcdTA1NTE7XFx1NjAwZm91c3RcXHUwMTAwO2FcXHUzMjFlXFx1MzIxZlxcdTYzYjFjaGVcXHhiYlxcdTMyMWZtaWQ7XFx1NmFlZVxcdTAyMDBhYnB0XFx1MzIzMlxcdTMyM2RcXHUzMjQwXFx1MzI1MlxcdTAxMDBuclxcdTMyMzdcXHUzMjNhZztcXHU2N2VkcjtcXHU2MWZlclxceGViXFx1MTAwM1xcdTAxODBhZmxcXHUzMjQ3XFx1MzI0YVxcdTMyNGVyO1xcdTY5ODY7XFx1YzAwMFxcdWQ4MzVcXHVkZDYzdXM7XFx1NmEyZWltZXM7XFx1NmEzNVxcdTAxMDBhcFxcdTMyNWRcXHUzMjY3clxcdTAxMDA7Z1xcdTMyNjNcXHUzMjY0XFx1NDAyOXQ7XFx1Njk5NG9saW50O1xcdTZhMTJhclxceGYyXFx1MzFlM1xcdTAyMDBhY2hxXFx1MzI3YlxcdTMyODBcXHUxMGJjXFx1MzI4NXF1bztcXHU2MDNhcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYzdcXHUwMTAwYnVcXHUzMGZiXFx1MzI4YW9cXHUwMTAwO3JcXHUwMjE0XFx1MDIxM1xcdTAxODBoaXJcXHUzMjk3XFx1MzI5YlxcdTMyYTByZVxceGU1XFx1MzFmOG1lcztcXHU2MmNhaVxcdTAyMDA7ZWZsXFx1MzJhYVxcdTEwNTlcXHUxODIxXFx1MzJhYlxcdTY1Yjl0cmk7XFx1NjljZWx1aGFyO1xcdTY5Njg7XFx1NjExZVxcdTBkNjFcXHUzMmQ1XFx1MzJkYlxcdTMyZGZcXHUzMzJjXFx1MzMzOFxcdTMzNzFcXDBcXHUzMzdhXFx1MzNhNFxcMFxcMFxcdTMzZWNcXHUzM2YwXFwwXFx1MzQyOFxcdTM0NDhcXHUzNDVhXFx1MzRhZFxcdTM0YjFcXHUzNGNhXFx1MzRmMVxcMFxcdTM2MTZcXDBcXDBcXHUzNjMzY3V0ZTtcXHU0MTVicXVcXHhlZlxcdTI3YmFcXHUwNTAwO0VhY2VpbnBzeVxcdTExZWRcXHUzMmYzXFx1MzJmNVxcdTMyZmZcXHUzMzAyXFx1MzMwYlxcdTMzMGZcXHUzMzFmXFx1MzMyNlxcdTMzMjk7XFx1NmFiNFxcdTAxZjBcXHUzMmZhXFwwXFx1MzJmYztcXHU2YWI4b247XFx1NDE2MXVcXHhlNVxcdTExZmVcXHUwMTAwO2RcXHUxMWYzXFx1MzMwN2lsO1xcdTQxNWZyYztcXHU0MTVkXFx1MDE4MEVhc1xcdTMzMTZcXHUzMzE4XFx1MzMxYjtcXHU2YWI2cDtcXHU2YWJhaW07XFx1NjJlOW9saW50O1xcdTZhMTNpXFx4ZWRcXHUxMjA0O1xcdTQ0NDFvdFxcdTAxODA7YmVcXHUzMzM0XFx1MWQ0N1xcdTMzMzVcXHU2MmM1O1xcdTZhNjZcXHUwMzgwQWFjbXN0eFxcdTMzNDZcXHUzMzRhXFx1MzM1N1xcdTMzNWJcXHUzMzVlXFx1MzM2M1xcdTMzNmRycjtcXHU2MWQ4clxcdTAxMDBoclxcdTMzNTBcXHUzMzUyXFx4ZWJcXHUyMjI4XFx1MDEwMDtvXFx1MGEzNlxcdTBhMzR0XFx1ODAzYlxceGE3XFx1NDBhN2k7XFx1NDAzYndhcjtcXHU2OTI5bVxcdTAxMDBpblxcdTMzNjlcXHhmMG51XFx4ZjNcXHhmMXQ7XFx1NjczNnJcXHUwMTAwO29cXHUzMzc2XFx1MjA1NVxcdWMwMDBcXHVkODM1XFx1ZGQzMFxcdTAyMDBhY295XFx1MzM4MlxcdTMzODZcXHUzMzkxXFx1MzNhMHJwO1xcdTY2NmZcXHUwMTAwaHlcXHUzMzhiXFx1MzM4ZmN5O1xcdTQ0NDk7XFx1NDQ0OHJ0XFx1MDI2ZFxcdTMzOTlcXDBcXDBcXHUzMzljaVxceGU0XFx1MTQ2NGFyYVxceGVjXFx1MmU2ZlxcdTgwM2JcXHhhZFxcdTQwYWRcXHUwMTAwZ21cXHUzM2E4XFx1MzNiNG1hXFx1MDE4MDtmdlxcdTMzYjFcXHUzM2IyXFx1MzNiMlxcdTQzYzM7XFx1NDNjMlxcdTA0MDA7ZGVnbG5wclxcdTEyYWJcXHUzM2M1XFx1MzNjOVxcdTMzY2VcXHUzM2Q2XFx1MzNkZVxcdTMzZTFcXHUzM2U2b3Q7XFx1NmE2YVxcdTAxMDA7cVxcdTEyYjFcXHUxMmIwXFx1MDEwMDtFXFx1MzNkM1xcdTMzZDRcXHU2YTllO1xcdTZhYTBcXHUwMTAwO0VcXHUzM2RiXFx1MzNkY1xcdTZhOWQ7XFx1NmE5ZmU7XFx1NjI0Nmx1cztcXHU2YTI0YXJyO1xcdTY5NzJhclxceGYyXFx1MTEzZFxcdTAyMDBhZWl0XFx1MzNmOFxcdTM0MDhcXHUzNDBmXFx1MzQxN1xcdTAxMDBsc1xcdTMzZmRcXHUzNDA0bHNldG1cXHhlOVxcdTMzNmFocDtcXHU2YTMzcGFyc2w7XFx1NjllNFxcdTAxMDBkbFxcdTE0NjNcXHUzNDE0ZTtcXHU2MzIzXFx1MDEwMDtlXFx1MzQxY1xcdTM0MWRcXHU2YWFhXFx1MDEwMDtzXFx1MzQyMlxcdTM0MjNcXHU2YWFjO1xcdWMwMDBcXHUyYWFjXFx1ZmUwMFxcdTAxODBmbHBcXHUzNDJlXFx1MzQzM1xcdTM0NDJ0Y3k7XFx1NDQ0Y1xcdTAxMDA7YlxcdTM0MzhcXHUzNDM5XFx1NDAyZlxcdTAxMDA7YVxcdTM0M2VcXHUzNDNmXFx1NjljNHI7XFx1NjMzZmY7XFx1YzAwMFxcdWQ4MzVcXHVkZDY0YVxcdTAxMDBkclxcdTM0NGRcXHUwNDAyZXNcXHUwMTAwO3VcXHUzNDU0XFx1MzQ1NVxcdTY2NjBpdFxceGJiXFx1MzQ1NVxcdTAxODBjc3VcXHUzNDYwXFx1MzQ3OVxcdTM0OWZcXHUwMTAwYXVcXHUzNDY1XFx1MzQ2ZnBcXHUwMTAwO3NcXHUxMTg4XFx1MzQ2YjtcXHVjMDAwXFx1MjI5M1xcdWZlMDBwXFx1MDEwMDtzXFx1MTFiNFxcdTM0NzU7XFx1YzAwMFxcdTIyOTRcXHVmZTAwdVxcdTAxMDBicFxcdTM0N2ZcXHUzNDhmXFx1MDE4MDtlc1xcdTExOTdcXHUxMTljXFx1MzQ4NmV0XFx1MDEwMDtlXFx1MTE5N1xcdTM0OGRcXHhmMVxcdTExOWRcXHUwMTgwO2VzXFx1MTFhOFxcdTExYWRcXHUzNDk2ZXRcXHUwMTAwO2VcXHUxMWE4XFx1MzQ5ZFxceGYxXFx1MTFhZVxcdTAxODA7YWZcXHUxMTdiXFx1MzRhNlxcdTA1YjByXFx1MDE2NVxcdTM0YWJcXHUwNWIxXFx4YmJcXHUxMTdjYXJcXHhmMlxcdTExNDhcXHUwMjAwY2VtdFxcdTM0YjlcXHUzNGJlXFx1MzRjMlxcdTM0YzVyO1xcdWMwMDBcXHVkODM1XFx1ZGNjOHRtXFx4ZWVcXHhmMWlcXHhlY1xcdTM0MTVhclxceGU2XFx1MTFiZVxcdTAxMDBhclxcdTM0Y2VcXHUzNGQ1clxcdTAxMDA7ZlxcdTM0ZDRcXHUxN2JmXFx1NjYwNlxcdTAxMDBhblxcdTM0ZGFcXHUzNGVkaWdodFxcdTAxMDBlcFxcdTM0ZTNcXHUzNGVhcHNpbG9cXHhlZVxcdTFlZTBoXFx4ZTlcXHUyZWFmc1xceGJiXFx1Mjg1MlxcdTAyODBiY21ucFxcdTM0ZmJcXHUzNTVlXFx1MTIwOVxcdTM1OGJcXHUzNThlXFx1MDQ4MDtFZGVtbnByc1xcdTM1MGVcXHUzNTBmXFx1MzUxMVxcdTM1MTVcXHUzNTFlXFx1MzUyM1xcdTM1MmNcXHUzNTMxXFx1MzUzNlxcdTYyODI7XFx1NmFjNW90O1xcdTZhYmRcXHUwMTAwO2RcXHUxMWRhXFx1MzUxYW90O1xcdTZhYzN1bHQ7XFx1NmFjMVxcdTAxMDBFZVxcdTM1MjhcXHUzNTJhO1xcdTZhY2I7XFx1NjI4YWx1cztcXHU2YWJmYXJyO1xcdTY5NzlcXHUwMTgwZWl1XFx1MzUzZFxcdTM1NTJcXHUzNTU1dFxcdTAxODA7ZW5cXHUzNTBlXFx1MzU0NVxcdTM1NGJxXFx1MDEwMDtxXFx1MTFkYVxcdTM1MGZlcVxcdTAxMDA7cVxcdTM1MmJcXHUzNTI4bTtcXHU2YWM3XFx1MDEwMGJwXFx1MzU1YVxcdTM1NWM7XFx1NmFkNTtcXHU2YWQzY1xcdTAzMDA7YWNlbnNcXHUxMWVkXFx1MzU2Y1xcdTM1NzJcXHUzNTc5XFx1MzU3YlxcdTMzMjZwcHJvXFx4ZjhcXHUzMmZhdXJseWVcXHhmMVxcdTExZmVcXHhmMVxcdTExZjNcXHUwMTgwYWVzXFx1MzU4MlxcdTM1ODhcXHUzMzFicHByb1xceGY4XFx1MzMxYXFcXHhmMVxcdTMzMTdnO1xcdTY2NmFcXHUwNjgwMTIzO0VkZWhsbW5wc1xcdTM1YTlcXHUzNWFjXFx1MzVhZlxcdTEyMWNcXHUzNWIyXFx1MzViNFxcdTM1YzBcXHUzNWM5XFx1MzVkNVxcdTM1ZGFcXHUzNWRmXFx1MzVlOFxcdTM1ZWRcXHU4MDNiXFx4YjlcXHU0MGI5XFx1ODAzYlxceGIyXFx1NDBiMlxcdTgwM2JcXHhiM1xcdTQwYjM7XFx1NmFjNlxcdTAxMDBvc1xcdTM1YjlcXHUzNWJjdDtcXHU2YWJldWI7XFx1NmFkOFxcdTAxMDA7ZFxcdTEyMjJcXHUzNWM1b3Q7XFx1NmFjNHNcXHUwMTAwb3VcXHUzNWNmXFx1MzVkMmw7XFx1NjdjOWI7XFx1NmFkN2FycjtcXHU2OTdidWx0O1xcdTZhYzJcXHUwMTAwRWVcXHUzNWU0XFx1MzVlNjtcXHU2YWNjO1xcdTYyOGJsdXM7XFx1NmFjMFxcdTAxODBlaXVcXHUzNWY0XFx1MzYwOVxcdTM2MGN0XFx1MDE4MDtlblxcdTEyMWNcXHUzNWZjXFx1MzYwMnFcXHUwMTAwO3FcXHUxMjIyXFx1MzViMmVxXFx1MDEwMDtxXFx1MzVlN1xcdTM1ZTRtO1xcdTZhYzhcXHUwMTAwYnBcXHUzNjExXFx1MzYxMztcXHU2YWQ0O1xcdTZhZDZcXHUwMTgwQWFuXFx1MzYxY1xcdTM2MjBcXHUzNjJkcnI7XFx1NjFkOXJcXHUwMTAwaHJcXHUzNjI2XFx1MzYyOFxceGViXFx1MjIyZVxcdTAxMDA7b1xcdTBhMmJcXHUwYTI5d2FyO1xcdTY5MmFsaWdcXHU4MDNiXFx4ZGZcXHU0MGRmXFx1MGJlMVxcdTM2NTFcXHUzNjVkXFx1MzY2MFxcdTEyY2VcXHUzNjczXFx1MzY3OVxcMFxcdTM2N2VcXHUzNmMyXFwwXFwwXFwwXFwwXFwwXFx1MzZkYlxcdTM3MDNcXDBcXHUzNzA5XFx1Mzc2Y1xcMFxcMFxcMFxcdTM3ODdcXHUwMjcyXFx1MzY1NlxcMFxcMFxcdTM2NWJnZXQ7XFx1NjMxNjtcXHU0M2M0clxceGViXFx1MGU1ZlxcdTAxODBhZXlcXHUzNjY2XFx1MzY2YlxcdTM2NzByb247XFx1NDE2NWRpbDtcXHU0MTYzO1xcdTQ0NDJscmVjO1xcdTYzMTVyO1xcdWMwMDBcXHVkODM1XFx1ZGQzMVxcdTAyMDBlaWtvXFx1MzY4NlxcdTM2OWRcXHUzNmI1XFx1MzZiY1xcdTAxZjJcXHUzNjhiXFwwXFx1MzY5MWVcXHUwMTAwNGZcXHUxMjg0XFx1MTI4MWFcXHUwMTgwO3N2XFx1MzY5OFxcdTM2OTlcXHUzNjliXFx1NDNiOHltO1xcdTQzZDFcXHUwMTAwY25cXHUzNmEyXFx1MzZiMmtcXHUwMTAwYXNcXHUzNmE4XFx1MzZhZXBwcm9cXHhmOFxcdTEyYzFpbVxceGJiXFx1MTJhY3NcXHhmMFxcdTEyOWVcXHUwMTAwYXNcXHUzNmJhXFx1MzZhZVxceGYwXFx1MTJjMXJuXFx1ODAzYlxceGZlXFx1NDBmZVxcdTAxZWNcXHUwMzFmXFx1MzZjNlxcdTIyZTdlc1xcdTgxODBcXHhkNztiZFxcdTM2Y2ZcXHUzNmQwXFx1MzZkOFxcdTQwZDdcXHUwMTAwO2FcXHUxOTBmXFx1MzZkNXI7XFx1NmEzMTtcXHU2YTMwXFx1MDE4MGVwc1xcdTM2ZTFcXHUzNmUzXFx1MzcwMFxceGUxXFx1MmE0ZFxcdTAyMDA7YmNmXFx1MDQ4NlxcdTM2ZWNcXHUzNmYwXFx1MzZmNG90O1xcdTYzMzZpcjtcXHU2YWYxXFx1MDEwMDtvXFx1MzZmOVxcdTM2ZmNcXHVjMDAwXFx1ZDgzNVxcdWRkNjVyaztcXHU2YWRhXFx4ZTFcXHUzMzYycmltZTtcXHU2MDM0XFx1MDE4MGFpcFxcdTM3MGZcXHUzNzEyXFx1Mzc2NGRcXHhlNVxcdTEyNDhcXHUwMzgwYWRlbXBzdFxcdTM3MjFcXHUzNzRkXFx1Mzc0MFxcdTM3NTFcXHUzNzU3XFx1Mzc1Y1xcdTM3NWZuZ2xlXFx1MDI4MDtkbHFyXFx1MzczMFxcdTM3MzFcXHUzNzM2XFx1Mzc0MFxcdTM3NDJcXHU2NWI1b3duXFx4YmJcXHUxZGJiZWZ0XFx1MDEwMDtlXFx1MjgwMFxcdTM3M2VcXHhmMVxcdTA5MmU7XFx1NjI1Y2lnaHRcXHUwMTAwO2VcXHUzMmFhXFx1Mzc0YlxceGYxXFx1MTA1YW90O1xcdTY1ZWNpbnVzO1xcdTZhM2FsdXM7XFx1NmEzOWI7XFx1NjljZGltZTtcXHU2YTNiZXppdW07XFx1NjNlMlxcdTAxODBjaHRcXHUzNzcyXFx1Mzc3ZFxcdTM3ODFcXHUwMTAwcnlcXHUzNzc3XFx1Mzc3YjtcXHVjMDAwXFx1ZDgzNVxcdWRjYzk7XFx1NDQ0NmN5O1xcdTQ0NWJyb2s7XFx1NDE2N1xcdTAxMDBpb1xcdTM3OGJcXHUzNzhleFxceGY0XFx1MTc3N2hlYWRcXHUwMTAwbHJcXHUzNzk3XFx1MzdhMGVmdGFycm9cXHhmN1xcdTA4NGZpZ2h0YXJyb3dcXHhiYlxcdTBmNWRcXHUwOTAwQUhhYmNkZmdobG1vcHJzdHV3XFx1MzdkMFxcdTM3ZDNcXHUzN2Q3XFx1MzdlNFxcdTM3ZjBcXHUzN2ZjXFx1MzgwZVxcdTM4MWNcXHUzODIzXFx1MzgzNFxcdTM4NTFcXHUzODVkXFx1Mzg2YlxcdTM4YTlcXHUzOGNjXFx1MzhkMlxcdTM4ZWFcXHUzOGY2clxceGYyXFx1MDNlZGFyO1xcdTY5NjNcXHUwMTAwY3JcXHUzN2RjXFx1MzdlMnV0ZVxcdTgwM2JcXHhmYVxcdTQwZmFcXHhmMlxcdTExNTByXFx1MDFlM1xcdTM3ZWFcXDBcXHUzN2VkeTtcXHU0NDVldmU7XFx1NDE2ZFxcdTAxMDBpeVxcdTM3ZjVcXHUzN2ZhcmNcXHU4MDNiXFx4ZmJcXHU0MGZiO1xcdTQ0NDNcXHUwMTgwYWJoXFx1MzgwM1xcdTM4MDZcXHUzODBiclxceGYyXFx1MTNhZGxhYztcXHU0MTcxYVxceGYyXFx1MTNjM1xcdTAxMDBpclxcdTM4MTNcXHUzODE4c2h0O1xcdTY5N2U7XFx1YzAwMFxcdWQ4MzVcXHVkZDMycmF2ZVxcdTgwM2JcXHhmOVxcdTQwZjlcXHUwMTYxXFx1MzgyN1xcdTM4MzFyXFx1MDEwMGxyXFx1MzgyY1xcdTM4MmVcXHhiYlxcdTA5NTdcXHhiYlxcdTEwODNsaztcXHU2NTgwXFx1MDEwMGN0XFx1MzgzOVxcdTM4NGRcXHUwMjZmXFx1MzgzZlxcMFxcMFxcdTM4NGFyblxcdTAxMDA7ZVxcdTM4NDVcXHUzODQ2XFx1NjMxY3JcXHhiYlxcdTM4NDZvcDtcXHU2MzBmcmk7XFx1NjVmOFxcdTAxMDBhbFxcdTM4NTZcXHUzODVhY3I7XFx1NDE2YlxcdTgwYmJcXHhhOFxcdTAzNDlcXHUwMTAwZ3BcXHUzODYyXFx1Mzg2Nm9uO1xcdTQxNzNmO1xcdWMwMDBcXHVkODM1XFx1ZGQ2NlxcdTAzMDBhZGhsc3VcXHUxMTRiXFx1Mzg3OFxcdTM4N2RcXHUxMzcyXFx1Mzg5MVxcdTM4YTBvd25cXHhlMVxcdTEzYjNhcnBvb25cXHUwMTAwbHJcXHUzODg4XFx1Mzg4Y2VmXFx4ZjRcXHUzODJkaWdoXFx4ZjRcXHUzODJmaVxcdTAxODA7aGxcXHUzODk5XFx1Mzg5YVxcdTM4OWNcXHU0M2M1XFx4YmJcXHUxM2Zhb25cXHhiYlxcdTM4OWFwYXJyb3dzO1xcdTYxYzhcXHUwMTgwY2l0XFx1MzhiMFxcdTM4YzRcXHUzOGM4XFx1MDI2ZlxcdTM4YjZcXDBcXDBcXHUzOGMxcm5cXHUwMTAwO2VcXHUzOGJjXFx1MzhiZFxcdTYzMWRyXFx4YmJcXHUzOGJkb3A7XFx1NjMwZW5nO1xcdTQxNmZyaTtcXHU2NWY5Y3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2NhXFx1MDE4MGRpclxcdTM4ZDlcXHUzOGRkXFx1MzhlMm90O1xcdTYyZjBsZGU7XFx1NDE2OWlcXHUwMTAwO2ZcXHUzNzMwXFx1MzhlOFxceGJiXFx1MTgxM1xcdTAxMDBhbVxcdTM4ZWZcXHUzOGYyclxceGYyXFx1MzhhOGxcXHU4MDNiXFx4ZmNcXHU0MGZjYW5nbGU7XFx1NjlhN1xcdTA3ODBBQkRhY2RlZmxub3Byc3pcXHUzOTFjXFx1MzkxZlxcdTM5MjlcXHUzOTJkXFx1MzliNVxcdTM5YjhcXHUzOWJkXFx1MzlkZlxcdTM5ZTRcXHUzOWU4XFx1MzlmM1xcdTM5ZjlcXHUzOWZkXFx1M2EwMVxcdTNhMjByXFx4ZjJcXHUwM2Y3YXJcXHUwMTAwO3ZcXHUzOTI2XFx1MzkyN1xcdTZhZTg7XFx1NmFlOWFzXFx4ZThcXHUwM2UxXFx1MDEwMG5yXFx1MzkzMlxcdTM5MzdncnQ7XFx1Njk5Y1xcdTAzODBla25wcnN0XFx1MzRlM1xcdTM5NDZcXHUzOTRiXFx1Mzk1MlxcdTM5NWRcXHUzOTY0XFx1Mzk5NmFwcFxceGUxXFx1MjQxNW90aGluXFx4ZTdcXHUxZTk2XFx1MDE4MGhpclxcdTM0ZWJcXHUyZWM4XFx1Mzk1OW9wXFx4ZjRcXHUyZmI1XFx1MDEwMDtoXFx1MTNiN1xcdTM5NjJcXHhlZlxcdTMxOGRcXHUwMTAwaXVcXHUzOTY5XFx1Mzk2ZGdtXFx4ZTFcXHUzM2IzXFx1MDEwMGJwXFx1Mzk3MlxcdTM5ODRzZXRuZXFcXHUwMTAwO3FcXHUzOTdkXFx1Mzk4MFxcdWMwMDBcXHUyMjhhXFx1ZmUwMDtcXHVjMDAwXFx1MmFjYlxcdWZlMDBzZXRuZXFcXHUwMTAwO3FcXHUzOThmXFx1Mzk5MlxcdWMwMDBcXHUyMjhiXFx1ZmUwMDtcXHVjMDAwXFx1MmFjY1xcdWZlMDBcXHUwMTAwaHJcXHUzOTliXFx1Mzk5ZmV0XFx4ZTFcXHUzNjljaWFuZ2xlXFx1MDEwMGxyXFx1MzlhYVxcdTM5YWZlZnRcXHhiYlxcdTA5MjVpZ2h0XFx4YmJcXHUxMDUxeTtcXHU0NDMyYXNoXFx4YmJcXHUxMDM2XFx1MDE4MGVsclxcdTM5YzRcXHUzOWQyXFx1MzlkN1xcdTAxODA7YmVcXHUyZGVhXFx1MzljYlxcdTM5Y2ZhcjtcXHU2MmJicTtcXHU2MjVhbGlwO1xcdTYyZWVcXHUwMTAwYnRcXHUzOWRjXFx1MTQ2OGFcXHhmMlxcdTE0NjlyO1xcdWMwMDBcXHVkODM1XFx1ZGQzM3RyXFx4ZTlcXHUzOWFlc3VcXHUwMTAwYnBcXHUzOWVmXFx1MzlmMVxceGJiXFx1MGQxY1xceGJiXFx1MGQ1OXBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ2N3JvXFx4ZjBcXHUwZWZidHJcXHhlOVxcdTM5YjRcXHUwMTAwY3VcXHUzYTA2XFx1M2EwYnI7XFx1YzAwMFxcdWQ4MzVcXHVkY2NiXFx1MDEwMGJwXFx1M2ExMFxcdTNhMThuXFx1MDEwMEVlXFx1Mzk4MFxcdTNhMTZcXHhiYlxcdTM5N2VuXFx1MDEwMEVlXFx1Mzk5MlxcdTNhMWVcXHhiYlxcdTM5OTBpZ3phZztcXHU2OTlhXFx1MDM4MGNlZm9wcnNcXHUzYTM2XFx1M2EzYlxcdTNhNTZcXHUzYTViXFx1M2E1NFxcdTNhNjFcXHUzYTZhaXJjO1xcdTQxNzVcXHUwMTAwZGlcXHUzYTQwXFx1M2E1MVxcdTAxMDBiZ1xcdTNhNDVcXHUzYTQ5YXI7XFx1NmE1ZmVcXHUwMTAwO3FcXHUxNWZhXFx1M2E0ZjtcXHU2MjU5ZXJwO1xcdTYxMThyO1xcdWMwMDBcXHVkODM1XFx1ZGQzNHBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ2OFxcdTAxMDA7ZVxcdTE0NzlcXHUzYTY2YXRcXHhlOFxcdTE0NzljcjtcXHVjMDAwXFx1ZDgzNVxcdWRjY2NcXHUwYWUzXFx1MTc4ZVxcdTNhODdcXDBcXHUzYThiXFwwXFx1M2E5MFxcdTNhOWJcXDBcXDBcXHUzYTlkXFx1M2FhOFxcdTNhYWJcXHUzYWFmXFwwXFwwXFx1M2FjM1xcdTNhY2VcXDBcXHUzYWQ4XFx1MTdkY1xcdTE3ZGZ0clxceGU5XFx1MTdkMXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDM1XFx1MDEwMEFhXFx1M2E5NFxcdTNhOTdyXFx4ZjJcXHUwM2MzclxceGYyXFx1MDlmNjtcXHU0M2JlXFx1MDEwMEFhXFx1M2FhMVxcdTNhYTRyXFx4ZjJcXHUwM2I4clxceGYyXFx1MDllYmFcXHhmMFxcdTI3MTNpcztcXHU2MmZiXFx1MDE4MGRwdFxcdTE3YTRcXHUzYWI1XFx1M2FiZVxcdTAxMDBmbFxcdTNhYmFcXHUxN2E5O1xcdWMwMDBcXHVkODM1XFx1ZGQ2OWltXFx4ZTVcXHUxN2IyXFx1MDEwMEFhXFx1M2FjN1xcdTNhY2FyXFx4ZjJcXHUwM2NlclxceGYyXFx1MGEwMVxcdTAxMDBjcVxcdTNhZDJcXHUxN2I4cjtcXHVjMDAwXFx1ZDgzNVxcdWRjY2RcXHUwMTAwcHRcXHUxN2Q2XFx1M2FkY3JcXHhlOVxcdTE3ZDRcXHUwNDAwYWNlZmlvc3VcXHUzYWYwXFx1M2FmZFxcdTNiMDhcXHUzYjBjXFx1M2IxMVxcdTNiMTVcXHUzYjFiXFx1M2IyMWNcXHUwMTAwdXlcXHUzYWY2XFx1M2FmYnRlXFx1ODAzYlxceGZkXFx1NDBmZDtcXHU0NDRmXFx1MDEwMGl5XFx1M2IwMlxcdTNiMDZyYztcXHU0MTc3O1xcdTQ0NGJuXFx1ODAzYlxceGE1XFx1NDBhNXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDM2Y3k7XFx1NDQ1N3BmO1xcdWMwMDBcXHVkODM1XFx1ZGQ2YWNyO1xcdWMwMDBcXHVkODM1XFx1ZGNjZVxcdTAxMDBjbVxcdTNiMjZcXHUzYjI5eTtcXHU0NDRlbFxcdTgwM2JcXHhmZlxcdTQwZmZcXHUwNTAwYWNkZWZoaW9zd1xcdTNiNDJcXHUzYjQ4XFx1M2I1NFxcdTNiNThcXHUzYjY0XFx1M2I2OVxcdTNiNmRcXHUzYjc0XFx1M2I3YVxcdTNiODBjdXRlO1xcdTQxN2FcXHUwMTAwYXlcXHUzYjRkXFx1M2I1MnJvbjtcXHU0MTdlO1xcdTQ0MzdvdDtcXHU0MTdjXFx1MDEwMGV0XFx1M2I1ZFxcdTNiNjF0clxceGU2XFx1MTU1ZmE7XFx1NDNiNnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDM3Y3k7XFx1NDQzNmdyYXJyO1xcdTYxZGRwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNmJjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjY2ZcXHUwMTAwam5cXHUzYjg1XFx1M2I4NztcXHU2MDBkajtcXHU2MDBjXCJcbiAgICAuc3BsaXQoXCJcIilcbiAgICAubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmNoYXJDb2RlQXQoMCk7IH0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlY29kZS1kYXRhLWh0bWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBHZW5lcmF0ZWQgdXNpbmcgc2NyaXB0cy93cml0ZS1kZWNvZGUtbWFwLnRzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBuZXcgVWludDE2QXJyYXkoXG4vLyBwcmV0dGllci1pZ25vcmVcblwiXFx1MDIwMGFnbHFcXHRcXHgxNVxceDE4XFx4MWJcXHUwMjZkXFx4MGZcXDBcXDBcXHgxMnA7XFx1NDAyNm9zO1xcdTQwMjd0O1xcdTQwM2V0O1xcdTQwM2N1b3Q7XFx1NDAyMlwiXG4gICAgLnNwbGl0KFwiXCIpXG4gICAgLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5jaGFyQ29kZUF0KDApOyB9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWNvZGUtZGF0YS14bWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBHZW5lcmF0ZWQgdXNpbmcgc2NyaXB0cy93cml0ZS1lbmNvZGUtbWFwLnRzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiByZXN0b3JlRGlmZihhcnIpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV1bMF0gKz0gYXJyW2kgLSAxXVswXSArIDE7XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59XG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydHMuZGVmYXVsdCA9IG5ldyBNYXAoLyogI19fUFVSRV9fICovIHJlc3RvcmVEaWZmKFtbOSwgXCImVGFiO1wiXSwgWzAsIFwiJk5ld0xpbmU7XCJdLCBbMjIsIFwiJmV4Y2w7XCJdLCBbMCwgXCImcXVvdDtcIl0sIFswLCBcIiZudW07XCJdLCBbMCwgXCImZG9sbGFyO1wiXSwgWzAsIFwiJnBlcmNudDtcIl0sIFswLCBcIiZhbXA7XCJdLCBbMCwgXCImYXBvcztcIl0sIFswLCBcIiZscGFyO1wiXSwgWzAsIFwiJnJwYXI7XCJdLCBbMCwgXCImYXN0O1wiXSwgWzAsIFwiJnBsdXM7XCJdLCBbMCwgXCImY29tbWE7XCJdLCBbMSwgXCImcGVyaW9kO1wiXSwgWzAsIFwiJnNvbDtcIl0sIFsxMCwgXCImY29sb247XCJdLCBbMCwgXCImc2VtaTtcIl0sIFswLCB7IHY6IFwiJmx0O1wiLCBuOiA4NDAyLCBvOiBcIiZudmx0O1wiIH1dLCBbMCwgeyB2OiBcIiZlcXVhbHM7XCIsIG46IDg0MjEsIG86IFwiJmJuZTtcIiB9XSwgWzAsIHsgdjogXCImZ3Q7XCIsIG46IDg0MDIsIG86IFwiJm52Z3Q7XCIgfV0sIFswLCBcIiZxdWVzdDtcIl0sIFswLCBcIiZjb21tYXQ7XCJdLCBbMjYsIFwiJmxicmFjaztcIl0sIFswLCBcIiZic29sO1wiXSwgWzAsIFwiJnJicmFjaztcIl0sIFswLCBcIiZIYXQ7XCJdLCBbMCwgXCImbG93YmFyO1wiXSwgWzAsIFwiJkRpYWNyaXRpY2FsR3JhdmU7XCJdLCBbNSwgeyBuOiAxMDYsIG86IFwiJmZqbGlnO1wiIH1dLCBbMjAsIFwiJmxicmFjZTtcIl0sIFswLCBcIiZ2ZXJiYXI7XCJdLCBbMCwgXCImcmJyYWNlO1wiXSwgWzM0LCBcIiZuYnNwO1wiXSwgWzAsIFwiJmlleGNsO1wiXSwgWzAsIFwiJmNlbnQ7XCJdLCBbMCwgXCImcG91bmQ7XCJdLCBbMCwgXCImY3VycmVuO1wiXSwgWzAsIFwiJnllbjtcIl0sIFswLCBcIiZicnZiYXI7XCJdLCBbMCwgXCImc2VjdDtcIl0sIFswLCBcIiZkaWU7XCJdLCBbMCwgXCImY29weTtcIl0sIFswLCBcIiZvcmRmO1wiXSwgWzAsIFwiJmxhcXVvO1wiXSwgWzAsIFwiJm5vdDtcIl0sIFswLCBcIiZzaHk7XCJdLCBbMCwgXCImY2lyY2xlZFI7XCJdLCBbMCwgXCImbWFjcjtcIl0sIFswLCBcIiZkZWc7XCJdLCBbMCwgXCImUGx1c01pbnVzO1wiXSwgWzAsIFwiJnN1cDI7XCJdLCBbMCwgXCImc3VwMztcIl0sIFswLCBcIiZhY3V0ZTtcIl0sIFswLCBcIiZtaWNybztcIl0sIFswLCBcIiZwYXJhO1wiXSwgWzAsIFwiJmNlbnRlcmRvdDtcIl0sIFswLCBcIiZjZWRpbDtcIl0sIFswLCBcIiZzdXAxO1wiXSwgWzAsIFwiJm9yZG07XCJdLCBbMCwgXCImcmFxdW87XCJdLCBbMCwgXCImZnJhYzE0O1wiXSwgWzAsIFwiJmZyYWMxMjtcIl0sIFswLCBcIiZmcmFjMzQ7XCJdLCBbMCwgXCImaXF1ZXN0O1wiXSwgWzAsIFwiJkFncmF2ZTtcIl0sIFswLCBcIiZBYWN1dGU7XCJdLCBbMCwgXCImQWNpcmM7XCJdLCBbMCwgXCImQXRpbGRlO1wiXSwgWzAsIFwiJkF1bWw7XCJdLCBbMCwgXCImYW5nc3Q7XCJdLCBbMCwgXCImQUVsaWc7XCJdLCBbMCwgXCImQ2NlZGlsO1wiXSwgWzAsIFwiJkVncmF2ZTtcIl0sIFswLCBcIiZFYWN1dGU7XCJdLCBbMCwgXCImRWNpcmM7XCJdLCBbMCwgXCImRXVtbDtcIl0sIFswLCBcIiZJZ3JhdmU7XCJdLCBbMCwgXCImSWFjdXRlO1wiXSwgWzAsIFwiJkljaXJjO1wiXSwgWzAsIFwiJkl1bWw7XCJdLCBbMCwgXCImRVRIO1wiXSwgWzAsIFwiJk50aWxkZTtcIl0sIFswLCBcIiZPZ3JhdmU7XCJdLCBbMCwgXCImT2FjdXRlO1wiXSwgWzAsIFwiJk9jaXJjO1wiXSwgWzAsIFwiJk90aWxkZTtcIl0sIFswLCBcIiZPdW1sO1wiXSwgWzAsIFwiJnRpbWVzO1wiXSwgWzAsIFwiJk9zbGFzaDtcIl0sIFswLCBcIiZVZ3JhdmU7XCJdLCBbMCwgXCImVWFjdXRlO1wiXSwgWzAsIFwiJlVjaXJjO1wiXSwgWzAsIFwiJlV1bWw7XCJdLCBbMCwgXCImWWFjdXRlO1wiXSwgWzAsIFwiJlRIT1JOO1wiXSwgWzAsIFwiJnN6bGlnO1wiXSwgWzAsIFwiJmFncmF2ZTtcIl0sIFswLCBcIiZhYWN1dGU7XCJdLCBbMCwgXCImYWNpcmM7XCJdLCBbMCwgXCImYXRpbGRlO1wiXSwgWzAsIFwiJmF1bWw7XCJdLCBbMCwgXCImYXJpbmc7XCJdLCBbMCwgXCImYWVsaWc7XCJdLCBbMCwgXCImY2NlZGlsO1wiXSwgWzAsIFwiJmVncmF2ZTtcIl0sIFswLCBcIiZlYWN1dGU7XCJdLCBbMCwgXCImZWNpcmM7XCJdLCBbMCwgXCImZXVtbDtcIl0sIFswLCBcIiZpZ3JhdmU7XCJdLCBbMCwgXCImaWFjdXRlO1wiXSwgWzAsIFwiJmljaXJjO1wiXSwgWzAsIFwiJml1bWw7XCJdLCBbMCwgXCImZXRoO1wiXSwgWzAsIFwiJm50aWxkZTtcIl0sIFswLCBcIiZvZ3JhdmU7XCJdLCBbMCwgXCImb2FjdXRlO1wiXSwgWzAsIFwiJm9jaXJjO1wiXSwgWzAsIFwiJm90aWxkZTtcIl0sIFswLCBcIiZvdW1sO1wiXSwgWzAsIFwiJmRpdjtcIl0sIFswLCBcIiZvc2xhc2g7XCJdLCBbMCwgXCImdWdyYXZlO1wiXSwgWzAsIFwiJnVhY3V0ZTtcIl0sIFswLCBcIiZ1Y2lyYztcIl0sIFswLCBcIiZ1dW1sO1wiXSwgWzAsIFwiJnlhY3V0ZTtcIl0sIFswLCBcIiZ0aG9ybjtcIl0sIFswLCBcIiZ5dW1sO1wiXSwgWzAsIFwiJkFtYWNyO1wiXSwgWzAsIFwiJmFtYWNyO1wiXSwgWzAsIFwiJkFicmV2ZTtcIl0sIFswLCBcIiZhYnJldmU7XCJdLCBbMCwgXCImQW9nb247XCJdLCBbMCwgXCImYW9nb247XCJdLCBbMCwgXCImQ2FjdXRlO1wiXSwgWzAsIFwiJmNhY3V0ZTtcIl0sIFswLCBcIiZDY2lyYztcIl0sIFswLCBcIiZjY2lyYztcIl0sIFswLCBcIiZDZG90O1wiXSwgWzAsIFwiJmNkb3Q7XCJdLCBbMCwgXCImQ2Nhcm9uO1wiXSwgWzAsIFwiJmNjYXJvbjtcIl0sIFswLCBcIiZEY2Fyb247XCJdLCBbMCwgXCImZGNhcm9uO1wiXSwgWzAsIFwiJkRzdHJvaztcIl0sIFswLCBcIiZkc3Ryb2s7XCJdLCBbMCwgXCImRW1hY3I7XCJdLCBbMCwgXCImZW1hY3I7XCJdLCBbMiwgXCImRWRvdDtcIl0sIFswLCBcIiZlZG90O1wiXSwgWzAsIFwiJkVvZ29uO1wiXSwgWzAsIFwiJmVvZ29uO1wiXSwgWzAsIFwiJkVjYXJvbjtcIl0sIFswLCBcIiZlY2Fyb247XCJdLCBbMCwgXCImR2NpcmM7XCJdLCBbMCwgXCImZ2NpcmM7XCJdLCBbMCwgXCImR2JyZXZlO1wiXSwgWzAsIFwiJmdicmV2ZTtcIl0sIFswLCBcIiZHZG90O1wiXSwgWzAsIFwiJmdkb3Q7XCJdLCBbMCwgXCImR2NlZGlsO1wiXSwgWzEsIFwiJkhjaXJjO1wiXSwgWzAsIFwiJmhjaXJjO1wiXSwgWzAsIFwiJkhzdHJvaztcIl0sIFswLCBcIiZoc3Ryb2s7XCJdLCBbMCwgXCImSXRpbGRlO1wiXSwgWzAsIFwiJml0aWxkZTtcIl0sIFswLCBcIiZJbWFjcjtcIl0sIFswLCBcIiZpbWFjcjtcIl0sIFsyLCBcIiZJb2dvbjtcIl0sIFswLCBcIiZpb2dvbjtcIl0sIFswLCBcIiZJZG90O1wiXSwgWzAsIFwiJmltYXRoO1wiXSwgWzAsIFwiJklKbGlnO1wiXSwgWzAsIFwiJmlqbGlnO1wiXSwgWzAsIFwiJkpjaXJjO1wiXSwgWzAsIFwiJmpjaXJjO1wiXSwgWzAsIFwiJktjZWRpbDtcIl0sIFswLCBcIiZrY2VkaWw7XCJdLCBbMCwgXCIma2dyZWVuO1wiXSwgWzAsIFwiJkxhY3V0ZTtcIl0sIFswLCBcIiZsYWN1dGU7XCJdLCBbMCwgXCImTGNlZGlsO1wiXSwgWzAsIFwiJmxjZWRpbDtcIl0sIFswLCBcIiZMY2Fyb247XCJdLCBbMCwgXCImbGNhcm9uO1wiXSwgWzAsIFwiJkxtaWRvdDtcIl0sIFswLCBcIiZsbWlkb3Q7XCJdLCBbMCwgXCImTHN0cm9rO1wiXSwgWzAsIFwiJmxzdHJvaztcIl0sIFswLCBcIiZOYWN1dGU7XCJdLCBbMCwgXCImbmFjdXRlO1wiXSwgWzAsIFwiJk5jZWRpbDtcIl0sIFswLCBcIiZuY2VkaWw7XCJdLCBbMCwgXCImTmNhcm9uO1wiXSwgWzAsIFwiJm5jYXJvbjtcIl0sIFswLCBcIiZuYXBvcztcIl0sIFswLCBcIiZFTkc7XCJdLCBbMCwgXCImZW5nO1wiXSwgWzAsIFwiJk9tYWNyO1wiXSwgWzAsIFwiJm9tYWNyO1wiXSwgWzIsIFwiJk9kYmxhYztcIl0sIFswLCBcIiZvZGJsYWM7XCJdLCBbMCwgXCImT0VsaWc7XCJdLCBbMCwgXCImb2VsaWc7XCJdLCBbMCwgXCImUmFjdXRlO1wiXSwgWzAsIFwiJnJhY3V0ZTtcIl0sIFswLCBcIiZSY2VkaWw7XCJdLCBbMCwgXCImcmNlZGlsO1wiXSwgWzAsIFwiJlJjYXJvbjtcIl0sIFswLCBcIiZyY2Fyb247XCJdLCBbMCwgXCImU2FjdXRlO1wiXSwgWzAsIFwiJnNhY3V0ZTtcIl0sIFswLCBcIiZTY2lyYztcIl0sIFswLCBcIiZzY2lyYztcIl0sIFswLCBcIiZTY2VkaWw7XCJdLCBbMCwgXCImc2NlZGlsO1wiXSwgWzAsIFwiJlNjYXJvbjtcIl0sIFswLCBcIiZzY2Fyb247XCJdLCBbMCwgXCImVGNlZGlsO1wiXSwgWzAsIFwiJnRjZWRpbDtcIl0sIFswLCBcIiZUY2Fyb247XCJdLCBbMCwgXCImdGNhcm9uO1wiXSwgWzAsIFwiJlRzdHJvaztcIl0sIFswLCBcIiZ0c3Ryb2s7XCJdLCBbMCwgXCImVXRpbGRlO1wiXSwgWzAsIFwiJnV0aWxkZTtcIl0sIFswLCBcIiZVbWFjcjtcIl0sIFswLCBcIiZ1bWFjcjtcIl0sIFswLCBcIiZVYnJldmU7XCJdLCBbMCwgXCImdWJyZXZlO1wiXSwgWzAsIFwiJlVyaW5nO1wiXSwgWzAsIFwiJnVyaW5nO1wiXSwgWzAsIFwiJlVkYmxhYztcIl0sIFswLCBcIiZ1ZGJsYWM7XCJdLCBbMCwgXCImVW9nb247XCJdLCBbMCwgXCImdW9nb247XCJdLCBbMCwgXCImV2NpcmM7XCJdLCBbMCwgXCImd2NpcmM7XCJdLCBbMCwgXCImWWNpcmM7XCJdLCBbMCwgXCImeWNpcmM7XCJdLCBbMCwgXCImWXVtbDtcIl0sIFswLCBcIiZaYWN1dGU7XCJdLCBbMCwgXCImemFjdXRlO1wiXSwgWzAsIFwiJlpkb3Q7XCJdLCBbMCwgXCImemRvdDtcIl0sIFswLCBcIiZaY2Fyb247XCJdLCBbMCwgXCImemNhcm9uO1wiXSwgWzE5LCBcIiZmbm9mO1wiXSwgWzM0LCBcIiZpbXBlZDtcIl0sIFs2MywgXCImZ2FjdXRlO1wiXSwgWzY1LCBcIiZqbWF0aDtcIl0sIFsxNDIsIFwiJmNpcmM7XCJdLCBbMCwgXCImY2Fyb247XCJdLCBbMTYsIFwiJmJyZXZlO1wiXSwgWzAsIFwiJkRpYWNyaXRpY2FsRG90O1wiXSwgWzAsIFwiJnJpbmc7XCJdLCBbMCwgXCImb2dvbjtcIl0sIFswLCBcIiZEaWFjcml0aWNhbFRpbGRlO1wiXSwgWzAsIFwiJmRibGFjO1wiXSwgWzUxLCBcIiZEb3duQnJldmU7XCJdLCBbMTI3LCBcIiZBbHBoYTtcIl0sIFswLCBcIiZCZXRhO1wiXSwgWzAsIFwiJkdhbW1hO1wiXSwgWzAsIFwiJkRlbHRhO1wiXSwgWzAsIFwiJkVwc2lsb247XCJdLCBbMCwgXCImWmV0YTtcIl0sIFswLCBcIiZFdGE7XCJdLCBbMCwgXCImVGhldGE7XCJdLCBbMCwgXCImSW90YTtcIl0sIFswLCBcIiZLYXBwYTtcIl0sIFswLCBcIiZMYW1iZGE7XCJdLCBbMCwgXCImTXU7XCJdLCBbMCwgXCImTnU7XCJdLCBbMCwgXCImWGk7XCJdLCBbMCwgXCImT21pY3JvbjtcIl0sIFswLCBcIiZQaTtcIl0sIFswLCBcIiZSaG87XCJdLCBbMSwgXCImU2lnbWE7XCJdLCBbMCwgXCImVGF1O1wiXSwgWzAsIFwiJlVwc2lsb247XCJdLCBbMCwgXCImUGhpO1wiXSwgWzAsIFwiJkNoaTtcIl0sIFswLCBcIiZQc2k7XCJdLCBbMCwgXCImb2htO1wiXSwgWzcsIFwiJmFscGhhO1wiXSwgWzAsIFwiJmJldGE7XCJdLCBbMCwgXCImZ2FtbWE7XCJdLCBbMCwgXCImZGVsdGE7XCJdLCBbMCwgXCImZXBzaTtcIl0sIFswLCBcIiZ6ZXRhO1wiXSwgWzAsIFwiJmV0YTtcIl0sIFswLCBcIiZ0aGV0YTtcIl0sIFswLCBcIiZpb3RhO1wiXSwgWzAsIFwiJmthcHBhO1wiXSwgWzAsIFwiJmxhbWJkYTtcIl0sIFswLCBcIiZtdTtcIl0sIFswLCBcIiZudTtcIl0sIFswLCBcIiZ4aTtcIl0sIFswLCBcIiZvbWljcm9uO1wiXSwgWzAsIFwiJnBpO1wiXSwgWzAsIFwiJnJobztcIl0sIFswLCBcIiZzaWdtYWY7XCJdLCBbMCwgXCImc2lnbWE7XCJdLCBbMCwgXCImdGF1O1wiXSwgWzAsIFwiJnVwc2k7XCJdLCBbMCwgXCImcGhpO1wiXSwgWzAsIFwiJmNoaTtcIl0sIFswLCBcIiZwc2k7XCJdLCBbMCwgXCImb21lZ2E7XCJdLCBbNywgXCImdGhldGFzeW07XCJdLCBbMCwgXCImVXBzaTtcIl0sIFsyLCBcIiZwaGl2O1wiXSwgWzAsIFwiJnBpdjtcIl0sIFs1LCBcIiZHYW1tYWQ7XCJdLCBbMCwgXCImZGlnYW1tYTtcIl0sIFsxOCwgXCIma2FwcGF2O1wiXSwgWzAsIFwiJnJob3Y7XCJdLCBbMywgXCImZXBzaXY7XCJdLCBbMCwgXCImYmFja2Vwc2lsb247XCJdLCBbMTAsIFwiJklPY3k7XCJdLCBbMCwgXCImREpjeTtcIl0sIFswLCBcIiZHSmN5O1wiXSwgWzAsIFwiJkp1a2N5O1wiXSwgWzAsIFwiJkRTY3k7XCJdLCBbMCwgXCImSXVrY3k7XCJdLCBbMCwgXCImWUljeTtcIl0sIFswLCBcIiZKc2VyY3k7XCJdLCBbMCwgXCImTEpjeTtcIl0sIFswLCBcIiZOSmN5O1wiXSwgWzAsIFwiJlRTSGN5O1wiXSwgWzAsIFwiJktKY3k7XCJdLCBbMSwgXCImVWJyY3k7XCJdLCBbMCwgXCImRFpjeTtcIl0sIFswLCBcIiZBY3k7XCJdLCBbMCwgXCImQmN5O1wiXSwgWzAsIFwiJlZjeTtcIl0sIFswLCBcIiZHY3k7XCJdLCBbMCwgXCImRGN5O1wiXSwgWzAsIFwiJklFY3k7XCJdLCBbMCwgXCImWkhjeTtcIl0sIFswLCBcIiZaY3k7XCJdLCBbMCwgXCImSWN5O1wiXSwgWzAsIFwiJkpjeTtcIl0sIFswLCBcIiZLY3k7XCJdLCBbMCwgXCImTGN5O1wiXSwgWzAsIFwiJk1jeTtcIl0sIFswLCBcIiZOY3k7XCJdLCBbMCwgXCImT2N5O1wiXSwgWzAsIFwiJlBjeTtcIl0sIFswLCBcIiZSY3k7XCJdLCBbMCwgXCImU2N5O1wiXSwgWzAsIFwiJlRjeTtcIl0sIFswLCBcIiZVY3k7XCJdLCBbMCwgXCImRmN5O1wiXSwgWzAsIFwiJktIY3k7XCJdLCBbMCwgXCImVFNjeTtcIl0sIFswLCBcIiZDSGN5O1wiXSwgWzAsIFwiJlNIY3k7XCJdLCBbMCwgXCImU0hDSGN5O1wiXSwgWzAsIFwiJkhBUkRjeTtcIl0sIFswLCBcIiZZY3k7XCJdLCBbMCwgXCImU09GVGN5O1wiXSwgWzAsIFwiJkVjeTtcIl0sIFswLCBcIiZZVWN5O1wiXSwgWzAsIFwiJllBY3k7XCJdLCBbMCwgXCImYWN5O1wiXSwgWzAsIFwiJmJjeTtcIl0sIFswLCBcIiZ2Y3k7XCJdLCBbMCwgXCImZ2N5O1wiXSwgWzAsIFwiJmRjeTtcIl0sIFswLCBcIiZpZWN5O1wiXSwgWzAsIFwiJnpoY3k7XCJdLCBbMCwgXCImemN5O1wiXSwgWzAsIFwiJmljeTtcIl0sIFswLCBcIiZqY3k7XCJdLCBbMCwgXCIma2N5O1wiXSwgWzAsIFwiJmxjeTtcIl0sIFswLCBcIiZtY3k7XCJdLCBbMCwgXCImbmN5O1wiXSwgWzAsIFwiJm9jeTtcIl0sIFswLCBcIiZwY3k7XCJdLCBbMCwgXCImcmN5O1wiXSwgWzAsIFwiJnNjeTtcIl0sIFswLCBcIiZ0Y3k7XCJdLCBbMCwgXCImdWN5O1wiXSwgWzAsIFwiJmZjeTtcIl0sIFswLCBcIiZraGN5O1wiXSwgWzAsIFwiJnRzY3k7XCJdLCBbMCwgXCImY2hjeTtcIl0sIFswLCBcIiZzaGN5O1wiXSwgWzAsIFwiJnNoY2hjeTtcIl0sIFswLCBcIiZoYXJkY3k7XCJdLCBbMCwgXCImeWN5O1wiXSwgWzAsIFwiJnNvZnRjeTtcIl0sIFswLCBcIiZlY3k7XCJdLCBbMCwgXCImeXVjeTtcIl0sIFswLCBcIiZ5YWN5O1wiXSwgWzEsIFwiJmlvY3k7XCJdLCBbMCwgXCImZGpjeTtcIl0sIFswLCBcIiZnamN5O1wiXSwgWzAsIFwiJmp1a2N5O1wiXSwgWzAsIFwiJmRzY3k7XCJdLCBbMCwgXCImaXVrY3k7XCJdLCBbMCwgXCImeWljeTtcIl0sIFswLCBcIiZqc2VyY3k7XCJdLCBbMCwgXCImbGpjeTtcIl0sIFswLCBcIiZuamN5O1wiXSwgWzAsIFwiJnRzaGN5O1wiXSwgWzAsIFwiJmtqY3k7XCJdLCBbMSwgXCImdWJyY3k7XCJdLCBbMCwgXCImZHpjeTtcIl0sIFs3MDc0LCBcIiZlbnNwO1wiXSwgWzAsIFwiJmVtc3A7XCJdLCBbMCwgXCImZW1zcDEzO1wiXSwgWzAsIFwiJmVtc3AxNDtcIl0sIFsxLCBcIiZudW1zcDtcIl0sIFswLCBcIiZwdW5jc3A7XCJdLCBbMCwgXCImVGhpblNwYWNlO1wiXSwgWzAsIFwiJmhhaXJzcDtcIl0sIFswLCBcIiZOZWdhdGl2ZU1lZGl1bVNwYWNlO1wiXSwgWzAsIFwiJnp3bmo7XCJdLCBbMCwgXCImendqO1wiXSwgWzAsIFwiJmxybTtcIl0sIFswLCBcIiZybG07XCJdLCBbMCwgXCImZGFzaDtcIl0sIFsyLCBcIiZuZGFzaDtcIl0sIFswLCBcIiZtZGFzaDtcIl0sIFswLCBcIiZob3JiYXI7XCJdLCBbMCwgXCImVmVyYmFyO1wiXSwgWzEsIFwiJmxzcXVvO1wiXSwgWzAsIFwiJkNsb3NlQ3VybHlRdW90ZTtcIl0sIFswLCBcIiZsc3F1b3I7XCJdLCBbMSwgXCImbGRxdW87XCJdLCBbMCwgXCImQ2xvc2VDdXJseURvdWJsZVF1b3RlO1wiXSwgWzAsIFwiJmJkcXVvO1wiXSwgWzEsIFwiJmRhZ2dlcjtcIl0sIFswLCBcIiZEYWdnZXI7XCJdLCBbMCwgXCImYnVsbDtcIl0sIFsyLCBcIiZubGRyO1wiXSwgWzAsIFwiJmhlbGxpcDtcIl0sIFs5LCBcIiZwZXJtaWw7XCJdLCBbMCwgXCImcGVydGVuaztcIl0sIFswLCBcIiZwcmltZTtcIl0sIFswLCBcIiZQcmltZTtcIl0sIFswLCBcIiZ0cHJpbWU7XCJdLCBbMCwgXCImYmFja3ByaW1lO1wiXSwgWzMsIFwiJmxzYXF1bztcIl0sIFswLCBcIiZyc2FxdW87XCJdLCBbMywgXCImb2xpbmU7XCJdLCBbMiwgXCImY2FyZXQ7XCJdLCBbMSwgXCImaHlidWxsO1wiXSwgWzAsIFwiJmZyYXNsO1wiXSwgWzEwLCBcIiZic2VtaTtcIl0sIFs3LCBcIiZxcHJpbWU7XCJdLCBbNywgeyB2OiBcIiZNZWRpdW1TcGFjZTtcIiwgbjogODIwMiwgbzogXCImVGhpY2tTcGFjZTtcIiB9XSwgWzAsIFwiJk5vQnJlYWs7XCJdLCBbMCwgXCImYWY7XCJdLCBbMCwgXCImSW52aXNpYmxlVGltZXM7XCJdLCBbMCwgXCImaWM7XCJdLCBbNzIsIFwiJmV1cm87XCJdLCBbNDYsIFwiJnRkb3Q7XCJdLCBbMCwgXCImRG90RG90O1wiXSwgWzM3LCBcIiZjb21wbGV4ZXM7XCJdLCBbMiwgXCImaW5jYXJlO1wiXSwgWzQsIFwiJmdzY3I7XCJdLCBbMCwgXCImaGFtaWx0O1wiXSwgWzAsIFwiJkhmcjtcIl0sIFswLCBcIiZIb3BmO1wiXSwgWzAsIFwiJnBsYW5ja2g7XCJdLCBbMCwgXCImaGJhcjtcIl0sIFswLCBcIiZpbWFnbGluZTtcIl0sIFswLCBcIiZJZnI7XCJdLCBbMCwgXCImbGFncmFuO1wiXSwgWzAsIFwiJmVsbDtcIl0sIFsxLCBcIiZuYXR1cmFscztcIl0sIFswLCBcIiZudW1lcm87XCJdLCBbMCwgXCImY29weXNyO1wiXSwgWzAsIFwiJndlaWVycDtcIl0sIFswLCBcIiZQb3BmO1wiXSwgWzAsIFwiJlFvcGY7XCJdLCBbMCwgXCImcmVhbGluZTtcIl0sIFswLCBcIiZyZWFsO1wiXSwgWzAsIFwiJnJlYWxzO1wiXSwgWzAsIFwiJnJ4O1wiXSwgWzMsIFwiJnRyYWRlO1wiXSwgWzEsIFwiJmludGVnZXJzO1wiXSwgWzIsIFwiJm1obztcIl0sIFswLCBcIiZ6ZWV0cmY7XCJdLCBbMCwgXCImaWlvdGE7XCJdLCBbMiwgXCImYmVybm91O1wiXSwgWzAsIFwiJkNheWxleXM7XCJdLCBbMSwgXCImZXNjcjtcIl0sIFswLCBcIiZFc2NyO1wiXSwgWzAsIFwiJkZvdXJpZXJ0cmY7XCJdLCBbMSwgXCImTWVsbGludHJmO1wiXSwgWzAsIFwiJm9yZGVyO1wiXSwgWzAsIFwiJmFsZWZzeW07XCJdLCBbMCwgXCImYmV0aDtcIl0sIFswLCBcIiZnaW1lbDtcIl0sIFswLCBcIiZkYWxldGg7XCJdLCBbMTIsIFwiJkNhcGl0YWxEaWZmZXJlbnRpYWxEO1wiXSwgWzAsIFwiJmRkO1wiXSwgWzAsIFwiJmVlO1wiXSwgWzAsIFwiJmlpO1wiXSwgWzEwLCBcIiZmcmFjMTM7XCJdLCBbMCwgXCImZnJhYzIzO1wiXSwgWzAsIFwiJmZyYWMxNTtcIl0sIFswLCBcIiZmcmFjMjU7XCJdLCBbMCwgXCImZnJhYzM1O1wiXSwgWzAsIFwiJmZyYWM0NTtcIl0sIFswLCBcIiZmcmFjMTY7XCJdLCBbMCwgXCImZnJhYzU2O1wiXSwgWzAsIFwiJmZyYWMxODtcIl0sIFswLCBcIiZmcmFjMzg7XCJdLCBbMCwgXCImZnJhYzU4O1wiXSwgWzAsIFwiJmZyYWM3ODtcIl0sIFs0OSwgXCImbGFycjtcIl0sIFswLCBcIiZTaG9ydFVwQXJyb3c7XCJdLCBbMCwgXCImcmFycjtcIl0sIFswLCBcIiZkYXJyO1wiXSwgWzAsIFwiJmhhcnI7XCJdLCBbMCwgXCImdXBkb3duYXJyb3c7XCJdLCBbMCwgXCImbndhcnI7XCJdLCBbMCwgXCImbmVhcnI7XCJdLCBbMCwgXCImTG93ZXJSaWdodEFycm93O1wiXSwgWzAsIFwiJkxvd2VyTGVmdEFycm93O1wiXSwgWzAsIFwiJm5sYXJyO1wiXSwgWzAsIFwiJm5yYXJyO1wiXSwgWzEsIHsgdjogXCImcmFycnc7XCIsIG46IDgyNCwgbzogXCImbnJhcnJ3O1wiIH1dLCBbMCwgXCImTGFycjtcIl0sIFswLCBcIiZVYXJyO1wiXSwgWzAsIFwiJlJhcnI7XCJdLCBbMCwgXCImRGFycjtcIl0sIFswLCBcIiZsYXJydGw7XCJdLCBbMCwgXCImcmFycnRsO1wiXSwgWzAsIFwiJkxlZnRUZWVBcnJvdztcIl0sIFswLCBcIiZtYXBzdG91cDtcIl0sIFswLCBcIiZtYXA7XCJdLCBbMCwgXCImRG93blRlZUFycm93O1wiXSwgWzEsIFwiJmhvb2tsZWZ0YXJyb3c7XCJdLCBbMCwgXCImaG9va3JpZ2h0YXJyb3c7XCJdLCBbMCwgXCImbGFycmxwO1wiXSwgWzAsIFwiJmxvb3BhcnJvd3JpZ2h0O1wiXSwgWzAsIFwiJmhhcnJ3O1wiXSwgWzAsIFwiJm5oYXJyO1wiXSwgWzEsIFwiJmxzaDtcIl0sIFswLCBcIiZyc2g7XCJdLCBbMCwgXCImbGRzaDtcIl0sIFswLCBcIiZyZHNoO1wiXSwgWzEsIFwiJmNyYXJyO1wiXSwgWzAsIFwiJmN1bGFycjtcIl0sIFswLCBcIiZjdXJhcnI7XCJdLCBbMiwgXCImY2lyY2xlYXJyb3dsZWZ0O1wiXSwgWzAsIFwiJmNpcmNsZWFycm93cmlnaHQ7XCJdLCBbMCwgXCImbGVmdGhhcnBvb251cDtcIl0sIFswLCBcIiZEb3duTGVmdFZlY3RvcjtcIl0sIFswLCBcIiZSaWdodFVwVmVjdG9yO1wiXSwgWzAsIFwiJkxlZnRVcFZlY3RvcjtcIl0sIFswLCBcIiZyaGFydTtcIl0sIFswLCBcIiZEb3duUmlnaHRWZWN0b3I7XCJdLCBbMCwgXCImZGhhcnI7XCJdLCBbMCwgXCImZGhhcmw7XCJdLCBbMCwgXCImUmlnaHRBcnJvd0xlZnRBcnJvdztcIl0sIFswLCBcIiZ1ZGFycjtcIl0sIFswLCBcIiZMZWZ0QXJyb3dSaWdodEFycm93O1wiXSwgWzAsIFwiJmxlZnRsZWZ0YXJyb3dzO1wiXSwgWzAsIFwiJnVwdXBhcnJvd3M7XCJdLCBbMCwgXCImcmlnaHRyaWdodGFycm93cztcIl0sIFswLCBcIiZkZGFycjtcIl0sIFswLCBcIiZsZWZ0cmlnaHRoYXJwb29ucztcIl0sIFswLCBcIiZFcXVpbGlicml1bTtcIl0sIFswLCBcIiZubEFycjtcIl0sIFswLCBcIiZuaEFycjtcIl0sIFswLCBcIiZuckFycjtcIl0sIFswLCBcIiZEb3VibGVMZWZ0QXJyb3c7XCJdLCBbMCwgXCImRG91YmxlVXBBcnJvdztcIl0sIFswLCBcIiZEb3VibGVSaWdodEFycm93O1wiXSwgWzAsIFwiJmRBcnI7XCJdLCBbMCwgXCImRG91YmxlTGVmdFJpZ2h0QXJyb3c7XCJdLCBbMCwgXCImRG91YmxlVXBEb3duQXJyb3c7XCJdLCBbMCwgXCImbndBcnI7XCJdLCBbMCwgXCImbmVBcnI7XCJdLCBbMCwgXCImc2VBcnI7XCJdLCBbMCwgXCImc3dBcnI7XCJdLCBbMCwgXCImbEFhcnI7XCJdLCBbMCwgXCImckFhcnI7XCJdLCBbMSwgXCImemlncmFycjtcIl0sIFs2LCBcIiZsYXJyYjtcIl0sIFswLCBcIiZyYXJyYjtcIl0sIFsxNSwgXCImRG93bkFycm93VXBBcnJvdztcIl0sIFs3LCBcIiZsb2FycjtcIl0sIFswLCBcIiZyb2FycjtcIl0sIFswLCBcIiZob2FycjtcIl0sIFswLCBcIiZmb3JhbGw7XCJdLCBbMCwgXCImY29tcDtcIl0sIFswLCB7IHY6IFwiJnBhcnQ7XCIsIG46IDgyNCwgbzogXCImbnBhcnQ7XCIgfV0sIFswLCBcIiZleGlzdDtcIl0sIFswLCBcIiZuZXhpc3Q7XCJdLCBbMCwgXCImZW1wdHk7XCJdLCBbMSwgXCImRGVsO1wiXSwgWzAsIFwiJkVsZW1lbnQ7XCJdLCBbMCwgXCImTm90RWxlbWVudDtcIl0sIFsxLCBcIiZuaTtcIl0sIFswLCBcIiZub3RuaTtcIl0sIFsyLCBcIiZwcm9kO1wiXSwgWzAsIFwiJmNvcHJvZDtcIl0sIFswLCBcIiZzdW07XCJdLCBbMCwgXCImbWludXM7XCJdLCBbMCwgXCImTWludXNQbHVzO1wiXSwgWzAsIFwiJmRvdHBsdXM7XCJdLCBbMSwgXCImQmFja3NsYXNoO1wiXSwgWzAsIFwiJmxvd2FzdDtcIl0sIFswLCBcIiZjb21wZm47XCJdLCBbMSwgXCImcmFkaWM7XCJdLCBbMiwgXCImcHJvcDtcIl0sIFswLCBcIiZpbmZpbjtcIl0sIFswLCBcIiZhbmdydDtcIl0sIFswLCB7IHY6IFwiJmFuZztcIiwgbjogODQwMiwgbzogXCImbmFuZztcIiB9XSwgWzAsIFwiJmFuZ21zZDtcIl0sIFswLCBcIiZhbmdzcGg7XCJdLCBbMCwgXCImbWlkO1wiXSwgWzAsIFwiJm5taWQ7XCJdLCBbMCwgXCImRG91YmxlVmVydGljYWxCYXI7XCJdLCBbMCwgXCImTm90RG91YmxlVmVydGljYWxCYXI7XCJdLCBbMCwgXCImYW5kO1wiXSwgWzAsIFwiJm9yO1wiXSwgWzAsIHsgdjogXCImY2FwO1wiLCBuOiA2NTAyNCwgbzogXCImY2FwcztcIiB9XSwgWzAsIHsgdjogXCImY3VwO1wiLCBuOiA2NTAyNCwgbzogXCImY3VwcztcIiB9XSwgWzAsIFwiJmludDtcIl0sIFswLCBcIiZJbnQ7XCJdLCBbMCwgXCImaWlpbnQ7XCJdLCBbMCwgXCImY29uaW50O1wiXSwgWzAsIFwiJkNvbmludDtcIl0sIFswLCBcIiZDY29uaW50O1wiXSwgWzAsIFwiJmN3aW50O1wiXSwgWzAsIFwiJkNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDtcIl0sIFswLCBcIiZhd2NvbmludDtcIl0sIFswLCBcIiZ0aGVyZTQ7XCJdLCBbMCwgXCImYmVjYXVzO1wiXSwgWzAsIFwiJnJhdGlvO1wiXSwgWzAsIFwiJkNvbG9uO1wiXSwgWzAsIFwiJmRvdG1pbnVzO1wiXSwgWzEsIFwiJm1ERG90O1wiXSwgWzAsIFwiJmhvbXRodDtcIl0sIFswLCB7IHY6IFwiJnNpbTtcIiwgbjogODQwMiwgbzogXCImbnZzaW07XCIgfV0sIFswLCB7IHY6IFwiJmJhY2tzaW07XCIsIG46IDgxNywgbzogXCImcmFjZTtcIiB9XSwgWzAsIHsgdjogXCImYWM7XCIsIG46IDgxOSwgbzogXCImYWNFO1wiIH1dLCBbMCwgXCImYWNkO1wiXSwgWzAsIFwiJlZlcnRpY2FsVGlsZGU7XCJdLCBbMCwgXCImTm90VGlsZGU7XCJdLCBbMCwgeyB2OiBcIiZlcXNpbTtcIiwgbjogODI0LCBvOiBcIiZuZXNpbTtcIiB9XSwgWzAsIFwiJnNpbWU7XCJdLCBbMCwgXCImTm90VGlsZGVFcXVhbDtcIl0sIFswLCBcIiZjb25nO1wiXSwgWzAsIFwiJnNpbW5lO1wiXSwgWzAsIFwiJm5jb25nO1wiXSwgWzAsIFwiJmFwO1wiXSwgWzAsIFwiJm5hcDtcIl0sIFswLCBcIiZhcGU7XCJdLCBbMCwgeyB2OiBcIiZhcGlkO1wiLCBuOiA4MjQsIG86IFwiJm5hcGlkO1wiIH1dLCBbMCwgXCImYmFja2Nvbmc7XCJdLCBbMCwgeyB2OiBcIiZhc3ltcGVxO1wiLCBuOiA4NDAyLCBvOiBcIiZudmFwO1wiIH1dLCBbMCwgeyB2OiBcIiZidW1wO1wiLCBuOiA4MjQsIG86IFwiJm5idW1wO1wiIH1dLCBbMCwgeyB2OiBcIiZidW1wZTtcIiwgbjogODI0LCBvOiBcIiZuYnVtcGU7XCIgfV0sIFswLCB7IHY6IFwiJmRvdGVxO1wiLCBuOiA4MjQsIG86IFwiJm5lZG90O1wiIH1dLCBbMCwgXCImZG90ZXFkb3Q7XCJdLCBbMCwgXCImZWZEb3Q7XCJdLCBbMCwgXCImZXJEb3Q7XCJdLCBbMCwgXCImQXNzaWduO1wiXSwgWzAsIFwiJmVjb2xvbjtcIl0sIFswLCBcIiZlY2lyO1wiXSwgWzAsIFwiJmNpcmNlcTtcIl0sIFsxLCBcIiZ3ZWRnZXE7XCJdLCBbMCwgXCImdmVlZXE7XCJdLCBbMSwgXCImdHJpYW5nbGVxO1wiXSwgWzIsIFwiJmVxdWVzdDtcIl0sIFswLCBcIiZuZTtcIl0sIFswLCB7IHY6IFwiJkNvbmdydWVudDtcIiwgbjogODQyMSwgbzogXCImYm5lcXVpdjtcIiB9XSwgWzAsIFwiJm5lcXVpdjtcIl0sIFsxLCB7IHY6IFwiJmxlO1wiLCBuOiA4NDAyLCBvOiBcIiZudmxlO1wiIH1dLCBbMCwgeyB2OiBcIiZnZTtcIiwgbjogODQwMiwgbzogXCImbnZnZTtcIiB9XSwgWzAsIHsgdjogXCImbEU7XCIsIG46IDgyNCwgbzogXCImbmxFO1wiIH1dLCBbMCwgeyB2OiBcIiZnRTtcIiwgbjogODI0LCBvOiBcIiZuZ0U7XCIgfV0sIFswLCB7IHY6IFwiJmxuRTtcIiwgbjogNjUwMjQsIG86IFwiJmx2ZXJ0bmVxcTtcIiB9XSwgWzAsIHsgdjogXCImZ25FO1wiLCBuOiA2NTAyNCwgbzogXCImZ3ZlcnRuZXFxO1wiIH1dLCBbMCwgeyB2OiBcIiZsbDtcIiwgbjogbmV3IE1hcCgvKiAjX19QVVJFX18gKi8gcmVzdG9yZURpZmYoW1s4MjQsIFwiJm5MdHY7XCJdLCBbNzU3NywgXCImbkx0O1wiXV0pKSB9XSwgWzAsIHsgdjogXCImZ2c7XCIsIG46IG5ldyBNYXAoLyogI19fUFVSRV9fICovIHJlc3RvcmVEaWZmKFtbODI0LCBcIiZuR3R2O1wiXSwgWzc1NzcsIFwiJm5HdDtcIl1dKSkgfV0sIFswLCBcIiZiZXR3ZWVuO1wiXSwgWzAsIFwiJk5vdEN1cENhcDtcIl0sIFswLCBcIiZubGVzcztcIl0sIFswLCBcIiZuZ3Q7XCJdLCBbMCwgXCImbmxlO1wiXSwgWzAsIFwiJm5nZTtcIl0sIFswLCBcIiZsZXNzc2ltO1wiXSwgWzAsIFwiJkdyZWF0ZXJUaWxkZTtcIl0sIFswLCBcIiZubHNpbTtcIl0sIFswLCBcIiZuZ3NpbTtcIl0sIFswLCBcIiZMZXNzR3JlYXRlcjtcIl0sIFswLCBcIiZnbDtcIl0sIFswLCBcIiZOb3RMZXNzR3JlYXRlcjtcIl0sIFswLCBcIiZOb3RHcmVhdGVyTGVzcztcIl0sIFswLCBcIiZwcjtcIl0sIFswLCBcIiZzYztcIl0sIFswLCBcIiZwcmN1ZTtcIl0sIFswLCBcIiZzY2N1ZTtcIl0sIFswLCBcIiZQcmVjZWRlc1RpbGRlO1wiXSwgWzAsIHsgdjogXCImc2NzaW07XCIsIG46IDgyNCwgbzogXCImTm90U3VjY2VlZHNUaWxkZTtcIiB9XSwgWzAsIFwiJk5vdFByZWNlZGVzO1wiXSwgWzAsIFwiJk5vdFN1Y2NlZWRzO1wiXSwgWzAsIHsgdjogXCImc3ViO1wiLCBuOiA4NDAyLCBvOiBcIiZOb3RTdWJzZXQ7XCIgfV0sIFswLCB7IHY6IFwiJnN1cDtcIiwgbjogODQwMiwgbzogXCImTm90U3VwZXJzZXQ7XCIgfV0sIFswLCBcIiZuc3ViO1wiXSwgWzAsIFwiJm5zdXA7XCJdLCBbMCwgXCImc3ViZTtcIl0sIFswLCBcIiZzdXBlO1wiXSwgWzAsIFwiJk5vdFN1YnNldEVxdWFsO1wiXSwgWzAsIFwiJk5vdFN1cGVyc2V0RXF1YWw7XCJdLCBbMCwgeyB2OiBcIiZzdWJuZTtcIiwgbjogNjUwMjQsIG86IFwiJnZhcnN1YnNldG5lcTtcIiB9XSwgWzAsIHsgdjogXCImc3VwbmU7XCIsIG46IDY1MDI0LCBvOiBcIiZ2YXJzdXBzZXRuZXE7XCIgfV0sIFsxLCBcIiZjdXBkb3Q7XCJdLCBbMCwgXCImVW5pb25QbHVzO1wiXSwgWzAsIHsgdjogXCImc3FzdWI7XCIsIG46IDgyNCwgbzogXCImTm90U3F1YXJlU3Vic2V0O1wiIH1dLCBbMCwgeyB2OiBcIiZzcXN1cDtcIiwgbjogODI0LCBvOiBcIiZOb3RTcXVhcmVTdXBlcnNldDtcIiB9XSwgWzAsIFwiJnNxc3ViZTtcIl0sIFswLCBcIiZzcXN1cGU7XCJdLCBbMCwgeyB2OiBcIiZzcWNhcDtcIiwgbjogNjUwMjQsIG86IFwiJnNxY2FwcztcIiB9XSwgWzAsIHsgdjogXCImc3FjdXA7XCIsIG46IDY1MDI0LCBvOiBcIiZzcWN1cHM7XCIgfV0sIFswLCBcIiZDaXJjbGVQbHVzO1wiXSwgWzAsIFwiJkNpcmNsZU1pbnVzO1wiXSwgWzAsIFwiJkNpcmNsZVRpbWVzO1wiXSwgWzAsIFwiJm9zb2w7XCJdLCBbMCwgXCImQ2lyY2xlRG90O1wiXSwgWzAsIFwiJmNpcmNsZWRjaXJjO1wiXSwgWzAsIFwiJmNpcmNsZWRhc3Q7XCJdLCBbMSwgXCImY2lyY2xlZGRhc2g7XCJdLCBbMCwgXCImYm94cGx1cztcIl0sIFswLCBcIiZib3htaW51cztcIl0sIFswLCBcIiZib3h0aW1lcztcIl0sIFswLCBcIiZkb3RzcXVhcmU7XCJdLCBbMCwgXCImUmlnaHRUZWU7XCJdLCBbMCwgXCImZGFzaHY7XCJdLCBbMCwgXCImRG93blRlZTtcIl0sIFswLCBcIiZib3Q7XCJdLCBbMSwgXCImbW9kZWxzO1wiXSwgWzAsIFwiJkRvdWJsZVJpZ2h0VGVlO1wiXSwgWzAsIFwiJlZkYXNoO1wiXSwgWzAsIFwiJlZ2ZGFzaDtcIl0sIFswLCBcIiZWRGFzaDtcIl0sIFswLCBcIiZudmRhc2g7XCJdLCBbMCwgXCImbnZEYXNoO1wiXSwgWzAsIFwiJm5WZGFzaDtcIl0sIFswLCBcIiZuVkRhc2g7XCJdLCBbMCwgXCImcHJ1cmVsO1wiXSwgWzEsIFwiJkxlZnRUcmlhbmdsZTtcIl0sIFswLCBcIiZSaWdodFRyaWFuZ2xlO1wiXSwgWzAsIHsgdjogXCImTGVmdFRyaWFuZ2xlRXF1YWw7XCIsIG46IDg0MDIsIG86IFwiJm52bHRyaWU7XCIgfV0sIFswLCB7IHY6IFwiJlJpZ2h0VHJpYW5nbGVFcXVhbDtcIiwgbjogODQwMiwgbzogXCImbnZydHJpZTtcIiB9XSwgWzAsIFwiJm9yaWdvZjtcIl0sIFswLCBcIiZpbW9mO1wiXSwgWzAsIFwiJm11bHRpbWFwO1wiXSwgWzAsIFwiJmhlcmNvbjtcIl0sIFswLCBcIiZpbnRjYWw7XCJdLCBbMCwgXCImdmVlYmFyO1wiXSwgWzEsIFwiJmJhcnZlZTtcIl0sIFswLCBcIiZhbmdydHZiO1wiXSwgWzAsIFwiJmxydHJpO1wiXSwgWzAsIFwiJmJpZ3dlZGdlO1wiXSwgWzAsIFwiJmJpZ3ZlZTtcIl0sIFswLCBcIiZiaWdjYXA7XCJdLCBbMCwgXCImYmlnY3VwO1wiXSwgWzAsIFwiJmRpYW07XCJdLCBbMCwgXCImc2RvdDtcIl0sIFswLCBcIiZzc3RhcmY7XCJdLCBbMCwgXCImZGl2aWRlb250aW1lcztcIl0sIFswLCBcIiZib3d0aWU7XCJdLCBbMCwgXCImbHRpbWVzO1wiXSwgWzAsIFwiJnJ0aW1lcztcIl0sIFswLCBcIiZsZWZ0dGhyZWV0aW1lcztcIl0sIFswLCBcIiZyaWdodHRocmVldGltZXM7XCJdLCBbMCwgXCImYmFja3NpbWVxO1wiXSwgWzAsIFwiJmN1cmx5dmVlO1wiXSwgWzAsIFwiJmN1cmx5d2VkZ2U7XCJdLCBbMCwgXCImU3ViO1wiXSwgWzAsIFwiJlN1cDtcIl0sIFswLCBcIiZDYXA7XCJdLCBbMCwgXCImQ3VwO1wiXSwgWzAsIFwiJmZvcms7XCJdLCBbMCwgXCImZXBhcjtcIl0sIFswLCBcIiZsZXNzZG90O1wiXSwgWzAsIFwiJmd0ZG90O1wiXSwgWzAsIHsgdjogXCImTGw7XCIsIG46IDgyNCwgbzogXCImbkxsO1wiIH1dLCBbMCwgeyB2OiBcIiZHZztcIiwgbjogODI0LCBvOiBcIiZuR2c7XCIgfV0sIFswLCB7IHY6IFwiJmxlZztcIiwgbjogNjUwMjQsIG86IFwiJmxlc2c7XCIgfV0sIFswLCB7IHY6IFwiJmdlbDtcIiwgbjogNjUwMjQsIG86IFwiJmdlc2w7XCIgfV0sIFsyLCBcIiZjdWVwcjtcIl0sIFswLCBcIiZjdWVzYztcIl0sIFswLCBcIiZOb3RQcmVjZWRlc1NsYW50RXF1YWw7XCJdLCBbMCwgXCImTm90U3VjY2VlZHNTbGFudEVxdWFsO1wiXSwgWzAsIFwiJk5vdFNxdWFyZVN1YnNldEVxdWFsO1wiXSwgWzAsIFwiJk5vdFNxdWFyZVN1cGVyc2V0RXF1YWw7XCJdLCBbMiwgXCImbG5zaW07XCJdLCBbMCwgXCImZ25zaW07XCJdLCBbMCwgXCImcHJlY25zaW07XCJdLCBbMCwgXCImc2Nuc2ltO1wiXSwgWzAsIFwiJm5sdHJpO1wiXSwgWzAsIFwiJk5vdFJpZ2h0VHJpYW5nbGU7XCJdLCBbMCwgXCImbmx0cmllO1wiXSwgWzAsIFwiJk5vdFJpZ2h0VHJpYW5nbGVFcXVhbDtcIl0sIFswLCBcIiZ2ZWxsaXA7XCJdLCBbMCwgXCImY3Rkb3Q7XCJdLCBbMCwgXCImdXRkb3Q7XCJdLCBbMCwgXCImZHRkb3Q7XCJdLCBbMCwgXCImZGlzaW47XCJdLCBbMCwgXCImaXNpbnN2O1wiXSwgWzAsIFwiJmlzaW5zO1wiXSwgWzAsIHsgdjogXCImaXNpbmRvdDtcIiwgbjogODI0LCBvOiBcIiZub3RpbmRvdDtcIiB9XSwgWzAsIFwiJm5vdGludmM7XCJdLCBbMCwgXCImbm90aW52YjtcIl0sIFsxLCB7IHY6IFwiJmlzaW5FO1wiLCBuOiA4MjQsIG86IFwiJm5vdGluRTtcIiB9XSwgWzAsIFwiJm5pc2Q7XCJdLCBbMCwgXCImeG5pcztcIl0sIFswLCBcIiZuaXM7XCJdLCBbMCwgXCImbm90bml2YztcIl0sIFswLCBcIiZub3RuaXZiO1wiXSwgWzYsIFwiJmJhcndlZDtcIl0sIFswLCBcIiZCYXJ3ZWQ7XCJdLCBbMSwgXCImbGNlaWw7XCJdLCBbMCwgXCImcmNlaWw7XCJdLCBbMCwgXCImTGVmdEZsb29yO1wiXSwgWzAsIFwiJnJmbG9vcjtcIl0sIFswLCBcIiZkcmNyb3A7XCJdLCBbMCwgXCImZGxjcm9wO1wiXSwgWzAsIFwiJnVyY3JvcDtcIl0sIFswLCBcIiZ1bGNyb3A7XCJdLCBbMCwgXCImYm5vdDtcIl0sIFsxLCBcIiZwcm9mbGluZTtcIl0sIFswLCBcIiZwcm9mc3VyZjtcIl0sIFsxLCBcIiZ0ZWxyZWM7XCJdLCBbMCwgXCImdGFyZ2V0O1wiXSwgWzUsIFwiJnVsY29ybjtcIl0sIFswLCBcIiZ1cmNvcm47XCJdLCBbMCwgXCImZGxjb3JuO1wiXSwgWzAsIFwiJmRyY29ybjtcIl0sIFsyLCBcIiZmcm93bjtcIl0sIFswLCBcIiZzbWlsZTtcIl0sIFs5LCBcIiZjeWxjdHk7XCJdLCBbMCwgXCImcHJvZmFsYXI7XCJdLCBbNywgXCImdG9wYm90O1wiXSwgWzYsIFwiJm92YmFyO1wiXSwgWzEsIFwiJnNvbGJhcjtcIl0sIFs2MCwgXCImYW5nemFycjtcIl0sIFs1MSwgXCImbG1vdXN0YWNoZTtcIl0sIFswLCBcIiZybW91c3RhY2hlO1wiXSwgWzIsIFwiJk92ZXJCcmFja2V0O1wiXSwgWzAsIFwiJmJicms7XCJdLCBbMCwgXCImYmJya3Ricms7XCJdLCBbMzcsIFwiJk92ZXJQYXJlbnRoZXNpcztcIl0sIFswLCBcIiZVbmRlclBhcmVudGhlc2lzO1wiXSwgWzAsIFwiJk92ZXJCcmFjZTtcIl0sIFswLCBcIiZVbmRlckJyYWNlO1wiXSwgWzIsIFwiJnRycGV6aXVtO1wiXSwgWzQsIFwiJmVsaW50ZXJzO1wiXSwgWzU5LCBcIiZibGFuaztcIl0sIFsxNjQsIFwiJmNpcmNsZWRTO1wiXSwgWzU1LCBcIiZib3hoO1wiXSwgWzEsIFwiJmJveHY7XCJdLCBbOSwgXCImYm94ZHI7XCJdLCBbMywgXCImYm94ZGw7XCJdLCBbMywgXCImYm94dXI7XCJdLCBbMywgXCImYm94dWw7XCJdLCBbMywgXCImYm94dnI7XCJdLCBbNywgXCImYm94dmw7XCJdLCBbNywgXCImYm94aGQ7XCJdLCBbNywgXCImYm94aHU7XCJdLCBbNywgXCImYm94dmg7XCJdLCBbMTksIFwiJmJveEg7XCJdLCBbMCwgXCImYm94VjtcIl0sIFswLCBcIiZib3hkUjtcIl0sIFswLCBcIiZib3hEcjtcIl0sIFswLCBcIiZib3hEUjtcIl0sIFswLCBcIiZib3hkTDtcIl0sIFswLCBcIiZib3hEbDtcIl0sIFswLCBcIiZib3hETDtcIl0sIFswLCBcIiZib3h1UjtcIl0sIFswLCBcIiZib3hVcjtcIl0sIFswLCBcIiZib3hVUjtcIl0sIFswLCBcIiZib3h1TDtcIl0sIFswLCBcIiZib3hVbDtcIl0sIFswLCBcIiZib3hVTDtcIl0sIFswLCBcIiZib3h2UjtcIl0sIFswLCBcIiZib3hWcjtcIl0sIFswLCBcIiZib3hWUjtcIl0sIFswLCBcIiZib3h2TDtcIl0sIFswLCBcIiZib3hWbDtcIl0sIFswLCBcIiZib3hWTDtcIl0sIFswLCBcIiZib3hIZDtcIl0sIFswLCBcIiZib3hoRDtcIl0sIFswLCBcIiZib3hIRDtcIl0sIFswLCBcIiZib3hIdTtcIl0sIFswLCBcIiZib3hoVTtcIl0sIFswLCBcIiZib3hIVTtcIl0sIFswLCBcIiZib3h2SDtcIl0sIFswLCBcIiZib3hWaDtcIl0sIFswLCBcIiZib3hWSDtcIl0sIFsxOSwgXCImdWhibGs7XCJdLCBbMywgXCImbGhibGs7XCJdLCBbMywgXCImYmxvY2s7XCJdLCBbOCwgXCImYmxrMTQ7XCJdLCBbMCwgXCImYmxrMTI7XCJdLCBbMCwgXCImYmxrMzQ7XCJdLCBbMTMsIFwiJnNxdWFyZTtcIl0sIFs4LCBcIiZibGFja3NxdWFyZTtcIl0sIFswLCBcIiZFbXB0eVZlcnlTbWFsbFNxdWFyZTtcIl0sIFsxLCBcIiZyZWN0O1wiXSwgWzAsIFwiJm1hcmtlcjtcIl0sIFsyLCBcIiZmbHRucztcIl0sIFsxLCBcIiZiaWd0cmlhbmdsZXVwO1wiXSwgWzAsIFwiJmJsYWNrdHJpYW5nbGU7XCJdLCBbMCwgXCImdHJpYW5nbGU7XCJdLCBbMiwgXCImYmxhY2t0cmlhbmdsZXJpZ2h0O1wiXSwgWzAsIFwiJnJ0cmk7XCJdLCBbMywgXCImYmlndHJpYW5nbGVkb3duO1wiXSwgWzAsIFwiJmJsYWNrdHJpYW5nbGVkb3duO1wiXSwgWzAsIFwiJmR0cmk7XCJdLCBbMiwgXCImYmxhY2t0cmlhbmdsZWxlZnQ7XCJdLCBbMCwgXCImbHRyaTtcIl0sIFs2LCBcIiZsb3o7XCJdLCBbMCwgXCImY2lyO1wiXSwgWzMyLCBcIiZ0cmlkb3Q7XCJdLCBbMiwgXCImYmlnY2lyYztcIl0sIFs4LCBcIiZ1bHRyaTtcIl0sIFswLCBcIiZ1cnRyaTtcIl0sIFswLCBcIiZsbHRyaTtcIl0sIFswLCBcIiZFbXB0eVNtYWxsU3F1YXJlO1wiXSwgWzAsIFwiJkZpbGxlZFNtYWxsU3F1YXJlO1wiXSwgWzgsIFwiJmJpZ3N0YXI7XCJdLCBbMCwgXCImc3RhcjtcIl0sIFs3LCBcIiZwaG9uZTtcIl0sIFs0OSwgXCImZmVtYWxlO1wiXSwgWzEsIFwiJm1hbGU7XCJdLCBbMjksIFwiJnNwYWRlcztcIl0sIFsyLCBcIiZjbHVicztcIl0sIFsxLCBcIiZoZWFydHM7XCJdLCBbMCwgXCImZGlhbW9uZHN1aXQ7XCJdLCBbMywgXCImc3VuZztcIl0sIFsyLCBcIiZmbGF0O1wiXSwgWzAsIFwiJm5hdHVyYWw7XCJdLCBbMCwgXCImc2hhcnA7XCJdLCBbMTYzLCBcIiZjaGVjaztcIl0sIFszLCBcIiZjcm9zcztcIl0sIFs4LCBcIiZtYWx0O1wiXSwgWzIxLCBcIiZzZXh0O1wiXSwgWzMzLCBcIiZWZXJ0aWNhbFNlcGFyYXRvcjtcIl0sIFsyNSwgXCImbGJicms7XCJdLCBbMCwgXCImcmJicms7XCJdLCBbODQsIFwiJmJzb2xoc3ViO1wiXSwgWzAsIFwiJnN1cGhzb2w7XCJdLCBbMjgsIFwiJkxlZnREb3VibGVCcmFja2V0O1wiXSwgWzAsIFwiJlJpZ2h0RG91YmxlQnJhY2tldDtcIl0sIFswLCBcIiZsYW5nO1wiXSwgWzAsIFwiJnJhbmc7XCJdLCBbMCwgXCImTGFuZztcIl0sIFswLCBcIiZSYW5nO1wiXSwgWzAsIFwiJmxvYW5nO1wiXSwgWzAsIFwiJnJvYW5nO1wiXSwgWzcsIFwiJmxvbmdsZWZ0YXJyb3c7XCJdLCBbMCwgXCImbG9uZ3JpZ2h0YXJyb3c7XCJdLCBbMCwgXCImbG9uZ2xlZnRyaWdodGFycm93O1wiXSwgWzAsIFwiJkRvdWJsZUxvbmdMZWZ0QXJyb3c7XCJdLCBbMCwgXCImRG91YmxlTG9uZ1JpZ2h0QXJyb3c7XCJdLCBbMCwgXCImRG91YmxlTG9uZ0xlZnRSaWdodEFycm93O1wiXSwgWzEsIFwiJmxvbmdtYXBzdG87XCJdLCBbMiwgXCImZHppZ3JhcnI7XCJdLCBbMjU4LCBcIiZudmxBcnI7XCJdLCBbMCwgXCImbnZyQXJyO1wiXSwgWzAsIFwiJm52SGFycjtcIl0sIFswLCBcIiZNYXA7XCJdLCBbNiwgXCImbGJhcnI7XCJdLCBbMCwgXCImYmthcm93O1wiXSwgWzAsIFwiJmxCYXJyO1wiXSwgWzAsIFwiJmRia2Fyb3c7XCJdLCBbMCwgXCImZHJia2Fyb3c7XCJdLCBbMCwgXCImRERvdHJhaGQ7XCJdLCBbMCwgXCImVXBBcnJvd0JhcjtcIl0sIFswLCBcIiZEb3duQXJyb3dCYXI7XCJdLCBbMiwgXCImUmFycnRsO1wiXSwgWzIsIFwiJmxhdGFpbDtcIl0sIFswLCBcIiZyYXRhaWw7XCJdLCBbMCwgXCImbEF0YWlsO1wiXSwgWzAsIFwiJnJBdGFpbDtcIl0sIFswLCBcIiZsYXJyZnM7XCJdLCBbMCwgXCImcmFycmZzO1wiXSwgWzAsIFwiJmxhcnJiZnM7XCJdLCBbMCwgXCImcmFycmJmcztcIl0sIFsyLCBcIiZud2FyaGs7XCJdLCBbMCwgXCImbmVhcmhrO1wiXSwgWzAsIFwiJmhrc2Vhcm93O1wiXSwgWzAsIFwiJmhrc3dhcm93O1wiXSwgWzAsIFwiJm53bmVhcjtcIl0sIFswLCBcIiZuZXNlYXI7XCJdLCBbMCwgXCImc2Vzd2FyO1wiXSwgWzAsIFwiJnN3bndhcjtcIl0sIFs4LCB7IHY6IFwiJnJhcnJjO1wiLCBuOiA4MjQsIG86IFwiJm5yYXJyYztcIiB9XSwgWzEsIFwiJmN1ZGFycnI7XCJdLCBbMCwgXCImbGRjYTtcIl0sIFswLCBcIiZyZGNhO1wiXSwgWzAsIFwiJmN1ZGFycmw7XCJdLCBbMCwgXCImbGFycnBsO1wiXSwgWzIsIFwiJmN1cmFycm07XCJdLCBbMCwgXCImY3VsYXJycDtcIl0sIFs3LCBcIiZyYXJycGw7XCJdLCBbMiwgXCImaGFycmNpcjtcIl0sIFswLCBcIiZVYXJyb2NpcjtcIl0sIFswLCBcIiZsdXJkc2hhcjtcIl0sIFswLCBcIiZsZHJ1c2hhcjtcIl0sIFsyLCBcIiZMZWZ0UmlnaHRWZWN0b3I7XCJdLCBbMCwgXCImUmlnaHRVcERvd25WZWN0b3I7XCJdLCBbMCwgXCImRG93bkxlZnRSaWdodFZlY3RvcjtcIl0sIFswLCBcIiZMZWZ0VXBEb3duVmVjdG9yO1wiXSwgWzAsIFwiJkxlZnRWZWN0b3JCYXI7XCJdLCBbMCwgXCImUmlnaHRWZWN0b3JCYXI7XCJdLCBbMCwgXCImUmlnaHRVcFZlY3RvckJhcjtcIl0sIFswLCBcIiZSaWdodERvd25WZWN0b3JCYXI7XCJdLCBbMCwgXCImRG93bkxlZnRWZWN0b3JCYXI7XCJdLCBbMCwgXCImRG93blJpZ2h0VmVjdG9yQmFyO1wiXSwgWzAsIFwiJkxlZnRVcFZlY3RvckJhcjtcIl0sIFswLCBcIiZMZWZ0RG93blZlY3RvckJhcjtcIl0sIFswLCBcIiZMZWZ0VGVlVmVjdG9yO1wiXSwgWzAsIFwiJlJpZ2h0VGVlVmVjdG9yO1wiXSwgWzAsIFwiJlJpZ2h0VXBUZWVWZWN0b3I7XCJdLCBbMCwgXCImUmlnaHREb3duVGVlVmVjdG9yO1wiXSwgWzAsIFwiJkRvd25MZWZ0VGVlVmVjdG9yO1wiXSwgWzAsIFwiJkRvd25SaWdodFRlZVZlY3RvcjtcIl0sIFswLCBcIiZMZWZ0VXBUZWVWZWN0b3I7XCJdLCBbMCwgXCImTGVmdERvd25UZWVWZWN0b3I7XCJdLCBbMCwgXCImbEhhcjtcIl0sIFswLCBcIiZ1SGFyO1wiXSwgWzAsIFwiJnJIYXI7XCJdLCBbMCwgXCImZEhhcjtcIl0sIFswLCBcIiZsdXJ1aGFyO1wiXSwgWzAsIFwiJmxkcmRoYXI7XCJdLCBbMCwgXCImcnVsdWhhcjtcIl0sIFswLCBcIiZyZGxkaGFyO1wiXSwgWzAsIFwiJmxoYXJ1bDtcIl0sIFswLCBcIiZsbGhhcmQ7XCJdLCBbMCwgXCImcmhhcnVsO1wiXSwgWzAsIFwiJmxyaGFyZDtcIl0sIFswLCBcIiZ1ZGhhcjtcIl0sIFswLCBcIiZkdWhhcjtcIl0sIFswLCBcIiZSb3VuZEltcGxpZXM7XCJdLCBbMCwgXCImZXJhcnI7XCJdLCBbMCwgXCImc2ltcmFycjtcIl0sIFswLCBcIiZsYXJyc2ltO1wiXSwgWzAsIFwiJnJhcnJzaW07XCJdLCBbMCwgXCImcmFycmFwO1wiXSwgWzAsIFwiJmx0bGFycjtcIl0sIFsxLCBcIiZndHJhcnI7XCJdLCBbMCwgXCImc3VicmFycjtcIl0sIFsxLCBcIiZzdXBsYXJyO1wiXSwgWzAsIFwiJmxmaXNodDtcIl0sIFswLCBcIiZyZmlzaHQ7XCJdLCBbMCwgXCImdWZpc2h0O1wiXSwgWzAsIFwiJmRmaXNodDtcIl0sIFs1LCBcIiZsb3BhcjtcIl0sIFswLCBcIiZyb3BhcjtcIl0sIFs0LCBcIiZsYnJrZTtcIl0sIFswLCBcIiZyYnJrZTtcIl0sIFswLCBcIiZsYnJrc2x1O1wiXSwgWzAsIFwiJnJicmtzbGQ7XCJdLCBbMCwgXCImbGJya3NsZDtcIl0sIFswLCBcIiZyYnJrc2x1O1wiXSwgWzAsIFwiJmxhbmdkO1wiXSwgWzAsIFwiJnJhbmdkO1wiXSwgWzAsIFwiJmxwYXJsdDtcIl0sIFswLCBcIiZycGFyZ3Q7XCJdLCBbMCwgXCImZ3RsUGFyO1wiXSwgWzAsIFwiJmx0clBhcjtcIl0sIFszLCBcIiZ2emlnemFnO1wiXSwgWzEsIFwiJnZhbmdydDtcIl0sIFswLCBcIiZhbmdydHZiZDtcIl0sIFs2LCBcIiZhbmdlO1wiXSwgWzAsIFwiJnJhbmdlO1wiXSwgWzAsIFwiJmR3YW5nbGU7XCJdLCBbMCwgXCImdXdhbmdsZTtcIl0sIFswLCBcIiZhbmdtc2RhYTtcIl0sIFswLCBcIiZhbmdtc2RhYjtcIl0sIFswLCBcIiZhbmdtc2RhYztcIl0sIFswLCBcIiZhbmdtc2RhZDtcIl0sIFswLCBcIiZhbmdtc2RhZTtcIl0sIFswLCBcIiZhbmdtc2RhZjtcIl0sIFswLCBcIiZhbmdtc2RhZztcIl0sIFswLCBcIiZhbmdtc2RhaDtcIl0sIFswLCBcIiZiZW1wdHl2O1wiXSwgWzAsIFwiJmRlbXB0eXY7XCJdLCBbMCwgXCImY2VtcHR5djtcIl0sIFswLCBcIiZyYWVtcHR5djtcIl0sIFswLCBcIiZsYWVtcHR5djtcIl0sIFswLCBcIiZvaGJhcjtcIl0sIFswLCBcIiZvbWlkO1wiXSwgWzAsIFwiJm9wYXI7XCJdLCBbMSwgXCImb3BlcnA7XCJdLCBbMSwgXCImb2xjcm9zcztcIl0sIFswLCBcIiZvZHNvbGQ7XCJdLCBbMSwgXCImb2xjaXI7XCJdLCBbMCwgXCImb2ZjaXI7XCJdLCBbMCwgXCImb2x0O1wiXSwgWzAsIFwiJm9ndDtcIl0sIFswLCBcIiZjaXJzY2lyO1wiXSwgWzAsIFwiJmNpckU7XCJdLCBbMCwgXCImc29sYjtcIl0sIFswLCBcIiZic29sYjtcIl0sIFszLCBcIiZib3hib3g7XCJdLCBbMywgXCImdHJpc2I7XCJdLCBbMCwgXCImcnRyaWx0cmk7XCJdLCBbMCwgeyB2OiBcIiZMZWZ0VHJpYW5nbGVCYXI7XCIsIG46IDgyNCwgbzogXCImTm90TGVmdFRyaWFuZ2xlQmFyO1wiIH1dLCBbMCwgeyB2OiBcIiZSaWdodFRyaWFuZ2xlQmFyO1wiLCBuOiA4MjQsIG86IFwiJk5vdFJpZ2h0VHJpYW5nbGVCYXI7XCIgfV0sIFsxMSwgXCImaWluZmluO1wiXSwgWzAsIFwiJmluZmludGllO1wiXSwgWzAsIFwiJm52aW5maW47XCJdLCBbNCwgXCImZXBhcnNsO1wiXSwgWzAsIFwiJnNtZXBhcnNsO1wiXSwgWzAsIFwiJmVxdnBhcnNsO1wiXSwgWzUsIFwiJmJsYWNrbG96ZW5nZTtcIl0sIFs4LCBcIiZSdWxlRGVsYXllZDtcIl0sIFsxLCBcIiZkc29sO1wiXSwgWzksIFwiJmJpZ29kb3Q7XCJdLCBbMCwgXCImYmlnb3BsdXM7XCJdLCBbMCwgXCImYmlnb3RpbWVzO1wiXSwgWzEsIFwiJmJpZ3VwbHVzO1wiXSwgWzEsIFwiJmJpZ3NxY3VwO1wiXSwgWzUsIFwiJmlpaWludDtcIl0sIFswLCBcIiZmcGFydGludDtcIl0sIFsyLCBcIiZjaXJmbmludDtcIl0sIFswLCBcIiZhd2ludDtcIl0sIFswLCBcIiZycHBvbGludDtcIl0sIFswLCBcIiZzY3BvbGludDtcIl0sIFswLCBcIiZucG9saW50O1wiXSwgWzAsIFwiJnBvaW50aW50O1wiXSwgWzAsIFwiJnF1YXRpbnQ7XCJdLCBbMCwgXCImaW50bGFyaGs7XCJdLCBbMTAsIFwiJnBsdXNjaXI7XCJdLCBbMCwgXCImcGx1c2FjaXI7XCJdLCBbMCwgXCImc2ltcGx1cztcIl0sIFswLCBcIiZwbHVzZHU7XCJdLCBbMCwgXCImcGx1c3NpbTtcIl0sIFswLCBcIiZwbHVzdHdvO1wiXSwgWzEsIFwiJm1jb21tYTtcIl0sIFswLCBcIiZtaW51c2R1O1wiXSwgWzIsIFwiJmxvcGx1cztcIl0sIFswLCBcIiZyb3BsdXM7XCJdLCBbMCwgXCImQ3Jvc3M7XCJdLCBbMCwgXCImdGltZXNkO1wiXSwgWzAsIFwiJnRpbWVzYmFyO1wiXSwgWzEsIFwiJnNtYXNocDtcIl0sIFswLCBcIiZsb3RpbWVzO1wiXSwgWzAsIFwiJnJvdGltZXM7XCJdLCBbMCwgXCImb3RpbWVzYXM7XCJdLCBbMCwgXCImT3RpbWVzO1wiXSwgWzAsIFwiJm9kaXY7XCJdLCBbMCwgXCImdHJpcGx1cztcIl0sIFswLCBcIiZ0cmltaW51cztcIl0sIFswLCBcIiZ0cml0aW1lO1wiXSwgWzAsIFwiJmludHByb2Q7XCJdLCBbMiwgXCImYW1hbGc7XCJdLCBbMCwgXCImY2FwZG90O1wiXSwgWzEsIFwiJm5jdXA7XCJdLCBbMCwgXCImbmNhcDtcIl0sIFswLCBcIiZjYXBhbmQ7XCJdLCBbMCwgXCImY3Vwb3I7XCJdLCBbMCwgXCImY3VwY2FwO1wiXSwgWzAsIFwiJmNhcGN1cDtcIl0sIFswLCBcIiZjdXBicmNhcDtcIl0sIFswLCBcIiZjYXBicmN1cDtcIl0sIFswLCBcIiZjdXBjdXA7XCJdLCBbMCwgXCImY2FwY2FwO1wiXSwgWzAsIFwiJmNjdXBzO1wiXSwgWzAsIFwiJmNjYXBzO1wiXSwgWzIsIFwiJmNjdXBzc207XCJdLCBbMiwgXCImQW5kO1wiXSwgWzAsIFwiJk9yO1wiXSwgWzAsIFwiJmFuZGFuZDtcIl0sIFswLCBcIiZvcm9yO1wiXSwgWzAsIFwiJm9yc2xvcGU7XCJdLCBbMCwgXCImYW5kc2xvcGU7XCJdLCBbMSwgXCImYW5kdjtcIl0sIFswLCBcIiZvcnY7XCJdLCBbMCwgXCImYW5kZDtcIl0sIFswLCBcIiZvcmQ7XCJdLCBbMSwgXCImd2VkYmFyO1wiXSwgWzYsIFwiJnNkb3RlO1wiXSwgWzMsIFwiJnNpbWRvdDtcIl0sIFsyLCB7IHY6IFwiJmNvbmdkb3Q7XCIsIG46IDgyNCwgbzogXCImbmNvbmdkb3Q7XCIgfV0sIFswLCBcIiZlYXN0ZXI7XCJdLCBbMCwgXCImYXBhY2lyO1wiXSwgWzAsIHsgdjogXCImYXBFO1wiLCBuOiA4MjQsIG86IFwiJm5hcEU7XCIgfV0sIFswLCBcIiZlcGx1cztcIl0sIFswLCBcIiZwbHVzZTtcIl0sIFswLCBcIiZFc2ltO1wiXSwgWzAsIFwiJkNvbG9uZTtcIl0sIFswLCBcIiZFcXVhbDtcIl0sIFsxLCBcIiZkZG90c2VxO1wiXSwgWzAsIFwiJmVxdWl2REQ7XCJdLCBbMCwgXCImbHRjaXI7XCJdLCBbMCwgXCImZ3RjaXI7XCJdLCBbMCwgXCImbHRxdWVzdDtcIl0sIFswLCBcIiZndHF1ZXN0O1wiXSwgWzAsIHsgdjogXCImbGVxc2xhbnQ7XCIsIG46IDgyNCwgbzogXCImbmxlcXNsYW50O1wiIH1dLCBbMCwgeyB2OiBcIiZnZXFzbGFudDtcIiwgbjogODI0LCBvOiBcIiZuZ2Vxc2xhbnQ7XCIgfV0sIFswLCBcIiZsZXNkb3Q7XCJdLCBbMCwgXCImZ2VzZG90O1wiXSwgWzAsIFwiJmxlc2RvdG87XCJdLCBbMCwgXCImZ2VzZG90bztcIl0sIFswLCBcIiZsZXNkb3RvcjtcIl0sIFswLCBcIiZnZXNkb3RvbDtcIl0sIFswLCBcIiZsYXA7XCJdLCBbMCwgXCImZ2FwO1wiXSwgWzAsIFwiJmxuZTtcIl0sIFswLCBcIiZnbmU7XCJdLCBbMCwgXCImbG5hcDtcIl0sIFswLCBcIiZnbmFwO1wiXSwgWzAsIFwiJmxFZztcIl0sIFswLCBcIiZnRWw7XCJdLCBbMCwgXCImbHNpbWU7XCJdLCBbMCwgXCImZ3NpbWU7XCJdLCBbMCwgXCImbHNpbWc7XCJdLCBbMCwgXCImZ3NpbWw7XCJdLCBbMCwgXCImbGdFO1wiXSwgWzAsIFwiJmdsRTtcIl0sIFswLCBcIiZsZXNnZXM7XCJdLCBbMCwgXCImZ2VzbGVzO1wiXSwgWzAsIFwiJmVscztcIl0sIFswLCBcIiZlZ3M7XCJdLCBbMCwgXCImZWxzZG90O1wiXSwgWzAsIFwiJmVnc2RvdDtcIl0sIFswLCBcIiZlbDtcIl0sIFswLCBcIiZlZztcIl0sIFsyLCBcIiZzaW1sO1wiXSwgWzAsIFwiJnNpbWc7XCJdLCBbMCwgXCImc2ltbEU7XCJdLCBbMCwgXCImc2ltZ0U7XCJdLCBbMCwgeyB2OiBcIiZMZXNzTGVzcztcIiwgbjogODI0LCBvOiBcIiZOb3ROZXN0ZWRMZXNzTGVzcztcIiB9XSwgWzAsIHsgdjogXCImR3JlYXRlckdyZWF0ZXI7XCIsIG46IDgyNCwgbzogXCImTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI7XCIgfV0sIFsxLCBcIiZnbGo7XCJdLCBbMCwgXCImZ2xhO1wiXSwgWzAsIFwiJmx0Y2M7XCJdLCBbMCwgXCImZ3RjYztcIl0sIFswLCBcIiZsZXNjYztcIl0sIFswLCBcIiZnZXNjYztcIl0sIFswLCBcIiZzbXQ7XCJdLCBbMCwgXCImbGF0O1wiXSwgWzAsIHsgdjogXCImc210ZTtcIiwgbjogNjUwMjQsIG86IFwiJnNtdGVzO1wiIH1dLCBbMCwgeyB2OiBcIiZsYXRlO1wiLCBuOiA2NTAyNCwgbzogXCImbGF0ZXM7XCIgfV0sIFswLCBcIiZidW1wRTtcIl0sIFswLCB7IHY6IFwiJlByZWNlZGVzRXF1YWw7XCIsIG46IDgyNCwgbzogXCImTm90UHJlY2VkZXNFcXVhbDtcIiB9XSwgWzAsIHsgdjogXCImc2NlO1wiLCBuOiA4MjQsIG86IFwiJk5vdFN1Y2NlZWRzRXF1YWw7XCIgfV0sIFsyLCBcIiZwckU7XCJdLCBbMCwgXCImc2NFO1wiXSwgWzAsIFwiJnByZWNuZXFxO1wiXSwgWzAsIFwiJnNjbkU7XCJdLCBbMCwgXCImcHJhcDtcIl0sIFswLCBcIiZzY2FwO1wiXSwgWzAsIFwiJnByZWNuYXBwcm94O1wiXSwgWzAsIFwiJnNjbmFwO1wiXSwgWzAsIFwiJlByO1wiXSwgWzAsIFwiJlNjO1wiXSwgWzAsIFwiJnN1YmRvdDtcIl0sIFswLCBcIiZzdXBkb3Q7XCJdLCBbMCwgXCImc3VicGx1cztcIl0sIFswLCBcIiZzdXBwbHVzO1wiXSwgWzAsIFwiJnN1Ym11bHQ7XCJdLCBbMCwgXCImc3VwbXVsdDtcIl0sIFswLCBcIiZzdWJlZG90O1wiXSwgWzAsIFwiJnN1cGVkb3Q7XCJdLCBbMCwgeyB2OiBcIiZzdWJFO1wiLCBuOiA4MjQsIG86IFwiJm5zdWJFO1wiIH1dLCBbMCwgeyB2OiBcIiZzdXBFO1wiLCBuOiA4MjQsIG86IFwiJm5zdXBFO1wiIH1dLCBbMCwgXCImc3Vic2ltO1wiXSwgWzAsIFwiJnN1cHNpbTtcIl0sIFsyLCB7IHY6IFwiJnN1Ym5FO1wiLCBuOiA2NTAyNCwgbzogXCImdmFyc3Vic2V0bmVxcTtcIiB9XSwgWzAsIHsgdjogXCImc3VwbkU7XCIsIG46IDY1MDI0LCBvOiBcIiZ2YXJzdXBzZXRuZXFxO1wiIH1dLCBbMiwgXCImY3N1YjtcIl0sIFswLCBcIiZjc3VwO1wiXSwgWzAsIFwiJmNzdWJlO1wiXSwgWzAsIFwiJmNzdXBlO1wiXSwgWzAsIFwiJnN1YnN1cDtcIl0sIFswLCBcIiZzdXBzdWI7XCJdLCBbMCwgXCImc3Vic3ViO1wiXSwgWzAsIFwiJnN1cHN1cDtcIl0sIFswLCBcIiZzdXBoc3ViO1wiXSwgWzAsIFwiJnN1cGRzdWI7XCJdLCBbMCwgXCImZm9ya3Y7XCJdLCBbMCwgXCImdG9wZm9yaztcIl0sIFswLCBcIiZtbGNwO1wiXSwgWzgsIFwiJkRhc2h2O1wiXSwgWzEsIFwiJlZkYXNobDtcIl0sIFswLCBcIiZCYXJ2O1wiXSwgWzAsIFwiJnZCYXI7XCJdLCBbMCwgXCImdkJhcnY7XCJdLCBbMSwgXCImVmJhcjtcIl0sIFswLCBcIiZOb3Q7XCJdLCBbMCwgXCImYk5vdDtcIl0sIFswLCBcIiZybm1pZDtcIl0sIFswLCBcIiZjaXJtaWQ7XCJdLCBbMCwgXCImbWlkY2lyO1wiXSwgWzAsIFwiJnRvcGNpcjtcIl0sIFswLCBcIiZuaHBhcjtcIl0sIFswLCBcIiZwYXJzaW07XCJdLCBbOSwgeyB2OiBcIiZwYXJzbDtcIiwgbjogODQyMSwgbzogXCImbnBhcnNsO1wiIH1dLCBbNDQzNDMsIHsgbjogbmV3IE1hcCgvKiAjX19QVVJFX18gKi8gcmVzdG9yZURpZmYoW1s1NjQ3NiwgXCImQXNjcjtcIl0sIFsxLCBcIiZDc2NyO1wiXSwgWzAsIFwiJkRzY3I7XCJdLCBbMiwgXCImR3NjcjtcIl0sIFsyLCBcIiZKc2NyO1wiXSwgWzAsIFwiJktzY3I7XCJdLCBbMiwgXCImTnNjcjtcIl0sIFswLCBcIiZPc2NyO1wiXSwgWzAsIFwiJlBzY3I7XCJdLCBbMCwgXCImUXNjcjtcIl0sIFsxLCBcIiZTc2NyO1wiXSwgWzAsIFwiJlRzY3I7XCJdLCBbMCwgXCImVXNjcjtcIl0sIFswLCBcIiZWc2NyO1wiXSwgWzAsIFwiJldzY3I7XCJdLCBbMCwgXCImWHNjcjtcIl0sIFswLCBcIiZZc2NyO1wiXSwgWzAsIFwiJlpzY3I7XCJdLCBbMCwgXCImYXNjcjtcIl0sIFswLCBcIiZic2NyO1wiXSwgWzAsIFwiJmNzY3I7XCJdLCBbMCwgXCImZHNjcjtcIl0sIFsxLCBcIiZmc2NyO1wiXSwgWzEsIFwiJmhzY3I7XCJdLCBbMCwgXCImaXNjcjtcIl0sIFswLCBcIiZqc2NyO1wiXSwgWzAsIFwiJmtzY3I7XCJdLCBbMCwgXCImbHNjcjtcIl0sIFswLCBcIiZtc2NyO1wiXSwgWzAsIFwiJm5zY3I7XCJdLCBbMSwgXCImcHNjcjtcIl0sIFswLCBcIiZxc2NyO1wiXSwgWzAsIFwiJnJzY3I7XCJdLCBbMCwgXCImc3NjcjtcIl0sIFswLCBcIiZ0c2NyO1wiXSwgWzAsIFwiJnVzY3I7XCJdLCBbMCwgXCImdnNjcjtcIl0sIFswLCBcIiZ3c2NyO1wiXSwgWzAsIFwiJnhzY3I7XCJdLCBbMCwgXCImeXNjcjtcIl0sIFswLCBcIiZ6c2NyO1wiXSwgWzUyLCBcIiZBZnI7XCJdLCBbMCwgXCImQmZyO1wiXSwgWzEsIFwiJkRmcjtcIl0sIFswLCBcIiZFZnI7XCJdLCBbMCwgXCImRmZyO1wiXSwgWzAsIFwiJkdmcjtcIl0sIFsyLCBcIiZKZnI7XCJdLCBbMCwgXCImS2ZyO1wiXSwgWzAsIFwiJkxmcjtcIl0sIFswLCBcIiZNZnI7XCJdLCBbMCwgXCImTmZyO1wiXSwgWzAsIFwiJk9mcjtcIl0sIFswLCBcIiZQZnI7XCJdLCBbMCwgXCImUWZyO1wiXSwgWzEsIFwiJlNmcjtcIl0sIFswLCBcIiZUZnI7XCJdLCBbMCwgXCImVWZyO1wiXSwgWzAsIFwiJlZmcjtcIl0sIFswLCBcIiZXZnI7XCJdLCBbMCwgXCImWGZyO1wiXSwgWzAsIFwiJllmcjtcIl0sIFsxLCBcIiZhZnI7XCJdLCBbMCwgXCImYmZyO1wiXSwgWzAsIFwiJmNmcjtcIl0sIFswLCBcIiZkZnI7XCJdLCBbMCwgXCImZWZyO1wiXSwgWzAsIFwiJmZmcjtcIl0sIFswLCBcIiZnZnI7XCJdLCBbMCwgXCImaGZyO1wiXSwgWzAsIFwiJmlmcjtcIl0sIFswLCBcIiZqZnI7XCJdLCBbMCwgXCIma2ZyO1wiXSwgWzAsIFwiJmxmcjtcIl0sIFswLCBcIiZtZnI7XCJdLCBbMCwgXCImbmZyO1wiXSwgWzAsIFwiJm9mcjtcIl0sIFswLCBcIiZwZnI7XCJdLCBbMCwgXCImcWZyO1wiXSwgWzAsIFwiJnJmcjtcIl0sIFswLCBcIiZzZnI7XCJdLCBbMCwgXCImdGZyO1wiXSwgWzAsIFwiJnVmcjtcIl0sIFswLCBcIiZ2ZnI7XCJdLCBbMCwgXCImd2ZyO1wiXSwgWzAsIFwiJnhmcjtcIl0sIFswLCBcIiZ5ZnI7XCJdLCBbMCwgXCImemZyO1wiXSwgWzAsIFwiJkFvcGY7XCJdLCBbMCwgXCImQm9wZjtcIl0sIFsxLCBcIiZEb3BmO1wiXSwgWzAsIFwiJkVvcGY7XCJdLCBbMCwgXCImRm9wZjtcIl0sIFswLCBcIiZHb3BmO1wiXSwgWzEsIFwiJklvcGY7XCJdLCBbMCwgXCImSm9wZjtcIl0sIFswLCBcIiZLb3BmO1wiXSwgWzAsIFwiJkxvcGY7XCJdLCBbMCwgXCImTW9wZjtcIl0sIFsxLCBcIiZPb3BmO1wiXSwgWzMsIFwiJlNvcGY7XCJdLCBbMCwgXCImVG9wZjtcIl0sIFswLCBcIiZVb3BmO1wiXSwgWzAsIFwiJlZvcGY7XCJdLCBbMCwgXCImV29wZjtcIl0sIFswLCBcIiZYb3BmO1wiXSwgWzAsIFwiJllvcGY7XCJdLCBbMSwgXCImYW9wZjtcIl0sIFswLCBcIiZib3BmO1wiXSwgWzAsIFwiJmNvcGY7XCJdLCBbMCwgXCImZG9wZjtcIl0sIFswLCBcIiZlb3BmO1wiXSwgWzAsIFwiJmZvcGY7XCJdLCBbMCwgXCImZ29wZjtcIl0sIFswLCBcIiZob3BmO1wiXSwgWzAsIFwiJmlvcGY7XCJdLCBbMCwgXCImam9wZjtcIl0sIFswLCBcIiZrb3BmO1wiXSwgWzAsIFwiJmxvcGY7XCJdLCBbMCwgXCImbW9wZjtcIl0sIFswLCBcIiZub3BmO1wiXSwgWzAsIFwiJm9vcGY7XCJdLCBbMCwgXCImcG9wZjtcIl0sIFswLCBcIiZxb3BmO1wiXSwgWzAsIFwiJnJvcGY7XCJdLCBbMCwgXCImc29wZjtcIl0sIFswLCBcIiZ0b3BmO1wiXSwgWzAsIFwiJnVvcGY7XCJdLCBbMCwgXCImdm9wZjtcIl0sIFswLCBcIiZ3b3BmO1wiXSwgWzAsIFwiJnhvcGY7XCJdLCBbMCwgXCImeW9wZjtcIl0sIFswLCBcIiZ6b3BmO1wiXV0pKSB9XSwgWzg5MDYsIFwiJmZmbGlnO1wiXSwgWzAsIFwiJmZpbGlnO1wiXSwgWzAsIFwiJmZsbGlnO1wiXSwgWzAsIFwiJmZmaWxpZztcIl0sIFswLCBcIiZmZmxsaWc7XCJdXSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW5jb2RlLWh0bWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29kZVhNTFN0cmljdCA9IGV4cG9ydHMuZGVjb2RlSFRNTDVTdHJpY3QgPSBleHBvcnRzLmRlY29kZUhUTUw0U3RyaWN0ID0gZXhwb3J0cy5kZWNvZGVIVE1MNSA9IGV4cG9ydHMuZGVjb2RlSFRNTDQgPSBleHBvcnRzLmRlY29kZUhUTUxBdHRyaWJ1dGUgPSBleHBvcnRzLmRlY29kZUhUTUxTdHJpY3QgPSBleHBvcnRzLmRlY29kZUhUTUwgPSBleHBvcnRzLmRlY29kZVhNTCA9IGV4cG9ydHMuRGVjb2RpbmdNb2RlID0gZXhwb3J0cy5FbnRpdHlEZWNvZGVyID0gZXhwb3J0cy5lbmNvZGVIVE1MNSA9IGV4cG9ydHMuZW5jb2RlSFRNTDQgPSBleHBvcnRzLmVuY29kZU5vbkFzY2lpSFRNTCA9IGV4cG9ydHMuZW5jb2RlSFRNTCA9IGV4cG9ydHMuZXNjYXBlVGV4dCA9IGV4cG9ydHMuZXNjYXBlQXR0cmlidXRlID0gZXhwb3J0cy5lc2NhcGVVVEY4ID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLmVuY29kZVhNTCA9IGV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5kZWNvZGVTdHJpY3QgPSBleHBvcnRzLmRlY29kZSA9IGV4cG9ydHMuRW5jb2RpbmdNb2RlID0gZXhwb3J0cy5FbnRpdHlMZXZlbCA9IHZvaWQgMDtcbnZhciBkZWNvZGVfanNfMSA9IHJlcXVpcmUoXCIuL2RlY29kZS5qc1wiKTtcbnZhciBlbmNvZGVfanNfMSA9IHJlcXVpcmUoXCIuL2VuY29kZS5qc1wiKTtcbnZhciBlc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbi8qKiBUaGUgbGV2ZWwgb2YgZW50aXRpZXMgdG8gc3VwcG9ydC4gKi9cbnZhciBFbnRpdHlMZXZlbDtcbihmdW5jdGlvbiAoRW50aXR5TGV2ZWwpIHtcbiAgICAvKiogU3VwcG9ydCBvbmx5IFhNTCBlbnRpdGllcy4gKi9cbiAgICBFbnRpdHlMZXZlbFtFbnRpdHlMZXZlbFtcIlhNTFwiXSA9IDBdID0gXCJYTUxcIjtcbiAgICAvKiogU3VwcG9ydCBIVE1MIGVudGl0aWVzLCB3aGljaCBhcmUgYSBzdXBlcnNldCBvZiBYTUwgZW50aXRpZXMuICovXG4gICAgRW50aXR5TGV2ZWxbRW50aXR5TGV2ZWxbXCJIVE1MXCJdID0gMV0gPSBcIkhUTUxcIjtcbn0pKEVudGl0eUxldmVsID0gZXhwb3J0cy5FbnRpdHlMZXZlbCB8fCAoZXhwb3J0cy5FbnRpdHlMZXZlbCA9IHt9KSk7XG52YXIgRW5jb2RpbmdNb2RlO1xuKGZ1bmN0aW9uIChFbmNvZGluZ01vZGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgb3V0cHV0IGlzIFVURi04IGVuY29kZWQuIE9ubHkgY2hhcmFjdGVycyB0aGF0IG5lZWQgZXNjYXBpbmcgd2l0aGluXG4gICAgICogWE1MIHdpbGwgYmUgZXNjYXBlZC5cbiAgICAgKi9cbiAgICBFbmNvZGluZ01vZGVbRW5jb2RpbmdNb2RlW1wiVVRGOFwiXSA9IDBdID0gXCJVVEY4XCI7XG4gICAgLyoqXG4gICAgICogVGhlIG91dHB1dCBjb25zaXN0cyBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMuIENoYXJhY3RlcnMgdGhhdCBuZWVkXG4gICAgICogZXNjYXBpbmcgd2l0aGluIEhUTUwsIGFuZCBjaGFyYWN0ZXJzIHRoYXQgYXJlbid0IEFTQ0lJIGNoYXJhY3RlcnMgd2lsbFxuICAgICAqIGJlIGVzY2FwZWQuXG4gICAgICovXG4gICAgRW5jb2RpbmdNb2RlW0VuY29kaW5nTW9kZVtcIkFTQ0lJXCJdID0gMV0gPSBcIkFTQ0lJXCI7XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhbiBlcXVpdmFsZW50IGVudGl0eSwgYXMgd2VsbCBhcyBhbGxcbiAgICAgKiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBBU0NJSSBjaGFyYWN0ZXJzLlxuICAgICAqL1xuICAgIEVuY29kaW5nTW9kZVtFbmNvZGluZ01vZGVbXCJFeHRlbnNpdmVcIl0gPSAyXSA9IFwiRXh0ZW5zaXZlXCI7XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0byBiZSBlc2NhcGVkIGluIEhUTUwgYXR0cmlidXRlcyxcbiAgICAgKiBmb2xsb3dpbmcge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNlc2NhcGluZ1N0cmluZ30uXG4gICAgICovXG4gICAgRW5jb2RpbmdNb2RlW0VuY29kaW5nTW9kZVtcIkF0dHJpYnV0ZVwiXSA9IDNdID0gXCJBdHRyaWJ1dGVcIjtcbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRvIGJlIGVzY2FwZWQgaW4gSFRNTCB0ZXh0LFxuICAgICAqIGZvbGxvd2luZyB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2VzY2FwaW5nU3RyaW5nfS5cbiAgICAgKi9cbiAgICBFbmNvZGluZ01vZGVbRW5jb2RpbmdNb2RlW1wiVGV4dFwiXSA9IDRdID0gXCJUZXh0XCI7XG59KShFbmNvZGluZ01vZGUgPSBleHBvcnRzLkVuY29kaW5nTW9kZSB8fCAoZXhwb3J0cy5FbmNvZGluZ01vZGUgPSB7fSkpO1xuLyoqXG4gKiBEZWNvZGVzIGEgc3RyaW5nIHdpdGggZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIGRhdGEgU3RyaW5nIHRvIGRlY29kZS5cbiAqIEBwYXJhbSBvcHRpb25zIERlY29kaW5nIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShkYXRhLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0gRW50aXR5TGV2ZWwuWE1MOyB9XG4gICAgdmFyIGxldmVsID0gdHlwZW9mIG9wdGlvbnMgPT09IFwibnVtYmVyXCIgPyBvcHRpb25zIDogb3B0aW9ucy5sZXZlbDtcbiAgICBpZiAobGV2ZWwgPT09IEVudGl0eUxldmVsLkhUTUwpIHtcbiAgICAgICAgdmFyIG1vZGUgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIiA/IG9wdGlvbnMubW9kZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuICgwLCBkZWNvZGVfanNfMS5kZWNvZGVIVE1MKShkYXRhLCBtb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBkZWNvZGVfanNfMS5kZWNvZGVYTUwpKGRhdGEpO1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG4vKipcbiAqIERlY29kZXMgYSBzdHJpbmcgd2l0aCBlbnRpdGllcy4gRG9lcyBub3QgYWxsb3cgbWlzc2luZyB0cmFpbGluZyBzZW1pY29sb25zIGZvciBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0gZGF0YSBTdHJpbmcgdG8gZGVjb2RlLlxuICogQHBhcmFtIG9wdGlvbnMgRGVjb2Rpbmcgb3B0aW9ucy5cbiAqIEBkZXByZWNhdGVkIFVzZSBgZGVjb2RlYCB3aXRoIHRoZSBgbW9kZWAgc2V0IHRvIGBTdHJpY3RgLlxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpY3QoZGF0YSwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSBFbnRpdHlMZXZlbC5YTUw7IH1cbiAgICB2YXIgb3B0cyA9IHR5cGVvZiBvcHRpb25zID09PSBcIm51bWJlclwiID8geyBsZXZlbDogb3B0aW9ucyB9IDogb3B0aW9ucztcbiAgICAoX2EgPSBvcHRzLm1vZGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChvcHRzLm1vZGUgPSBkZWNvZGVfanNfMS5EZWNvZGluZ01vZGUuU3RyaWN0KTtcbiAgICByZXR1cm4gZGVjb2RlKGRhdGEsIG9wdHMpO1xufVxuZXhwb3J0cy5kZWNvZGVTdHJpY3QgPSBkZWNvZGVTdHJpY3Q7XG4vKipcbiAqIEVuY29kZXMgYSBzdHJpbmcgd2l0aCBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0gZGF0YSBTdHJpbmcgdG8gZW5jb2RlLlxuICogQHBhcmFtIG9wdGlvbnMgRW5jb2Rpbmcgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKGRhdGEsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSBFbnRpdHlMZXZlbC5YTUw7IH1cbiAgICB2YXIgb3B0cyA9IHR5cGVvZiBvcHRpb25zID09PSBcIm51bWJlclwiID8geyBsZXZlbDogb3B0aW9ucyB9IDogb3B0aW9ucztcbiAgICAvLyBNb2RlIGBVVEY4YCBqdXN0IGVzY2FwZXMgWE1MIGVudGl0aWVzXG4gICAgaWYgKG9wdHMubW9kZSA9PT0gRW5jb2RpbmdNb2RlLlVURjgpXG4gICAgICAgIHJldHVybiAoMCwgZXNjYXBlX2pzXzEuZXNjYXBlVVRGOCkoZGF0YSk7XG4gICAgaWYgKG9wdHMubW9kZSA9PT0gRW5jb2RpbmdNb2RlLkF0dHJpYnV0ZSlcbiAgICAgICAgcmV0dXJuICgwLCBlc2NhcGVfanNfMS5lc2NhcGVBdHRyaWJ1dGUpKGRhdGEpO1xuICAgIGlmIChvcHRzLm1vZGUgPT09IEVuY29kaW5nTW9kZS5UZXh0KVxuICAgICAgICByZXR1cm4gKDAsIGVzY2FwZV9qc18xLmVzY2FwZVRleHQpKGRhdGEpO1xuICAgIGlmIChvcHRzLmxldmVsID09PSBFbnRpdHlMZXZlbC5IVE1MKSB7XG4gICAgICAgIGlmIChvcHRzLm1vZGUgPT09IEVuY29kaW5nTW9kZS5BU0NJSSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBlbmNvZGVfanNfMS5lbmNvZGVOb25Bc2NpaUhUTUwpKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoMCwgZW5jb2RlX2pzXzEuZW5jb2RlSFRNTCkoZGF0YSk7XG4gICAgfVxuICAgIC8vIEFTQ0lJIGFuZCBFeHRlbnNpdmUgYXJlIGVxdWl2YWxlbnRcbiAgICByZXR1cm4gKDAsIGVzY2FwZV9qc18xLmVuY29kZVhNTCkoZGF0YSk7XG59XG5leHBvcnRzLmVuY29kZSA9IGVuY29kZTtcbnZhciBlc2NhcGVfanNfMiA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVuY29kZVhNTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXNjYXBlX2pzXzIuZW5jb2RlWE1MOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlc2NhcGVfanNfMi5lc2NhcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVVVEY4XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlc2NhcGVfanNfMi5lc2NhcGVVVEY4OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXNjYXBlQXR0cmlidXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlc2NhcGVfanNfMi5lc2NhcGVBdHRyaWJ1dGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVUZXh0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlc2NhcGVfanNfMi5lc2NhcGVUZXh0OyB9IH0pO1xudmFyIGVuY29kZV9qc18yID0gcmVxdWlyZShcIi4vZW5jb2RlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW5jb2RlSFRNTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5jb2RlX2pzXzIuZW5jb2RlSFRNTDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVuY29kZU5vbkFzY2lpSFRNTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5jb2RlX2pzXzIuZW5jb2RlTm9uQXNjaWlIVE1MOyB9IH0pO1xuLy8gTGVnYWN5IGFsaWFzZXMgKGRlcHJlY2F0ZWQpXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbmNvZGVIVE1MNFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5jb2RlX2pzXzIuZW5jb2RlSFRNTDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVuY29kZUhUTUw1XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbmNvZGVfanNfMi5lbmNvZGVIVE1MOyB9IH0pO1xudmFyIGRlY29kZV9qc18yID0gcmVxdWlyZShcIi4vZGVjb2RlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRW50aXR5RGVjb2RlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlX2pzXzIuRW50aXR5RGVjb2RlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRlY29kaW5nTW9kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlX2pzXzIuRGVjb2RpbmdNb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVjb2RlWE1MXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGVfanNfMi5kZWNvZGVYTUw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWNvZGVIVE1MXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGVfanNfMi5kZWNvZGVIVE1MOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVjb2RlSFRNTFN0cmljdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlX2pzXzIuZGVjb2RlSFRNTFN0cmljdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29kZUhUTUxBdHRyaWJ1dGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29kZV9qc18yLmRlY29kZUhUTUxBdHRyaWJ1dGU7IH0gfSk7XG4vLyBMZWdhY3kgYWxpYXNlcyAoZGVwcmVjYXRlZClcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29kZUhUTUw0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGVfanNfMi5kZWNvZGVIVE1MOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVjb2RlSFRNTDVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29kZV9qc18yLmRlY29kZUhUTUw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWNvZGVIVE1MNFN0cmljdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlX2pzXzIuZGVjb2RlSFRNTFN0cmljdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29kZUhUTUw1U3RyaWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGVfanNfMi5kZWNvZGVIVE1MU3RyaWN0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVjb2RlWE1MU3RyaWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGVfanNfMi5kZWNvZGVYTUw7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nID0+IHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcblx0fVxuXG5cdC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHdpdGggc3BlY2lhbCBtZWFuaW5nIGVpdGhlciBpbnNpZGUgb3Igb3V0c2lkZSBjaGFyYWN0ZXIgc2V0cy5cblx0Ly8gVXNlIGEgc2ltcGxlIGJhY2tzbGFzaCBlc2NhcGUgd2hlbiBpdOKAmXMgYWx3YXlzIHZhbGlkLCBhbmQgYSBcXHVubm5uIGVzY2FwZSB3aGVuIHRoZSBzaW1wbGVyIGZvcm0gd291bGQgYmUgZGlzYWxsb3dlZCBieSBVbmljb2RlIHBhdHRlcm5z4oCZIHN0cmljdGVyIGdyYW1tYXIuXG5cdHJldHVybiBzdHJpbmdcblx0XHQucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csICdcXFxcJCYnKVxuXHRcdC5yZXBsYWNlKC8tL2csICdcXFxceDJkJyk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGFyc2VyID0gdm9pZCAwO1xudmFyIFRva2VuaXplcl9qc18xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL1Rva2VuaXplci5qc1wiKSk7XG52YXIgZGVjb2RlX2pzXzEgPSByZXF1aXJlKFwiZW50aXRpZXMvbGliL2RlY29kZS5qc1wiKTtcbnZhciBmb3JtVGFncyA9IG5ldyBTZXQoW1xuICAgIFwiaW5wdXRcIixcbiAgICBcIm9wdGlvblwiLFxuICAgIFwib3B0Z3JvdXBcIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJkYXRhbGlzdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbl0pO1xudmFyIHBUYWcgPSBuZXcgU2V0KFtcInBcIl0pO1xudmFyIHRhYmxlU2VjdGlvblRhZ3MgPSBuZXcgU2V0KFtcInRoZWFkXCIsIFwidGJvZHlcIl0pO1xudmFyIGRkdFRhZ3MgPSBuZXcgU2V0KFtcImRkXCIsIFwiZHRcIl0pO1xudmFyIHJ0cFRhZ3MgPSBuZXcgU2V0KFtcInJ0XCIsIFwicnBcIl0pO1xudmFyIG9wZW5JbXBsaWVzQ2xvc2UgPSBuZXcgTWFwKFtcbiAgICBbXCJ0clwiLCBuZXcgU2V0KFtcInRyXCIsIFwidGhcIiwgXCJ0ZFwiXSldLFxuICAgIFtcInRoXCIsIG5ldyBTZXQoW1widGhcIl0pXSxcbiAgICBbXCJ0ZFwiLCBuZXcgU2V0KFtcInRoZWFkXCIsIFwidGhcIiwgXCJ0ZFwiXSldLFxuICAgIFtcImJvZHlcIiwgbmV3IFNldChbXCJoZWFkXCIsIFwibGlua1wiLCBcInNjcmlwdFwiXSldLFxuICAgIFtcImxpXCIsIG5ldyBTZXQoW1wibGlcIl0pXSxcbiAgICBbXCJwXCIsIHBUYWddLFxuICAgIFtcImgxXCIsIHBUYWddLFxuICAgIFtcImgyXCIsIHBUYWddLFxuICAgIFtcImgzXCIsIHBUYWddLFxuICAgIFtcImg0XCIsIHBUYWddLFxuICAgIFtcImg1XCIsIHBUYWddLFxuICAgIFtcImg2XCIsIHBUYWddLFxuICAgIFtcInNlbGVjdFwiLCBmb3JtVGFnc10sXG4gICAgW1wiaW5wdXRcIiwgZm9ybVRhZ3NdLFxuICAgIFtcIm91dHB1dFwiLCBmb3JtVGFnc10sXG4gICAgW1wiYnV0dG9uXCIsIGZvcm1UYWdzXSxcbiAgICBbXCJkYXRhbGlzdFwiLCBmb3JtVGFnc10sXG4gICAgW1widGV4dGFyZWFcIiwgZm9ybVRhZ3NdLFxuICAgIFtcIm9wdGlvblwiLCBuZXcgU2V0KFtcIm9wdGlvblwiXSldLFxuICAgIFtcIm9wdGdyb3VwXCIsIG5ldyBTZXQoW1wib3B0Z3JvdXBcIiwgXCJvcHRpb25cIl0pXSxcbiAgICBbXCJkZFwiLCBkZHRUYWdzXSxcbiAgICBbXCJkdFwiLCBkZHRUYWdzXSxcbiAgICBbXCJhZGRyZXNzXCIsIHBUYWddLFxuICAgIFtcImFydGljbGVcIiwgcFRhZ10sXG4gICAgW1wiYXNpZGVcIiwgcFRhZ10sXG4gICAgW1wiYmxvY2txdW90ZVwiLCBwVGFnXSxcbiAgICBbXCJkZXRhaWxzXCIsIHBUYWddLFxuICAgIFtcImRpdlwiLCBwVGFnXSxcbiAgICBbXCJkbFwiLCBwVGFnXSxcbiAgICBbXCJmaWVsZHNldFwiLCBwVGFnXSxcbiAgICBbXCJmaWdjYXB0aW9uXCIsIHBUYWddLFxuICAgIFtcImZpZ3VyZVwiLCBwVGFnXSxcbiAgICBbXCJmb290ZXJcIiwgcFRhZ10sXG4gICAgW1wiZm9ybVwiLCBwVGFnXSxcbiAgICBbXCJoZWFkZXJcIiwgcFRhZ10sXG4gICAgW1wiaHJcIiwgcFRhZ10sXG4gICAgW1wibWFpblwiLCBwVGFnXSxcbiAgICBbXCJuYXZcIiwgcFRhZ10sXG4gICAgW1wib2xcIiwgcFRhZ10sXG4gICAgW1wicHJlXCIsIHBUYWddLFxuICAgIFtcInNlY3Rpb25cIiwgcFRhZ10sXG4gICAgW1widGFibGVcIiwgcFRhZ10sXG4gICAgW1widWxcIiwgcFRhZ10sXG4gICAgW1wicnRcIiwgcnRwVGFnc10sXG4gICAgW1wicnBcIiwgcnRwVGFnc10sXG4gICAgW1widGJvZHlcIiwgdGFibGVTZWN0aW9uVGFnc10sXG4gICAgW1widGZvb3RcIiwgdGFibGVTZWN0aW9uVGFnc10sXG5dKTtcbnZhciB2b2lkRWxlbWVudHMgPSBuZXcgU2V0KFtcbiAgICBcImFyZWFcIixcbiAgICBcImJhc2VcIixcbiAgICBcImJhc2Vmb250XCIsXG4gICAgXCJiclwiLFxuICAgIFwiY29sXCIsXG4gICAgXCJjb21tYW5kXCIsXG4gICAgXCJlbWJlZFwiLFxuICAgIFwiZnJhbWVcIixcbiAgICBcImhyXCIsXG4gICAgXCJpbWdcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJpc2luZGV4XCIsXG4gICAgXCJrZXlnZW5cIixcbiAgICBcImxpbmtcIixcbiAgICBcIm1ldGFcIixcbiAgICBcInBhcmFtXCIsXG4gICAgXCJzb3VyY2VcIixcbiAgICBcInRyYWNrXCIsXG4gICAgXCJ3YnJcIixcbl0pO1xudmFyIGZvcmVpZ25Db250ZXh0RWxlbWVudHMgPSBuZXcgU2V0KFtcIm1hdGhcIiwgXCJzdmdcIl0pO1xudmFyIGh0bWxJbnRlZ3JhdGlvbkVsZW1lbnRzID0gbmV3IFNldChbXG4gICAgXCJtaVwiLFxuICAgIFwibW9cIixcbiAgICBcIm1uXCIsXG4gICAgXCJtc1wiLFxuICAgIFwibXRleHRcIixcbiAgICBcImFubm90YXRpb24teG1sXCIsXG4gICAgXCJmb3JlaWdub2JqZWN0XCIsXG4gICAgXCJkZXNjXCIsXG4gICAgXCJ0aXRsZVwiLFxuXSk7XG52YXIgcmVOYW1lRW5kID0gL1xcc3xcXC8vO1xudmFyIFBhcnNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQYXJzZXIoY2JzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIGxhc3QgZXZlbnQuICovXG4gICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIC8qKiBUaGUgZW5kIGluZGV4IG9mIHRoZSBsYXN0IGV2ZW50LiAqL1xuICAgICAgICB0aGlzLmVuZEluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0b3JlIHRoZSBzdGFydCBpbmRleCBvZiB0aGUgY3VycmVudCBvcGVuIHRhZyxcbiAgICAgICAgICogc28gd2UgY2FuIHVwZGF0ZSB0aGUgc3RhcnQgaW5kZXggZm9yIGF0dHJpYnV0ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZW5UYWdTdGFydCA9IDA7XG4gICAgICAgIHRoaXMudGFnbmFtZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuYXR0cmlibmFtZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuYXR0cmlidmFsdWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmF0dHJpYnMgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMuZm9yZWlnbkNvbnRleHQgPSBbXTtcbiAgICAgICAgdGhpcy5idWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuYnVmZmVyT2Zmc2V0ID0gMDtcbiAgICAgICAgLyoqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCB3cml0dGVuIGJ1ZmZlci4gVXNlZCB3aGVuIHJlc3VtaW5nIGFmdGVyIGEgYHBhdXNlKClgLiAqL1xuICAgICAgICB0aGlzLndyaXRlSW5kZXggPSAwO1xuICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhcnNlciBoYXMgZmluaXNoZWQgcnVubmluZyAvIGAuZW5kYCBoYXMgYmVlbiBjYWxsZWQuICovXG4gICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYnMgPSBjYnMgIT09IG51bGwgJiYgY2JzICE9PSB2b2lkIDAgPyBjYnMgOiB7fTtcbiAgICAgICAgdGhpcy5sb3dlckNhc2VUYWdOYW1lcyA9IChfYSA9IG9wdGlvbnMubG93ZXJDYXNlVGFncykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogIW9wdGlvbnMueG1sTW9kZTtcbiAgICAgICAgdGhpcy5sb3dlckNhc2VBdHRyaWJ1dGVOYW1lcyA9XG4gICAgICAgICAgICAoX2IgPSBvcHRpb25zLmxvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAhb3B0aW9ucy54bWxNb2RlO1xuICAgICAgICB0aGlzLnRva2VuaXplciA9IG5ldyAoKF9jID0gb3B0aW9ucy5Ub2tlbml6ZXIpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IFRva2VuaXplcl9qc18xLmRlZmF1bHQpKHRoaXMub3B0aW9ucywgdGhpcyk7XG4gICAgICAgIChfZSA9IChfZCA9IHRoaXMuY2JzKS5vbnBhcnNlcmluaXQpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5jYWxsKF9kLCB0aGlzKTtcbiAgICB9XG4gICAgLy8gVG9rZW5pemVyIGV2ZW50IGhhbmRsZXJzXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUub250ZXh0ID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmRJbmRleCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0U2xpY2Uoc3RhcnQsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4IC0gMTtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5jYnMpLm9udGV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGRhdGEpO1xuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBlbmRJbmRleDtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLm9udGV4dGVudGl0eSA9IGZ1bmN0aW9uIChjcCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAvKlxuICAgICAgICAgKiBFbnRpdGllcyBjYW4gYmUgZW1pdHRlZCBvbiB0aGUgY2hhcmFjdGVyLCBvciBkaXJlY3RseSBhZnRlci5cbiAgICAgICAgICogV2UgdXNlIHRoZSBzZWN0aW9uIHN0YXJ0IGhlcmUgdG8gZ2V0IGFjY3VyYXRlIGluZGljZXMuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnRva2VuaXplci5nZXRTZWN0aW9uU3RhcnQoKTtcbiAgICAgICAgdGhpcy5lbmRJbmRleCA9IGluZGV4IC0gMTtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5jYnMpLm9udGV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsICgwLCBkZWNvZGVfanNfMS5mcm9tQ29kZVBvaW50KShjcCkpO1xuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICB9O1xuICAgIFBhcnNlci5wcm90b3R5cGUuaXNWb2lkRWxlbWVudCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5vcHRpb25zLnhtbE1vZGUgJiYgdm9pZEVsZW1lbnRzLmhhcyhuYW1lKTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLm9ub3BlbnRhZ25hbWUgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZEluZGV4KSB7XG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBlbmRJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmxvd2VyQ2FzZVRhZ05hbWVzKSB7XG4gICAgICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdE9wZW5UYWcobmFtZSk7XG4gICAgfTtcbiAgICBQYXJzZXIucHJvdG90eXBlLmVtaXRPcGVuVGFnID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICB0aGlzLm9wZW5UYWdTdGFydCA9IHRoaXMuc3RhcnRJbmRleDtcbiAgICAgICAgdGhpcy50YWduYW1lID0gbmFtZTtcbiAgICAgICAgdmFyIGltcGxpZXNDbG9zZSA9ICF0aGlzLm9wdGlvbnMueG1sTW9kZSAmJiBvcGVuSW1wbGllc0Nsb3NlLmdldChuYW1lKTtcbiAgICAgICAgaWYgKGltcGxpZXNDbG9zZSkge1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhY2subGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIGltcGxpZXNDbG9zZS5oYXModGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmNicykub25jbG9zZXRhZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVsZW1lbnQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc1ZvaWRFbGVtZW50KG5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2gobmFtZSk7XG4gICAgICAgICAgICBpZiAoZm9yZWlnbkNvbnRleHRFbGVtZW50cy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmVpZ25Db250ZXh0LnB1c2godHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChodG1sSW50ZWdyYXRpb25FbGVtZW50cy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmVpZ25Db250ZXh0LnB1c2goZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIChfZCA9IChfYyA9IHRoaXMuY2JzKS5vbm9wZW50YWduYW1lKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYywgbmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmNicy5vbm9wZW50YWcpXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnMgPSB7fTtcbiAgICB9O1xuICAgIFBhcnNlci5wcm90b3R5cGUuZW5kT3BlblRhZyA9IGZ1bmN0aW9uIChpc0ltcGxpZWQpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gdGhpcy5vcGVuVGFnU3RhcnQ7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYnMpIHtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuY2JzKS5vbm9wZW50YWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB0aGlzLnRhZ25hbWUsIHRoaXMuYXR0cmlicywgaXNJbXBsaWVkKTtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlicyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2JzLm9uY2xvc2V0YWcgJiYgdGhpcy5pc1ZvaWRFbGVtZW50KHRoaXMudGFnbmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2JzLm9uY2xvc2V0YWcodGhpcy50YWduYW1lLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhZ25hbWUgPSBcIlwiO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUub25vcGVudGFnZW5kID0gZnVuY3Rpb24gKGVuZEluZGV4KSB7XG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgdGhpcy5lbmRPcGVuVGFnKGZhbHNlKTtcbiAgICAgICAgLy8gU2V0IGBzdGFydEluZGV4YCBmb3IgbmV4dCBub2RlXG4gICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IGVuZEluZGV4ICsgMTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLm9uY2xvc2V0YWcgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZEluZGV4KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7XG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXRTbGljZShzdGFydCwgZW5kSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5sb3dlckNhc2VUYWdOYW1lcykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yZWlnbkNvbnRleHRFbGVtZW50cy5oYXMobmFtZSkgfHxcbiAgICAgICAgICAgIGh0bWxJbnRlZ3JhdGlvbkVsZW1lbnRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JlaWduQ29udGV4dC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNWb2lkRWxlbWVudChuYW1lKSkge1xuICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuc3RhY2subGFzdEluZGV4T2YobmFtZSk7XG4gICAgICAgICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNicy5vbmNsb3NldGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHRoaXMuc3RhY2subGVuZ3RoIC0gcG9zO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgc3RhY2sgaGFzIHN1ZmZpY2llbnQgZWxlbWVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNicy5vbmNsb3NldGFnKHRoaXMuc3RhY2sucG9wKCksIGNvdW50ICE9PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2subGVuZ3RoID0gcG9zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMub3B0aW9ucy54bWxNb2RlICYmIG5hbWUgPT09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gSW1wbGljaXQgb3BlbiBiZWZvcmUgY2xvc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRPcGVuVGFnKFwicFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ3VycmVudFRhZyh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5vcHRpb25zLnhtbE1vZGUgJiYgbmFtZSA9PT0gXCJiclwiKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4ndCB1c2UgYGVtaXRPcGVuVGFnYCBmb3IgaW1wbGljaXQgb3BlbiwgYXMgYGJyYCB3b3VsZCBiZSBpbXBsaWNpdGx5IGNsb3NlZC5cbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuY2JzKS5vbm9wZW50YWduYW1lKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgXCJiclwiKTtcbiAgICAgICAgICAgIChfZCA9IChfYyA9IHRoaXMuY2JzKS5vbm9wZW50YWcpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jYWxsKF9jLCBcImJyXCIsIHt9LCB0cnVlKTtcbiAgICAgICAgICAgIChfZiA9IChfZSA9IHRoaXMuY2JzKS5vbmNsb3NldGFnKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuY2FsbChfZSwgXCJiclwiLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IGBzdGFydEluZGV4YCBmb3IgbmV4dCBub2RlXG4gICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IGVuZEluZGV4ICsgMTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLm9uc2VsZmNsb3Npbmd0YWcgPSBmdW5jdGlvbiAoZW5kSW5kZXgpIHtcbiAgICAgICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnhtbE1vZGUgfHxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZWNvZ25pemVTZWxmQ2xvc2luZyB8fFxuICAgICAgICAgICAgdGhpcy5mb3JlaWduQ29udGV4dFt0aGlzLmZvcmVpZ25Db250ZXh0Lmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ3VycmVudFRhZyhmYWxzZSk7XG4gICAgICAgICAgICAvLyBTZXQgYHN0YXJ0SW5kZXhgIGZvciBuZXh0IG5vZGVcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IGVuZEluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgZmFjdCB0aGF0IHRoZSB0YWcgaXMgc2VsZi1jbG9zaW5nLlxuICAgICAgICAgICAgdGhpcy5vbm9wZW50YWdlbmQoZW5kSW5kZXgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQYXJzZXIucHJvdG90eXBlLmNsb3NlQ3VycmVudFRhZyA9IGZ1bmN0aW9uIChpc09wZW5JbXBsaWVkKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHZhciBuYW1lID0gdGhpcy50YWduYW1lO1xuICAgICAgICB0aGlzLmVuZE9wZW5UYWcoaXNPcGVuSW1wbGllZCk7XG4gICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWdzIHdpbGwgYmUgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2tcbiAgICAgICAgaWYgKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIG9wZW5pbmcgdGFnIGlzbid0IGltcGxpZWQsIHRoZSBjbG9zaW5nIHRhZyBoYXMgdG8gYmUgaW1wbGllZC5cbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuY2JzKS5vbmNsb3NldGFnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgbmFtZSwgIWlzT3BlbkltcGxpZWQpO1xuICAgICAgICAgICAgdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUub25hdHRyaWJuYW1lID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmRJbmRleCkge1xuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydDtcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuYXR0cmlibmFtZSA9IHRoaXMubG93ZXJDYXNlQXR0cmlidXRlTmFtZXNcbiAgICAgICAgICAgID8gbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA6IG5hbWU7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5vbmF0dHJpYmRhdGEgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZEluZGV4KSB7XG4gICAgICAgIHRoaXMuYXR0cmlidmFsdWUgKz0gdGhpcy5nZXRTbGljZShzdGFydCwgZW5kSW5kZXgpO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUub25hdHRyaWJlbnRpdHkgPSBmdW5jdGlvbiAoY3ApIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ2YWx1ZSArPSAoMCwgZGVjb2RlX2pzXzEuZnJvbUNvZGVQb2ludCkoY3ApO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUub25hdHRyaWJlbmQgPSBmdW5jdGlvbiAocXVvdGUsIGVuZEluZGV4KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5jYnMpLm9uYXR0cmlidXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdGhpcy5hdHRyaWJuYW1lLCB0aGlzLmF0dHJpYnZhbHVlLCBxdW90ZSA9PT0gVG9rZW5pemVyX2pzXzEuUXVvdGVUeXBlLkRvdWJsZVxuICAgICAgICAgICAgPyAnXCInXG4gICAgICAgICAgICA6IHF1b3RlID09PSBUb2tlbml6ZXJfanNfMS5RdW90ZVR5cGUuU2luZ2xlXG4gICAgICAgICAgICAgICAgPyBcIidcIlxuICAgICAgICAgICAgICAgIDogcXVvdGUgPT09IFRva2VuaXplcl9qc18xLlF1b3RlVHlwZS5Ob1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYnMgJiZcbiAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJzLCB0aGlzLmF0dHJpYm5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmF0dHJpYnNbdGhpcy5hdHRyaWJuYW1lXSA9IHRoaXMuYXR0cmlidmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdHRyaWJ2YWx1ZSA9IFwiXCI7XG4gICAgfTtcbiAgICBQYXJzZXIucHJvdG90eXBlLmdldEluc3RydWN0aW9uTmFtZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSB2YWx1ZS5zZWFyY2gocmVOYW1lRW5kKTtcbiAgICAgICAgdmFyIG5hbWUgPSBpbmRleCA8IDAgPyB2YWx1ZSA6IHZhbHVlLnN1YnN0cigwLCBpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmxvd2VyQ2FzZVRhZ05hbWVzKSB7XG4gICAgICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUub25kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChzdGFydCwgZW5kSW5kZXgpIHtcbiAgICAgICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBlbmRJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldEluc3RydWN0aW9uTmFtZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbihcIiFcIi5jb25jYXQobmFtZSksIFwiIVwiLmNvbmNhdCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBgc3RhcnRJbmRleGAgZm9yIG5leHQgbm9kZVxuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBlbmRJbmRleCArIDE7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChzdGFydCwgZW5kSW5kZXgpIHtcbiAgICAgICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBlbmRJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldEluc3RydWN0aW9uTmFtZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbihcIj9cIi5jb25jYXQobmFtZSksIFwiP1wiLmNvbmNhdCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBgc3RhcnRJbmRleGAgZm9yIG5leHQgbm9kZVxuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBlbmRJbmRleCArIDE7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5vbmNvbW1lbnQgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZEluZGV4LCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuY2JzKS5vbmNvbW1lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB0aGlzLmdldFNsaWNlKHN0YXJ0LCBlbmRJbmRleCAtIG9mZnNldCkpO1xuICAgICAgICAoX2QgPSAoX2MgPSB0aGlzLmNicykub25jb21tZW50ZW5kKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYyk7XG4gICAgICAgIC8vIFNldCBgc3RhcnRJbmRleGAgZm9yIG5leHQgbm9kZVxuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBlbmRJbmRleCArIDE7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5vbmNkYXRhID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmRJbmRleCwgb2Zmc2V0KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaztcbiAgICAgICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBlbmRJbmRleCAtIG9mZnNldCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMueG1sTW9kZSB8fCB0aGlzLm9wdGlvbnMucmVjb2duaXplQ0RBVEEpIHtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuY2JzKS5vbmNkYXRhc3RhcnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgICAgIChfZCA9IChfYyA9IHRoaXMuY2JzKS5vbnRleHQpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jYWxsKF9jLCB2YWx1ZSk7XG4gICAgICAgICAgICAoX2YgPSAoX2UgPSB0aGlzLmNicykub25jZGF0YWVuZCkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmNhbGwoX2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgKF9oID0gKF9nID0gdGhpcy5jYnMpLm9uY29tbWVudCkgPT09IG51bGwgfHwgX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oLmNhbGwoX2csIFwiW0NEQVRBW1wiLmNvbmNhdCh2YWx1ZSwgXCJdXVwiKSk7XG4gICAgICAgICAgICAoX2sgPSAoX2ogPSB0aGlzLmNicykub25jb21tZW50ZW5kKSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2suY2FsbChfaik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IGBzdGFydEluZGV4YCBmb3IgbmV4dCBub2RlXG4gICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IGVuZEluZGV4ICsgMTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLm9uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodGhpcy5jYnMub25jbG9zZXRhZykge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBlbmQgaW5kZXggZm9yIGFsbCByZW1haW5pbmcgdGFnc1xuICAgICAgICAgICAgdGhpcy5lbmRJbmRleCA9IHRoaXMuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhpcy5zdGFjay5sZW5ndGg7IGluZGV4ID4gMDsgdGhpcy5jYnMub25jbG9zZXRhZyh0aGlzLnN0YWNrWy0taW5kZXhdLCB0cnVlKSlcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5jYnMpLm9uZW5kKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHBhcnNlciB0byBhIGJsYW5rIHN0YXRlLCByZWFkeSB0byBwYXJzZSBhIG5ldyBIVE1MIGRvY3VtZW50XG4gICAgICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmNicykub25yZXNldCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICB0aGlzLnRva2VuaXplci5yZXNldCgpO1xuICAgICAgICB0aGlzLnRhZ25hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmF0dHJpYm5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmF0dHJpYnMgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSAwO1xuICAgICAgICAoX2QgPSAoX2MgPSB0aGlzLmNicykub25wYXJzZXJpbml0KSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYywgdGhpcyk7XG4gICAgICAgIHRoaXMuYnVmZmVycy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmJ1ZmZlck9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMud3JpdGVJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgcGFyc2VyLCB0aGVuIHBhcnNlcyBhIGNvbXBsZXRlIGRvY3VtZW50IGFuZFxuICAgICAqIHB1c2hlcyBpdCB0byB0aGUgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIERvY3VtZW50IHRvIHBhcnNlLlxuICAgICAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDb21wbGV0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5lbmQoZGF0YSk7XG4gICAgfTtcbiAgICBQYXJzZXIucHJvdG90eXBlLmdldFNsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgd2hpbGUgKHN0YXJ0IC0gdGhpcy5idWZmZXJPZmZzZXQgPj0gdGhpcy5idWZmZXJzWzBdLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zaGlmdEJ1ZmZlcigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzbGljZSA9IHRoaXMuYnVmZmVyc1swXS5zbGljZShzdGFydCAtIHRoaXMuYnVmZmVyT2Zmc2V0LCBlbmQgLSB0aGlzLmJ1ZmZlck9mZnNldCk7XG4gICAgICAgIHdoaWxlIChlbmQgLSB0aGlzLmJ1ZmZlck9mZnNldCA+IHRoaXMuYnVmZmVyc1swXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpZnRCdWZmZXIoKTtcbiAgICAgICAgICAgIHNsaWNlICs9IHRoaXMuYnVmZmVyc1swXS5zbGljZSgwLCBlbmQgLSB0aGlzLmJ1ZmZlck9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNsaWNlO1xuICAgIH07XG4gICAgUGFyc2VyLnByb3RvdHlwZS5zaGlmdEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5idWZmZXJPZmZzZXQgKz0gdGhpcy5idWZmZXJzWzBdLmxlbmd0aDtcbiAgICAgICAgdGhpcy53cml0ZUluZGV4LS07XG4gICAgICAgIHRoaXMuYnVmZmVycy5zaGlmdCgpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgY2h1bmsgb2YgZGF0YSBhbmQgY2FsbHMgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2tzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNodW5rIENodW5rIHRvIHBhcnNlLlxuICAgICAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKHRoaXMuZW5kZWQpIHtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuY2JzKS5vbmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgbmV3IEVycm9yKFwiLndyaXRlKCkgYWZ0ZXIgZG9uZSFcIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKGNodW5rKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5pemVyLnJ1bm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVJbmRleCsrO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBjbGVhcnMgdGhlIHN0YWNrLCBjYWxscyBvbmVuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaHVuayBPcHRpb25hbCBmaW5hbCBjaHVuayB0byBwYXJzZS5cbiAgICAgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodGhpcy5lbmRlZCkge1xuICAgICAgICAgICAgKF9iID0gKF9hID0gdGhpcy5jYnMpLm9uZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBuZXcgRXJyb3IoXCIuZW5kKCkgYWZ0ZXIgZG9uZSFcIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHVuaylcbiAgICAgICAgICAgIHRoaXMud3JpdGUoY2h1bmspO1xuICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuZW5kKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQYXVzZXMgcGFyc2luZy4gVGhlIHBhcnNlciB3b24ndCBlbWl0IGV2ZW50cyB1bnRpbCBgcmVzdW1lYCBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIucGF1c2UoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlc3VtZXMgcGFyc2luZyBhZnRlciBgcGF1c2VgIHdhcyBjYWxsZWQuXG4gICAgICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnJlc3VtZSgpO1xuICAgICAgICB3aGlsZSAodGhpcy50b2tlbml6ZXIucnVubmluZyAmJlxuICAgICAgICAgICAgdGhpcy53cml0ZUluZGV4IDwgdGhpcy5idWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIud3JpdGUodGhpcy5idWZmZXJzW3RoaXMud3JpdGVJbmRleCsrXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW5kZWQpXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplci5lbmQoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIGB3cml0ZWAsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaHVuayBDaHVuayB0byBwYXJzZS5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDaHVuayA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICB0aGlzLndyaXRlKGNodW5rKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIGBlbmRgLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2h1bmsgT3B0aW9uYWwgZmluYWwgY2h1bmsgdG8gcGFyc2UuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgdGhpcy5lbmQoY2h1bmspO1xuICAgIH07XG4gICAgcmV0dXJuIFBhcnNlcjtcbn0oKSk7XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBhcnNlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVvdGVUeXBlID0gdm9pZCAwO1xudmFyIGRlY29kZV9qc18xID0gcmVxdWlyZShcImVudGl0aWVzL2xpYi9kZWNvZGUuanNcIik7XG52YXIgQ2hhckNvZGVzO1xuKGZ1bmN0aW9uIChDaGFyQ29kZXMpIHtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiVGFiXCJdID0gOV0gPSBcIlRhYlwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJOZXdMaW5lXCJdID0gMTBdID0gXCJOZXdMaW5lXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkZvcm1GZWVkXCJdID0gMTJdID0gXCJGb3JtRmVlZFwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJDYXJyaWFnZVJldHVyblwiXSA9IDEzXSA9IFwiQ2FycmlhZ2VSZXR1cm5cIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiU3BhY2VcIl0gPSAzMl0gPSBcIlNwYWNlXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkV4Y2xhbWF0aW9uTWFya1wiXSA9IDMzXSA9IFwiRXhjbGFtYXRpb25NYXJrXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIk51bWJlclwiXSA9IDM1XSA9IFwiTnVtYmVyXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkFtcFwiXSA9IDM4XSA9IFwiQW1wXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIlNpbmdsZVF1b3RlXCJdID0gMzldID0gXCJTaW5nbGVRdW90ZVwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJEb3VibGVRdW90ZVwiXSA9IDM0XSA9IFwiRG91YmxlUXVvdGVcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiRGFzaFwiXSA9IDQ1XSA9IFwiRGFzaFwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJTbGFzaFwiXSA9IDQ3XSA9IFwiU2xhc2hcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiWmVyb1wiXSA9IDQ4XSA9IFwiWmVyb1wiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJOaW5lXCJdID0gNTddID0gXCJOaW5lXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIlNlbWlcIl0gPSA1OV0gPSBcIlNlbWlcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiTHRcIl0gPSA2MF0gPSBcIkx0XCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkVxXCJdID0gNjFdID0gXCJFcVwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJHdFwiXSA9IDYyXSA9IFwiR3RcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiUXVlc3Rpb25tYXJrXCJdID0gNjNdID0gXCJRdWVzdGlvbm1hcmtcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiVXBwZXJBXCJdID0gNjVdID0gXCJVcHBlckFcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiTG93ZXJBXCJdID0gOTddID0gXCJMb3dlckFcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiVXBwZXJGXCJdID0gNzBdID0gXCJVcHBlckZcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiTG93ZXJGXCJdID0gMTAyXSA9IFwiTG93ZXJGXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIlVwcGVyWlwiXSA9IDkwXSA9IFwiVXBwZXJaXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkxvd2VyWlwiXSA9IDEyMl0gPSBcIkxvd2VyWlwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJMb3dlclhcIl0gPSAxMjBdID0gXCJMb3dlclhcIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiT3BlbmluZ1NxdWFyZUJyYWNrZXRcIl0gPSA5MV0gPSBcIk9wZW5pbmdTcXVhcmVCcmFja2V0XCI7XG59KShDaGFyQ29kZXMgfHwgKENoYXJDb2RlcyA9IHt9KSk7XG4vKiogQWxsIHRoZSBzdGF0ZXMgdGhlIHRva2VuaXplciBjYW4gYmUgaW4uICovXG52YXIgU3RhdGU7XG4oZnVuY3Rpb24gKFN0YXRlKSB7XG4gICAgU3RhdGVbU3RhdGVbXCJUZXh0XCJdID0gMV0gPSBcIlRleHRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJlZm9yZVRhZ05hbWVcIl0gPSAyXSA9IFwiQmVmb3JlVGFnTmFtZVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSW5UYWdOYW1lXCJdID0gM10gPSBcIkluVGFnTmFtZVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSW5TZWxmQ2xvc2luZ1RhZ1wiXSA9IDRdID0gXCJJblNlbGZDbG9zaW5nVGFnXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCZWZvcmVDbG9zaW5nVGFnTmFtZVwiXSA9IDVdID0gXCJCZWZvcmVDbG9zaW5nVGFnTmFtZVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSW5DbG9zaW5nVGFnTmFtZVwiXSA9IDZdID0gXCJJbkNsb3NpbmdUYWdOYW1lXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBZnRlckNsb3NpbmdUYWdOYW1lXCJdID0gN10gPSBcIkFmdGVyQ2xvc2luZ1RhZ05hbWVcIjtcbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgU3RhdGVbU3RhdGVbXCJCZWZvcmVBdHRyaWJ1dGVOYW1lXCJdID0gOF0gPSBcIkJlZm9yZUF0dHJpYnV0ZU5hbWVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkluQXR0cmlidXRlTmFtZVwiXSA9IDldID0gXCJJbkF0dHJpYnV0ZU5hbWVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFmdGVyQXR0cmlidXRlTmFtZVwiXSA9IDEwXSA9IFwiQWZ0ZXJBdHRyaWJ1dGVOYW1lXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCZWZvcmVBdHRyaWJ1dGVWYWx1ZVwiXSA9IDExXSA9IFwiQmVmb3JlQXR0cmlidXRlVmFsdWVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkluQXR0cmlidXRlVmFsdWVEcVwiXSA9IDEyXSA9IFwiSW5BdHRyaWJ1dGVWYWx1ZURxXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJJbkF0dHJpYnV0ZVZhbHVlU3FcIl0gPSAxM10gPSBcIkluQXR0cmlidXRlVmFsdWVTcVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSW5BdHRyaWJ1dGVWYWx1ZU5xXCJdID0gMTRdID0gXCJJbkF0dHJpYnV0ZVZhbHVlTnFcIjtcbiAgICAvLyBEZWNsYXJhdGlvbnNcbiAgICBTdGF0ZVtTdGF0ZVtcIkJlZm9yZURlY2xhcmF0aW9uXCJdID0gMTVdID0gXCJCZWZvcmVEZWNsYXJhdGlvblwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSW5EZWNsYXJhdGlvblwiXSA9IDE2XSA9IFwiSW5EZWNsYXJhdGlvblwiO1xuICAgIC8vIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgU3RhdGVbU3RhdGVbXCJJblByb2Nlc3NpbmdJbnN0cnVjdGlvblwiXSA9IDE3XSA9IFwiSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25cIjtcbiAgICAvLyBDb21tZW50cyAmIENEQVRBXG4gICAgU3RhdGVbU3RhdGVbXCJCZWZvcmVDb21tZW50XCJdID0gMThdID0gXCJCZWZvcmVDb21tZW50XCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDREFUQVNlcXVlbmNlXCJdID0gMTldID0gXCJDREFUQVNlcXVlbmNlXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJJblNwZWNpYWxDb21tZW50XCJdID0gMjBdID0gXCJJblNwZWNpYWxDb21tZW50XCI7XG4gICAgU3RhdGVbU3RhdGVbXCJJbkNvbW1lbnRMaWtlXCJdID0gMjFdID0gXCJJbkNvbW1lbnRMaWtlXCI7XG4gICAgLy8gU3BlY2lhbCB0YWdzXG4gICAgU3RhdGVbU3RhdGVbXCJCZWZvcmVTcGVjaWFsU1wiXSA9IDIyXSA9IFwiQmVmb3JlU3BlY2lhbFNcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNwZWNpYWxTdGFydFNlcXVlbmNlXCJdID0gMjNdID0gXCJTcGVjaWFsU3RhcnRTZXF1ZW5jZVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSW5TcGVjaWFsVGFnXCJdID0gMjRdID0gXCJJblNwZWNpYWxUYWdcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJlZm9yZUVudGl0eVwiXSA9IDI1XSA9IFwiQmVmb3JlRW50aXR5XCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCZWZvcmVOdW1lcmljRW50aXR5XCJdID0gMjZdID0gXCJCZWZvcmVOdW1lcmljRW50aXR5XCI7XG4gICAgU3RhdGVbU3RhdGVbXCJJbk5hbWVkRW50aXR5XCJdID0gMjddID0gXCJJbk5hbWVkRW50aXR5XCI7XG4gICAgU3RhdGVbU3RhdGVbXCJJbk51bWVyaWNFbnRpdHlcIl0gPSAyOF0gPSBcIkluTnVtZXJpY0VudGl0eVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSW5IZXhFbnRpdHlcIl0gPSAyOV0gPSBcIkluSGV4RW50aXR5XCI7XG59KShTdGF0ZSB8fCAoU3RhdGUgPSB7fSkpO1xuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpIHtcbiAgICByZXR1cm4gKGMgPT09IENoYXJDb2Rlcy5TcGFjZSB8fFxuICAgICAgICBjID09PSBDaGFyQ29kZXMuTmV3TGluZSB8fFxuICAgICAgICBjID09PSBDaGFyQ29kZXMuVGFiIHx8XG4gICAgICAgIGMgPT09IENoYXJDb2Rlcy5Gb3JtRmVlZCB8fFxuICAgICAgICBjID09PSBDaGFyQ29kZXMuQ2FycmlhZ2VSZXR1cm4pO1xufVxuZnVuY3Rpb24gaXNFbmRPZlRhZ1NlY3Rpb24oYykge1xuICAgIHJldHVybiBjID09PSBDaGFyQ29kZXMuU2xhc2ggfHwgYyA9PT0gQ2hhckNvZGVzLkd0IHx8IGlzV2hpdGVzcGFjZShjKTtcbn1cbmZ1bmN0aW9uIGlzTnVtYmVyKGMpIHtcbiAgICByZXR1cm4gYyA+PSBDaGFyQ29kZXMuWmVybyAmJiBjIDw9IENoYXJDb2Rlcy5OaW5lO1xufVxuZnVuY3Rpb24gaXNBU0NJSUFscGhhKGMpIHtcbiAgICByZXR1cm4gKChjID49IENoYXJDb2Rlcy5Mb3dlckEgJiYgYyA8PSBDaGFyQ29kZXMuTG93ZXJaKSB8fFxuICAgICAgICAoYyA+PSBDaGFyQ29kZXMuVXBwZXJBICYmIGMgPD0gQ2hhckNvZGVzLlVwcGVyWikpO1xufVxuZnVuY3Rpb24gaXNIZXhEaWdpdChjKSB7XG4gICAgcmV0dXJuICgoYyA+PSBDaGFyQ29kZXMuVXBwZXJBICYmIGMgPD0gQ2hhckNvZGVzLlVwcGVyRikgfHxcbiAgICAgICAgKGMgPj0gQ2hhckNvZGVzLkxvd2VyQSAmJiBjIDw9IENoYXJDb2Rlcy5Mb3dlckYpKTtcbn1cbnZhciBRdW90ZVR5cGU7XG4oZnVuY3Rpb24gKFF1b3RlVHlwZSkge1xuICAgIFF1b3RlVHlwZVtRdW90ZVR5cGVbXCJOb1ZhbHVlXCJdID0gMF0gPSBcIk5vVmFsdWVcIjtcbiAgICBRdW90ZVR5cGVbUXVvdGVUeXBlW1wiVW5xdW90ZWRcIl0gPSAxXSA9IFwiVW5xdW90ZWRcIjtcbiAgICBRdW90ZVR5cGVbUXVvdGVUeXBlW1wiU2luZ2xlXCJdID0gMl0gPSBcIlNpbmdsZVwiO1xuICAgIFF1b3RlVHlwZVtRdW90ZVR5cGVbXCJEb3VibGVcIl0gPSAzXSA9IFwiRG91YmxlXCI7XG59KShRdW90ZVR5cGUgPSBleHBvcnRzLlF1b3RlVHlwZSB8fCAoZXhwb3J0cy5RdW90ZVR5cGUgPSB7fSkpO1xuLyoqXG4gKiBTZXF1ZW5jZXMgdXNlZCB0byBtYXRjaCBsb25nZXIgc3RyaW5ncy5cbiAqXG4gKiBXZSBkb24ndCBoYXZlIGBTY3JpcHRgLCBgU3R5bGVgLCBvciBgVGl0bGVgIGhlcmUuIEluc3RlYWQsIHdlIHJlLXVzZSB0aGUgKkVuZFxuICogc2VxdWVuY2VzIHdpdGggYW4gaW5jcmVhc2VkIG9mZnNldC5cbiAqL1xudmFyIFNlcXVlbmNlcyA9IHtcbiAgICBDZGF0YTogbmV3IFVpbnQ4QXJyYXkoWzB4NDMsIDB4NDQsIDB4NDEsIDB4NTQsIDB4NDEsIDB4NWJdKSxcbiAgICBDZGF0YUVuZDogbmV3IFVpbnQ4QXJyYXkoWzB4NWQsIDB4NWQsIDB4M2VdKSxcbiAgICBDb21tZW50RW5kOiBuZXcgVWludDhBcnJheShbMHgyZCwgMHgyZCwgMHgzZV0pLFxuICAgIFNjcmlwdEVuZDogbmV3IFVpbnQ4QXJyYXkoWzB4M2MsIDB4MmYsIDB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzRdKSxcbiAgICBTdHlsZUVuZDogbmV3IFVpbnQ4QXJyYXkoWzB4M2MsIDB4MmYsIDB4NzMsIDB4NzQsIDB4NzksIDB4NmMsIDB4NjVdKSxcbiAgICBUaXRsZUVuZDogbmV3IFVpbnQ4QXJyYXkoWzB4M2MsIDB4MmYsIDB4NzQsIDB4NjksIDB4NzQsIDB4NmMsIDB4NjVdKSwgLy8gYDwvdGl0bGVgXG59O1xudmFyIFRva2VuaXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUb2tlbml6ZXIoX2EsIGNicykge1xuICAgICAgICB2YXIgX2IgPSBfYS54bWxNb2RlLCB4bWxNb2RlID0gX2IgPT09IHZvaWQgMCA/IGZhbHNlIDogX2IsIF9jID0gX2EuZGVjb2RlRW50aXRpZXMsIGRlY29kZUVudGl0aWVzID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYztcbiAgICAgICAgdGhpcy5jYnMgPSBjYnM7XG4gICAgICAgIC8qKiBUaGUgY3VycmVudCBzdGF0ZSB0aGUgdG9rZW5pemVyIGlzIGluLiAqL1xuICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuVGV4dDtcbiAgICAgICAgLyoqIFRoZSByZWFkIGJ1ZmZlci4gKi9cbiAgICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xuICAgICAgICAvKiogVGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbiB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyByZWFkLiAqL1xuICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgIC8qKiBUaGUgaW5kZXggd2l0aGluIHRoZSBidWZmZXIgdGhhdCB3ZSBhcmUgY3VycmVudGx5IGxvb2tpbmcgYXQuICovXG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICAvKiogU29tZSBiZWhhdmlvciwgZWcuIHdoZW4gZGVjb2RpbmcgZW50aXRpZXMsIGlzIGRvbmUgd2hpbGUgd2UgYXJlIGluIGFub3RoZXIgc3RhdGUuIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG90aGVyIHN0YXRlIHR5cGUuICovXG4gICAgICAgIHRoaXMuYmFzZVN0YXRlID0gU3RhdGUuVGV4dDtcbiAgICAgICAgLyoqIEZvciBzcGVjaWFsIHBhcnNpbmcgYmVoYXZpb3IgaW5zaWRlIG9mIHNjcmlwdCBhbmQgc3R5bGUgdGFncy4gKi9cbiAgICAgICAgdGhpcy5pc1NwZWNpYWwgPSBmYWxzZTtcbiAgICAgICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0b2tlbml6ZXIgaGFzIGJlZW4gcGF1c2VkLiAqL1xuICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgICAgICAvKiogVGhlIG9mZnNldCBvZiB0aGUgY3VycmVudCBidWZmZXIuICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VxdWVuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2VxdWVuY2VJbmRleCA9IDA7XG4gICAgICAgIHRoaXMudHJpZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy50cmllQ3VycmVudCA9IDA7XG4gICAgICAgIC8qKiBGb3IgbmFtZWQgZW50aXRpZXMsIHRoZSBpbmRleCBvZiB0aGUgdmFsdWUuIEZvciBudW1lcmljIGVudGl0aWVzLCB0aGUgY29kZSBwb2ludC4gKi9cbiAgICAgICAgdGhpcy5lbnRpdHlSZXN1bHQgPSAwO1xuICAgICAgICB0aGlzLmVudGl0eUV4Y2VzcyA9IDA7XG4gICAgICAgIHRoaXMueG1sTW9kZSA9IHhtbE1vZGU7XG4gICAgICAgIHRoaXMuZGVjb2RlRW50aXRpZXMgPSBkZWNvZGVFbnRpdGllcztcbiAgICAgICAgdGhpcy5lbnRpdHlUcmllID0geG1sTW9kZSA/IGRlY29kZV9qc18xLnhtbERlY29kZVRyZWUgOiBkZWNvZGVfanNfMS5odG1sRGVjb2RlVHJlZTtcbiAgICB9XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlRleHQ7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSAwO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5iYXNlU3RhdGUgPSBTdGF0ZS5UZXh0O1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXF1ZW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICB0aGlzLm9mZnNldCArPSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gY2h1bms7XG4gICAgICAgIHRoaXMucGFyc2UoKTtcbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5ydW5uaW5nKVxuICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmluZGV4IDwgdGhpcy5idWZmZXIubGVuZ3RoICsgdGhpcy5vZmZzZXQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgaW5kZXggd2l0aGluIGFsbCBvZiB0aGUgd3JpdHRlbiBkYXRhLlxuICAgICAqL1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuZ2V0SW5kZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHNlY3Rpb24uXG4gICAgICovXG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5nZXRTZWN0aW9uU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25TdGFydDtcbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVUZXh0ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKGMgPT09IENoYXJDb2Rlcy5MdCB8fFxuICAgICAgICAgICAgKCF0aGlzLmRlY29kZUVudGl0aWVzICYmIHRoaXMuZmFzdEZvcndhcmRUbyhDaGFyQ29kZXMuTHQpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPiB0aGlzLnNlY3Rpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2JzLm9udGV4dCh0aGlzLnNlY3Rpb25TdGFydCwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQmVmb3JlVGFnTmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gdGhpcy5pbmRleDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmRlY29kZUVudGl0aWVzICYmIGMgPT09IENoYXJDb2Rlcy5BbXApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVFbnRpdHk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVTcGVjaWFsU3RhcnRTZXF1ZW5jZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHZhciBpc0VuZCA9IHRoaXMuc2VxdWVuY2VJbmRleCA9PT0gdGhpcy5jdXJyZW50U2VxdWVuY2UubGVuZ3RoO1xuICAgICAgICB2YXIgaXNNYXRjaCA9IGlzRW5kXG4gICAgICAgICAgICA/IC8vIElmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZSBoYXMgZW5kZWRcbiAgICAgICAgICAgICAgICBpc0VuZE9mVGFnU2VjdGlvbihjKVxuICAgICAgICAgICAgOiAvLyBPdGhlcndpc2UsIGRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uXG4gICAgICAgICAgICAgICAgKGMgfCAweDIwKSA9PT0gdGhpcy5jdXJyZW50U2VxdWVuY2VbdGhpcy5zZXF1ZW5jZUluZGV4XTtcbiAgICAgICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3BlY2lhbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0VuZCkge1xuICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZUluZGV4Kys7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXF1ZW5jZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkluVGFnTmFtZTtcbiAgICAgICAgdGhpcy5zdGF0ZUluVGFnTmFtZShjKTtcbiAgICB9O1xuICAgIC8qKiBMb29rIGZvciBhbiBlbmQgdGFnLiBGb3IgPHRpdGxlPiB0YWdzLCBhbHNvIGRlY29kZSBlbnRpdGllcy4gKi9cbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlSW5TcGVjaWFsVGFnID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VxdWVuY2VJbmRleCA9PT0gdGhpcy5jdXJyZW50U2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gQ2hhckNvZGVzLkd0IHx8IGlzV2hpdGVzcGFjZShjKSkge1xuICAgICAgICAgICAgICAgIHZhciBlbmRPZlRleHQgPSB0aGlzLmluZGV4IC0gdGhpcy5jdXJyZW50U2VxdWVuY2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25TdGFydCA8IGVuZE9mVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTcG9vZiB0aGUgaW5kZXggc28gdGhhdCByZXBvcnRlZCBsb2NhdGlvbnMgbWF0Y2ggdXAuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhY3R1YWxJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBlbmRPZlRleHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2JzLm9udGV4dCh0aGlzLnNlY3Rpb25TdGFydCwgZW5kT2ZUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IGFjdHVhbEluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzU3BlY2lhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gZW5kT2ZUZXh0ICsgMjsgLy8gU2tpcCBvdmVyIHRoZSBgPC9gXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluQ2xvc2luZ1RhZ05hbWUoYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBXZSBhcmUgZG9uZTsgc2tpcCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlcXVlbmNlSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoYyB8IDB4MjApID09PSB0aGlzLmN1cnJlbnRTZXF1ZW5jZVt0aGlzLnNlcXVlbmNlSW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLnNlcXVlbmNlSW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlcXVlbmNlSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZXF1ZW5jZSA9PT0gU2VxdWVuY2VzLlRpdGxlRW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBwYXJzZSBlbnRpdGllcyBpbiA8dGl0bGU+IHRhZ3MuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVjb2RlRW50aXRpZXMgJiYgYyA9PT0gQ2hhckNvZGVzLkFtcCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQmVmb3JlRW50aXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZmFzdEZvcndhcmRUbyhDaGFyQ29kZXMuTHQpKSB7XG4gICAgICAgICAgICAgICAgLy8gT3V0c2lkZSBvZiA8dGl0bGU+IHRhZ3MsIHdlIGNhbiBmYXN0LWZvcndhcmQuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZUluZGV4ID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHdlIHNlZSBhIGA8YCwgc2V0IHRoZSBzZXF1ZW5jZSBpbmRleCB0byAxOyB1c2VmdWwgZm9yIGVnLiBgPDwvc2NyaXB0PmAuXG4gICAgICAgICAgICB0aGlzLnNlcXVlbmNlSW5kZXggPSBOdW1iZXIoYyA9PT0gQ2hhckNvZGVzLkx0KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUNEQVRBU2VxdWVuY2UgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gU2VxdWVuY2VzLkNkYXRhW3RoaXMuc2VxdWVuY2VJbmRleF0pIHtcbiAgICAgICAgICAgIGlmICgrK3RoaXMuc2VxdWVuY2VJbmRleCA9PT0gU2VxdWVuY2VzLkNkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5JbkNvbW1lbnRMaWtlO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlcXVlbmNlID0gU2VxdWVuY2VzLkNkYXRhRW5kO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVuY2VJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VxdWVuY2VJbmRleCA9IDA7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSW5EZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVJbkRlY2xhcmF0aW9uKGMpOyAvLyBSZWNvbnN1bWUgdGhlIGNoYXJhY3RlclxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBXaGVuIHdlIHdhaXQgZm9yIG9uZSBzcGVjaWZpYyBjaGFyYWN0ZXIsIHdlIGNhbiBzcGVlZCB0aGluZ3MgdXBcbiAgICAgKiBieSBza2lwcGluZyB0aHJvdWdoIHRoZSBidWZmZXIgdW50aWwgd2UgZmluZCBpdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNoYXJhY3RlciB3YXMgZm91bmQuXG4gICAgICovXG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5mYXN0Rm9yd2FyZFRvID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgd2hpbGUgKCsrdGhpcy5pbmRleCA8IHRoaXMuYnVmZmVyLmxlbmd0aCArIHRoaXMub2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLmluZGV4IC0gdGhpcy5vZmZzZXQpID09PSBjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgICogV2UgaW5jcmVtZW50IHRoZSBpbmRleCBhdCB0aGUgZW5kIG9mIHRoZSBgcGFyc2VgIGxvb3AsXG4gICAgICAgICAqIHNvIHNldCBpdCB0byBgYnVmZmVyLmxlbmd0aCAtIDFgIGhlcmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRPRE86IFJlZmFjdG9yIGBwYXJzZWAgdG8gaW5jcmVtZW50IGluZGV4IGJlZm9yZSBjYWxsaW5nIHN0YXRlcy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLmJ1ZmZlci5sZW5ndGggKyB0aGlzLm9mZnNldCAtIDE7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENvbW1lbnRzIGFuZCBDREFUQSBlbmQgd2l0aCBgLS0+YCBhbmQgYF1dPmAuXG4gICAgICpcbiAgICAgKiBUaGVpciBjb21tb24gcXVhbGl0aWVzIGFyZTpcbiAgICAgKiAtIFRoZWlyIGVuZCBzZXF1ZW5jZXMgaGF2ZSBhIGRpc3RpbmN0IGNoYXJhY3RlciB0aGV5IHN0YXJ0IHdpdGguXG4gICAgICogLSBUaGF0IGNoYXJhY3RlciBpcyB0aGVuIHJlcGVhdGVkLCBzbyB3ZSBoYXZlIHRvIGNoZWNrIG11bHRpcGxlIHJlcGVhdHMuXG4gICAgICogLSBBbGwgY2hhcmFjdGVycyBidXQgdGhlIHN0YXJ0IGNoYXJhY3RlciBvZiB0aGUgc2VxdWVuY2UgY2FuIGJlIHNraXBwZWQuXG4gICAgICovXG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUluQ29tbWVudExpa2UgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gdGhpcy5jdXJyZW50U2VxdWVuY2VbdGhpcy5zZXF1ZW5jZUluZGV4XSkge1xuICAgICAgICAgICAgaWYgKCsrdGhpcy5zZXF1ZW5jZUluZGV4ID09PSB0aGlzLmN1cnJlbnRTZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VxdWVuY2UgPT09IFNlcXVlbmNlcy5DZGF0YUVuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNicy5vbmNkYXRhKHRoaXMuc2VjdGlvblN0YXJ0LCB0aGlzLmluZGV4LCAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2JzLm9uY29tbWVudCh0aGlzLnNlY3Rpb25TdGFydCwgdGhpcy5pbmRleCwgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVuY2VJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuVGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlcXVlbmNlSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIC8vIEZhc3QtZm9yd2FyZCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZXF1ZW5jZVxuICAgICAgICAgICAgaWYgKHRoaXMuZmFzdEZvcndhcmRUbyh0aGlzLmN1cnJlbnRTZXF1ZW5jZVswXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlSW5kZXggPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgIT09IHRoaXMuY3VycmVudFNlcXVlbmNlW3RoaXMuc2VxdWVuY2VJbmRleCAtIDFdKSB7XG4gICAgICAgICAgICAvLyBBbGxvdyBsb25nIHNlcXVlbmNlcywgZWcuIC0tLT4sIF1dXT5cbiAgICAgICAgICAgIHRoaXMuc2VxdWVuY2VJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEhUTUwgb25seSBhbGxvd3MgQVNDSUkgYWxwaGEgY2hhcmFjdGVycyAoYS16IGFuZCBBLVopIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB0YWcgbmFtZS5cbiAgICAgKlxuICAgICAqIFhNTCBhbGxvd3MgYSBsb3QgbW9yZSBjaGFyYWN0ZXJzIGhlcmUgKEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVTdGFydENoYXIpLlxuICAgICAqIFdlIGFsbG93IGFueXRoaW5nIHRoYXQgd291bGRuJ3QgZW5kIHRoZSB0YWcuXG4gICAgICovXG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5pc1RhZ1N0YXJ0Q2hhciA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhtbE1vZGUgPyAhaXNFbmRPZlRhZ1NlY3Rpb24oYykgOiBpc0FTQ0lJQWxwaGEoYyk7XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXJ0U3BlY2lhbCA9IGZ1bmN0aW9uIChzZXF1ZW5jZSwgb2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuaXNTcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VxdWVuY2UgPSBzZXF1ZW5jZTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZUluZGV4ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU3BlY2lhbFN0YXJ0U2VxdWVuY2U7XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlQmVmb3JlVGFnTmFtZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjID09PSBDaGFyQ29kZXMuRXhjbGFtYXRpb25NYXJrKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQmVmb3JlRGVjbGFyYXRpb247XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IENoYXJDb2Rlcy5RdWVzdGlvbm1hcmspIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5JblByb2Nlc3NpbmdJbnN0cnVjdGlvbjtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gdGhpcy5pbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc1RhZ1N0YXJ0Q2hhcihjKSkge1xuICAgICAgICAgICAgdmFyIGxvd2VyID0gYyB8IDB4MjA7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICBpZiAoIXRoaXMueG1sTW9kZSAmJiBsb3dlciA9PT0gU2VxdWVuY2VzLlRpdGxlRW5kWzJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFNwZWNpYWwoU2VxdWVuY2VzLlRpdGxlRW5kLCAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICAhdGhpcy54bWxNb2RlICYmIGxvd2VyID09PSBTZXF1ZW5jZXMuU2NyaXB0RW5kWzJdXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFN0YXRlLkJlZm9yZVNwZWNpYWxTXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFN0YXRlLkluVGFnTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjID09PSBDaGFyQ29kZXMuU2xhc2gpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVDbG9zaW5nVGFnTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5UZXh0O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVRleHQoYyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVJblRhZ05hbWUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoaXNFbmRPZlRhZ1NlY3Rpb24oYykpIHtcbiAgICAgICAgICAgIHRoaXMuY2JzLm9ub3BlbnRhZ25hbWUodGhpcy5zZWN0aW9uU3RhcnQsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVOYW1lO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoYyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVCZWZvcmVDbG9zaW5nVGFnTmFtZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IENoYXJDb2Rlcy5HdCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5pc1RhZ1N0YXJ0Q2hhcihjKVxuICAgICAgICAgICAgICAgID8gU3RhdGUuSW5DbG9zaW5nVGFnTmFtZVxuICAgICAgICAgICAgICAgIDogU3RhdGUuSW5TcGVjaWFsQ29tbWVudDtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gdGhpcy5pbmRleDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUluQ2xvc2luZ1RhZ05hbWUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gQ2hhckNvZGVzLkd0IHx8IGlzV2hpdGVzcGFjZShjKSkge1xuICAgICAgICAgICAgdGhpcy5jYnMub25jbG9zZXRhZyh0aGlzLnNlY3Rpb25TdGFydCwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IC0xO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFmdGVyQ2xvc2luZ1RhZ05hbWU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQWZ0ZXJDbG9zaW5nVGFnTmFtZShjKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUFmdGVyQ2xvc2luZ1RhZ05hbWUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBTa2lwIGV2ZXJ5dGhpbmcgdW50aWwgXCI+XCJcbiAgICAgICAgaWYgKGMgPT09IENoYXJDb2Rlcy5HdCB8fCB0aGlzLmZhc3RGb3J3YXJkVG8oQ2hhckNvZGVzLkd0KSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlRleHQ7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGF0ZSA9IFN0YXRlLlRleHQ7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlQmVmb3JlQXR0cmlidXRlTmFtZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjID09PSBDaGFyQ29kZXMuR3QpIHtcbiAgICAgICAgICAgIHRoaXMuY2JzLm9ub3BlbnRhZ2VuZCh0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3BlY2lhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5JblNwZWNpYWxUYWc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZUluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5UZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjID09PSBDaGFyQ29kZXMuU2xhc2gpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5JblNlbGZDbG9zaW5nVGFnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc1doaXRlc3BhY2UoYykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5JbkF0dHJpYnV0ZU5hbWU7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVJblNlbGZDbG9zaW5nVGFnID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKGMgPT09IENoYXJDb2Rlcy5HdCkge1xuICAgICAgICAgICAgdGhpcy5jYnMub25zZWxmY2xvc2luZ3RhZyh0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5UZXh0O1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGUgPSBTdGF0ZS5UZXh0O1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgICAgIHRoaXMuaXNTcGVjaWFsID0gZmFsc2U7IC8vIFJlc2V0IHNwZWNpYWwgc3RhdGUsIGluIGNhc2Ugb2Ygc2VsZi1jbG9zaW5nIHNwZWNpYWwgdGFnc1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc1doaXRlc3BhY2UoYykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVOYW1lO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoYyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVJbkF0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gQ2hhckNvZGVzLkVxIHx8IGlzRW5kT2ZUYWdTZWN0aW9uKGMpKSB7XG4gICAgICAgICAgICB0aGlzLmNicy5vbmF0dHJpYm5hbWUodGhpcy5zZWN0aW9uU3RhcnQsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BZnRlckF0dHJpYnV0ZU5hbWU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQWZ0ZXJBdHRyaWJ1dGVOYW1lKGMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlQWZ0ZXJBdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKGMgPT09IENoYXJDb2Rlcy5FcSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJlZm9yZUF0dHJpYnV0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IENoYXJDb2Rlcy5TbGFzaCB8fCBjID09PSBDaGFyQ29kZXMuR3QpIHtcbiAgICAgICAgICAgIHRoaXMuY2JzLm9uYXR0cmliZW5kKFF1b3RlVHlwZS5Ob1ZhbHVlLCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVOYW1lO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzV2hpdGVzcGFjZShjKSkge1xuICAgICAgICAgICAgdGhpcy5jYnMub25hdHRyaWJlbmQoUXVvdGVUeXBlLk5vVmFsdWUsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkluQXR0cmlidXRlTmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gdGhpcy5pbmRleDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKGMgPT09IENoYXJDb2Rlcy5Eb3VibGVRdW90ZSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkluQXR0cmlidXRlVmFsdWVEcTtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gdGhpcy5pbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gQ2hhckNvZGVzLlNpbmdsZVF1b3RlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSW5BdHRyaWJ1dGVWYWx1ZVNxO1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNXaGl0ZXNwYWNlKGMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSW5BdHRyaWJ1dGVWYWx1ZU5xO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUluQXR0cmlidXRlVmFsdWVOb1F1b3RlcyhjKTsgLy8gUmVjb25zdW1lIHRva2VuXG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuaGFuZGxlSW5BdHRyaWJ1dGVWYWx1ZSA9IGZ1bmN0aW9uIChjLCBxdW90ZSkge1xuICAgICAgICBpZiAoYyA9PT0gcXVvdGUgfHxcbiAgICAgICAgICAgICghdGhpcy5kZWNvZGVFbnRpdGllcyAmJiB0aGlzLmZhc3RGb3J3YXJkVG8ocXVvdGUpKSkge1xuICAgICAgICAgICAgdGhpcy5jYnMub25hdHRyaWJkYXRhKHRoaXMuc2VjdGlvblN0YXJ0LCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gLTE7XG4gICAgICAgICAgICB0aGlzLmNicy5vbmF0dHJpYmVuZChxdW90ZSA9PT0gQ2hhckNvZGVzLkRvdWJsZVF1b3RlXG4gICAgICAgICAgICAgICAgPyBRdW90ZVR5cGUuRG91YmxlXG4gICAgICAgICAgICAgICAgOiBRdW90ZVR5cGUuU2luZ2xlLCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVjb2RlRW50aXRpZXMgJiYgYyA9PT0gQ2hhckNvZGVzLkFtcCkge1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJlZm9yZUVudGl0eTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUluQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZXMgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICB0aGlzLmhhbmRsZUluQXR0cmlidXRlVmFsdWUoYywgQ2hhckNvZGVzLkRvdWJsZVF1b3RlKTtcbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVJbkF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVzID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVJbkF0dHJpYnV0ZVZhbHVlKGMsIENoYXJDb2Rlcy5TaW5nbGVRdW90ZSk7XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlSW5BdHRyaWJ1dGVWYWx1ZU5vUXVvdGVzID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjKSB8fCBjID09PSBDaGFyQ29kZXMuR3QpIHtcbiAgICAgICAgICAgIHRoaXMuY2JzLm9uYXR0cmliZGF0YSh0aGlzLnNlY3Rpb25TdGFydCwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IC0xO1xuICAgICAgICAgICAgdGhpcy5jYnMub25hdHRyaWJlbmQoUXVvdGVUeXBlLlVucXVvdGVkLCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVOYW1lO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5kZWNvZGVFbnRpdGllcyAmJiBjID09PSBDaGFyQ29kZXMuQW1wKSB7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQmVmb3JlRW50aXR5O1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlQmVmb3JlRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gQ2hhckNvZGVzLk9wZW5pbmdTcXVhcmVCcmFja2V0KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFTZXF1ZW5jZTtcbiAgICAgICAgICAgIHRoaXMuc2VxdWVuY2VJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID1cbiAgICAgICAgICAgICAgICBjID09PSBDaGFyQ29kZXMuRGFzaFxuICAgICAgICAgICAgICAgICAgICA/IFN0YXRlLkJlZm9yZUNvbW1lbnRcbiAgICAgICAgICAgICAgICAgICAgOiBTdGF0ZS5JbkRlY2xhcmF0aW9uO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlSW5EZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjID09PSBDaGFyQ29kZXMuR3QgfHwgdGhpcy5mYXN0Rm9yd2FyZFRvKENoYXJDb2Rlcy5HdCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2JzLm9uZGVjbGFyYXRpb24odGhpcy5zZWN0aW9uU3RhcnQsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlRleHQ7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gQ2hhckNvZGVzLkd0IHx8IHRoaXMuZmFzdEZvcndhcmRUbyhDaGFyQ29kZXMuR3QpKSB7XG4gICAgICAgICAgICB0aGlzLmNicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbih0aGlzLnNlY3Rpb25TdGFydCwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuVGV4dDtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gdGhpcy5pbmRleCArIDE7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVCZWZvcmVDb21tZW50ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKGMgPT09IENoYXJDb2Rlcy5EYXNoKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSW5Db21tZW50TGlrZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlcXVlbmNlID0gU2VxdWVuY2VzLkNvbW1lbnRFbmQ7XG4gICAgICAgICAgICAvLyBBbGxvdyBzaG9ydCBjb21tZW50cyAoZWcuIDwhLS0+KVxuICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZUluZGV4ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXJ0ID0gdGhpcy5pbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSW5EZWNsYXJhdGlvbjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUluU3BlY2lhbENvbW1lbnQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gQ2hhckNvZGVzLkd0IHx8IHRoaXMuZmFzdEZvcndhcmRUbyhDaGFyQ29kZXMuR3QpKSB7XG4gICAgICAgICAgICB0aGlzLmNicy5vbmNvbW1lbnQodGhpcy5zZWN0aW9uU3RhcnQsIHRoaXMuaW5kZXgsIDApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlRleHQ7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlQmVmb3JlU3BlY2lhbFMgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICB2YXIgbG93ZXIgPSBjIHwgMHgyMDtcbiAgICAgICAgaWYgKGxvd2VyID09PSBTZXF1ZW5jZXMuU2NyaXB0RW5kWzNdKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U3BlY2lhbChTZXF1ZW5jZXMuU2NyaXB0RW5kLCA0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsb3dlciA9PT0gU2VxdWVuY2VzLlN0eWxlRW5kWzNdKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U3BlY2lhbChTZXF1ZW5jZXMuU3R5bGVFbmQsIDQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkluVGFnTmFtZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVJblRhZ05hbWUoYyk7IC8vIENvbnN1bWUgdGhlIHRva2VuIGFnYWluXG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVCZWZvcmVFbnRpdHkgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBTdGFydCBleGNlc3Mgd2l0aCAxIHRvIGluY2x1ZGUgdGhlICcmJ1xuICAgICAgICB0aGlzLmVudGl0eUV4Y2VzcyA9IDE7XG4gICAgICAgIHRoaXMuZW50aXR5UmVzdWx0ID0gMDtcbiAgICAgICAgaWYgKGMgPT09IENoYXJDb2Rlcy5OdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CZWZvcmVOdW1lcmljRW50aXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IENoYXJDb2Rlcy5BbXApIHtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgdHdvIGAmYCBjaGFyYWN0ZXJzIGluIGEgcm93LiBTdGF5IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmllSW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy50cmllQ3VycmVudCA9IHRoaXMuZW50aXR5VHJpZVswXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5Jbk5hbWVkRW50aXR5O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUluTmFtZWRFbnRpdHkoYyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVJbk5hbWVkRW50aXR5ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgdGhpcy5lbnRpdHlFeGNlc3MgKz0gMTtcbiAgICAgICAgdGhpcy50cmllSW5kZXggPSAoMCwgZGVjb2RlX2pzXzEuZGV0ZXJtaW5lQnJhbmNoKSh0aGlzLmVudGl0eVRyaWUsIHRoaXMudHJpZUN1cnJlbnQsIHRoaXMudHJpZUluZGV4ICsgMSwgYyk7XG4gICAgICAgIGlmICh0aGlzLnRyaWVJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdE5hbWVkRW50aXR5KCk7XG4gICAgICAgICAgICB0aGlzLmluZGV4LS07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmllQ3VycmVudCA9IHRoaXMuZW50aXR5VHJpZVt0aGlzLnRyaWVJbmRleF07XG4gICAgICAgIHZhciBtYXNrZWQgPSB0aGlzLnRyaWVDdXJyZW50ICYgZGVjb2RlX2pzXzEuQmluVHJpZUZsYWdzLlZBTFVFX0xFTkdUSDtcbiAgICAgICAgLy8gSWYgdGhlIGJyYW5jaCBpcyBhIHZhbHVlLCBzdG9yZSBpdCBhbmQgY29udGludWVcbiAgICAgICAgaWYgKG1hc2tlZCkge1xuICAgICAgICAgICAgLy8gVGhlIG1hc2sgaXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiB0aGUgdmFsdWUsIGluY2x1ZGluZyB0aGUgY3VycmVudCBieXRlLlxuICAgICAgICAgICAgdmFyIHZhbHVlTGVuZ3RoID0gKG1hc2tlZCA+PiAxNCkgLSAxO1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGxlZ2FjeSBlbnRpdHkgd2hpbGUgcGFyc2luZyBzdHJpY3RseSwganVzdCBza2lwIHRoZSBudW1iZXIgb2YgYnl0ZXNcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0xlZ2FjeUVudGl0eSgpICYmIGMgIT09IENoYXJDb2Rlcy5TZW1pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmllSW5kZXggKz0gdmFsdWVMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBZGQgMSBhcyB3ZSBoYXZlIGFscmVhZHkgaW5jcmVtZW50ZWQgdGhlIGV4Y2Vzc1xuICAgICAgICAgICAgICAgIHZhciBlbnRpdHlTdGFydCA9IHRoaXMuaW5kZXggLSB0aGlzLmVudGl0eUV4Y2VzcyArIDE7XG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eVN0YXJ0ID4gdGhpcy5zZWN0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0UGFydGlhbCh0aGlzLnNlY3Rpb25TdGFydCwgZW50aXR5U3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3Vycm9nYXRlIHBhaXIsIGNvbnN1bWUgdGhlIG5leHQgdHdvIGJ5dGVzXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlSZXN1bHQgPSB0aGlzLnRyaWVJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWVJbmRleCArPSB2YWx1ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0eUV4Y2VzcyA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0TmFtZWRFbnRpdHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuZW1pdE5hbWVkRW50aXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5iYXNlU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLmVudGl0eVJlc3VsdCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9ICh0aGlzLmVudGl0eVRyaWVbdGhpcy5lbnRpdHlSZXN1bHRdICYgZGVjb2RlX2pzXzEuQmluVHJpZUZsYWdzLlZBTFVFX0xFTkdUSCkgPj5cbiAgICAgICAgICAgIDE0O1xuICAgICAgICBzd2l0Y2ggKHZhbHVlTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDb2RlUG9pbnQodGhpcy5lbnRpdHlUcmllW3RoaXMuZW50aXR5UmVzdWx0XSAmXG4gICAgICAgICAgICAgICAgICAgIH5kZWNvZGVfanNfMS5CaW5UcmllRmxhZ3MuVkFMVUVfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdENvZGVQb2ludCh0aGlzLmVudGl0eVRyaWVbdGhpcy5lbnRpdHlSZXN1bHQgKyAxXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDb2RlUG9pbnQodGhpcy5lbnRpdHlUcmllW3RoaXMuZW50aXR5UmVzdWx0ICsgMV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdENvZGVQb2ludCh0aGlzLmVudGl0eVRyaWVbdGhpcy5lbnRpdHlSZXN1bHQgKyAyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc3RhdGVCZWZvcmVOdW1lcmljRW50aXR5ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKChjIHwgMHgyMCkgPT09IENoYXJDb2Rlcy5Mb3dlclgpIHtcbiAgICAgICAgICAgIHRoaXMuZW50aXR5RXhjZXNzKys7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSW5IZXhFbnRpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSW5OdW1lcmljRW50aXR5O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUluTnVtZXJpY0VudGl0eShjKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5lbWl0TnVtZXJpY0VudGl0eSA9IGZ1bmN0aW9uIChzdHJpY3QpIHtcbiAgICAgICAgdmFyIGVudGl0eVN0YXJ0ID0gdGhpcy5pbmRleCAtIHRoaXMuZW50aXR5RXhjZXNzIC0gMTtcbiAgICAgICAgdmFyIG51bWJlclN0YXJ0ID0gZW50aXR5U3RhcnQgKyAyICsgTnVtYmVyKHRoaXMuc3RhdGUgPT09IFN0YXRlLkluSGV4RW50aXR5KTtcbiAgICAgICAgaWYgKG51bWJlclN0YXJ0ICE9PSB0aGlzLmluZGV4KSB7XG4gICAgICAgICAgICAvLyBFbWl0IGxlYWRpbmcgZGF0YSBpZiBhbnlcbiAgICAgICAgICAgIGlmIChlbnRpdHlTdGFydCA+IHRoaXMuc2VjdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0UGFydGlhbCh0aGlzLnNlY3Rpb25TdGFydCwgZW50aXR5U3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4ICsgTnVtYmVyKHN0cmljdCk7XG4gICAgICAgICAgICB0aGlzLmVtaXRDb2RlUG9pbnQoKDAsIGRlY29kZV9qc18xLnJlcGxhY2VDb2RlUG9pbnQpKHRoaXMuZW50aXR5UmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuYmFzZVN0YXRlO1xuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5zdGF0ZUluTnVtZXJpY0VudGl0eSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjID09PSBDaGFyQ29kZXMuU2VtaSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0TnVtZXJpY0VudGl0eSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc051bWJlcihjKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlSZXN1bHQgPSB0aGlzLmVudGl0eVJlc3VsdCAqIDEwICsgKGMgLSBDaGFyQ29kZXMuWmVybyk7XG4gICAgICAgICAgICB0aGlzLmVudGl0eUV4Y2VzcysrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dMZWdhY3lFbnRpdHkoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdE51bWVyaWNFbnRpdHkoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuYmFzZVN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLnN0YXRlSW5IZXhFbnRpdHkgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyA9PT0gQ2hhckNvZGVzLlNlbWkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdE51bWVyaWNFbnRpdHkodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIoYykpIHtcbiAgICAgICAgICAgIHRoaXMuZW50aXR5UmVzdWx0ID0gdGhpcy5lbnRpdHlSZXN1bHQgKiAxNiArIChjIC0gQ2hhckNvZGVzLlplcm8pO1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlFeGNlc3MrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0hleERpZ2l0KGMpKSB7XG4gICAgICAgICAgICB0aGlzLmVudGl0eVJlc3VsdCA9XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlSZXN1bHQgKiAxNiArICgoYyB8IDB4MjApIC0gQ2hhckNvZGVzLkxvd2VyQSArIDEwKTtcbiAgICAgICAgICAgIHRoaXMuZW50aXR5RXhjZXNzKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0xlZ2FjeUVudGl0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0TnVtZXJpY0VudGl0eShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5iYXNlU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluZGV4LS07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuYWxsb3dMZWdhY3lFbnRpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMueG1sTW9kZSAmJlxuICAgICAgICAgICAgKHRoaXMuYmFzZVN0YXRlID09PSBTdGF0ZS5UZXh0IHx8XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGUgPT09IFN0YXRlLkluU3BlY2lhbFRhZykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGRhdGEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkIGZyb20gdGhlIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLmNsZWFudXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBpbnNpZGUgb2YgdGV4dCBvciBhdHRyaWJ1dGVzLCBlbWl0IHdoYXQgd2UgYWxyZWFkeSBoYXZlLlxuICAgICAgICBpZiAodGhpcy5ydW5uaW5nICYmIHRoaXMuc2VjdGlvblN0YXJ0ICE9PSB0aGlzLmluZGV4KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU3RhdGUuVGV4dCB8fFxuICAgICAgICAgICAgICAgICh0aGlzLnN0YXRlID09PSBTdGF0ZS5JblNwZWNpYWxUYWcgJiYgdGhpcy5zZXF1ZW5jZUluZGV4ID09PSAwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2JzLm9udGV4dCh0aGlzLnNlY3Rpb25TdGFydCwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhcnQgPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU3RhdGUuSW5BdHRyaWJ1dGVWYWx1ZURxIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9PT0gU3RhdGUuSW5BdHRyaWJ1dGVWYWx1ZVNxIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9PT0gU3RhdGUuSW5BdHRyaWJ1dGVWYWx1ZU5xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYnMub25hdHRyaWJkYXRhKHRoaXMuc2VjdGlvblN0YXJ0LCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25TdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuc2hvdWxkQ29udGludWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4IDwgdGhpcy5idWZmZXIubGVuZ3RoICsgdGhpcy5vZmZzZXQgJiYgdGhpcy5ydW5uaW5nO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgYnVmZmVyLCBjYWxsaW5nIHRoZSBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgICAqXG4gICAgICogU3RhdGVzIHRoYXQgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGhpdCBhcmUgaGlnaGVyIHVwLCBhcyBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LlxuICAgICAqL1xuICAgIFRva2VuaXplci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnNob3VsZENvbnRpbnVlKCkpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLmluZGV4IC0gdGhpcy5vZmZzZXQpO1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5UZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVUZXh0KGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5TcGVjaWFsU3RhcnRTZXF1ZW5jZToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3BlY2lhbFN0YXJ0U2VxdWVuY2UoYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkluU3BlY2lhbFRhZzoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlSW5TcGVjaWFsVGFnKGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5DREFUQVNlcXVlbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDREFUQVNlcXVlbmNlKGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5JbkF0dHJpYnV0ZVZhbHVlRHE6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZXMoYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkluQXR0cmlidXRlTmFtZToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlSW5BdHRyaWJ1dGVOYW1lKGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5JbkNvbW1lbnRMaWtlOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVJbkNvbW1lbnRMaWtlKGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5JblNwZWNpYWxDb21tZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVJblNwZWNpYWxDb21tZW50KGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVOYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVCZWZvcmVBdHRyaWJ1dGVOYW1lKGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5JblRhZ05hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluVGFnTmFtZShjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuSW5DbG9zaW5nVGFnTmFtZToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlSW5DbG9zaW5nVGFnTmFtZShjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuQmVmb3JlVGFnTmFtZToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQmVmb3JlVGFnTmFtZShjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuQWZ0ZXJBdHRyaWJ1dGVOYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVBZnRlckF0dHJpYnV0ZU5hbWUoYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkluQXR0cmlidXRlVmFsdWVTcToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlSW5BdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlcyhjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuQmVmb3JlQXR0cmlidXRlVmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlKGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5CZWZvcmVDbG9zaW5nVGFnTmFtZToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQmVmb3JlQ2xvc2luZ1RhZ05hbWUoYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkFmdGVyQ2xvc2luZ1RhZ05hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUFmdGVyQ2xvc2luZ1RhZ05hbWUoYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkJlZm9yZVNwZWNpYWxTOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVCZWZvcmVTcGVjaWFsUyhjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuSW5BdHRyaWJ1dGVWYWx1ZU5xOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVJbkF0dHJpYnV0ZVZhbHVlTm9RdW90ZXMoYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkluU2VsZkNsb3NpbmdUYWc6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluU2VsZkNsb3NpbmdUYWcoYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkluRGVjbGFyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluRGVjbGFyYXRpb24oYyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLkJlZm9yZURlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVCZWZvcmVEZWNsYXJhdGlvbihjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuQmVmb3JlQ29tbWVudDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQmVmb3JlQ29tbWVudChjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluUHJvY2Vzc2luZ0luc3RydWN0aW9uKGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5Jbk5hbWVkRW50aXR5OiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVJbk5hbWVkRW50aXR5KGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5CZWZvcmVFbnRpdHk6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUJlZm9yZUVudGl0eShjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuSW5IZXhFbnRpdHk6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluSGV4RW50aXR5KGMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5Jbk51bWVyaWNFbnRpdHk6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUluTnVtZXJpY0VudGl0eShjKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYHRoaXMuX3N0YXRlID09PSBTdGF0ZS5CZWZvcmVOdW1lcmljRW50aXR5YFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQmVmb3JlTnVtZXJpY0VudGl0eShjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgfTtcbiAgICBUb2tlbml6ZXIucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFN0YXRlLkluTmFtZWRFbnRpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdE5hbWVkRW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgcmVtYWluaW5nIGRhdGEsIGVtaXQgaXQgaW4gYSByZWFzb25hYmxlIHdheVxuICAgICAgICBpZiAodGhpcy5zZWN0aW9uU3RhcnQgPCB0aGlzLmluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRyYWlsaW5nRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2JzLm9uZW5kKCk7XG4gICAgfTtcbiAgICAvKiogSGFuZGxlIGFueSB0cmFpbGluZyBkYXRhLiAqL1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuaGFuZGxlVHJhaWxpbmdEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW5kSW5kZXggPSB0aGlzLmJ1ZmZlci5sZW5ndGggKyB0aGlzLm9mZnNldDtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFN0YXRlLkluQ29tbWVudExpa2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZXF1ZW5jZSA9PT0gU2VxdWVuY2VzLkNkYXRhRW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYnMub25jZGF0YSh0aGlzLnNlY3Rpb25TdGFydCwgZW5kSW5kZXgsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYnMub25jb21tZW50KHRoaXMuc2VjdGlvblN0YXJ0LCBlbmRJbmRleCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU3RhdGUuSW5OdW1lcmljRW50aXR5ICYmXG4gICAgICAgICAgICB0aGlzLmFsbG93TGVnYWN5RW50aXR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdE51bWVyaWNFbnRpdHkoZmFsc2UpO1xuICAgICAgICAgICAgLy8gQWxsIHRyYWlsaW5nIGRhdGEgd2lsbCBoYXZlIGJlZW4gY29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBTdGF0ZS5JbkhleEVudGl0eSAmJlxuICAgICAgICAgICAgdGhpcy5hbGxvd0xlZ2FjeUVudGl0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXROdW1lcmljRW50aXR5KGZhbHNlKTtcbiAgICAgICAgICAgIC8vIEFsbCB0cmFpbGluZyBkYXRhIHdpbGwgaGF2ZSBiZWVuIGNvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU3RhdGUuSW5UYWdOYW1lIHx8XG4gICAgICAgICAgICB0aGlzLnN0YXRlID09PSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVOYW1lIHx8XG4gICAgICAgICAgICB0aGlzLnN0YXRlID09PSBTdGF0ZS5CZWZvcmVBdHRyaWJ1dGVWYWx1ZSB8fFxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9PT0gU3RhdGUuQWZ0ZXJBdHRyaWJ1dGVOYW1lIHx8XG4gICAgICAgICAgICB0aGlzLnN0YXRlID09PSBTdGF0ZS5JbkF0dHJpYnV0ZU5hbWUgfHxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPT09IFN0YXRlLkluQXR0cmlidXRlVmFsdWVTcSB8fFxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9PT0gU3RhdGUuSW5BdHRyaWJ1dGVWYWx1ZURxIHx8XG4gICAgICAgICAgICB0aGlzLnN0YXRlID09PSBTdGF0ZS5JbkF0dHJpYnV0ZVZhbHVlTnEgfHxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPT09IFN0YXRlLkluQ2xvc2luZ1RhZ05hbWUpIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBJZiB3ZSBhcmUgY3VycmVudGx5IGluIGFuIG9wZW5pbmcgb3IgY2xvc2luZyB0YWcsIHVzIG5vdCBjYWxsaW5nIHRoZVxuICAgICAgICAgICAgICogcmVzcGVjdGl2ZSBjYWxsYmFjayBzaWduYWxzIHRoYXQgdGhlIHRhZyBzaG91bGQgYmUgaWdub3JlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYnMub250ZXh0KHRoaXMuc2VjdGlvblN0YXJ0LCBlbmRJbmRleCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRva2VuaXplci5wcm90b3R5cGUuZW1pdFBhcnRpYWwgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZEluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2VTdGF0ZSAhPT0gU3RhdGUuVGV4dCAmJlxuICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGUgIT09IFN0YXRlLkluU3BlY2lhbFRhZykge1xuICAgICAgICAgICAgdGhpcy5jYnMub25hdHRyaWJkYXRhKHN0YXJ0LCBlbmRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNicy5vbnRleHQoc3RhcnQsIGVuZEluZGV4KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVG9rZW5pemVyLnByb3RvdHlwZS5lbWl0Q29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2VTdGF0ZSAhPT0gU3RhdGUuVGV4dCAmJlxuICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGUgIT09IFN0YXRlLkluU3BlY2lhbFRhZykge1xuICAgICAgICAgICAgdGhpcy5jYnMub25hdHRyaWJlbnRpdHkoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYnMub250ZXh0ZW50aXR5KGNwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRva2VuaXplcjtcbn0oKSk7XG5leHBvcnRzLmRlZmF1bHQgPSBUb2tlbml6ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ub2tlbml6ZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRG9tVXRpbHMgPSBleHBvcnRzLnBhcnNlRmVlZCA9IGV4cG9ydHMuZ2V0RmVlZCA9IGV4cG9ydHMuRWxlbWVudFR5cGUgPSBleHBvcnRzLlRva2VuaXplciA9IGV4cG9ydHMuY3JlYXRlRG9tU3RyZWFtID0gZXhwb3J0cy5wYXJzZURPTSA9IGV4cG9ydHMucGFyc2VEb2N1bWVudCA9IGV4cG9ydHMuRGVmYXVsdEhhbmRsZXIgPSBleHBvcnRzLkRvbUhhbmRsZXIgPSBleHBvcnRzLlBhcnNlciA9IHZvaWQgMDtcbnZhciBQYXJzZXJfanNfMSA9IHJlcXVpcmUoXCIuL1BhcnNlci5qc1wiKTtcbnZhciBQYXJzZXJfanNfMiA9IHJlcXVpcmUoXCIuL1BhcnNlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnNlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUGFyc2VyX2pzXzIuUGFyc2VyOyB9IH0pO1xudmFyIGRvbWhhbmRsZXJfMSA9IHJlcXVpcmUoXCJkb21oYW5kbGVyXCIpO1xudmFyIGRvbWhhbmRsZXJfMiA9IHJlcXVpcmUoXCJkb21oYW5kbGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRG9tSGFuZGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9taGFuZGxlcl8yLkRvbUhhbmRsZXI7IH0gfSk7XG4vLyBPbGQgbmFtZSBmb3IgRG9tSGFuZGxlclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmYXVsdEhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbWhhbmRsZXJfMi5Eb21IYW5kbGVyOyB9IH0pO1xuLy8gSGVscGVyIG1ldGhvZHNcbi8qKlxuICogUGFyc2VzIHRoZSBkYXRhLCByZXR1cm5zIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdGhhdCBzaG91bGQgYmUgcGFyc2VkLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHBhcnNlciBhbmQgRE9NIGJ1aWxkZXIuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRG9jdW1lbnQoZGF0YSwgb3B0aW9ucykge1xuICAgIHZhciBoYW5kbGVyID0gbmV3IGRvbWhhbmRsZXJfMS5Eb21IYW5kbGVyKHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gICAgbmV3IFBhcnNlcl9qc18xLlBhcnNlcihoYW5kbGVyLCBvcHRpb25zKS5lbmQoZGF0YSk7XG4gICAgcmV0dXJuIGhhbmRsZXIucm9vdDtcbn1cbmV4cG9ydHMucGFyc2VEb2N1bWVudCA9IHBhcnNlRG9jdW1lbnQ7XG4vKipcbiAqIFBhcnNlcyBkYXRhLCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSByb290IG5vZGVzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgcm9vdCBub2RlcyBzdGlsbCBoYXZlIGEgYERvY3VtZW50YCBub2RlIGFzIHRoZWlyIHBhcmVudC5cbiAqIFVzZSBgcGFyc2VEb2N1bWVudGAgdG8gZ2V0IHRoZSBgRG9jdW1lbnRgIG5vZGUgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0aGF0IHNob3VsZCBiZSBwYXJzZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBvcHRpb25zIGZvciB0aGUgcGFyc2VyIGFuZCBET00gYnVpbGRlci5cbiAqIEBkZXByZWNhdGVkIFVzZSBgcGFyc2VEb2N1bWVudGAgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VET00oZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiBwYXJzZURvY3VtZW50KGRhdGEsIG9wdGlvbnMpLmNoaWxkcmVuO1xufVxuZXhwb3J0cy5wYXJzZURPTSA9IHBhcnNlRE9NO1xuLyoqXG4gKiBDcmVhdGVzIGEgcGFyc2VyIGluc3RhbmNlLCB3aXRoIGFuIGF0dGFjaGVkIERPTSBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwYXJzaW5nIGhhcyBiZWVuIGNvbXBsZXRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBwYXJzZXIgYW5kIERPTSBidWlsZGVyLlxuICogQHBhcmFtIGVsZW1lbnRDYWxsYmFjayBBbiBvcHRpb25hbCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgYSB0YWcgaGFzIGJlZW4gY29tcGxldGVkIGluc2lkZSBvZiB0aGUgRE9NLlxuICovXG5mdW5jdGlvbiBjcmVhdGVEb21TdHJlYW0oY2FsbGJhY2ssIG9wdGlvbnMsIGVsZW1lbnRDYWxsYmFjaykge1xuICAgIHZhciBoYW5kbGVyID0gbmV3IGRvbWhhbmRsZXJfMS5Eb21IYW5kbGVyKGNhbGxiYWNrLCBvcHRpb25zLCBlbGVtZW50Q2FsbGJhY2spO1xuICAgIHJldHVybiBuZXcgUGFyc2VyX2pzXzEuUGFyc2VyKGhhbmRsZXIsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5jcmVhdGVEb21TdHJlYW0gPSBjcmVhdGVEb21TdHJlYW07XG52YXIgVG9rZW5pemVyX2pzXzEgPSByZXF1aXJlKFwiLi9Ub2tlbml6ZXIuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUb2tlbml6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUb2tlbml6ZXJfanNfMSkuZGVmYXVsdDsgfSB9KTtcbi8qXG4gKiBBbGwgb2YgdGhlIGZvbGxvd2luZyBleHBvcnRzIGV4aXN0IGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eS5cbiAqIFRoZXkgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQgZXZlbnR1YWxseS5cbiAqL1xuZXhwb3J0cy5FbGVtZW50VHlwZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZG9tZWxlbWVudHR5cGVcIikpO1xudmFyIGRvbXV0aWxzXzEgPSByZXF1aXJlKFwiZG9tdXRpbHNcIik7XG52YXIgZG9tdXRpbHNfMiA9IHJlcXVpcmUoXCJkb211dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldEZlZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbXV0aWxzXzIuZ2V0RmVlZDsgfSB9KTtcbnZhciBwYXJzZUZlZWREZWZhdWx0T3B0aW9ucyA9IHsgeG1sTW9kZTogdHJ1ZSB9O1xuLyoqXG4gKiBQYXJzZSBhIGZlZWQuXG4gKlxuICogQHBhcmFtIGZlZWQgVGhlIGZlZWQgdGhhdCBzaG91bGQgYmUgcGFyc2VkLCBhcyBhIHN0cmluZy5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsbHksIG9wdGlvbnMgZm9yIHBhcnNpbmcuIFdoZW4gdXNpbmcgdGhpcywgeW91IHNob3VsZCBzZXQgYHhtbE1vZGVgIHRvIGB0cnVlYC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VGZWVkKGZlZWQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSBwYXJzZUZlZWREZWZhdWx0T3B0aW9uczsgfVxuICAgIHJldHVybiAoMCwgZG9tdXRpbHNfMS5nZXRGZWVkKShwYXJzZURPTShmZWVkLCBvcHRpb25zKSk7XG59XG5leHBvcnRzLnBhcnNlRmVlZCA9IHBhcnNlRmVlZDtcbmV4cG9ydHMuRG9tVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImRvbXV0aWxzXCIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyohXG4gKiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIHZhciBjdG9yLHByb3Q7XG5cbiAgaWYgKGlzT2JqZWN0KG8pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuICBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuICBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gIGlmIChpc09iamVjdChwcm90KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcbiAgaWYgKHByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbiIsIi8vIFRoaXMgYWxwaGFiZXQgdXNlcyBgQS1aYS16MC05Xy1gIHN5bWJvbHMuXG4vLyBUaGUgb3JkZXIgb2YgY2hhcmFjdGVycyBpcyBvcHRpbWl6ZWQgZm9yIGJldHRlciBnemlwIGFuZCBicm90bGkgY29tcHJlc3Npb24uXG4vLyBSZWZlcmVuY2VzIHRvIHRoZSBzYW1lIGZpbGUgKHdvcmtzIGJvdGggZm9yIGd6aXAgYW5kIGJyb3RsaSk6XG4vLyBgJ3VzZWAsIGBhbmRvbWAsIGFuZCBgcmljdCdgXG4vLyBSZWZlcmVuY2VzIHRvIHRoZSBicm90bGkgZGVmYXVsdCBkaWN0aW9uYXJ5OlxuLy8gYC0yNlRgLCBgMTk4M2AsIGA0MHB4YCwgYDc1cHhgLCBgYnVzaGAsIGBqYWNrYCwgYG1pbmRgLCBgdmVyeWAsIGFuZCBgd29sZmBcbmxldCB1cmxBbHBoYWJldCA9XG4gICd1c2VhbmRvbS0yNlQxOTgzNDBQWDc1cHhKQUNLVkVSWU1JTkRCVVNIV09MRl9HUVpiZmdoamtscXZ3eXpyaWN0J1xuXG5sZXQgY3VzdG9tQWxwaGFiZXQgPSAoYWxwaGFiZXQsIGRlZmF1bHRTaXplID0gMjEpID0+IHtcbiAgcmV0dXJuIChzaXplID0gZGVmYXVsdFNpemUpID0+IHtcbiAgICBsZXQgaWQgPSAnJ1xuICAgIC8vIEEgY29tcGFjdCBhbHRlcm5hdGl2ZSBmb3IgYGZvciAodmFyIGkgPSAwOyBpIDwgc3RlcDsgaSsrKWAuXG4gICAgbGV0IGkgPSBzaXplIHwgMFxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIC8vIGB8IDBgIGlzIG1vcmUgY29tcGFjdCBhbmQgZmFzdGVyIHRoYW4gYE1hdGguZmxvb3IoKWAuXG4gICAgICBpZCArPSBhbHBoYWJldFsoTWF0aC5yYW5kb20oKSAqIGFscGhhYmV0Lmxlbmd0aCkgfCAwXVxuICAgIH1cbiAgICByZXR1cm4gaWRcbiAgfVxufVxuXG5sZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xuICBsZXQgaWQgPSAnJ1xuICAvLyBBIGNvbXBhY3QgYWx0ZXJuYXRpdmUgZm9yIGBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7IGkrKylgLlxuICBsZXQgaSA9IHNpemUgfCAwXG4gIHdoaWxlIChpLS0pIHtcbiAgICAvLyBgfCAwYCBpcyBtb3JlIGNvbXBhY3QgYW5kIGZhc3RlciB0aGFuIGBNYXRoLmZsb29yKClgLlxuICAgIGlkICs9IHVybEFscGhhYmV0WyhNYXRoLnJhbmRvbSgpICogNjQpIHwgMF1cbiAgfVxuICByZXR1cm4gaWRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IG5hbm9pZCwgY3VzdG9tQWxwaGFiZXQgfVxuIiwiLyoqXG4gKiBTcmNzZXQgUGFyc2VyXG4gKlxuICogQnkgQWxleCBCZWxsIHwgIE1JVCBMaWNlbnNlXG4gKlxuICogSlMgUGFyc2VyIGZvciB0aGUgc3RyaW5nIHZhbHVlIHRoYXQgYXBwZWFycyBpbiBtYXJrdXAgPGltZyBzcmNzZXQ9XCJoZXJlXCI+XG4gKlxuICogQHJldHVybnMgQXJyYXkgW3t1cmw6IF8sIGQ6IF8sIHc6IF8sIGg6X30sIC4uLl1cbiAqXG4gKiBCYXNlZCBzdXBlciBkdXBlciBjbG9zZWx5IG9uIHRoZSByZWZlcmVuY2UgYWxnb3JpdGhtIGF0OlxuICogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI3BhcnNlLWEtc3Jjc2V0LWF0dHJpYnV0ZVxuICpcbiAqIE1vc3QgY29tbWVudHMgYXJlIGNvcGllZCBpbiBkaXJlY3RseSBmcm9tIHRoZSBzcGVjXG4gKiAoZXhjZXB0IGZvciBjb21tZW50cyBpbiBwYXJlbnMpLlxuICovXG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHQvLyBOb2RlLiBEb2VzIG5vdCB3b3JrIHdpdGggc3RyaWN0IENvbW1vbkpTLCBidXRcblx0XHQvLyBvbmx5IENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cyxcblx0XHQvLyBsaWtlIE5vZGUuXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQnJvd3NlciBnbG9iYWxzIChyb290IGlzIHdpbmRvdylcblx0XHRyb290LnBhcnNlU3Jjc2V0ID0gZmFjdG9yeSgpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvLyAxLiBMZXQgaW5wdXQgYmUgdGhlIHZhbHVlIHBhc3NlZCB0byB0aGlzIGFsZ29yaXRobS5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbnB1dCkge1xuXG5cdFx0Ly8gVVRJTElUWSBGVU5DVElPTlNcblxuXHRcdC8vIE1hbnVhbCBpcyBmYXN0ZXIgdGhhbiBSZWdFeFxuXHRcdC8vIGh0dHA6Ly9iam9ybi50aXBsaW5nLmNvbS9zdGF0ZS1hbmQtcmVndWxhci1leHByZXNzaW9ucy1pbi1qYXZhc2NyaXB0XG5cdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vd2hpdGVzcGFjZS1jaGFyYWN0ZXIvNVxuXHRcdGZ1bmN0aW9uIGlzU3BhY2UoYykge1xuXHRcdFx0cmV0dXJuIChjID09PSBcIlxcdTAwMjBcIiB8fCAvLyBzcGFjZVxuXHRcdFx0YyA9PT0gXCJcXHUwMDA5XCIgfHwgLy8gaG9yaXpvbnRhbCB0YWJcblx0XHRcdGMgPT09IFwiXFx1MDAwQVwiIHx8IC8vIG5ldyBsaW5lXG5cdFx0XHRjID09PSBcIlxcdTAwMENcIiB8fCAvLyBmb3JtIGZlZWRcblx0XHRcdGMgPT09IFwiXFx1MDAwRFwiKTsgIC8vIGNhcnJpYWdlIHJldHVyblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvbGxlY3RDaGFyYWN0ZXJzKHJlZ0V4KSB7XG5cdFx0XHR2YXIgY2hhcnMsXG5cdFx0XHRcdG1hdGNoID0gcmVnRXguZXhlYyhpbnB1dC5zdWJzdHJpbmcocG9zKSk7XG5cdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0Y2hhcnMgPSBtYXRjaFsgMCBdO1xuXHRcdFx0XHRwb3MgKz0gY2hhcnMubGVuZ3RoO1xuXHRcdFx0XHRyZXR1cm4gY2hhcnM7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXG5cdFx0XHQvLyAoRG9uJ3QgdXNlIFxccywgdG8gYXZvaWQgbWF0Y2hpbmcgbm9uLWJyZWFraW5nIHNwYWNlKVxuXHRcdFx0cmVnZXhMZWFkaW5nU3BhY2VzID0gL15bIFxcdFxcblxcclxcdTAwMGNdKy8sXG5cdFx0XHRyZWdleExlYWRpbmdDb21tYXNPclNwYWNlcyA9IC9eWywgXFx0XFxuXFxyXFx1MDAwY10rLyxcblx0XHRcdHJlZ2V4TGVhZGluZ05vdFNwYWNlcyA9IC9eW14gXFx0XFxuXFxyXFx1MDAwY10rLyxcblx0XHRcdHJlZ2V4VHJhaWxpbmdDb21tYXMgPSAvWyxdKyQvLFxuXHRcdFx0cmVnZXhOb25OZWdhdGl2ZUludGVnZXIgPSAvXlxcZCskLyxcblxuXHRcdFx0Ly8gKCBQb3NpdGl2ZSBvciBuZWdhdGl2ZSBvciB1bnNpZ25lZCBpbnRlZ2VycyBvciBkZWNpbWFscywgd2l0aG91dCBvciB3aXRob3V0IGV4cG9uZW50cy5cblx0XHRcdC8vIE11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgZGlnaXQuXG5cdFx0XHQvLyBBY2NvcmRpbmcgdG8gc3BlYyB0ZXN0cyBhbnkgZGVjaW1hbCBwb2ludCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZGlnaXQuXG5cdFx0XHQvLyBObyBsZWFkaW5nIHBsdXMgc2lnbiBpcyBhbGxvd2VkLilcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjdmFsaWQtZmxvYXRpbmctcG9pbnQtbnVtYmVyXG5cdFx0XHRyZWdleEZsb2F0aW5nUG9pbnQgPSAvXi0/KD86WzAtOV0rfFswLTldKlxcLlswLTldKykoPzpbZUVdWystXT9bMC05XSspPyQvLFxuXG5cdFx0XHR1cmwsXG5cdFx0XHRkZXNjcmlwdG9ycyxcblx0XHRcdGN1cnJlbnREZXNjcmlwdG9yLFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRjLFxuXG5cdFx0XHQvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb2ludGVyIGludG8gaW5wdXQsIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnRcblx0XHRcdC8vICAgIG9mIHRoZSBzdHJpbmcuXG5cdFx0XHRwb3MgPSAwLFxuXG5cdFx0XHQvLyAzLiBMZXQgY2FuZGlkYXRlcyBiZSBhbiBpbml0aWFsbHkgZW1wdHkgc291cmNlIHNldC5cblx0XHRcdGNhbmRpZGF0ZXMgPSBbXTtcblxuXHRcdC8vIDQuIFNwbGl0dGluZyBsb29wOiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBzcGFjZVxuXHRcdC8vICAgIGNoYXJhY3RlcnMgb3IgVSswMDJDIENPTU1BIGNoYXJhY3RlcnMuIElmIGFueSBVKzAwMkMgQ09NTUEgY2hhcmFjdGVyc1xuXHRcdC8vICAgIHdlcmUgY29sbGVjdGVkLCB0aGF0IGlzIGEgcGFyc2UgZXJyb3IuXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGNvbGxlY3RDaGFyYWN0ZXJzKHJlZ2V4TGVhZGluZ0NvbW1hc09yU3BhY2VzKTtcblxuXHRcdFx0Ly8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCByZXR1cm4gY2FuZGlkYXRlcyBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG5cdFx0XHRpZiAocG9zID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBjYW5kaWRhdGVzOyAvLyAod2UncmUgZG9uZSwgdGhpcyBpcyB0aGUgc29sZSByZXR1cm4gcGF0aClcblx0XHRcdH1cblxuXHRcdFx0Ly8gNi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMsXG5cdFx0XHQvLyAgICBhbmQgbGV0IHRoYXQgYmUgdXJsLlxuXHRcdFx0dXJsID0gY29sbGVjdENoYXJhY3RlcnMocmVnZXhMZWFkaW5nTm90U3BhY2VzKTtcblxuXHRcdFx0Ly8gNy4gTGV0IGRlc2NyaXB0b3JzIGJlIGEgbmV3IGVtcHR5IGxpc3QuXG5cdFx0XHRkZXNjcmlwdG9ycyA9IFtdO1xuXG5cdFx0XHQvLyA4LiBJZiB1cmwgZW5kcyB3aXRoIGEgVSswMDJDIENPTU1BIGNoYXJhY3RlciAoLCksIGZvbGxvdyB0aGVzZSBzdWJzdGVwczpcblx0XHRcdC8vXHRcdCgxKS4gUmVtb3ZlIGFsbCB0cmFpbGluZyBVKzAwMkMgQ09NTUEgY2hhcmFjdGVycyBmcm9tIHVybC4gSWYgdGhpcyByZW1vdmVkXG5cdFx0XHQvLyAgICAgICAgIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyLCB0aGF0IGlzIGEgcGFyc2UgZXJyb3IuXG5cdFx0XHRpZiAodXJsLnNsaWNlKC0xKSA9PT0gXCIsXCIpIHtcblx0XHRcdFx0dXJsID0gdXJsLnJlcGxhY2UocmVnZXhUcmFpbGluZ0NvbW1hcywgXCJcIik7XG5cdFx0XHRcdC8vIChKdW1wIGFoZWFkIHRvIHN0ZXAgOSB0byBza2lwIHRva2VuaXphdGlvbiBhbmQganVzdCBwdXNoIHRoZSBjYW5kaWRhdGUpLlxuXHRcdFx0XHRwYXJzZURlc2NyaXB0b3JzKCk7XG5cblx0XHRcdFx0Ly9cdE90aGVyd2lzZSwgZm9sbG93IHRoZXNlIHN1YnN0ZXBzOlxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG9rZW5pemUoKTtcblx0XHRcdH0gLy8gKGNsb3NlIGVsc2Ugb2Ygc3RlcCA4KVxuXG5cdFx0XHQvLyAxNi4gUmV0dXJuIHRvIHRoZSBzdGVwIGxhYmVsZWQgc3BsaXR0aW5nIGxvb3AuXG5cdFx0fSAvLyAoQ2xvc2Ugb2YgYmlnIHdoaWxlIGxvb3AuKVxuXG5cdFx0LyoqXG5cdFx0ICogVG9rZW5pemVzIGRlc2NyaXB0b3IgcHJvcGVydGllcyBwcmlvciB0byBwYXJzaW5nXG5cdFx0ICogUmV0dXJucyB1bmRlZmluZWQuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gdG9rZW5pemUoKSB7XG5cblx0XHRcdC8vIDguMS4gRGVzY3JpcHRvciB0b2tlbmlzZXI6IFNraXAgd2hpdGVzcGFjZVxuXHRcdFx0Y29sbGVjdENoYXJhY3RlcnMocmVnZXhMZWFkaW5nU3BhY2VzKTtcblxuXHRcdFx0Ly8gOC4yLiBMZXQgY3VycmVudCBkZXNjcmlwdG9yIGJlIHRoZSBlbXB0eSBzdHJpbmcuXG5cdFx0XHRjdXJyZW50RGVzY3JpcHRvciA9IFwiXCI7XG5cblx0XHRcdC8vIDguMy4gTGV0IHN0YXRlIGJlIGluIGRlc2NyaXB0b3IuXG5cdFx0XHRzdGF0ZSA9IFwiaW4gZGVzY3JpcHRvclwiO1xuXG5cdFx0XHR3aGlsZSAodHJ1ZSkge1xuXG5cdFx0XHRcdC8vIDguNC4gTGV0IGMgYmUgdGhlIGNoYXJhY3RlciBhdCBwb3NpdGlvbi5cblx0XHRcdFx0YyA9IGlucHV0LmNoYXJBdChwb3MpO1xuXG5cdFx0XHRcdC8vICBEbyB0aGUgZm9sbG93aW5nIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2Ygc3RhdGUuXG5cdFx0XHRcdC8vICBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzdGVwLCBcIkVPRlwiIGlzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nXG5cdFx0XHRcdC8vICB0aGF0IHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dC5cblxuXHRcdFx0XHQvLyBJbiBkZXNjcmlwdG9yXG5cdFx0XHRcdGlmIChzdGF0ZSA9PT0gXCJpbiBkZXNjcmlwdG9yXCIpIHtcblx0XHRcdFx0XHQvLyBEbyB0aGUgZm9sbG93aW5nLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGM6XG5cblx0XHRcdFx0XHQvLyBTcGFjZSBjaGFyYWN0ZXJcblx0XHRcdFx0XHQvLyBJZiBjdXJyZW50IGRlc2NyaXB0b3IgaXMgbm90IGVtcHR5LCBhcHBlbmQgY3VycmVudCBkZXNjcmlwdG9yIHRvXG5cdFx0XHRcdFx0Ly8gZGVzY3JpcHRvcnMgYW5kIGxldCBjdXJyZW50IGRlc2NyaXB0b3IgYmUgdGhlIGVtcHR5IHN0cmluZy5cblx0XHRcdFx0XHQvLyBTZXQgc3RhdGUgdG8gYWZ0ZXIgZGVzY3JpcHRvci5cblx0XHRcdFx0XHRpZiAoaXNTcGFjZShjKSkge1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnREZXNjcmlwdG9yKSB7XG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0b3JzLnB1c2goY3VycmVudERlc2NyaXB0b3IpO1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RGVzY3JpcHRvciA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gXCJhZnRlciBkZXNjcmlwdG9yXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIFUrMDAyQyBDT01NQSAoLClcblx0XHRcdFx0XHRcdC8vIEFkdmFuY2UgcG9zaXRpb24gdG8gdGhlIG5leHQgY2hhcmFjdGVyIGluIGlucHV0LiBJZiBjdXJyZW50IGRlc2NyaXB0b3Jcblx0XHRcdFx0XHRcdC8vIGlzIG5vdCBlbXB0eSwgYXBwZW5kIGN1cnJlbnQgZGVzY3JpcHRvciB0byBkZXNjcmlwdG9ycy4gSnVtcCB0byB0aGUgc3RlcFxuXHRcdFx0XHRcdFx0Ly8gbGFiZWxlZCBkZXNjcmlwdG9yIHBhcnNlci5cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGMgPT09IFwiLFwiKSB7XG5cdFx0XHRcdFx0XHRwb3MgKz0gMTtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50RGVzY3JpcHRvcikge1xuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdG9ycy5wdXNoKGN1cnJlbnREZXNjcmlwdG9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHBhcnNlRGVzY3JpcHRvcnMoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdFx0Ly8gVSswMDI4IExFRlQgUEFSRU5USEVTSVMgKCgpXG5cdFx0XHRcdFx0XHQvLyBBcHBlbmQgYyB0byBjdXJyZW50IGRlc2NyaXB0b3IuIFNldCBzdGF0ZSB0byBpbiBwYXJlbnMuXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjID09PSBcIlxcdTAwMjhcIikge1xuXHRcdFx0XHRcdFx0Y3VycmVudERlc2NyaXB0b3IgPSBjdXJyZW50RGVzY3JpcHRvciArIGM7XG5cdFx0XHRcdFx0XHRzdGF0ZSA9IFwiaW4gcGFyZW5zXCI7XG5cblx0XHRcdFx0XHRcdC8vIEVPRlxuXHRcdFx0XHRcdFx0Ly8gSWYgY3VycmVudCBkZXNjcmlwdG9yIGlzIG5vdCBlbXB0eSwgYXBwZW5kIGN1cnJlbnQgZGVzY3JpcHRvciB0b1xuXHRcdFx0XHRcdFx0Ly8gZGVzY3JpcHRvcnMuIEp1bXAgdG8gdGhlIHN0ZXAgbGFiZWxlZCBkZXNjcmlwdG9yIHBhcnNlci5cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGMgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50RGVzY3JpcHRvcikge1xuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdG9ycy5wdXNoKGN1cnJlbnREZXNjcmlwdG9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHBhcnNlRGVzY3JpcHRvcnMoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0Ly8gQXBwZW5kIGMgdG8gY3VycmVudCBkZXNjcmlwdG9yLlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RGVzY3JpcHRvciA9IGN1cnJlbnREZXNjcmlwdG9yICsgYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gKGVuZCBcImluIGRlc2NyaXB0b3JcIlxuXG5cdFx0XHRcdFx0Ly8gSW4gcGFyZW5zXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwiaW4gcGFyZW5zXCIpIHtcblxuXHRcdFx0XHRcdC8vIFUrMDAyOSBSSUdIVCBQQVJFTlRIRVNJUyAoKSlcblx0XHRcdFx0XHQvLyBBcHBlbmQgYyB0byBjdXJyZW50IGRlc2NyaXB0b3IuIFNldCBzdGF0ZSB0byBpbiBkZXNjcmlwdG9yLlxuXHRcdFx0XHRcdGlmIChjID09PSBcIilcIikge1xuXHRcdFx0XHRcdFx0Y3VycmVudERlc2NyaXB0b3IgPSBjdXJyZW50RGVzY3JpcHRvciArIGM7XG5cdFx0XHRcdFx0XHRzdGF0ZSA9IFwiaW4gZGVzY3JpcHRvclwiO1xuXG5cdFx0XHRcdFx0XHQvLyBFT0Zcblx0XHRcdFx0XHRcdC8vIEFwcGVuZCBjdXJyZW50IGRlc2NyaXB0b3IgdG8gZGVzY3JpcHRvcnMuIEp1bXAgdG8gdGhlIHN0ZXAgbGFiZWxlZFxuXHRcdFx0XHRcdFx0Ly8gZGVzY3JpcHRvciBwYXJzZXIuXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRkZXNjcmlwdG9ycy5wdXNoKGN1cnJlbnREZXNjcmlwdG9yKTtcblx0XHRcdFx0XHRcdHBhcnNlRGVzY3JpcHRvcnMoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0Ly8gQXBwZW5kIGMgdG8gY3VycmVudCBkZXNjcmlwdG9yLlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RGVzY3JpcHRvciA9IGN1cnJlbnREZXNjcmlwdG9yICsgYztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBBZnRlciBkZXNjcmlwdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwiYWZ0ZXIgZGVzY3JpcHRvclwiKSB7XG5cblx0XHRcdFx0XHQvLyBEbyB0aGUgZm9sbG93aW5nLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGM6XG5cdFx0XHRcdFx0Ly8gU3BhY2UgY2hhcmFjdGVyOiBTdGF5IGluIHRoaXMgc3RhdGUuXG5cdFx0XHRcdFx0aWYgKGlzU3BhY2UoYykpIHtcblxuXHRcdFx0XHRcdFx0Ly8gRU9GOiBKdW1wIHRvIHRoZSBzdGVwIGxhYmVsZWQgZGVzY3JpcHRvciBwYXJzZXIuXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRwYXJzZURlc2NyaXB0b3JzKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHRcdC8vIEFueXRoaW5nIGVsc2Vcblx0XHRcdFx0XHRcdC8vIFNldCBzdGF0ZSB0byBpbiBkZXNjcmlwdG9yLiBTZXQgcG9zaXRpb24gdG8gdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpbiBpbnB1dC5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RhdGUgPSBcImluIGRlc2NyaXB0b3JcIjtcblx0XHRcdFx0XHRcdHBvcyAtPSAxO1xuXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWR2YW5jZSBwb3NpdGlvbiB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gaW5wdXQuXG5cdFx0XHRcdHBvcyArPSAxO1xuXG5cdFx0XHRcdC8vIFJlcGVhdCB0aGlzIHN0ZXAuXG5cdFx0XHR9IC8vIChjbG9zZSB3aGlsZSB0cnVlIGxvb3ApXG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBkZXNjcmlwdG9yIHByb3BlcnRpZXMgdG8gYSBjYW5kaWRhdGUsIHB1c2hlcyB0byB0aGUgY2FuZGlkYXRlcyBhcnJheVxuXHRcdCAqIEByZXR1cm4gdW5kZWZpbmVkXG5cdFx0ICovXG5cdFx0Ly8gRGVjbGFyZWQgb3V0c2lkZSBvZiB0aGUgd2hpbGUgbG9vcCBzbyB0aGF0IGl0J3Mgb25seSBjcmVhdGVkIG9uY2UuXG5cdFx0ZnVuY3Rpb24gcGFyc2VEZXNjcmlwdG9ycygpIHtcblxuXHRcdFx0Ly8gOS4gRGVzY3JpcHRvciBwYXJzZXI6IExldCBlcnJvciBiZSBuby5cblx0XHRcdHZhciBwRXJyb3IgPSBmYWxzZSxcblxuXHRcdFx0XHQvLyAxMC4gTGV0IHdpZHRoIGJlIGFic2VudC5cblx0XHRcdFx0Ly8gMTEuIExldCBkZW5zaXR5IGJlIGFic2VudC5cblx0XHRcdFx0Ly8gMTIuIExldCBmdXR1cmUtY29tcGF0LWggYmUgYWJzZW50LiAoV2UncmUgaW1wbGVtZW50aW5nIGl0IG5vdyBhcyBoKVxuXHRcdFx0XHR3LCBkLCBoLCBpLFxuXHRcdFx0XHRjYW5kaWRhdGUgPSB7fSxcblx0XHRcdFx0ZGVzYywgbGFzdENoYXIsIHZhbHVlLCBpbnRWYWwsIGZsb2F0VmFsO1xuXG5cdFx0XHQvLyAxMy4gRm9yIGVhY2ggZGVzY3JpcHRvciBpbiBkZXNjcmlwdG9ycywgcnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHNcblx0XHRcdC8vIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuXHRcdFx0Zm9yIChpID0gMCA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRkZXNjID0gZGVzY3JpcHRvcnNbIGkgXTtcblxuXHRcdFx0XHRsYXN0Q2hhciA9IGRlc2NbIGRlc2MubGVuZ3RoIC0gMSBdO1xuXHRcdFx0XHR2YWx1ZSA9IGRlc2Muc3Vic3RyaW5nKDAsIGRlc2MubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdGludFZhbCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cdFx0XHRcdGZsb2F0VmFsID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGRlc2NyaXB0b3IgY29uc2lzdHMgb2YgYSB2YWxpZCBub24tbmVnYXRpdmUgaW50ZWdlciBmb2xsb3dlZCBieVxuXHRcdFx0XHQvLyBhIFUrMDA3NyBMQVRJTiBTTUFMTCBMRVRURVIgVyBjaGFyYWN0ZXJcblx0XHRcdFx0aWYgKHJlZ2V4Tm9uTmVnYXRpdmVJbnRlZ2VyLnRlc3QodmFsdWUpICYmIChsYXN0Q2hhciA9PT0gXCJ3XCIpKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3aWR0aCBhbmQgZGVuc2l0eSBhcmUgbm90IGJvdGggYWJzZW50LCB0aGVuIGxldCBlcnJvciBiZSB5ZXMuXG5cdFx0XHRcdFx0aWYgKHcgfHwgZCkge3BFcnJvciA9IHRydWU7fVxuXG5cdFx0XHRcdFx0Ly8gQXBwbHkgdGhlIHJ1bGVzIGZvciBwYXJzaW5nIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycyB0byB0aGUgZGVzY3JpcHRvci5cblx0XHRcdFx0XHQvLyBJZiB0aGUgcmVzdWx0IGlzIHplcm8sIGxldCBlcnJvciBiZSB5ZXMuXG5cdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBsZXQgd2lkdGggYmUgdGhlIHJlc3VsdC5cblx0XHRcdFx0XHRpZiAoaW50VmFsID09PSAwKSB7cEVycm9yID0gdHJ1ZTt9IGVsc2Uge3cgPSBpbnRWYWw7fVxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIGRlc2NyaXB0b3IgY29uc2lzdHMgb2YgYSB2YWxpZCBmbG9hdGluZy1wb2ludCBudW1iZXIgZm9sbG93ZWQgYnlcblx0XHRcdFx0XHQvLyBhIFUrMDA3OCBMQVRJTiBTTUFMTCBMRVRURVIgWCBjaGFyYWN0ZXJcblx0XHRcdFx0fSBlbHNlIGlmIChyZWdleEZsb2F0aW5nUG9pbnQudGVzdCh2YWx1ZSkgJiYgKGxhc3RDaGFyID09PSBcInhcIikpIHtcblxuXHRcdFx0XHRcdC8vIElmIHdpZHRoLCBkZW5zaXR5IGFuZCBmdXR1cmUtY29tcGF0LWggYXJlIG5vdCBhbGwgYWJzZW50LCB0aGVuIGxldCBlcnJvclxuXHRcdFx0XHRcdC8vIGJlIHllcy5cblx0XHRcdFx0XHRpZiAodyB8fCBkIHx8IGgpIHtwRXJyb3IgPSB0cnVlO31cblxuXHRcdFx0XHRcdC8vIEFwcGx5IHRoZSBydWxlcyBmb3IgcGFyc2luZyBmbG9hdGluZy1wb2ludCBudW1iZXIgdmFsdWVzIHRvIHRoZSBkZXNjcmlwdG9yLlxuXHRcdFx0XHRcdC8vIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIHplcm8sIGxldCBlcnJvciBiZSB5ZXMuIE90aGVyd2lzZSwgbGV0IGRlbnNpdHlcblx0XHRcdFx0XHQvLyBiZSB0aGUgcmVzdWx0LlxuXHRcdFx0XHRcdGlmIChmbG9hdFZhbCA8IDApIHtwRXJyb3IgPSB0cnVlO30gZWxzZSB7ZCA9IGZsb2F0VmFsO31cblxuXHRcdFx0XHRcdC8vIElmIHRoZSBkZXNjcmlwdG9yIGNvbnNpc3RzIG9mIGEgdmFsaWQgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9sbG93ZWQgYnlcblx0XHRcdFx0XHQvLyBhIFUrMDA2OCBMQVRJTiBTTUFMTCBMRVRURVIgSCBjaGFyYWN0ZXJcblx0XHRcdFx0fSBlbHNlIGlmIChyZWdleE5vbk5lZ2F0aXZlSW50ZWdlci50ZXN0KHZhbHVlKSAmJiAobGFzdENoYXIgPT09IFwiaFwiKSkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgaGVpZ2h0IGFuZCBkZW5zaXR5IGFyZSBub3QgYm90aCBhYnNlbnQsIHRoZW4gbGV0IGVycm9yIGJlIHllcy5cblx0XHRcdFx0XHRpZiAoaCB8fCBkKSB7cEVycm9yID0gdHJ1ZTt9XG5cblx0XHRcdFx0XHQvLyBBcHBseSB0aGUgcnVsZXMgZm9yIHBhcnNpbmcgbm9uLW5lZ2F0aXZlIGludGVnZXJzIHRvIHRoZSBkZXNjcmlwdG9yLlxuXHRcdFx0XHRcdC8vIElmIHRoZSByZXN1bHQgaXMgemVybywgbGV0IGVycm9yIGJlIHllcy4gT3RoZXJ3aXNlLCBsZXQgZnV0dXJlLWNvbXBhdC1oXG5cdFx0XHRcdFx0Ly8gYmUgdGhlIHJlc3VsdC5cblx0XHRcdFx0XHRpZiAoaW50VmFsID09PSAwKSB7cEVycm9yID0gdHJ1ZTt9IGVsc2Uge2ggPSBpbnRWYWw7fVxuXG5cdFx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSwgTGV0IGVycm9yIGJlIHllcy5cblx0XHRcdFx0fSBlbHNlIHtwRXJyb3IgPSB0cnVlO31cblx0XHRcdH0gLy8gKGNsb3NlIHN0ZXAgMTMgZm9yIGxvb3ApXG5cblx0XHRcdC8vIDE1LiBJZiBlcnJvciBpcyBzdGlsbCBubywgdGhlbiBhcHBlbmQgYSBuZXcgaW1hZ2Ugc291cmNlIHRvIGNhbmRpZGF0ZXMgd2hvc2Vcblx0XHRcdC8vIFVSTCBpcyB1cmwsIGFzc29jaWF0ZWQgd2l0aCBhIHdpZHRoIHdpZHRoIGlmIG5vdCBhYnNlbnQgYW5kIGEgcGl4ZWxcblx0XHRcdC8vIGRlbnNpdHkgZGVuc2l0eSBpZiBub3QgYWJzZW50LiBPdGhlcndpc2UsIHRoZXJlIGlzIGEgcGFyc2UgZXJyb3IuXG5cdFx0XHRpZiAoIXBFcnJvcikge1xuXHRcdFx0XHRjYW5kaWRhdGUudXJsID0gdXJsO1xuXHRcdFx0XHRpZiAodykgeyBjYW5kaWRhdGUudyA9IHc7fVxuXHRcdFx0XHRpZiAoZCkgeyBjYW5kaWRhdGUuZCA9IGQ7fVxuXHRcdFx0XHRpZiAoaCkgeyBjYW5kaWRhdGUuaCA9IGg7fVxuXHRcdFx0XHRjYW5kaWRhdGVzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdH0gZWxzZSBpZiAoY29uc29sZSAmJiBjb25zb2xlLmxvZykge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkludmFsaWQgc3Jjc2V0IGRlc2NyaXB0b3IgZm91bmQgaW4gJ1wiICtcblx0XHRcdFx0XHRpbnB1dCArIFwiJyBhdCAnXCIgKyBkZXNjICsgXCInLlwiKTtcblx0XHRcdH1cblx0XHR9IC8vIChjbG9zZSBwYXJzZURlc2NyaXB0b3JzIGZuKVxuXG5cdH1cbn0pKTtcbiIsInZhciB4PVN0cmluZztcbnZhciBjcmVhdGU9ZnVuY3Rpb24oKSB7cmV0dXJuIHtpc0NvbG9yU3VwcG9ydGVkOmZhbHNlLHJlc2V0OngsYm9sZDp4LGRpbTp4LGl0YWxpYzp4LHVuZGVybGluZTp4LGludmVyc2U6eCxoaWRkZW46eCxzdHJpa2V0aHJvdWdoOngsYmxhY2s6eCxyZWQ6eCxncmVlbjp4LHllbGxvdzp4LGJsdWU6eCxtYWdlbnRhOngsY3lhbjp4LHdoaXRlOngsZ3JheTp4LGJnQmxhY2s6eCxiZ1JlZDp4LGJnR3JlZW46eCxiZ1llbGxvdzp4LGJnQmx1ZTp4LGJnTWFnZW50YTp4LGJnQ3lhbjp4LGJnV2hpdGU6eCxibGFja0JyaWdodDp4LHJlZEJyaWdodDp4LGdyZWVuQnJpZ2h0OngseWVsbG93QnJpZ2h0OngsYmx1ZUJyaWdodDp4LG1hZ2VudGFCcmlnaHQ6eCxjeWFuQnJpZ2h0Ongsd2hpdGVCcmlnaHQ6eCxiZ0JsYWNrQnJpZ2h0OngsYmdSZWRCcmlnaHQ6eCxiZ0dyZWVuQnJpZ2h0OngsYmdZZWxsb3dCcmlnaHQ6eCxiZ0JsdWVCcmlnaHQ6eCxiZ01hZ2VudGFCcmlnaHQ6eCxiZ0N5YW5CcmlnaHQ6eCxiZ1doaXRlQnJpZ2h0Onh9fTtcbm1vZHVsZS5leHBvcnRzPWNyZWF0ZSgpO1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlQ29sb3JzID0gY3JlYXRlO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCBDb250YWluZXIgPSByZXF1aXJlKCcuL2NvbnRhaW5lcicpXG5cbmNsYXNzIEF0UnVsZSBleHRlbmRzIENvbnRhaW5lciB7XG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRzKSB7XG4gICAgc3VwZXIoZGVmYXVsdHMpXG4gICAgdGhpcy50eXBlID0gJ2F0cnVsZSdcbiAgfVxuXG4gIGFwcGVuZCguLi5jaGlsZHJlbikge1xuICAgIGlmICghdGhpcy5wcm94eU9mLm5vZGVzKSB0aGlzLm5vZGVzID0gW11cbiAgICByZXR1cm4gc3VwZXIuYXBwZW5kKC4uLmNoaWxkcmVuKVxuICB9XG5cbiAgcHJlcGVuZCguLi5jaGlsZHJlbikge1xuICAgIGlmICghdGhpcy5wcm94eU9mLm5vZGVzKSB0aGlzLm5vZGVzID0gW11cbiAgICByZXR1cm4gc3VwZXIucHJlcGVuZCguLi5jaGlsZHJlbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF0UnVsZVxuQXRSdWxlLmRlZmF1bHQgPSBBdFJ1bGVcblxuQ29udGFpbmVyLnJlZ2lzdGVyQXRSdWxlKEF0UnVsZSlcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgTm9kZSA9IHJlcXVpcmUoJy4vbm9kZScpXG5cbmNsYXNzIENvbW1lbnQgZXh0ZW5kcyBOb2RlIHtcbiAgY29uc3RydWN0b3IoZGVmYXVsdHMpIHtcbiAgICBzdXBlcihkZWZhdWx0cylcbiAgICB0aGlzLnR5cGUgPSAnY29tbWVudCdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbW1lbnRcbkNvbW1lbnQuZGVmYXVsdCA9IENvbW1lbnRcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgQ29tbWVudCA9IHJlcXVpcmUoJy4vY29tbWVudCcpXG5sZXQgRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL2RlY2xhcmF0aW9uJylcbmxldCBOb2RlID0gcmVxdWlyZSgnLi9ub2RlJylcbmxldCB7IGlzQ2xlYW4sIG15IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuXG5sZXQgQXRSdWxlLCBwYXJzZSwgUm9vdCwgUnVsZVxuXG5mdW5jdGlvbiBjbGVhblNvdXJjZShub2Rlcykge1xuICByZXR1cm4gbm9kZXMubWFwKGkgPT4ge1xuICAgIGlmIChpLm5vZGVzKSBpLm5vZGVzID0gY2xlYW5Tb3VyY2UoaS5ub2RlcylcbiAgICBkZWxldGUgaS5zb3VyY2VcbiAgICByZXR1cm4gaVxuICB9KVxufVxuXG5mdW5jdGlvbiBtYXJrVHJlZURpcnR5KG5vZGUpIHtcbiAgbm9kZVtpc0NsZWFuXSA9IGZhbHNlXG4gIGlmIChub2RlLnByb3h5T2Yubm9kZXMpIHtcbiAgICBmb3IgKGxldCBpIG9mIG5vZGUucHJveHlPZi5ub2Rlcykge1xuICAgICAgbWFya1RyZWVEaXJ0eShpKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBDb250YWluZXIgZXh0ZW5kcyBOb2RlIHtcbiAgZ2V0IGZpcnN0KCkge1xuICAgIGlmICghdGhpcy5wcm94eU9mLm5vZGVzKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMucHJveHlPZi5ub2Rlc1swXVxuICB9XG5cbiAgZ2V0IGxhc3QoKSB7XG4gICAgaWYgKCF0aGlzLnByb3h5T2Yubm9kZXMpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5wcm94eU9mLm5vZGVzW3RoaXMucHJveHlPZi5ub2Rlcy5sZW5ndGggLSAxXVxuICB9XG5cbiAgYXBwZW5kKC4uLmNoaWxkcmVuKSB7XG4gICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGxldCBub2RlcyA9IHRoaXMubm9ybWFsaXplKGNoaWxkLCB0aGlzLmxhc3QpXG4gICAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB0aGlzLnByb3h5T2Yubm9kZXMucHVzaChub2RlKVxuICAgIH1cblxuICAgIHRoaXMubWFya0RpcnR5KClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBjbGVhblJhd3Moa2VlcEJldHdlZW4pIHtcbiAgICBzdXBlci5jbGVhblJhd3Moa2VlcEJldHdlZW4pXG4gICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgIGZvciAobGV0IG5vZGUgb2YgdGhpcy5ub2Rlcykgbm9kZS5jbGVhblJhd3Moa2VlcEJldHdlZW4pXG4gICAgfVxuICB9XG5cbiAgZWFjaChjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5wcm94eU9mLm5vZGVzKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgbGV0IGl0ZXJhdG9yID0gdGhpcy5nZXRJdGVyYXRvcigpXG5cbiAgICBsZXQgaW5kZXgsIHJlc3VsdFxuICAgIHdoaWxlICh0aGlzLmluZGV4ZXNbaXRlcmF0b3JdIDwgdGhpcy5wcm94eU9mLm5vZGVzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSB0aGlzLmluZGV4ZXNbaXRlcmF0b3JdXG4gICAgICByZXN1bHQgPSBjYWxsYmFjayh0aGlzLnByb3h5T2Yubm9kZXNbaW5kZXhdLCBpbmRleClcbiAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSBicmVha1xuXG4gICAgICB0aGlzLmluZGV4ZXNbaXRlcmF0b3JdICs9IDFcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5pbmRleGVzW2l0ZXJhdG9yXVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGV2ZXJ5KGNvbmRpdGlvbikge1xuICAgIHJldHVybiB0aGlzLm5vZGVzLmV2ZXJ5KGNvbmRpdGlvbilcbiAgfVxuXG4gIGdldEl0ZXJhdG9yKCkge1xuICAgIGlmICghdGhpcy5sYXN0RWFjaCkgdGhpcy5sYXN0RWFjaCA9IDBcbiAgICBpZiAoIXRoaXMuaW5kZXhlcykgdGhpcy5pbmRleGVzID0ge31cblxuICAgIHRoaXMubGFzdEVhY2ggKz0gMVxuICAgIGxldCBpdGVyYXRvciA9IHRoaXMubGFzdEVhY2hcbiAgICB0aGlzLmluZGV4ZXNbaXRlcmF0b3JdID0gMFxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG4gIH1cblxuICBnZXRQcm94eVByb2Nlc3NvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0KG5vZGUsIHByb3ApIHtcbiAgICAgICAgaWYgKHByb3AgPT09ICdwcm94eU9mJykge1xuICAgICAgICAgIHJldHVybiBub2RlXG4gICAgICAgIH0gZWxzZSBpZiAoIW5vZGVbcHJvcF0pIHtcbiAgICAgICAgICByZXR1cm4gbm9kZVtwcm9wXVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHByb3AgPT09ICdlYWNoJyB8fFxuICAgICAgICAgICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycgJiYgcHJvcC5zdGFydHNXaXRoKCd3YWxrJykpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVbcHJvcF0oXG4gICAgICAgICAgICAgIC4uLmFyZ3MubWFwKGkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZCwgaW5kZXgpID0+IGkoY2hpbGQudG9Qcm94eSgpLCBpbmRleClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb3AgPT09ICdldmVyeScgfHwgcHJvcCA9PT0gJ3NvbWUnKSB7XG4gICAgICAgICAgcmV0dXJuIGNiID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlW3Byb3BdKChjaGlsZCwgLi4ub3RoZXIpID0+XG4gICAgICAgICAgICAgIGNiKGNoaWxkLnRvUHJveHkoKSwgLi4ub3RoZXIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb3AgPT09ICdyb290Jykge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBub2RlLnJvb3QoKS50b1Byb3h5KClcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wID09PSAnbm9kZXMnKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUubm9kZXMubWFwKGkgPT4gaS50b1Byb3h5KCkpXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ2ZpcnN0JyB8fCBwcm9wID09PSAnbGFzdCcpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZVtwcm9wXS50b1Byb3h5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbm9kZVtwcm9wXVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQobm9kZSwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG5vZGVbcHJvcF0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZVxuICAgICAgICBub2RlW3Byb3BdID0gdmFsdWVcbiAgICAgICAgaWYgKHByb3AgPT09ICduYW1lJyB8fCBwcm9wID09PSAncGFyYW1zJyB8fCBwcm9wID09PSAnc2VsZWN0b3InKSB7XG4gICAgICAgICAgbm9kZS5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW5kZXgoY2hpbGQpIHtcbiAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykgcmV0dXJuIGNoaWxkXG4gICAgaWYgKGNoaWxkLnByb3h5T2YpIGNoaWxkID0gY2hpbGQucHJveHlPZlxuICAgIHJldHVybiB0aGlzLnByb3h5T2Yubm9kZXMuaW5kZXhPZihjaGlsZClcbiAgfVxuXG4gIGluc2VydEFmdGVyKGV4aXN0LCBhZGQpIHtcbiAgICBsZXQgZXhpc3RJbmRleCA9IHRoaXMuaW5kZXgoZXhpc3QpXG4gICAgbGV0IG5vZGVzID0gdGhpcy5ub3JtYWxpemUoYWRkLCB0aGlzLnByb3h5T2Yubm9kZXNbZXhpc3RJbmRleF0pLnJldmVyc2UoKVxuICAgIGV4aXN0SW5kZXggPSB0aGlzLmluZGV4KGV4aXN0KVxuICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHRoaXMucHJveHlPZi5ub2Rlcy5zcGxpY2UoZXhpc3RJbmRleCArIDEsIDAsIG5vZGUpXG5cbiAgICBsZXQgaW5kZXhcbiAgICBmb3IgKGxldCBpZCBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgIGluZGV4ID0gdGhpcy5pbmRleGVzW2lkXVxuICAgICAgaWYgKGV4aXN0SW5kZXggPCBpbmRleCkge1xuICAgICAgICB0aGlzLmluZGV4ZXNbaWRdID0gaW5kZXggKyBub2Rlcy5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm1hcmtEaXJ0eSgpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgaW5zZXJ0QmVmb3JlKGV4aXN0LCBhZGQpIHtcbiAgICBsZXQgZXhpc3RJbmRleCA9IHRoaXMuaW5kZXgoZXhpc3QpXG4gICAgbGV0IHR5cGUgPSBleGlzdEluZGV4ID09PSAwID8gJ3ByZXBlbmQnIDogZmFsc2VcbiAgICBsZXQgbm9kZXMgPSB0aGlzLm5vcm1hbGl6ZShcbiAgICAgIGFkZCxcbiAgICAgIHRoaXMucHJveHlPZi5ub2Rlc1tleGlzdEluZGV4XSxcbiAgICAgIHR5cGVcbiAgICApLnJldmVyc2UoKVxuICAgIGV4aXN0SW5kZXggPSB0aGlzLmluZGV4KGV4aXN0KVxuICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHRoaXMucHJveHlPZi5ub2Rlcy5zcGxpY2UoZXhpc3RJbmRleCwgMCwgbm9kZSlcblxuICAgIGxldCBpbmRleFxuICAgIGZvciAobGV0IGlkIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgaW5kZXggPSB0aGlzLmluZGV4ZXNbaWRdXG4gICAgICBpZiAoZXhpc3RJbmRleCA8PSBpbmRleCkge1xuICAgICAgICB0aGlzLmluZGV4ZXNbaWRdID0gaW5kZXggKyBub2Rlcy5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm1hcmtEaXJ0eSgpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgbm9ybWFsaXplKG5vZGVzLCBzYW1wbGUpIHtcbiAgICBpZiAodHlwZW9mIG5vZGVzID09PSAnc3RyaW5nJykge1xuICAgICAgbm9kZXMgPSBjbGVhblNvdXJjZShwYXJzZShub2Rlcykubm9kZXMpXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBub2RlcyA9IFtdXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgbm9kZXMgPSBub2Rlcy5zbGljZSgwKVxuICAgICAgZm9yIChsZXQgaSBvZiBub2Rlcykge1xuICAgICAgICBpZiAoaS5wYXJlbnQpIGkucGFyZW50LnJlbW92ZUNoaWxkKGksICdpZ25vcmUnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZXMudHlwZSA9PT0gJ3Jvb3QnICYmIHRoaXMudHlwZSAhPT0gJ2RvY3VtZW50Jykge1xuICAgICAgbm9kZXMgPSBub2Rlcy5ub2Rlcy5zbGljZSgwKVxuICAgICAgZm9yIChsZXQgaSBvZiBub2Rlcykge1xuICAgICAgICBpZiAoaS5wYXJlbnQpIGkucGFyZW50LnJlbW92ZUNoaWxkKGksICdpZ25vcmUnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZXMudHlwZSkge1xuICAgICAgbm9kZXMgPSBbbm9kZXNdXG4gICAgfSBlbHNlIGlmIChub2Rlcy5wcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIG5vZGVzLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIGZpZWxkIGlzIG1pc3NlZCBpbiBub2RlIGNyZWF0aW9uJylcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGVzLnZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBub2Rlcy52YWx1ZSA9IFN0cmluZyhub2Rlcy52YWx1ZSlcbiAgICAgIH1cbiAgICAgIG5vZGVzID0gW25ldyBEZWNsYXJhdGlvbihub2RlcyldXG4gICAgfSBlbHNlIGlmIChub2Rlcy5zZWxlY3RvciB8fCBub2Rlcy5zZWxlY3RvcnMpIHtcbiAgICAgIG5vZGVzID0gW25ldyBSdWxlKG5vZGVzKV1cbiAgICB9IGVsc2UgaWYgKG5vZGVzLm5hbWUpIHtcbiAgICAgIG5vZGVzID0gW25ldyBBdFJ1bGUobm9kZXMpXVxuICAgIH0gZWxzZSBpZiAobm9kZXMudGV4dCkge1xuICAgICAgbm9kZXMgPSBbbmV3IENvbW1lbnQobm9kZXMpXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlIGluIG5vZGUgY3JlYXRpb24nKVxuICAgIH1cblxuICAgIGxldCBwcm9jZXNzZWQgPSBub2Rlcy5tYXAoaSA9PiB7XG4gICAgICAvKiBjOCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKCFpW215XSkgQ29udGFpbmVyLnJlYnVpbGQoaSlcbiAgICAgIGkgPSBpLnByb3h5T2ZcbiAgICAgIGlmIChpLnBhcmVudCkgaS5wYXJlbnQucmVtb3ZlQ2hpbGQoaSlcbiAgICAgIGlmIChpW2lzQ2xlYW5dKSBtYXJrVHJlZURpcnR5KGkpXG5cbiAgICAgIGlmICghaS5yYXdzKSBpLnJhd3MgPSB7fVxuICAgICAgaWYgKHR5cGVvZiBpLnJhd3MuYmVmb3JlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoc2FtcGxlICYmIHR5cGVvZiBzYW1wbGUucmF3cy5iZWZvcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaS5yYXdzLmJlZm9yZSA9IHNhbXBsZS5yYXdzLmJlZm9yZS5yZXBsYWNlKC9cXFMvZywgJycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkucGFyZW50ID0gdGhpcy5wcm94eU9mXG4gICAgICByZXR1cm4gaVxuICAgIH0pXG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkXG4gIH1cblxuICBwcmVwZW5kKC4uLmNoaWxkcmVuKSB7XG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5yZXZlcnNlKClcbiAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgbGV0IG5vZGVzID0gdGhpcy5ub3JtYWxpemUoY2hpbGQsIHRoaXMuZmlyc3QsICdwcmVwZW5kJykucmV2ZXJzZSgpXG4gICAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB0aGlzLnByb3h5T2Yubm9kZXMudW5zaGlmdChub2RlKVxuICAgICAgZm9yIChsZXQgaWQgaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICAgIHRoaXMuaW5kZXhlc1tpZF0gPSB0aGlzLmluZGV4ZXNbaWRdICsgbm9kZXMubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRGlydHkoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHB1c2goY2hpbGQpIHtcbiAgICBjaGlsZC5wYXJlbnQgPSB0aGlzXG4gICAgdGhpcy5wcm94eU9mLm5vZGVzLnB1c2goY2hpbGQpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJlbW92ZUFsbCgpIHtcbiAgICBmb3IgKGxldCBub2RlIG9mIHRoaXMucHJveHlPZi5ub2Rlcykgbm9kZS5wYXJlbnQgPSB1bmRlZmluZWRcbiAgICB0aGlzLnByb3h5T2Yubm9kZXMgPSBbXVxuXG4gICAgdGhpcy5tYXJrRGlydHkoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJlbW92ZUNoaWxkKGNoaWxkKSB7XG4gICAgY2hpbGQgPSB0aGlzLmluZGV4KGNoaWxkKVxuICAgIHRoaXMucHJveHlPZi5ub2Rlc1tjaGlsZF0ucGFyZW50ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5wcm94eU9mLm5vZGVzLnNwbGljZShjaGlsZCwgMSlcblxuICAgIGxldCBpbmRleFxuICAgIGZvciAobGV0IGlkIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgaW5kZXggPSB0aGlzLmluZGV4ZXNbaWRdXG4gICAgICBpZiAoaW5kZXggPj0gY2hpbGQpIHtcbiAgICAgICAgdGhpcy5pbmRleGVzW2lkXSA9IGluZGV4IC0gMVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubWFya0RpcnR5KClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICByZXBsYWNlVmFsdWVzKHBhdHRlcm4sIG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sgPSBvcHRzXG4gICAgICBvcHRzID0ge31cbiAgICB9XG5cbiAgICB0aGlzLndhbGtEZWNscyhkZWNsID0+IHtcbiAgICAgIGlmIChvcHRzLnByb3BzICYmICFvcHRzLnByb3BzLmluY2x1ZGVzKGRlY2wucHJvcCkpIHJldHVyblxuICAgICAgaWYgKG9wdHMuZmFzdCAmJiAhZGVjbC52YWx1ZS5pbmNsdWRlcyhvcHRzLmZhc3QpKSByZXR1cm5cblxuICAgICAgZGVjbC52YWx1ZSA9IGRlY2wudmFsdWUucmVwbGFjZShwYXR0ZXJuLCBjYWxsYmFjaylcbiAgICB9KVxuXG4gICAgdGhpcy5tYXJrRGlydHkoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHNvbWUoY29uZGl0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXMuc29tZShjb25kaXRpb24pXG4gIH1cblxuICB3YWxrKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaCgoY2hpbGQsIGkpID0+IHtcbiAgICAgIGxldCByZXN1bHRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBjaGlsZC5hZGRUb0Vycm9yKGUpXG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSAmJiBjaGlsZC53YWxrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNoaWxkLndhbGsoY2FsbGJhY2spXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9KVxuICB9XG5cbiAgd2Fsa0F0UnVsZXMobmFtZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayA9IG5hbWVcbiAgICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnYXRydWxlJykge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKG5hbWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnYXRydWxlJyAmJiBuYW1lLnRlc3QoY2hpbGQubmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2F0cnVsZScgJiYgY2hpbGQubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHdhbGtDb21tZW50cyhjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgd2Fsa0RlY2xzKHByb3AsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sgPSBwcm9wXG4gICAgICByZXR1cm4gdGhpcy53YWxrKChjaGlsZCwgaSkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAocHJvcCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIHRoaXMud2FsaygoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdkZWNsJyAmJiBwcm9wLnRlc3QoY2hpbGQucHJvcCkpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2RlY2wnICYmIGNoaWxkLnByb3AgPT09IHByb3ApIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB3YWxrUnVsZXMoc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sgPSBzZWxlY3RvclxuXG4gICAgICByZXR1cm4gdGhpcy53YWxrKChjaGlsZCwgaSkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAncnVsZScgJiYgc2VsZWN0b3IudGVzdChjaGlsZC5zZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ3J1bGUnICYmIGNoaWxkLnNlbGVjdG9yID09PSBzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5Db250YWluZXIucmVnaXN0ZXJQYXJzZSA9IGRlcGVuZGFudCA9PiB7XG4gIHBhcnNlID0gZGVwZW5kYW50XG59XG5cbkNvbnRhaW5lci5yZWdpc3RlclJ1bGUgPSBkZXBlbmRhbnQgPT4ge1xuICBSdWxlID0gZGVwZW5kYW50XG59XG5cbkNvbnRhaW5lci5yZWdpc3RlckF0UnVsZSA9IGRlcGVuZGFudCA9PiB7XG4gIEF0UnVsZSA9IGRlcGVuZGFudFxufVxuXG5Db250YWluZXIucmVnaXN0ZXJSb290ID0gZGVwZW5kYW50ID0+IHtcbiAgUm9vdCA9IGRlcGVuZGFudFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lclxuQ29udGFpbmVyLmRlZmF1bHQgPSBDb250YWluZXJcblxuLyogYzggaWdub3JlIHN0YXJ0ICovXG5Db250YWluZXIucmVidWlsZCA9IG5vZGUgPT4ge1xuICBpZiAobm9kZS50eXBlID09PSAnYXRydWxlJykge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihub2RlLCBBdFJ1bGUucHJvdG90eXBlKVxuICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vZGUsIFJ1bGUucHJvdG90eXBlKVxuICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vZGUsIERlY2xhcmF0aW9uLnByb3RvdHlwZSlcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdjb21tZW50Jykge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihub2RlLCBDb21tZW50LnByb3RvdHlwZSlcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdyb290Jykge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihub2RlLCBSb290LnByb3RvdHlwZSlcbiAgfVxuXG4gIG5vZGVbbXldID0gdHJ1ZVxuXG4gIGlmIChub2RlLm5vZGVzKSB7XG4gICAgbm9kZS5ub2Rlcy5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIENvbnRhaW5lci5yZWJ1aWxkKGNoaWxkKVxuICAgIH0pXG4gIH1cbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG4iLCIndXNlIHN0cmljdCdcblxubGV0IHBpY28gPSByZXF1aXJlKCdwaWNvY29sb3JzJylcblxubGV0IHRlcm1pbmFsSGlnaGxpZ2h0ID0gcmVxdWlyZSgnLi90ZXJtaW5hbC1oaWdobGlnaHQnKVxuXG5jbGFzcyBDc3NTeW50YXhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgbGluZSwgY29sdW1uLCBzb3VyY2UsIGZpbGUsIHBsdWdpbikge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0Nzc1N5bnRheEVycm9yJ1xuICAgIHRoaXMucmVhc29uID0gbWVzc2FnZVxuXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRoaXMuZmlsZSA9IGZpbGVcbiAgICB9XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2VcbiAgICB9XG4gICAgaWYgKHBsdWdpbikge1xuICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW5cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsaW5lICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29sdW1uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiBsaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLmxpbmUgPSBsaW5lXG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpbmUgPSBsaW5lLmxpbmVcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBsaW5lLmNvbHVtblxuICAgICAgICB0aGlzLmVuZExpbmUgPSBjb2x1bW4ubGluZVxuICAgICAgICB0aGlzLmVuZENvbHVtbiA9IGNvbHVtbi5jb2x1bW5cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldE1lc3NhZ2UoKVxuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDc3NTeW50YXhFcnJvcilcbiAgICB9XG4gIH1cblxuICBzZXRNZXNzYWdlKCkge1xuICAgIHRoaXMubWVzc2FnZSA9IHRoaXMucGx1Z2luID8gdGhpcy5wbHVnaW4gKyAnOiAnIDogJydcbiAgICB0aGlzLm1lc3NhZ2UgKz0gdGhpcy5maWxlID8gdGhpcy5maWxlIDogJzxjc3MgaW5wdXQ+J1xuICAgIGlmICh0eXBlb2YgdGhpcy5saW5lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5tZXNzYWdlICs9ICc6JyArIHRoaXMubGluZSArICc6JyArIHRoaXMuY29sdW1uXG4gICAgfVxuICAgIHRoaXMubWVzc2FnZSArPSAnOiAnICsgdGhpcy5yZWFzb25cbiAgfVxuXG4gIHNob3dTb3VyY2VDb2RlKGNvbG9yKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZSkgcmV0dXJuICcnXG5cbiAgICBsZXQgY3NzID0gdGhpcy5zb3VyY2VcbiAgICBpZiAoY29sb3IgPT0gbnVsbCkgY29sb3IgPSBwaWNvLmlzQ29sb3JTdXBwb3J0ZWRcblxuICAgIGxldCBhc2lkZSA9IHRleHQgPT4gdGV4dFxuICAgIGxldCBtYXJrID0gdGV4dCA9PiB0ZXh0XG4gICAgbGV0IGhpZ2hsaWdodCA9IHRleHQgPT4gdGV4dFxuICAgIGlmIChjb2xvcikge1xuICAgICAgbGV0IHsgYm9sZCwgZ3JheSwgcmVkIH0gPSBwaWNvLmNyZWF0ZUNvbG9ycyh0cnVlKVxuICAgICAgbWFyayA9IHRleHQgPT4gYm9sZChyZWQodGV4dCkpXG4gICAgICBhc2lkZSA9IHRleHQgPT4gZ3JheSh0ZXh0KVxuICAgICAgaWYgKHRlcm1pbmFsSGlnaGxpZ2h0KSB7XG4gICAgICAgIGhpZ2hsaWdodCA9IHRleHQgPT4gdGVybWluYWxIaWdobGlnaHQodGV4dClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbGluZXMgPSBjc3Muc3BsaXQoL1xccj9cXG4vKVxuICAgIGxldCBzdGFydCA9IE1hdGgubWF4KHRoaXMubGluZSAtIDMsIDApXG4gICAgbGV0IGVuZCA9IE1hdGgubWluKHRoaXMubGluZSArIDIsIGxpbmVzLmxlbmd0aClcbiAgICBsZXQgbWF4V2lkdGggPSBTdHJpbmcoZW5kKS5sZW5ndGhcblxuICAgIHJldHVybiBsaW5lc1xuICAgICAgLnNsaWNlKHN0YXJ0LCBlbmQpXG4gICAgICAubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgbnVtYmVyID0gc3RhcnQgKyAxICsgaW5kZXhcbiAgICAgICAgbGV0IGd1dHRlciA9ICcgJyArICgnICcgKyBudW1iZXIpLnNsaWNlKC1tYXhXaWR0aCkgKyAnIHwgJ1xuICAgICAgICBpZiAobnVtYmVyID09PSB0aGlzLmxpbmUpIHtcbiAgICAgICAgICBpZiAobGluZS5sZW5ndGggPiAxNjApIHtcbiAgICAgICAgICAgIGxldCBwYWRkaW5nID0gMjBcbiAgICAgICAgICAgIGxldCBzdWJMaW5lU3RhcnQgPSBNYXRoLm1heCgwLCB0aGlzLmNvbHVtbiAtIHBhZGRpbmcpXG4gICAgICAgICAgICBsZXQgc3ViTGluZUVuZCA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbiArIHBhZGRpbmcsXG4gICAgICAgICAgICAgIHRoaXMuZW5kQ29sdW1uICsgcGFkZGluZ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgbGV0IHN1YkxpbmUgPSBsaW5lLnNsaWNlKHN1YkxpbmVTdGFydCwgc3ViTGluZUVuZClcblxuICAgICAgICAgICAgbGV0IHNwYWNpbmcgPVxuICAgICAgICAgICAgICBhc2lkZShndXR0ZXIucmVwbGFjZSgvXFxkL2csICcgJykpICtcbiAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBNYXRoLm1pbih0aGlzLmNvbHVtbiAtIDEsIHBhZGRpbmcgLSAxKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW15cXHRdL2csICcgJylcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgbWFyaygnPicpICtcbiAgICAgICAgICAgICAgYXNpZGUoZ3V0dGVyKSArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodChzdWJMaW5lKSArXG4gICAgICAgICAgICAgICdcXG4gJyArXG4gICAgICAgICAgICAgIHNwYWNpbmcgK1xuICAgICAgICAgICAgICBtYXJrKCdeJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc3BhY2luZyA9XG4gICAgICAgICAgICBhc2lkZShndXR0ZXIucmVwbGFjZSgvXFxkL2csICcgJykpICtcbiAgICAgICAgICAgIGxpbmUuc2xpY2UoMCwgdGhpcy5jb2x1bW4gLSAxKS5yZXBsYWNlKC9bXlxcdF0vZywgJyAnKVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG1hcmsoJz4nKSArXG4gICAgICAgICAgICBhc2lkZShndXR0ZXIpICtcbiAgICAgICAgICAgIGhpZ2hsaWdodChsaW5lKSArXG4gICAgICAgICAgICAnXFxuICcgK1xuICAgICAgICAgICAgc3BhY2luZyArXG4gICAgICAgICAgICBtYXJrKCdeJylcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyAnICsgYXNpZGUoZ3V0dGVyKSArIGhpZ2hsaWdodChsaW5lKVxuICAgICAgfSlcbiAgICAgIC5qb2luKCdcXG4nKVxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGNvZGUgPSB0aGlzLnNob3dTb3VyY2VDb2RlKClcbiAgICBpZiAoY29kZSkge1xuICAgICAgY29kZSA9ICdcXG5cXG4nICsgY29kZSArICdcXG4nXG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5tZXNzYWdlICsgY29kZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ3NzU3ludGF4RXJyb3JcbkNzc1N5bnRheEVycm9yLmRlZmF1bHQgPSBDc3NTeW50YXhFcnJvclxuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCBOb2RlID0gcmVxdWlyZSgnLi9ub2RlJylcblxuY2xhc3MgRGVjbGFyYXRpb24gZXh0ZW5kcyBOb2RlIHtcbiAgZ2V0IHZhcmlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Auc3RhcnRzV2l0aCgnLS0nKSB8fCB0aGlzLnByb3BbMF0gPT09ICckJ1xuICB9XG5cbiAgY29uc3RydWN0b3IoZGVmYXVsdHMpIHtcbiAgICBpZiAoXG4gICAgICBkZWZhdWx0cyAmJlxuICAgICAgdHlwZW9mIGRlZmF1bHRzLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgdHlwZW9mIGRlZmF1bHRzLnZhbHVlICE9PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgZGVmYXVsdHMgPSB7IC4uLmRlZmF1bHRzLCB2YWx1ZTogU3RyaW5nKGRlZmF1bHRzLnZhbHVlKSB9XG4gICAgfVxuICAgIHN1cGVyKGRlZmF1bHRzKVxuICAgIHRoaXMudHlwZSA9ICdkZWNsJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjbGFyYXRpb25cbkRlY2xhcmF0aW9uLmRlZmF1bHQgPSBEZWNsYXJhdGlvblxuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCBDb250YWluZXIgPSByZXF1aXJlKCcuL2NvbnRhaW5lcicpXG5cbmxldCBMYXp5UmVzdWx0LCBQcm9jZXNzb3JcblxuY2xhc3MgRG9jdW1lbnQgZXh0ZW5kcyBDb250YWluZXIge1xuICBjb25zdHJ1Y3RvcihkZWZhdWx0cykge1xuICAgIC8vIHR5cGUgbmVlZHMgdG8gYmUgcGFzc2VkIHRvIHN1cGVyLCBvdGhlcndpc2UgY2hpbGQgcm9vdHMgd29uJ3QgYmUgbm9ybWFsaXplZCBjb3JyZWN0bHlcbiAgICBzdXBlcih7IHR5cGU6ICdkb2N1bWVudCcsIC4uLmRlZmF1bHRzIH0pXG5cbiAgICBpZiAoIXRoaXMubm9kZXMpIHtcbiAgICAgIHRoaXMubm9kZXMgPSBbXVxuICAgIH1cbiAgfVxuXG4gIHRvUmVzdWx0KG9wdHMgPSB7fSkge1xuICAgIGxldCBsYXp5ID0gbmV3IExhenlSZXN1bHQobmV3IFByb2Nlc3NvcigpLCB0aGlzLCBvcHRzKVxuXG4gICAgcmV0dXJuIGxhenkuc3RyaW5naWZ5KClcbiAgfVxufVxuXG5Eb2N1bWVudC5yZWdpc3RlckxhenlSZXN1bHQgPSBkZXBlbmRhbnQgPT4ge1xuICBMYXp5UmVzdWx0ID0gZGVwZW5kYW50XG59XG5cbkRvY3VtZW50LnJlZ2lzdGVyUHJvY2Vzc29yID0gZGVwZW5kYW50ID0+IHtcbiAgUHJvY2Vzc29yID0gZGVwZW5kYW50XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRG9jdW1lbnRcbkRvY3VtZW50LmRlZmF1bHQgPSBEb2N1bWVudFxuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCBBdFJ1bGUgPSByZXF1aXJlKCcuL2F0LXJ1bGUnKVxubGV0IENvbW1lbnQgPSByZXF1aXJlKCcuL2NvbW1lbnQnKVxubGV0IERlY2xhcmF0aW9uID0gcmVxdWlyZSgnLi9kZWNsYXJhdGlvbicpXG5sZXQgSW5wdXQgPSByZXF1aXJlKCcuL2lucHV0JylcbmxldCBQcmV2aW91c01hcCA9IHJlcXVpcmUoJy4vcHJldmlvdXMtbWFwJylcbmxldCBSb290ID0gcmVxdWlyZSgnLi9yb290JylcbmxldCBSdWxlID0gcmVxdWlyZSgnLi9ydWxlJylcblxuZnVuY3Rpb24gZnJvbUpTT04oanNvbiwgaW5wdXRzKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSByZXR1cm4ganNvbi5tYXAobiA9PiBmcm9tSlNPTihuKSlcblxuICBsZXQgeyBpbnB1dHM6IG93bklucHV0cywgLi4uZGVmYXVsdHMgfSA9IGpzb25cbiAgaWYgKG93bklucHV0cykge1xuICAgIGlucHV0cyA9IFtdXG4gICAgZm9yIChsZXQgaW5wdXQgb2Ygb3duSW5wdXRzKSB7XG4gICAgICBsZXQgaW5wdXRIeWRyYXRlZCA9IHsgLi4uaW5wdXQsIF9fcHJvdG9fXzogSW5wdXQucHJvdG90eXBlIH1cbiAgICAgIGlmIChpbnB1dEh5ZHJhdGVkLm1hcCkge1xuICAgICAgICBpbnB1dEh5ZHJhdGVkLm1hcCA9IHtcbiAgICAgICAgICAuLi5pbnB1dEh5ZHJhdGVkLm1hcCxcbiAgICAgICAgICBfX3Byb3RvX186IFByZXZpb3VzTWFwLnByb3RvdHlwZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnB1dHMucHVzaChpbnB1dEh5ZHJhdGVkKVxuICAgIH1cbiAgfVxuICBpZiAoZGVmYXVsdHMubm9kZXMpIHtcbiAgICBkZWZhdWx0cy5ub2RlcyA9IGpzb24ubm9kZXMubWFwKG4gPT4gZnJvbUpTT04obiwgaW5wdXRzKSlcbiAgfVxuICBpZiAoZGVmYXVsdHMuc291cmNlKSB7XG4gICAgbGV0IHsgaW5wdXRJZCwgLi4uc291cmNlIH0gPSBkZWZhdWx0cy5zb3VyY2VcbiAgICBkZWZhdWx0cy5zb3VyY2UgPSBzb3VyY2VcbiAgICBpZiAoaW5wdXRJZCAhPSBudWxsKSB7XG4gICAgICBkZWZhdWx0cy5zb3VyY2UuaW5wdXQgPSBpbnB1dHNbaW5wdXRJZF1cbiAgICB9XG4gIH1cbiAgaWYgKGRlZmF1bHRzLnR5cGUgPT09ICdyb290Jykge1xuICAgIHJldHVybiBuZXcgUm9vdChkZWZhdWx0cylcbiAgfSBlbHNlIGlmIChkZWZhdWx0cy50eXBlID09PSAnZGVjbCcpIHtcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKGRlZmF1bHRzKVxuICB9IGVsc2UgaWYgKGRlZmF1bHRzLnR5cGUgPT09ICdydWxlJykge1xuICAgIHJldHVybiBuZXcgUnVsZShkZWZhdWx0cylcbiAgfSBlbHNlIGlmIChkZWZhdWx0cy50eXBlID09PSAnY29tbWVudCcpIHtcbiAgICByZXR1cm4gbmV3IENvbW1lbnQoZGVmYXVsdHMpXG4gIH0gZWxzZSBpZiAoZGVmYXVsdHMudHlwZSA9PT0gJ2F0cnVsZScpIHtcbiAgICByZXR1cm4gbmV3IEF0UnVsZShkZWZhdWx0cylcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlOiAnICsganNvbi50eXBlKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnJvbUpTT05cbmZyb21KU09OLmRlZmF1bHQgPSBmcm9tSlNPTlxuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCB7IG5hbm9pZCB9ID0gcmVxdWlyZSgnbmFub2lkL25vbi1zZWN1cmUnKVxubGV0IHsgaXNBYnNvbHV0ZSwgcmVzb2x2ZSB9ID0gcmVxdWlyZSgncGF0aCcpXG5sZXQgeyBTb3VyY2VNYXBDb25zdW1lciwgU291cmNlTWFwR2VuZXJhdG9yIH0gPSByZXF1aXJlKCdzb3VyY2UtbWFwLWpzJylcbmxldCB7IGZpbGVVUkxUb1BhdGgsIHBhdGhUb0ZpbGVVUkwgfSA9IHJlcXVpcmUoJ3VybCcpXG5cbmxldCBDc3NTeW50YXhFcnJvciA9IHJlcXVpcmUoJy4vY3NzLXN5bnRheC1lcnJvcicpXG5sZXQgUHJldmlvdXNNYXAgPSByZXF1aXJlKCcuL3ByZXZpb3VzLW1hcCcpXG5sZXQgdGVybWluYWxIaWdobGlnaHQgPSByZXF1aXJlKCcuL3Rlcm1pbmFsLWhpZ2hsaWdodCcpXG5cbmxldCBmcm9tT2Zmc2V0Q2FjaGUgPSBTeW1ib2woJ2Zyb21PZmZzZXRDYWNoZScpXG5cbmxldCBzb3VyY2VNYXBBdmFpbGFibGUgPSBCb29sZWFuKFNvdXJjZU1hcENvbnN1bWVyICYmIFNvdXJjZU1hcEdlbmVyYXRvcilcbmxldCBwYXRoQXZhaWxhYmxlID0gQm9vbGVhbihyZXNvbHZlICYmIGlzQWJzb2x1dGUpXG5cbmNsYXNzIElucHV0IHtcbiAgZ2V0IGZyb20oKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZSB8fCB0aGlzLmlkXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihjc3MsIG9wdHMgPSB7fSkge1xuICAgIGlmIChcbiAgICAgIGNzcyA9PT0gbnVsbCB8fFxuICAgICAgdHlwZW9mIGNzcyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICh0eXBlb2YgY3NzID09PSAnb2JqZWN0JyAmJiAhY3NzLnRvU3RyaW5nKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3N0Q1NTIHJlY2VpdmVkICR7Y3NzfSBpbnN0ZWFkIG9mIENTUyBzdHJpbmdgKVxuICAgIH1cblxuICAgIHRoaXMuY3NzID0gY3NzLnRvU3RyaW5nKClcblxuICAgIGlmICh0aGlzLmNzc1swXSA9PT0gJ1xcdUZFRkYnIHx8IHRoaXMuY3NzWzBdID09PSAnXFx1RkZGRScpIHtcbiAgICAgIHRoaXMuaGFzQk9NID0gdHJ1ZVxuICAgICAgdGhpcy5jc3MgPSB0aGlzLmNzcy5zbGljZSgxKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc0JPTSA9IGZhbHNlXG4gICAgfVxuXG4gICAgdGhpcy5kb2N1bWVudCA9IHRoaXMuY3NzXG4gICAgaWYgKG9wdHMuZG9jdW1lbnQpIHRoaXMuZG9jdW1lbnQgPSBvcHRzLmRvY3VtZW50LnRvU3RyaW5nKClcblxuICAgIGlmIChvcHRzLmZyb20pIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXBhdGhBdmFpbGFibGUgfHxcbiAgICAgICAgL15cXHcrOlxcL1xcLy8udGVzdChvcHRzLmZyb20pIHx8XG4gICAgICAgIGlzQWJzb2x1dGUob3B0cy5mcm9tKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZmlsZSA9IG9wdHMuZnJvbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWxlID0gcmVzb2x2ZShvcHRzLmZyb20pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhdGhBdmFpbGFibGUgJiYgc291cmNlTWFwQXZhaWxhYmxlKSB7XG4gICAgICBsZXQgbWFwID0gbmV3IFByZXZpb3VzTWFwKHRoaXMuY3NzLCBvcHRzKVxuICAgICAgaWYgKG1hcC50ZXh0KSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwXG4gICAgICAgIGxldCBmaWxlID0gbWFwLmNvbnN1bWVyKCkuZmlsZVxuICAgICAgICBpZiAoIXRoaXMuZmlsZSAmJiBmaWxlKSB0aGlzLmZpbGUgPSB0aGlzLm1hcFJlc29sdmUoZmlsZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmlsZSkge1xuICAgICAgdGhpcy5pZCA9ICc8aW5wdXQgY3NzICcgKyBuYW5vaWQoNikgKyAnPidcbiAgICB9XG4gICAgaWYgKHRoaXMubWFwKSB0aGlzLm1hcC5maWxlID0gdGhpcy5mcm9tXG4gIH1cblxuICBlcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIG9wdHMgPSB7fSkge1xuICAgIGxldCBlbmRDb2x1bW4sIGVuZExpbmUsIHJlc3VsdFxuXG4gICAgaWYgKGxpbmUgJiYgdHlwZW9mIGxpbmUgPT09ICdvYmplY3QnKSB7XG4gICAgICBsZXQgc3RhcnQgPSBsaW5lXG4gICAgICBsZXQgZW5kID0gY29sdW1uXG4gICAgICBpZiAodHlwZW9mIHN0YXJ0Lm9mZnNldCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbGV0IHBvcyA9IHRoaXMuZnJvbU9mZnNldChzdGFydC5vZmZzZXQpXG4gICAgICAgIGxpbmUgPSBwb3MubGluZVxuICAgICAgICBjb2x1bW4gPSBwb3MuY29sXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lID0gc3RhcnQubGluZVxuICAgICAgICBjb2x1bW4gPSBzdGFydC5jb2x1bW5cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZW5kLm9mZnNldCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbGV0IHBvcyA9IHRoaXMuZnJvbU9mZnNldChlbmQub2Zmc2V0KVxuICAgICAgICBlbmRMaW5lID0gcG9zLmxpbmVcbiAgICAgICAgZW5kQ29sdW1uID0gcG9zLmNvbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kTGluZSA9IGVuZC5saW5lXG4gICAgICAgIGVuZENvbHVtbiA9IGVuZC5jb2x1bW5cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFjb2x1bW4pIHtcbiAgICAgIGxldCBwb3MgPSB0aGlzLmZyb21PZmZzZXQobGluZSlcbiAgICAgIGxpbmUgPSBwb3MubGluZVxuICAgICAgY29sdW1uID0gcG9zLmNvbFxuICAgIH1cblxuICAgIGxldCBvcmlnaW4gPSB0aGlzLm9yaWdpbihsaW5lLCBjb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbilcbiAgICBpZiAob3JpZ2luKSB7XG4gICAgICByZXN1bHQgPSBuZXcgQ3NzU3ludGF4RXJyb3IoXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG9yaWdpbi5lbmRMaW5lID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG9yaWdpbi5saW5lXG4gICAgICAgICAgOiB7IGNvbHVtbjogb3JpZ2luLmNvbHVtbiwgbGluZTogb3JpZ2luLmxpbmUgfSxcbiAgICAgICAgb3JpZ2luLmVuZExpbmUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gb3JpZ2luLmNvbHVtblxuICAgICAgICAgIDogeyBjb2x1bW46IG9yaWdpbi5lbmRDb2x1bW4sIGxpbmU6IG9yaWdpbi5lbmRMaW5lIH0sXG4gICAgICAgIG9yaWdpbi5zb3VyY2UsXG4gICAgICAgIG9yaWdpbi5maWxlLFxuICAgICAgICBvcHRzLnBsdWdpblxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBuZXcgQ3NzU3ludGF4RXJyb3IoXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGVuZExpbmUgPT09IHVuZGVmaW5lZCA/IGxpbmUgOiB7IGNvbHVtbiwgbGluZSB9LFxuICAgICAgICBlbmRMaW5lID09PSB1bmRlZmluZWQgPyBjb2x1bW4gOiB7IGNvbHVtbjogZW5kQ29sdW1uLCBsaW5lOiBlbmRMaW5lIH0sXG4gICAgICAgIHRoaXMuY3NzLFxuICAgICAgICB0aGlzLmZpbGUsXG4gICAgICAgIG9wdHMucGx1Z2luXG4gICAgICApXG4gICAgfVxuXG4gICAgcmVzdWx0LmlucHV0ID0geyBjb2x1bW4sIGVuZENvbHVtbiwgZW5kTGluZSwgbGluZSwgc291cmNlOiB0aGlzLmNzcyB9XG4gICAgaWYgKHRoaXMuZmlsZSkge1xuICAgICAgaWYgKHBhdGhUb0ZpbGVVUkwpIHtcbiAgICAgICAgcmVzdWx0LmlucHV0LnVybCA9IHBhdGhUb0ZpbGVVUkwodGhpcy5maWxlKS50b1N0cmluZygpXG4gICAgICB9XG4gICAgICByZXN1bHQuaW5wdXQuZmlsZSA9IHRoaXMuZmlsZVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZyb21PZmZzZXQob2Zmc2V0KSB7XG4gICAgbGV0IGxhc3RMaW5lLCBsaW5lVG9JbmRleFxuICAgIGlmICghdGhpc1tmcm9tT2Zmc2V0Q2FjaGVdKSB7XG4gICAgICBsZXQgbGluZXMgPSB0aGlzLmNzcy5zcGxpdCgnXFxuJylcbiAgICAgIGxpbmVUb0luZGV4ID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aClcbiAgICAgIGxldCBwcmV2SW5kZXggPSAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGxpbmVUb0luZGV4W2ldID0gcHJldkluZGV4XG4gICAgICAgIHByZXZJbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyAxXG4gICAgICB9XG5cbiAgICAgIHRoaXNbZnJvbU9mZnNldENhY2hlXSA9IGxpbmVUb0luZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVUb0luZGV4ID0gdGhpc1tmcm9tT2Zmc2V0Q2FjaGVdXG4gICAgfVxuICAgIGxhc3RMaW5lID0gbGluZVRvSW5kZXhbbGluZVRvSW5kZXgubGVuZ3RoIC0gMV1cblxuICAgIGxldCBtaW4gPSAwXG4gICAgaWYgKG9mZnNldCA+PSBsYXN0TGluZSkge1xuICAgICAgbWluID0gbGluZVRvSW5kZXgubGVuZ3RoIC0gMVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWF4ID0gbGluZVRvSW5kZXgubGVuZ3RoIC0gMlxuICAgICAgbGV0IG1pZFxuICAgICAgd2hpbGUgKG1pbiA8IG1heCkge1xuICAgICAgICBtaWQgPSBtaW4gKyAoKG1heCAtIG1pbikgPj4gMSlcbiAgICAgICAgaWYgKG9mZnNldCA8IGxpbmVUb0luZGV4W21pZF0pIHtcbiAgICAgICAgICBtYXggPSBtaWQgLSAxXG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID49IGxpbmVUb0luZGV4W21pZCArIDFdKSB7XG4gICAgICAgICAgbWluID0gbWlkICsgMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pbiA9IG1pZFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbDogb2Zmc2V0IC0gbGluZVRvSW5kZXhbbWluXSArIDEsXG4gICAgICBsaW5lOiBtaW4gKyAxXG4gICAgfVxuICB9XG5cbiAgbWFwUmVzb2x2ZShmaWxlKSB7XG4gICAgaWYgKC9eXFx3KzpcXC9cXC8vLnRlc3QoZmlsZSkpIHtcbiAgICAgIHJldHVybiBmaWxlXG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlKHRoaXMubWFwLmNvbnN1bWVyKCkuc291cmNlUm9vdCB8fCB0aGlzLm1hcC5yb290IHx8ICcuJywgZmlsZSlcbiAgfVxuXG4gIG9yaWdpbihsaW5lLCBjb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbikge1xuICAgIGlmICghdGhpcy5tYXApIHJldHVybiBmYWxzZVxuICAgIGxldCBjb25zdW1lciA9IHRoaXMubWFwLmNvbnN1bWVyKClcblxuICAgIGxldCBmcm9tID0gY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7IGNvbHVtbiwgbGluZSB9KVxuICAgIGlmICghZnJvbS5zb3VyY2UpIHJldHVybiBmYWxzZVxuXG4gICAgbGV0IHRvXG4gICAgaWYgKHR5cGVvZiBlbmRMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgdG8gPSBjb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHsgY29sdW1uOiBlbmRDb2x1bW4sIGxpbmU6IGVuZExpbmUgfSlcbiAgICB9XG5cbiAgICBsZXQgZnJvbVVybFxuXG4gICAgaWYgKGlzQWJzb2x1dGUoZnJvbS5zb3VyY2UpKSB7XG4gICAgICBmcm9tVXJsID0gcGF0aFRvRmlsZVVSTChmcm9tLnNvdXJjZSlcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbVVybCA9IG5ldyBVUkwoXG4gICAgICAgIGZyb20uc291cmNlLFxuICAgICAgICB0aGlzLm1hcC5jb25zdW1lcigpLnNvdXJjZVJvb3QgfHwgcGF0aFRvRmlsZVVSTCh0aGlzLm1hcC5tYXBGaWxlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSB7XG4gICAgICBjb2x1bW46IGZyb20uY29sdW1uLFxuICAgICAgZW5kQ29sdW1uOiB0byAmJiB0by5jb2x1bW4sXG4gICAgICBlbmRMaW5lOiB0byAmJiB0by5saW5lLFxuICAgICAgbGluZTogZnJvbS5saW5lLFxuICAgICAgdXJsOiBmcm9tVXJsLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBpZiAoZnJvbVVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6Jykge1xuICAgICAgaWYgKGZpbGVVUkxUb1BhdGgpIHtcbiAgICAgICAgcmVzdWx0LmZpbGUgPSBmaWxlVVJMVG9QYXRoKGZyb21VcmwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAyICovXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZmlsZTogcHJvdG9jb2wgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIFBvc3RDU1MgYnVpbGRgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzb3VyY2UgPSBjb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGZyb20uc291cmNlKVxuICAgIGlmIChzb3VyY2UpIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2VcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbiA9IHt9XG4gICAgZm9yIChsZXQgbmFtZSBvZiBbJ2hhc0JPTScsICdjc3MnLCAnZmlsZScsICdpZCddKSB7XG4gICAgICBpZiAodGhpc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgIGpzb25bbmFtZV0gPSB0aGlzW25hbWVdXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAganNvbi5tYXAgPSB7IC4uLnRoaXMubWFwIH1cbiAgICAgIGlmIChqc29uLm1hcC5jb25zdW1lckNhY2hlKSB7XG4gICAgICAgIGpzb24ubWFwLmNvbnN1bWVyQ2FjaGUgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzb25cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IElucHV0XG5JbnB1dC5kZWZhdWx0ID0gSW5wdXRcblxuaWYgKHRlcm1pbmFsSGlnaGxpZ2h0ICYmIHRlcm1pbmFsSGlnaGxpZ2h0LnJlZ2lzdGVySW5wdXQpIHtcbiAgdGVybWluYWxIaWdobGlnaHQucmVnaXN0ZXJJbnB1dChJbnB1dClcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgQ29udGFpbmVyID0gcmVxdWlyZSgnLi9jb250YWluZXInKVxubGV0IERvY3VtZW50ID0gcmVxdWlyZSgnLi9kb2N1bWVudCcpXG5sZXQgTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9tYXAtZ2VuZXJhdG9yJylcbmxldCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxubGV0IFJlc3VsdCA9IHJlcXVpcmUoJy4vcmVzdWx0JylcbmxldCBSb290ID0gcmVxdWlyZSgnLi9yb290JylcbmxldCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpXG5sZXQgeyBpc0NsZWFuLCBteSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmxldCB3YXJuT25jZSA9IHJlcXVpcmUoJy4vd2Fybi1vbmNlJylcblxuY29uc3QgVFlQRV9UT19DTEFTU19OQU1FID0ge1xuICBhdHJ1bGU6ICdBdFJ1bGUnLFxuICBjb21tZW50OiAnQ29tbWVudCcsXG4gIGRlY2w6ICdEZWNsYXJhdGlvbicsXG4gIGRvY3VtZW50OiAnRG9jdW1lbnQnLFxuICByb290OiAnUm9vdCcsXG4gIHJ1bGU6ICdSdWxlJ1xufVxuXG5jb25zdCBQTFVHSU5fUFJPUFMgPSB7XG4gIEF0UnVsZTogdHJ1ZSxcbiAgQXRSdWxlRXhpdDogdHJ1ZSxcbiAgQ29tbWVudDogdHJ1ZSxcbiAgQ29tbWVudEV4aXQ6IHRydWUsXG4gIERlY2xhcmF0aW9uOiB0cnVlLFxuICBEZWNsYXJhdGlvbkV4aXQ6IHRydWUsXG4gIERvY3VtZW50OiB0cnVlLFxuICBEb2N1bWVudEV4aXQ6IHRydWUsXG4gIE9uY2U6IHRydWUsXG4gIE9uY2VFeGl0OiB0cnVlLFxuICBwb3N0Y3NzUGx1Z2luOiB0cnVlLFxuICBwcmVwYXJlOiB0cnVlLFxuICBSb290OiB0cnVlLFxuICBSb290RXhpdDogdHJ1ZSxcbiAgUnVsZTogdHJ1ZSxcbiAgUnVsZUV4aXQ6IHRydWVcbn1cblxuY29uc3QgTk9UX1ZJU0lUT1JTID0ge1xuICBPbmNlOiB0cnVlLFxuICBwb3N0Y3NzUGx1Z2luOiB0cnVlLFxuICBwcmVwYXJlOiB0cnVlXG59XG5cbmNvbnN0IENISUxEUkVOID0gMFxuXG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRzKG5vZGUpIHtcbiAgbGV0IGtleSA9IGZhbHNlXG4gIGxldCB0eXBlID0gVFlQRV9UT19DTEFTU19OQU1FW25vZGUudHlwZV1cbiAgaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAga2V5ID0gbm9kZS5wcm9wLnRvTG93ZXJDYXNlKClcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdhdHJ1bGUnKSB7XG4gICAga2V5ID0gbm9kZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIGlmIChrZXkgJiYgbm9kZS5hcHBlbmQpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdHlwZSxcbiAgICAgIHR5cGUgKyAnLScgKyBrZXksXG4gICAgICBDSElMRFJFTixcbiAgICAgIHR5cGUgKyAnRXhpdCcsXG4gICAgICB0eXBlICsgJ0V4aXQtJyArIGtleVxuICAgIF1cbiAgfSBlbHNlIGlmIChrZXkpIHtcbiAgICByZXR1cm4gW3R5cGUsIHR5cGUgKyAnLScgKyBrZXksIHR5cGUgKyAnRXhpdCcsIHR5cGUgKyAnRXhpdC0nICsga2V5XVxuICB9IGVsc2UgaWYgKG5vZGUuYXBwZW5kKSB7XG4gICAgcmV0dXJuIFt0eXBlLCBDSElMRFJFTiwgdHlwZSArICdFeGl0J11cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW3R5cGUsIHR5cGUgKyAnRXhpdCddXG4gIH1cbn1cblxuZnVuY3Rpb24gdG9TdGFjayhub2RlKSB7XG4gIGxldCBldmVudHNcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ2RvY3VtZW50Jykge1xuICAgIGV2ZW50cyA9IFsnRG9jdW1lbnQnLCBDSElMRFJFTiwgJ0RvY3VtZW50RXhpdCddXG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAncm9vdCcpIHtcbiAgICBldmVudHMgPSBbJ1Jvb3QnLCBDSElMRFJFTiwgJ1Jvb3RFeGl0J11cbiAgfSBlbHNlIHtcbiAgICBldmVudHMgPSBnZXRFdmVudHMobm9kZSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXZlbnRJbmRleDogMCxcbiAgICBldmVudHMsXG4gICAgaXRlcmF0b3I6IDAsXG4gICAgbm9kZSxcbiAgICB2aXNpdG9ySW5kZXg6IDAsXG4gICAgdmlzaXRvcnM6IFtdXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5NYXJrcyhub2RlKSB7XG4gIG5vZGVbaXNDbGVhbl0gPSBmYWxzZVxuICBpZiAobm9kZS5ub2Rlcykgbm9kZS5ub2Rlcy5mb3JFYWNoKGkgPT4gY2xlYW5NYXJrcyhpKSlcbiAgcmV0dXJuIG5vZGVcbn1cblxubGV0IHBvc3Rjc3MgPSB7fVxuXG5jbGFzcyBMYXp5UmVzdWx0IHtcbiAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KCkuY29udGVudFxuICB9XG5cbiAgZ2V0IGNzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdpZnkoKS5jc3NcbiAgfVxuXG4gIGdldCBtYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KCkubWFwXG4gIH1cblxuICBnZXQgbWVzc2FnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3luYygpLm1lc3NhZ2VzXG4gIH1cblxuICBnZXQgb3B0cygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQub3B0c1xuICB9XG5cbiAgZ2V0IHByb2Nlc3NvcigpIHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQucHJvY2Vzc29yXG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zeW5jKCkucm9vdFxuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGF6eVJlc3VsdCdcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb2Nlc3NvciwgY3NzLCBvcHRzKSB7XG4gICAgdGhpcy5zdHJpbmdpZmllZCA9IGZhbHNlXG4gICAgdGhpcy5wcm9jZXNzZWQgPSBmYWxzZVxuXG4gICAgbGV0IHJvb3RcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgY3NzID09PSAnb2JqZWN0JyAmJlxuICAgICAgY3NzICE9PSBudWxsICYmXG4gICAgICAoY3NzLnR5cGUgPT09ICdyb290JyB8fCBjc3MudHlwZSA9PT0gJ2RvY3VtZW50JylcbiAgICApIHtcbiAgICAgIHJvb3QgPSBjbGVhbk1hcmtzKGNzcylcbiAgICB9IGVsc2UgaWYgKGNzcyBpbnN0YW5jZW9mIExhenlSZXN1bHQgfHwgY3NzIGluc3RhbmNlb2YgUmVzdWx0KSB7XG4gICAgICByb290ID0gY2xlYW5NYXJrcyhjc3Mucm9vdClcbiAgICAgIGlmIChjc3MubWFwKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tYXAgPT09ICd1bmRlZmluZWQnKSBvcHRzLm1hcCA9IHt9XG4gICAgICAgIGlmICghb3B0cy5tYXAuaW5saW5lKSBvcHRzLm1hcC5pbmxpbmUgPSBmYWxzZVxuICAgICAgICBvcHRzLm1hcC5wcmV2ID0gY3NzLm1hcFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcGFyc2VyID0gcGFyc2VcbiAgICAgIGlmIChvcHRzLnN5bnRheCkgcGFyc2VyID0gb3B0cy5zeW50YXgucGFyc2VcbiAgICAgIGlmIChvcHRzLnBhcnNlcikgcGFyc2VyID0gb3B0cy5wYXJzZXJcbiAgICAgIGlmIChwYXJzZXIucGFyc2UpIHBhcnNlciA9IHBhcnNlci5wYXJzZVxuXG4gICAgICB0cnkge1xuICAgICAgICByb290ID0gcGFyc2VyKGNzcywgb3B0cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKHJvb3QgJiYgIXJvb3RbbXldKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDIgKi9cbiAgICAgICAgQ29udGFpbmVyLnJlYnVpbGQocm9vdClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc3VsdCA9IG5ldyBSZXN1bHQocHJvY2Vzc29yLCByb290LCBvcHRzKVxuICAgIHRoaXMuaGVscGVycyA9IHsgLi4ucG9zdGNzcywgcG9zdGNzcywgcmVzdWx0OiB0aGlzLnJlc3VsdCB9XG4gICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wcm9jZXNzb3IucGx1Z2lucy5tYXAocGx1Z2luID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcGx1Z2luID09PSAnb2JqZWN0JyAmJiBwbHVnaW4ucHJlcGFyZSkge1xuICAgICAgICByZXR1cm4geyAuLi5wbHVnaW4sIC4uLnBsdWdpbi5wcmVwYXJlKHRoaXMucmVzdWx0KSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGx1Z2luXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jKCkge1xuICAgIGlmICh0aGlzLmVycm9yKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5lcnJvcilcbiAgICBpZiAodGhpcy5wcm9jZXNzZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5yZXN1bHQpXG4gICAgaWYgKCF0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZyA9IHRoaXMucnVuQXN5bmMoKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzaW5nXG4gIH1cblxuICBjYXRjaChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmMoKS5jYXRjaChvblJlamVjdGVkKVxuICB9XG5cbiAgZmluYWxseShvbkZpbmFsbHkpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luYygpLnRoZW4ob25GaW5hbGx5LCBvbkZpbmFsbHkpXG4gIH1cblxuICBnZXRBc3luY0Vycm9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIHByb2Nlc3MoY3NzKS50aGVuKGNiKSB0byB3b3JrIHdpdGggYXN5bmMgcGx1Z2lucycpXG4gIH1cblxuICBoYW5kbGVFcnJvcihlcnJvciwgbm9kZSkge1xuICAgIGxldCBwbHVnaW4gPSB0aGlzLnJlc3VsdC5sYXN0UGx1Z2luXG4gICAgdHJ5IHtcbiAgICAgIGlmIChub2RlKSBub2RlLmFkZFRvRXJyb3IoZXJyb3IpXG4gICAgICB0aGlzLmVycm9yID0gZXJyb3JcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSAnQ3NzU3ludGF4RXJyb3InICYmICFlcnJvci5wbHVnaW4pIHtcbiAgICAgICAgZXJyb3IucGx1Z2luID0gcGx1Z2luLnBvc3Rjc3NQbHVnaW5cbiAgICAgICAgZXJyb3Iuc2V0TWVzc2FnZSgpXG4gICAgICB9IGVsc2UgaWYgKHBsdWdpbi5wb3N0Y3NzVmVyc2lvbikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGxldCBwbHVnaW5OYW1lID0gcGx1Z2luLnBvc3Rjc3NQbHVnaW5cbiAgICAgICAgICBsZXQgcGx1Z2luVmVyID0gcGx1Z2luLnBvc3Rjc3NWZXJzaW9uXG4gICAgICAgICAgbGV0IHJ1bnRpbWVWZXIgPSB0aGlzLnJlc3VsdC5wcm9jZXNzb3IudmVyc2lvblxuICAgICAgICAgIGxldCBhID0gcGx1Z2luVmVyLnNwbGl0KCcuJylcbiAgICAgICAgICBsZXQgYiA9IHJ1bnRpbWVWZXIuc3BsaXQoJy4nKVxuXG4gICAgICAgICAgaWYgKGFbMF0gIT09IGJbMF0gfHwgcGFyc2VJbnQoYVsxXSkgPiBwYXJzZUludChiWzFdKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdVbmtub3duIGVycm9yIGZyb20gUG9zdENTUyBwbHVnaW4uIFlvdXIgY3VycmVudCBQb3N0Q1NTICcgK1xuICAgICAgICAgICAgICAgICd2ZXJzaW9uIGlzICcgK1xuICAgICAgICAgICAgICAgIHJ1bnRpbWVWZXIgK1xuICAgICAgICAgICAgICAgICcsIGJ1dCAnICtcbiAgICAgICAgICAgICAgICBwbHVnaW5OYW1lICtcbiAgICAgICAgICAgICAgICAnIHVzZXMgJyArXG4gICAgICAgICAgICAgICAgcGx1Z2luVmVyICtcbiAgICAgICAgICAgICAgICAnLiBQZXJoYXBzIHRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IgYmVsb3cuJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLyogYzggaWdub3JlIG5leHQgMyAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGlmIChjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JcbiAgfVxuXG4gIHByZXBhcmVWaXNpdG9ycygpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IHt9XG4gICAgbGV0IGFkZCA9IChwbHVnaW4sIHR5cGUsIGNiKSA9PiB7XG4gICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW3R5cGVdKSB0aGlzLmxpc3RlbmVyc1t0eXBlXSA9IFtdXG4gICAgICB0aGlzLmxpc3RlbmVyc1t0eXBlXS5wdXNoKFtwbHVnaW4sIGNiXSlcbiAgICB9XG4gICAgZm9yIChsZXQgcGx1Z2luIG9mIHRoaXMucGx1Z2lucykge1xuICAgICAgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAobGV0IGV2ZW50IGluIHBsdWdpbikge1xuICAgICAgICAgIGlmICghUExVR0lOX1BST1BTW2V2ZW50XSAmJiAvXltBLVpdLy50ZXN0KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVW5rbm93biBldmVudCAke2V2ZW50fSBpbiAke3BsdWdpbi5wb3N0Y3NzUGx1Z2lufS4gYCArXG4gICAgICAgICAgICAgICAgYFRyeSB0byB1cGRhdGUgUG9zdENTUyAoJHt0aGlzLnByb2Nlc3Nvci52ZXJzaW9ufSBub3cpLmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFOT1RfVklTSVRPUlNbZXZlbnRdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbltldmVudF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGZpbHRlciBpbiBwbHVnaW5bZXZlbnRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgICBhZGQocGx1Z2luLCBldmVudCwgcGx1Z2luW2V2ZW50XVtmaWx0ZXJdKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBhZGQoXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQgKyAnLScgKyBmaWx0ZXIudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luW2V2ZW50XVtmaWx0ZXJdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW5bZXZlbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGFkZChwbHVnaW4sIGV2ZW50LCBwbHVnaW5bZXZlbnRdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhhc0xpc3RlbmVyID0gT2JqZWN0LmtleXModGhpcy5saXN0ZW5lcnMpLmxlbmd0aCA+IDBcbiAgfVxuXG4gIGFzeW5jIHJ1bkFzeW5jKCkge1xuICAgIHRoaXMucGx1Z2luID0gMFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgcGx1Z2luID0gdGhpcy5wbHVnaW5zW2ldXG4gICAgICBsZXQgcHJvbWlzZSA9IHRoaXMucnVuT25Sb290KHBsdWdpbilcbiAgICAgIGlmIChpc1Byb21pc2UocHJvbWlzZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBwcm9taXNlXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5oYW5kbGVFcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJlcGFyZVZpc2l0b3JzKClcbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcikge1xuICAgICAgbGV0IHJvb3QgPSB0aGlzLnJlc3VsdC5yb290XG4gICAgICB3aGlsZSAoIXJvb3RbaXNDbGVhbl0pIHtcbiAgICAgICAgcm9vdFtpc0NsZWFuXSA9IHRydWVcbiAgICAgICAgbGV0IHN0YWNrID0gW3RvU3RhY2socm9vdCldXG4gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnZpc2l0VGljayhzdGFjaylcbiAgICAgICAgICBpZiAoaXNQcm9taXNlKHByb21pc2UpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBwcm9taXNlXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGxldCBub2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0ubm9kZVxuICAgICAgICAgICAgICB0aHJvdyB0aGlzLmhhbmRsZUVycm9yKGUsIG5vZGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5PbmNlRXhpdCkge1xuICAgICAgICBmb3IgKGxldCBbcGx1Z2luLCB2aXNpdG9yXSBvZiB0aGlzLmxpc3RlbmVycy5PbmNlRXhpdCkge1xuICAgICAgICAgIHRoaXMucmVzdWx0Lmxhc3RQbHVnaW4gPSBwbHVnaW5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJvb3QudHlwZSA9PT0gJ2RvY3VtZW50Jykge1xuICAgICAgICAgICAgICBsZXQgcm9vdHMgPSByb290Lm5vZGVzLm1hcChzdWJSb290ID0+XG4gICAgICAgICAgICAgICAgdmlzaXRvcihzdWJSb290LCB0aGlzLmhlbHBlcnMpXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyb290cylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGF3YWl0IHZpc2l0b3Iocm9vdCwgdGhpcy5oZWxwZXJzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMuaGFuZGxlRXJyb3IoZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NlZCA9IHRydWVcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdpZnkoKVxuICB9XG5cbiAgcnVuT25Sb290KHBsdWdpbikge1xuICAgIHRoaXMucmVzdWx0Lmxhc3RQbHVnaW4gPSBwbHVnaW5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdvYmplY3QnICYmIHBsdWdpbi5PbmNlKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3VsdC5yb290LnR5cGUgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgICAgICBsZXQgcm9vdHMgPSB0aGlzLnJlc3VsdC5yb290Lm5vZGVzLm1hcChyb290ID0+XG4gICAgICAgICAgICBwbHVnaW4uT25jZShyb290LCB0aGlzLmhlbHBlcnMpXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgaWYgKGlzUHJvbWlzZShyb290c1swXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyb290cylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcm9vdHNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwbHVnaW4uT25jZSh0aGlzLnJlc3VsdC5yb290LCB0aGlzLmhlbHBlcnMpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHBsdWdpbih0aGlzLnJlc3VsdC5yb290LCB0aGlzLnJlc3VsdClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5oYW5kbGVFcnJvcihlcnJvcilcbiAgICB9XG4gIH1cblxuICBzdHJpbmdpZnkoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHRocm93IHRoaXMuZXJyb3JcbiAgICBpZiAodGhpcy5zdHJpbmdpZmllZCkgcmV0dXJuIHRoaXMucmVzdWx0XG4gICAgdGhpcy5zdHJpbmdpZmllZCA9IHRydWVcblxuICAgIHRoaXMuc3luYygpXG5cbiAgICBsZXQgb3B0cyA9IHRoaXMucmVzdWx0Lm9wdHNcbiAgICBsZXQgc3RyID0gc3RyaW5naWZ5XG4gICAgaWYgKG9wdHMuc3ludGF4KSBzdHIgPSBvcHRzLnN5bnRheC5zdHJpbmdpZnlcbiAgICBpZiAob3B0cy5zdHJpbmdpZmllcikgc3RyID0gb3B0cy5zdHJpbmdpZmllclxuICAgIGlmIChzdHIuc3RyaW5naWZ5KSBzdHIgPSBzdHIuc3RyaW5naWZ5XG5cbiAgICBsZXQgbWFwID0gbmV3IE1hcEdlbmVyYXRvcihzdHIsIHRoaXMucmVzdWx0LnJvb3QsIHRoaXMucmVzdWx0Lm9wdHMpXG4gICAgbGV0IGRhdGEgPSBtYXAuZ2VuZXJhdGUoKVxuICAgIHRoaXMucmVzdWx0LmNzcyA9IGRhdGFbMF1cbiAgICB0aGlzLnJlc3VsdC5tYXAgPSBkYXRhWzFdXG5cbiAgICByZXR1cm4gdGhpcy5yZXN1bHRcbiAgfVxuXG4gIHN5bmMoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHRocm93IHRoaXMuZXJyb3JcbiAgICBpZiAodGhpcy5wcm9jZXNzZWQpIHJldHVybiB0aGlzLnJlc3VsdFxuICAgIHRoaXMucHJvY2Vzc2VkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZykge1xuICAgICAgdGhyb3cgdGhpcy5nZXRBc3luY0Vycm9yKClcbiAgICB9XG5cbiAgICBmb3IgKGxldCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICBsZXQgcHJvbWlzZSA9IHRoaXMucnVuT25Sb290KHBsdWdpbilcbiAgICAgIGlmIChpc1Byb21pc2UocHJvbWlzZSkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5nZXRBc3luY0Vycm9yKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByZXBhcmVWaXNpdG9ycygpXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXIpIHtcbiAgICAgIGxldCByb290ID0gdGhpcy5yZXN1bHQucm9vdFxuICAgICAgd2hpbGUgKCFyb290W2lzQ2xlYW5dKSB7XG4gICAgICAgIHJvb3RbaXNDbGVhbl0gPSB0cnVlXG4gICAgICAgIHRoaXMud2Fsa1N5bmMocm9vdClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5PbmNlRXhpdCkge1xuICAgICAgICBpZiAocm9vdC50eXBlID09PSAnZG9jdW1lbnQnKSB7XG4gICAgICAgICAgZm9yIChsZXQgc3ViUm9vdCBvZiByb290Lm5vZGVzKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0U3luYyh0aGlzLmxpc3RlbmVycy5PbmNlRXhpdCwgc3ViUm9vdClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aXNpdFN5bmModGhpcy5saXN0ZW5lcnMuT25jZUV4aXQsIHJvb3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXN1bHRcbiAgfVxuXG4gIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoJ2Zyb20nIGluIHRoaXMub3B0cykpIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgJ1dpdGhvdXQgYGZyb21gIG9wdGlvbiBQb3N0Q1NTIGNvdWxkIGdlbmVyYXRlIHdyb25nIHNvdXJjZSBtYXAgJyArXG4gICAgICAgICAgICAnYW5kIHdpbGwgbm90IGZpbmQgQnJvd3NlcnNsaXN0IGNvbmZpZy4gU2V0IGl0IHRvIENTUyBmaWxlIHBhdGggJyArXG4gICAgICAgICAgICAnb3IgdG8gYHVuZGVmaW5lZGAgdG8gcHJldmVudCB0aGlzIHdhcm5pbmcuJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFzeW5jKCkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmNzc1xuICB9XG5cbiAgdmlzaXRTeW5jKHZpc2l0b3JzLCBub2RlKSB7XG4gICAgZm9yIChsZXQgW3BsdWdpbiwgdmlzaXRvcl0gb2YgdmlzaXRvcnMpIHtcbiAgICAgIHRoaXMucmVzdWx0Lmxhc3RQbHVnaW4gPSBwbHVnaW5cbiAgICAgIGxldCBwcm9taXNlXG4gICAgICB0cnkge1xuICAgICAgICBwcm9taXNlID0gdmlzaXRvcihub2RlLCB0aGlzLmhlbHBlcnMpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IHRoaXMuaGFuZGxlRXJyb3IoZSwgbm9kZS5wcm94eU9mKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ3Jvb3QnICYmIG5vZGUudHlwZSAhPT0gJ2RvY3VtZW50JyAmJiAhbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChpc1Byb21pc2UocHJvbWlzZSkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5nZXRBc3luY0Vycm9yKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2aXNpdFRpY2soc3RhY2spIHtcbiAgICBsZXQgdmlzaXQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXVxuICAgIGxldCB7IG5vZGUsIHZpc2l0b3JzIH0gPSB2aXNpdFxuXG4gICAgaWYgKG5vZGUudHlwZSAhPT0gJ3Jvb3QnICYmIG5vZGUudHlwZSAhPT0gJ2RvY3VtZW50JyAmJiAhbm9kZS5wYXJlbnQpIHtcbiAgICAgIHN0YWNrLnBvcCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodmlzaXRvcnMubGVuZ3RoID4gMCAmJiB2aXNpdC52aXNpdG9ySW5kZXggPCB2aXNpdG9ycy5sZW5ndGgpIHtcbiAgICAgIGxldCBbcGx1Z2luLCB2aXNpdG9yXSA9IHZpc2l0b3JzW3Zpc2l0LnZpc2l0b3JJbmRleF1cbiAgICAgIHZpc2l0LnZpc2l0b3JJbmRleCArPSAxXG4gICAgICBpZiAodmlzaXQudmlzaXRvckluZGV4ID09PSB2aXNpdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgdmlzaXQudmlzaXRvcnMgPSBbXVxuICAgICAgICB2aXNpdC52aXNpdG9ySW5kZXggPSAwXG4gICAgICB9XG4gICAgICB0aGlzLnJlc3VsdC5sYXN0UGx1Z2luID0gcGx1Z2luXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmlzaXRvcihub2RlLnRvUHJveHkoKSwgdGhpcy5oZWxwZXJzKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyB0aGlzLmhhbmRsZUVycm9yKGUsIG5vZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZpc2l0Lml0ZXJhdG9yICE9PSAwKSB7XG4gICAgICBsZXQgaXRlcmF0b3IgPSB2aXNpdC5pdGVyYXRvclxuICAgICAgbGV0IGNoaWxkXG4gICAgICB3aGlsZSAoKGNoaWxkID0gbm9kZS5ub2Rlc1tub2RlLmluZGV4ZXNbaXRlcmF0b3JdXSkpIHtcbiAgICAgICAgbm9kZS5pbmRleGVzW2l0ZXJhdG9yXSArPSAxXG4gICAgICAgIGlmICghY2hpbGRbaXNDbGVhbl0pIHtcbiAgICAgICAgICBjaGlsZFtpc0NsZWFuXSA9IHRydWVcbiAgICAgICAgICBzdGFjay5wdXNoKHRvU3RhY2soY2hpbGQpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2aXNpdC5pdGVyYXRvciA9IDBcbiAgICAgIGRlbGV0ZSBub2RlLmluZGV4ZXNbaXRlcmF0b3JdXG4gICAgfVxuXG4gICAgbGV0IGV2ZW50cyA9IHZpc2l0LmV2ZW50c1xuICAgIHdoaWxlICh2aXNpdC5ldmVudEluZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgICAgbGV0IGV2ZW50ID0gZXZlbnRzW3Zpc2l0LmV2ZW50SW5kZXhdXG4gICAgICB2aXNpdC5ldmVudEluZGV4ICs9IDFcbiAgICAgIGlmIChldmVudCA9PT0gQ0hJTERSRU4pIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMgJiYgbm9kZS5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICBub2RlW2lzQ2xlYW5dID0gdHJ1ZVxuICAgICAgICAgIHZpc2l0Lml0ZXJhdG9yID0gbm9kZS5nZXRJdGVyYXRvcigpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICB2aXNpdC52aXNpdG9ycyA9IHRoaXMubGlzdGVuZXJzW2V2ZW50XVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sucG9wKClcbiAgfVxuXG4gIHdhbGtTeW5jKG5vZGUpIHtcbiAgICBub2RlW2lzQ2xlYW5dID0gdHJ1ZVxuICAgIGxldCBldmVudHMgPSBnZXRFdmVudHMobm9kZSlcbiAgICBmb3IgKGxldCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgIGlmIChldmVudCA9PT0gQ0hJTERSRU4pIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMpIHtcbiAgICAgICAgICBub2RlLmVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGlsZFtpc0NsZWFuXSkgdGhpcy53YWxrU3luYyhjaGlsZClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdmlzaXRvcnMgPSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgaWYgKHZpc2l0b3JzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudmlzaXRTeW5jKHZpc2l0b3JzLCBub2RlLnRvUHJveHkoKSkpIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2FybmluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3luYygpLndhcm5pbmdzKClcbiAgfVxufVxuXG5MYXp5UmVzdWx0LnJlZ2lzdGVyUG9zdGNzcyA9IGRlcGVuZGFudCA9PiB7XG4gIHBvc3Rjc3MgPSBkZXBlbmRhbnRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBMYXp5UmVzdWx0XG5MYXp5UmVzdWx0LmRlZmF1bHQgPSBMYXp5UmVzdWx0XG5cblJvb3QucmVnaXN0ZXJMYXp5UmVzdWx0KExhenlSZXN1bHQpXG5Eb2N1bWVudC5yZWdpc3RlckxhenlSZXN1bHQoTGF6eVJlc3VsdClcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgbGlzdCA9IHtcbiAgY29tbWEoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGxpc3Quc3BsaXQoc3RyaW5nLCBbJywnXSwgdHJ1ZSlcbiAgfSxcblxuICBzcGFjZShzdHJpbmcpIHtcbiAgICBsZXQgc3BhY2VzID0gWycgJywgJ1xcbicsICdcXHQnXVxuICAgIHJldHVybiBsaXN0LnNwbGl0KHN0cmluZywgc3BhY2VzKVxuICB9LFxuXG4gIHNwbGl0KHN0cmluZywgc2VwYXJhdG9ycywgbGFzdCkge1xuICAgIGxldCBhcnJheSA9IFtdXG4gICAgbGV0IGN1cnJlbnQgPSAnJ1xuICAgIGxldCBzcGxpdCA9IGZhbHNlXG5cbiAgICBsZXQgZnVuYyA9IDBcbiAgICBsZXQgaW5RdW90ZSA9IGZhbHNlXG4gICAgbGV0IHByZXZRdW90ZSA9ICcnXG4gICAgbGV0IGVzY2FwZSA9IGZhbHNlXG5cbiAgICBmb3IgKGxldCBsZXR0ZXIgb2Ygc3RyaW5nKSB7XG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIGVzY2FwZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKGxldHRlciA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGVzY2FwZSA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoaW5RdW90ZSkge1xuICAgICAgICBpZiAobGV0dGVyID09PSBwcmV2UXVvdGUpIHtcbiAgICAgICAgICBpblF1b3RlID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsZXR0ZXIgPT09ICdcIicgfHwgbGV0dGVyID09PSBcIidcIikge1xuICAgICAgICBpblF1b3RlID0gdHJ1ZVxuICAgICAgICBwcmV2UXVvdGUgPSBsZXR0ZXJcbiAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSAnKCcpIHtcbiAgICAgICAgZnVuYyArPSAxXG4gICAgICB9IGVsc2UgaWYgKGxldHRlciA9PT0gJyknKSB7XG4gICAgICAgIGlmIChmdW5jID4gMCkgZnVuYyAtPSAxXG4gICAgICB9IGVsc2UgaWYgKGZ1bmMgPT09IDApIHtcbiAgICAgICAgaWYgKHNlcGFyYXRvcnMuaW5jbHVkZXMobGV0dGVyKSkgc3BsaXQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzcGxpdCkge1xuICAgICAgICBpZiAoY3VycmVudCAhPT0gJycpIGFycmF5LnB1c2goY3VycmVudC50cmltKCkpXG4gICAgICAgIGN1cnJlbnQgPSAnJ1xuICAgICAgICBzcGxpdCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50ICs9IGxldHRlclxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsYXN0IHx8IGN1cnJlbnQgIT09ICcnKSBhcnJheS5wdXNoKGN1cnJlbnQudHJpbSgpKVxuICAgIHJldHVybiBhcnJheVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdFxubGlzdC5kZWZhdWx0ID0gbGlzdFxuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCB7IGRpcm5hbWUsIHJlbGF0aXZlLCByZXNvbHZlLCBzZXAgfSA9IHJlcXVpcmUoJ3BhdGgnKVxubGV0IHsgU291cmNlTWFwQ29uc3VtZXIsIFNvdXJjZU1hcEdlbmVyYXRvciB9ID0gcmVxdWlyZSgnc291cmNlLW1hcC1qcycpXG5sZXQgeyBwYXRoVG9GaWxlVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuXG5sZXQgSW5wdXQgPSByZXF1aXJlKCcuL2lucHV0JylcblxubGV0IHNvdXJjZU1hcEF2YWlsYWJsZSA9IEJvb2xlYW4oU291cmNlTWFwQ29uc3VtZXIgJiYgU291cmNlTWFwR2VuZXJhdG9yKVxubGV0IHBhdGhBdmFpbGFibGUgPSBCb29sZWFuKGRpcm5hbWUgJiYgcmVzb2x2ZSAmJiByZWxhdGl2ZSAmJiBzZXApXG5cbmNsYXNzIE1hcEdlbmVyYXRvciB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZ2lmeSwgcm9vdCwgb3B0cywgY3NzU3RyaW5nKSB7XG4gICAgdGhpcy5zdHJpbmdpZnkgPSBzdHJpbmdpZnlcbiAgICB0aGlzLm1hcE9wdHMgPSBvcHRzLm1hcCB8fCB7fVxuICAgIHRoaXMucm9vdCA9IHJvb3RcbiAgICB0aGlzLm9wdHMgPSBvcHRzXG4gICAgdGhpcy5jc3MgPSBjc3NTdHJpbmdcbiAgICB0aGlzLm9yaWdpbmFsQ1NTID0gY3NzU3RyaW5nXG4gICAgdGhpcy51c2VzRmlsZVVybHMgPSAhdGhpcy5tYXBPcHRzLmZyb20gJiYgdGhpcy5tYXBPcHRzLmFic29sdXRlXG5cbiAgICB0aGlzLm1lbW9pemVkRmlsZVVSTHMgPSBuZXcgTWFwKClcbiAgICB0aGlzLm1lbW9pemVkUGF0aHMgPSBuZXcgTWFwKClcbiAgICB0aGlzLm1lbW9pemVkVVJMcyA9IG5ldyBNYXAoKVxuICB9XG5cbiAgYWRkQW5ub3RhdGlvbigpIHtcbiAgICBsZXQgY29udGVudFxuXG4gICAgaWYgKHRoaXMuaXNJbmxpbmUoKSkge1xuICAgICAgY29udGVudCA9XG4gICAgICAgICdkYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCcgKyB0aGlzLnRvQmFzZTY0KHRoaXMubWFwLnRvU3RyaW5nKCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5tYXBPcHRzLmFubm90YXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5tYXBPcHRzLmFubm90YXRpb25cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm1hcE9wdHMuYW5ub3RhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29udGVudCA9IHRoaXMubWFwT3B0cy5hbm5vdGF0aW9uKHRoaXMub3B0cy50bywgdGhpcy5yb290KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5vdXRwdXRGaWxlKCkgKyAnLm1hcCdcbiAgICB9XG4gICAgbGV0IGVvbCA9ICdcXG4nXG4gICAgaWYgKHRoaXMuY3NzLmluY2x1ZGVzKCdcXHJcXG4nKSkgZW9sID0gJ1xcclxcbidcblxuICAgIHRoaXMuY3NzICs9IGVvbCArICcvKiMgc291cmNlTWFwcGluZ1VSTD0nICsgY29udGVudCArICcgKi8nXG4gIH1cblxuICBhcHBseVByZXZNYXBzKCkge1xuICAgIGZvciAobGV0IHByZXYgb2YgdGhpcy5wcmV2aW91cygpKSB7XG4gICAgICBsZXQgZnJvbSA9IHRoaXMudG9VcmwodGhpcy5wYXRoKHByZXYuZmlsZSkpXG4gICAgICBsZXQgcm9vdCA9IHByZXYucm9vdCB8fCBkaXJuYW1lKHByZXYuZmlsZSlcbiAgICAgIGxldCBtYXBcblxuICAgICAgaWYgKHRoaXMubWFwT3B0cy5zb3VyY2VzQ29udGVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgbWFwID0gbmV3IFNvdXJjZU1hcENvbnN1bWVyKHByZXYudGV4dClcbiAgICAgICAgaWYgKG1hcC5zb3VyY2VzQ29udGVudCkge1xuICAgICAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwID0gcHJldi5jb25zdW1lcigpXG4gICAgICB9XG5cbiAgICAgIHRoaXMubWFwLmFwcGx5U291cmNlTWFwKG1hcCwgZnJvbSwgdGhpcy50b1VybCh0aGlzLnBhdGgocm9vdCkpKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyQW5ub3RhdGlvbigpIHtcbiAgICBpZiAodGhpcy5tYXBPcHRzLmFubm90YXRpb24gPT09IGZhbHNlKSByZXR1cm5cblxuICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgIGxldCBub2RlXG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5yb290Lm5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLnJvb3Qubm9kZXNbaV1cbiAgICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ2NvbW1lbnQnKSBjb250aW51ZVxuICAgICAgICBpZiAobm9kZS50ZXh0LnN0YXJ0c1dpdGgoJyMgc291cmNlTWFwcGluZ1VSTD0nKSkge1xuICAgICAgICAgIHRoaXMucm9vdC5yZW1vdmVDaGlsZChpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmNzcykge1xuICAgICAgdGhpcy5jc3MgPSB0aGlzLmNzcy5yZXBsYWNlKC9cXG4qXFwvXFwqI1tcXFNcXHNdKj9cXCpcXC8kL2dtLCAnJylcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZSgpIHtcbiAgICB0aGlzLmNsZWFyQW5ub3RhdGlvbigpXG4gICAgaWYgKHBhdGhBdmFpbGFibGUgJiYgc291cmNlTWFwQXZhaWxhYmxlICYmIHRoaXMuaXNNYXAoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVNYXAoKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcmVzdWx0ID0gJydcbiAgICAgIHRoaXMuc3RyaW5naWZ5KHRoaXMucm9vdCwgaSA9PiB7XG4gICAgICAgIHJlc3VsdCArPSBpXG4gICAgICB9KVxuICAgICAgcmV0dXJuIFtyZXN1bHRdXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVNYXAoKSB7XG4gICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZVN0cmluZygpXG4gICAgfSBlbHNlIGlmICh0aGlzLnByZXZpb3VzKCkubGVuZ3RoID09PSAxKSB7XG4gICAgICBsZXQgcHJldiA9IHRoaXMucHJldmlvdXMoKVswXS5jb25zdW1lcigpXG4gICAgICBwcmV2LmZpbGUgPSB0aGlzLm91dHB1dEZpbGUoKVxuICAgICAgdGhpcy5tYXAgPSBTb3VyY2VNYXBHZW5lcmF0b3IuZnJvbVNvdXJjZU1hcChwcmV2LCB7XG4gICAgICAgIGlnbm9yZUludmFsaWRNYXBwaW5nOiB0cnVlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcCA9IG5ldyBTb3VyY2VNYXBHZW5lcmF0b3Ioe1xuICAgICAgICBmaWxlOiB0aGlzLm91dHB1dEZpbGUoKSxcbiAgICAgICAgaWdub3JlSW52YWxpZE1hcHBpbmc6IHRydWVcbiAgICAgIH0pXG4gICAgICB0aGlzLm1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgZ2VuZXJhdGVkOiB7IGNvbHVtbjogMCwgbGluZTogMSB9LFxuICAgICAgICBvcmlnaW5hbDogeyBjb2x1bW46IDAsIGxpbmU6IDEgfSxcbiAgICAgICAgc291cmNlOiB0aGlzLm9wdHMuZnJvbVxuICAgICAgICAgID8gdGhpcy50b1VybCh0aGlzLnBhdGgodGhpcy5vcHRzLmZyb20pKVxuICAgICAgICAgIDogJzxubyBzb3VyY2U+J1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NvdXJjZXNDb250ZW50KCkpIHRoaXMuc2V0U291cmNlc0NvbnRlbnQoKVxuICAgIGlmICh0aGlzLnJvb3QgJiYgdGhpcy5wcmV2aW91cygpLmxlbmd0aCA+IDApIHRoaXMuYXBwbHlQcmV2TWFwcygpXG4gICAgaWYgKHRoaXMuaXNBbm5vdGF0aW9uKCkpIHRoaXMuYWRkQW5ub3RhdGlvbigpXG5cbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICByZXR1cm4gW3RoaXMuY3NzXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3RoaXMuY3NzLCB0aGlzLm1hcF1cbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZVN0cmluZygpIHtcbiAgICB0aGlzLmNzcyA9ICcnXG4gICAgdGhpcy5tYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IHRoaXMub3V0cHV0RmlsZSgpLFxuICAgICAgaWdub3JlSW52YWxpZE1hcHBpbmc6IHRydWVcbiAgICB9KVxuXG4gICAgbGV0IGxpbmUgPSAxXG4gICAgbGV0IGNvbHVtbiA9IDFcblxuICAgIGxldCBub1NvdXJjZSA9ICc8bm8gc291cmNlPidcbiAgICBsZXQgbWFwcGluZyA9IHtcbiAgICAgIGdlbmVyYXRlZDogeyBjb2x1bW46IDAsIGxpbmU6IDAgfSxcbiAgICAgIG9yaWdpbmFsOiB7IGNvbHVtbjogMCwgbGluZTogMCB9LFxuICAgICAgc291cmNlOiAnJ1xuICAgIH1cblxuICAgIGxldCBsYXN0LCBsaW5lc1xuICAgIHRoaXMuc3RyaW5naWZ5KHRoaXMucm9vdCwgKHN0ciwgbm9kZSwgdHlwZSkgPT4ge1xuICAgICAgdGhpcy5jc3MgKz0gc3RyXG5cbiAgICAgIGlmIChub2RlICYmIHR5cGUgIT09ICdlbmQnKSB7XG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkLmxpbmUgPSBsaW5lXG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkLmNvbHVtbiA9IGNvbHVtbiAtIDFcbiAgICAgICAgaWYgKG5vZGUuc291cmNlICYmIG5vZGUuc291cmNlLnN0YXJ0KSB7XG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB0aGlzLnNvdXJjZVBhdGgobm9kZSlcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsLmxpbmUgPSBub2RlLnNvdXJjZS5zdGFydC5saW5lXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbC5jb2x1bW4gPSBub2RlLnNvdXJjZS5zdGFydC5jb2x1bW4gLSAxXG4gICAgICAgICAgdGhpcy5tYXAuYWRkTWFwcGluZyhtYXBwaW5nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gbm9Tb3VyY2VcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsLmxpbmUgPSAxXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbC5jb2x1bW4gPSAwXG4gICAgICAgICAgdGhpcy5tYXAuYWRkTWFwcGluZyhtYXBwaW5nKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpbmVzID0gc3RyLm1hdGNoKC9cXG4vZylcbiAgICAgIGlmIChsaW5lcykge1xuICAgICAgICBsaW5lICs9IGxpbmVzLmxlbmd0aFxuICAgICAgICBsYXN0ID0gc3RyLmxhc3RJbmRleE9mKCdcXG4nKVxuICAgICAgICBjb2x1bW4gPSBzdHIubGVuZ3RoIC0gbGFzdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uICs9IHN0ci5sZW5ndGhcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgJiYgdHlwZSAhPT0gJ3N0YXJ0Jykge1xuICAgICAgICBsZXQgcCA9IG5vZGUucGFyZW50IHx8IHsgcmF3czoge30gfVxuICAgICAgICBsZXQgY2hpbGRsZXNzID1cbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdkZWNsJyB8fCAobm9kZS50eXBlID09PSAnYXRydWxlJyAmJiAhbm9kZS5ub2RlcylcbiAgICAgICAgaWYgKCFjaGlsZGxlc3MgfHwgbm9kZSAhPT0gcC5sYXN0IHx8IHAucmF3cy5zZW1pY29sb24pIHtcbiAgICAgICAgICBpZiAobm9kZS5zb3VyY2UgJiYgbm9kZS5zb3VyY2UuZW5kKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHRoaXMuc291cmNlUGF0aChub2RlKVxuICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbC5saW5lID0gbm9kZS5zb3VyY2UuZW5kLmxpbmVcbiAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwuY29sdW1uID0gbm9kZS5zb3VyY2UuZW5kLmNvbHVtbiAtIDFcbiAgICAgICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkLmxpbmUgPSBsaW5lXG4gICAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZC5jb2x1bW4gPSBjb2x1bW4gLSAyXG4gICAgICAgICAgICB0aGlzLm1hcC5hZGRNYXBwaW5nKG1hcHBpbmcpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gbm9Tb3VyY2VcbiAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwubGluZSA9IDFcbiAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwuY29sdW1uID0gMFxuICAgICAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWQubGluZSA9IGxpbmVcbiAgICAgICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkLmNvbHVtbiA9IGNvbHVtbiAtIDFcbiAgICAgICAgICAgIHRoaXMubWFwLmFkZE1hcHBpbmcobWFwcGluZylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaXNBbm5vdGF0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5tYXBPcHRzLmFubm90YXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXBPcHRzLmFubm90YXRpb25cbiAgICB9XG4gICAgaWYgKHRoaXMucHJldmlvdXMoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzKCkuc29tZShpID0+IGkuYW5ub3RhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlzSW5saW5lKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5tYXBPcHRzLmlubGluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hcE9wdHMuaW5saW5lXG4gICAgfVxuXG4gICAgbGV0IGFubm90YXRpb24gPSB0aGlzLm1hcE9wdHMuYW5ub3RhdGlvblxuICAgIGlmICh0eXBlb2YgYW5ub3RhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgYW5ub3RhdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJldmlvdXMoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzKCkuc29tZShpID0+IGkuaW5saW5lKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaXNNYXAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMubWFwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICEhdGhpcy5vcHRzLm1hcFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcmV2aW91cygpLmxlbmd0aCA+IDBcbiAgfVxuXG4gIGlzU291cmNlc0NvbnRlbnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm1hcE9wdHMuc291cmNlc0NvbnRlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXBPcHRzLnNvdXJjZXNDb250ZW50XG4gICAgfVxuICAgIGlmICh0aGlzLnByZXZpb3VzKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2aW91cygpLnNvbWUoaSA9PiBpLndpdGhDb250ZW50KCkpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBvdXRwdXRGaWxlKCkge1xuICAgIGlmICh0aGlzLm9wdHMudG8pIHtcbiAgICAgIHJldHVybiB0aGlzLnBhdGgodGhpcy5vcHRzLnRvKVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmZyb20pIHtcbiAgICAgIHJldHVybiB0aGlzLnBhdGgodGhpcy5vcHRzLmZyb20pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAndG8uY3NzJ1xuICAgIH1cbiAgfVxuXG4gIHBhdGgoZmlsZSkge1xuICAgIGlmICh0aGlzLm1hcE9wdHMuYWJzb2x1dGUpIHJldHVybiBmaWxlXG4gICAgaWYgKGZpbGUuY2hhckNvZGVBdCgwKSA9PT0gNjAgLyogYDxgICovKSByZXR1cm4gZmlsZVxuICAgIGlmICgvXlxcdys6XFwvXFwvLy50ZXN0KGZpbGUpKSByZXR1cm4gZmlsZVxuICAgIGxldCBjYWNoZWQgPSB0aGlzLm1lbW9pemVkUGF0aHMuZ2V0KGZpbGUpXG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZFxuXG4gICAgbGV0IGZyb20gPSB0aGlzLm9wdHMudG8gPyBkaXJuYW1lKHRoaXMub3B0cy50bykgOiAnLidcblxuICAgIGlmICh0eXBlb2YgdGhpcy5tYXBPcHRzLmFubm90YXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcm9tID0gZGlybmFtZShyZXNvbHZlKGZyb20sIHRoaXMubWFwT3B0cy5hbm5vdGF0aW9uKSlcbiAgICB9XG5cbiAgICBsZXQgcGF0aCA9IHJlbGF0aXZlKGZyb20sIGZpbGUpXG4gICAgdGhpcy5tZW1vaXplZFBhdGhzLnNldChmaWxlLCBwYXRoKVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIHByZXZpb3VzKCkge1xuICAgIGlmICghdGhpcy5wcmV2aW91c01hcHMpIHtcbiAgICAgIHRoaXMucHJldmlvdXNNYXBzID0gW11cbiAgICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgICAgdGhpcy5yb290LndhbGsobm9kZSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuc291cmNlICYmIG5vZGUuc291cmNlLmlucHV0Lm1hcCkge1xuICAgICAgICAgICAgbGV0IG1hcCA9IG5vZGUuc291cmNlLmlucHV0Lm1hcFxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZpb3VzTWFwcy5pbmNsdWRlcyhtYXApKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJldmlvdXNNYXBzLnB1c2gobWFwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpbnB1dCA9IG5ldyBJbnB1dCh0aGlzLm9yaWdpbmFsQ1NTLCB0aGlzLm9wdHMpXG4gICAgICAgIGlmIChpbnB1dC5tYXApIHRoaXMucHJldmlvdXNNYXBzLnB1c2goaW5wdXQubWFwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzTWFwc1xuICB9XG5cbiAgc2V0U291cmNlc0NvbnRlbnQoKSB7XG4gICAgbGV0IGFscmVhZHkgPSB7fVxuICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgIHRoaXMucm9vdC53YWxrKG5vZGUgPT4ge1xuICAgICAgICBpZiAobm9kZS5zb3VyY2UpIHtcbiAgICAgICAgICBsZXQgZnJvbSA9IG5vZGUuc291cmNlLmlucHV0LmZyb21cbiAgICAgICAgICBpZiAoZnJvbSAmJiAhYWxyZWFkeVtmcm9tXSkge1xuICAgICAgICAgICAgYWxyZWFkeVtmcm9tXSA9IHRydWVcbiAgICAgICAgICAgIGxldCBmcm9tVXJsID0gdGhpcy51c2VzRmlsZVVybHNcbiAgICAgICAgICAgICAgPyB0aGlzLnRvRmlsZVVybChmcm9tKVxuICAgICAgICAgICAgICA6IHRoaXMudG9VcmwodGhpcy5wYXRoKGZyb20pKVxuICAgICAgICAgICAgdGhpcy5tYXAuc2V0U291cmNlQ29udGVudChmcm9tVXJsLCBub2RlLnNvdXJjZS5pbnB1dC5jc3MpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodGhpcy5jc3MpIHtcbiAgICAgIGxldCBmcm9tID0gdGhpcy5vcHRzLmZyb21cbiAgICAgICAgPyB0aGlzLnRvVXJsKHRoaXMucGF0aCh0aGlzLm9wdHMuZnJvbSkpXG4gICAgICAgIDogJzxubyBzb3VyY2U+J1xuICAgICAgdGhpcy5tYXAuc2V0U291cmNlQ29udGVudChmcm9tLCB0aGlzLmNzcylcbiAgICB9XG4gIH1cblxuICBzb3VyY2VQYXRoKG5vZGUpIHtcbiAgICBpZiAodGhpcy5tYXBPcHRzLmZyb20pIHtcbiAgICAgIHJldHVybiB0aGlzLnRvVXJsKHRoaXMubWFwT3B0cy5mcm9tKVxuICAgIH0gZWxzZSBpZiAodGhpcy51c2VzRmlsZVVybHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvRmlsZVVybChub2RlLnNvdXJjZS5pbnB1dC5mcm9tKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50b1VybCh0aGlzLnBhdGgobm9kZS5zb3VyY2UuaW5wdXQuZnJvbSkpXG4gICAgfVxuICB9XG5cbiAgdG9CYXNlNjQoc3RyKSB7XG4gICAgaWYgKEJ1ZmZlcikge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0cikudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3aW5kb3cuYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpXG4gICAgfVxuICB9XG5cbiAgdG9GaWxlVXJsKHBhdGgpIHtcbiAgICBsZXQgY2FjaGVkID0gdGhpcy5tZW1vaXplZEZpbGVVUkxzLmdldChwYXRoKVxuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWRcblxuICAgIGlmIChwYXRoVG9GaWxlVVJMKSB7XG4gICAgICBsZXQgZmlsZVVSTCA9IHBhdGhUb0ZpbGVVUkwocGF0aCkudG9TdHJpbmcoKVxuICAgICAgdGhpcy5tZW1vaXplZEZpbGVVUkxzLnNldChwYXRoLCBmaWxlVVJMKVxuXG4gICAgICByZXR1cm4gZmlsZVVSTFxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgbWFwLmFic29sdXRlYCBvcHRpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIFBvc3RDU1MgYnVpbGQnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgdG9VcmwocGF0aCkge1xuICAgIGxldCBjYWNoZWQgPSB0aGlzLm1lbW9pemVkVVJMcy5nZXQocGF0aClcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkXG5cbiAgICBpZiAoc2VwID09PSAnXFxcXCcpIHtcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIH1cblxuICAgIGxldCB1cmwgPSBlbmNvZGVVUkkocGF0aCkucmVwbGFjZSgvWyM/XS9nLCBlbmNvZGVVUklDb21wb25lbnQpXG4gICAgdGhpcy5tZW1vaXplZFVSTHMuc2V0KHBhdGgsIHVybClcblxuICAgIHJldHVybiB1cmxcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcEdlbmVyYXRvclxuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCBNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL21hcC1nZW5lcmF0b3InKVxubGV0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBSZXN1bHQgPSByZXF1aXJlKCcuL3Jlc3VsdCcpXG5sZXQgc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9zdHJpbmdpZnknKVxubGV0IHdhcm5PbmNlID0gcmVxdWlyZSgnLi93YXJuLW9uY2UnKVxuXG5jbGFzcyBOb1dvcmtSZXN1bHQge1xuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQuY3NzXG4gIH1cblxuICBnZXQgY3NzKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdC5jc3NcbiAgfVxuXG4gIGdldCBtYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0Lm1hcFxuICB9XG5cbiAgZ2V0IG1lc3NhZ2VzKCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgZ2V0IG9wdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0Lm9wdHNcbiAgfVxuXG4gIGdldCBwcm9jZXNzb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0LnByb2Nlc3NvclxuICB9XG5cbiAgZ2V0IHJvb3QoKSB7XG4gICAgaWYgKHRoaXMuX3Jvb3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yb290XG4gICAgfVxuXG4gICAgbGV0IHJvb3RcbiAgICBsZXQgcGFyc2VyID0gcGFyc2VcblxuICAgIHRyeSB7XG4gICAgICByb290ID0gcGFyc2VyKHRoaXMuX2NzcywgdGhpcy5fb3B0cylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvciA9IGVycm9yXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuZXJyb3JcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcm9vdCA9IHJvb3RcbiAgICAgIHJldHVybiByb290XG4gICAgfVxuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTm9Xb3JrUmVzdWx0J1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvY2Vzc29yLCBjc3MsIG9wdHMpIHtcbiAgICBjc3MgPSBjc3MudG9TdHJpbmcoKVxuICAgIHRoaXMuc3RyaW5naWZpZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fcHJvY2Vzc29yID0gcHJvY2Vzc29yXG4gICAgdGhpcy5fY3NzID0gY3NzXG4gICAgdGhpcy5fb3B0cyA9IG9wdHNcbiAgICB0aGlzLl9tYXAgPSB1bmRlZmluZWRcbiAgICBsZXQgcm9vdFxuXG4gICAgbGV0IHN0ciA9IHN0cmluZ2lmeVxuICAgIHRoaXMucmVzdWx0ID0gbmV3IFJlc3VsdCh0aGlzLl9wcm9jZXNzb3IsIHJvb3QsIHRoaXMuX29wdHMpXG4gICAgdGhpcy5yZXN1bHQuY3NzID0gY3NzXG5cbiAgICBsZXQgc2VsZiA9IHRoaXNcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5yZXN1bHQsICdyb290Jywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gc2VsZi5yb290XG4gICAgICB9XG4gICAgfSlcblxuICAgIGxldCBtYXAgPSBuZXcgTWFwR2VuZXJhdG9yKHN0ciwgcm9vdCwgdGhpcy5fb3B0cywgY3NzKVxuICAgIGlmIChtYXAuaXNNYXAoKSkge1xuICAgICAgbGV0IFtnZW5lcmF0ZWRDU1MsIGdlbmVyYXRlZE1hcF0gPSBtYXAuZ2VuZXJhdGUoKVxuICAgICAgaWYgKGdlbmVyYXRlZENTUykge1xuICAgICAgICB0aGlzLnJlc3VsdC5jc3MgPSBnZW5lcmF0ZWRDU1NcbiAgICAgIH1cbiAgICAgIGlmIChnZW5lcmF0ZWRNYXApIHtcbiAgICAgICAgdGhpcy5yZXN1bHQubWFwID0gZ2VuZXJhdGVkTWFwXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5jbGVhckFubm90YXRpb24oKVxuICAgICAgdGhpcy5yZXN1bHQuY3NzID0gbWFwLmNzc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jKCkge1xuICAgIGlmICh0aGlzLmVycm9yKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5lcnJvcilcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMucmVzdWx0KVxuICB9XG5cbiAgY2F0Y2gob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jKCkuY2F0Y2gob25SZWplY3RlZClcbiAgfVxuXG4gIGZpbmFsbHkob25GaW5hbGx5KSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmMoKS50aGVuKG9uRmluYWxseSwgb25GaW5hbGx5KVxuICB9XG5cbiAgc3luYygpIHtcbiAgICBpZiAodGhpcy5lcnJvcikgdGhyb3cgdGhpcy5lcnJvclxuICAgIHJldHVybiB0aGlzLnJlc3VsdFxuICB9XG5cbiAgdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoISgnZnJvbScgaW4gdGhpcy5fb3B0cykpIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgJ1dpdGhvdXQgYGZyb21gIG9wdGlvbiBQb3N0Q1NTIGNvdWxkIGdlbmVyYXRlIHdyb25nIHNvdXJjZSBtYXAgJyArXG4gICAgICAgICAgICAnYW5kIHdpbGwgbm90IGZpbmQgQnJvd3NlcnNsaXN0IGNvbmZpZy4gU2V0IGl0IHRvIENTUyBmaWxlIHBhdGggJyArXG4gICAgICAgICAgICAnb3IgdG8gYHVuZGVmaW5lZGAgdG8gcHJldmVudCB0aGlzIHdhcm5pbmcuJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXN5bmMoKS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nzc1xuICB9XG5cbiAgd2FybmluZ3MoKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBOb1dvcmtSZXN1bHRcbk5vV29ya1Jlc3VsdC5kZWZhdWx0ID0gTm9Xb3JrUmVzdWx0XG4iLCIndXNlIHN0cmljdCdcblxubGV0IENzc1N5bnRheEVycm9yID0gcmVxdWlyZSgnLi9jc3Mtc3ludGF4LWVycm9yJylcbmxldCBTdHJpbmdpZmllciA9IHJlcXVpcmUoJy4vc3RyaW5naWZpZXInKVxubGV0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5JylcbmxldCB7IGlzQ2xlYW4sIG15IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuXG5mdW5jdGlvbiBjbG9uZU5vZGUob2JqLCBwYXJlbnQpIHtcbiAgbGV0IGNsb25lZCA9IG5ldyBvYmouY29uc3RydWN0b3IoKVxuXG4gIGZvciAobGV0IGkgaW4gb2JqKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkge1xuICAgICAgLyogYzggaWdub3JlIG5leHQgMiAqL1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGkgPT09ICdwcm94eUNhY2hlJykgY29udGludWVcbiAgICBsZXQgdmFsdWUgPSBvYmpbaV1cbiAgICBsZXQgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuXG4gICAgaWYgKGkgPT09ICdwYXJlbnQnICYmIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocGFyZW50KSBjbG9uZWRbaV0gPSBwYXJlbnRcbiAgICB9IGVsc2UgaWYgKGkgPT09ICdzb3VyY2UnKSB7XG4gICAgICBjbG9uZWRbaV0gPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNsb25lZFtpXSA9IHZhbHVlLm1hcChqID0+IGNsb25lTm9kZShqLCBjbG9uZWQpKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHZhbHVlID0gY2xvbmVOb2RlKHZhbHVlKVxuICAgICAgY2xvbmVkW2ldID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xvbmVkXG59XG5cbmZ1bmN0aW9uIHNvdXJjZU9mZnNldChpbnB1dENTUywgcG9zaXRpb24pIHtcbiAgLy8gTm90IGFsbCBjdXN0b20gc3ludGF4ZXMgc3VwcG9ydCBgb2Zmc2V0YCBpbiBgc291cmNlLnN0YXJ0YCBhbmQgYHNvdXJjZS5lbmRgXG4gIGlmIChcbiAgICBwb3NpdGlvbiAmJlxuICAgIHR5cGVvZiBwb3NpdGlvbi5vZmZzZXQgIT09ICd1bmRlZmluZWQnXG4gICkge1xuICAgIHJldHVybiBwb3NpdGlvbi5vZmZzZXQ7XG4gIH1cblxuICBsZXQgY29sdW1uID0gMVxuICBsZXQgbGluZSA9IDFcbiAgbGV0IG9mZnNldCA9IDBcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q1NTLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGxpbmUgPT09IHBvc2l0aW9uLmxpbmUgJiYgY29sdW1uID09PSBwb3NpdGlvbi5jb2x1bW4pIHtcbiAgICAgIG9mZnNldCA9IGlcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgaWYgKGlucHV0Q1NTW2ldID09PSAnXFxuJykge1xuICAgICAgY29sdW1uID0gMVxuICAgICAgbGluZSArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbiArPSAxXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldFxufVxuXG5jbGFzcyBOb2RlIHtcbiAgZ2V0IHByb3h5T2YoKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRzID0ge30pIHtcbiAgICB0aGlzLnJhd3MgPSB7fVxuICAgIHRoaXNbaXNDbGVhbl0gPSBmYWxzZVxuICAgIHRoaXNbbXldID0gdHJ1ZVxuXG4gICAgZm9yIChsZXQgbmFtZSBpbiBkZWZhdWx0cykge1xuICAgICAgaWYgKG5hbWUgPT09ICdub2RlcycpIHtcbiAgICAgICAgdGhpcy5ub2RlcyA9IFtdXG4gICAgICAgIGZvciAobGV0IG5vZGUgb2YgZGVmYXVsdHNbbmFtZV0pIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5vZGUuY2xvbmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuY2xvbmUoKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBkZWZhdWx0c1tuYW1lXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFRvRXJyb3IoZXJyb3IpIHtcbiAgICBlcnJvci5wb3N0Y3NzTm9kZSA9IHRoaXNcbiAgICBpZiAoZXJyb3Iuc3RhY2sgJiYgdGhpcy5zb3VyY2UgJiYgL1xcblxcc3s0fWF0IC8udGVzdChlcnJvci5zdGFjaykpIHtcbiAgICAgIGxldCBzID0gdGhpcy5zb3VyY2VcbiAgICAgIGVycm9yLnN0YWNrID0gZXJyb3Iuc3RhY2sucmVwbGFjZShcbiAgICAgICAgL1xcblxcc3s0fWF0IC8sXG4gICAgICAgIGAkJiR7cy5pbnB1dC5mcm9tfToke3Muc3RhcnQubGluZX06JHtzLnN0YXJ0LmNvbHVtbn0kJmBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yXG4gIH1cblxuICBhZnRlcihhZGQpIHtcbiAgICB0aGlzLnBhcmVudC5pbnNlcnRBZnRlcih0aGlzLCBhZGQpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFzc2lnbihvdmVycmlkZXMgPSB7fSkge1xuICAgIGZvciAobGV0IG5hbWUgaW4gb3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzW25hbWVdID0gb3ZlcnJpZGVzW25hbWVdXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBiZWZvcmUoYWRkKSB7XG4gICAgdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsIGFkZClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgY2xlYW5SYXdzKGtlZXBCZXR3ZWVuKSB7XG4gICAgZGVsZXRlIHRoaXMucmF3cy5iZWZvcmVcbiAgICBkZWxldGUgdGhpcy5yYXdzLmFmdGVyXG4gICAgaWYgKCFrZWVwQmV0d2VlbikgZGVsZXRlIHRoaXMucmF3cy5iZXR3ZWVuXG4gIH1cblxuICBjbG9uZShvdmVycmlkZXMgPSB7fSkge1xuICAgIGxldCBjbG9uZWQgPSBjbG9uZU5vZGUodGhpcylcbiAgICBmb3IgKGxldCBuYW1lIGluIG92ZXJyaWRlcykge1xuICAgICAgY2xvbmVkW25hbWVdID0gb3ZlcnJpZGVzW25hbWVdXG4gICAgfVxuICAgIHJldHVybiBjbG9uZWRcbiAgfVxuXG4gIGNsb25lQWZ0ZXIob3ZlcnJpZGVzID0ge30pIHtcbiAgICBsZXQgY2xvbmVkID0gdGhpcy5jbG9uZShvdmVycmlkZXMpXG4gICAgdGhpcy5wYXJlbnQuaW5zZXJ0QWZ0ZXIodGhpcywgY2xvbmVkKVxuICAgIHJldHVybiBjbG9uZWRcbiAgfVxuXG4gIGNsb25lQmVmb3JlKG92ZXJyaWRlcyA9IHt9KSB7XG4gICAgbGV0IGNsb25lZCA9IHRoaXMuY2xvbmUob3ZlcnJpZGVzKVxuICAgIHRoaXMucGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLCBjbG9uZWQpXG4gICAgcmV0dXJuIGNsb25lZFxuICB9XG5cbiAgZXJyb3IobWVzc2FnZSwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuc291cmNlKSB7XG4gICAgICBsZXQgeyBlbmQsIHN0YXJ0IH0gPSB0aGlzLnJhbmdlQnkob3B0cylcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5pbnB1dC5lcnJvcihcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgeyBjb2x1bW46IHN0YXJ0LmNvbHVtbiwgbGluZTogc3RhcnQubGluZSB9LFxuICAgICAgICB7IGNvbHVtbjogZW5kLmNvbHVtbiwgbGluZTogZW5kLmxpbmUgfSxcbiAgICAgICAgb3B0c1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gbmV3IENzc1N5bnRheEVycm9yKG1lc3NhZ2UpXG4gIH1cblxuICBnZXRQcm94eVByb2Nlc3NvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0KG5vZGUsIHByb3ApIHtcbiAgICAgICAgaWYgKHByb3AgPT09ICdwcm94eU9mJykge1xuICAgICAgICAgIHJldHVybiBub2RlXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgcmV0dXJuICgpID0+IG5vZGUucm9vdCgpLnRvUHJveHkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBub2RlW3Byb3BdXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChub2RlLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBpZiAobm9kZVtwcm9wXSA9PT0gdmFsdWUpIHJldHVybiB0cnVlXG4gICAgICAgIG5vZGVbcHJvcF0gPSB2YWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcCA9PT0gJ3Byb3AnIHx8XG4gICAgICAgICAgcHJvcCA9PT0gJ3ZhbHVlJyB8fFxuICAgICAgICAgIHByb3AgPT09ICduYW1lJyB8fFxuICAgICAgICAgIHByb3AgPT09ICdwYXJhbXMnIHx8XG4gICAgICAgICAgcHJvcCA9PT0gJ2ltcG9ydGFudCcgfHxcbiAgICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIHByb3AgPT09ICd0ZXh0J1xuICAgICAgICApIHtcbiAgICAgICAgICBub2RlLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gIG1hcmtDbGVhbigpIHtcbiAgICB0aGlzW2lzQ2xlYW5dID0gdHJ1ZVxuICB9XG5cbiAgbWFya0RpcnR5KCkge1xuICAgIGlmICh0aGlzW2lzQ2xlYW5dKSB7XG4gICAgICB0aGlzW2lzQ2xlYW5dID0gZmFsc2VcbiAgICAgIGxldCBuZXh0ID0gdGhpc1xuICAgICAgd2hpbGUgKChuZXh0ID0gbmV4dC5wYXJlbnQpKSB7XG4gICAgICAgIG5leHRbaXNDbGVhbl0gPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKCF0aGlzLnBhcmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGxldCBpbmRleCA9IHRoaXMucGFyZW50LmluZGV4KHRoaXMpXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Lm5vZGVzW2luZGV4ICsgMV1cbiAgfVxuXG4gIHBvc2l0aW9uQnkob3B0cykge1xuICAgIGxldCBwb3MgPSB0aGlzLnNvdXJjZS5zdGFydFxuICAgIGlmIChvcHRzLmluZGV4KSB7XG4gICAgICBwb3MgPSB0aGlzLnBvc2l0aW9uSW5zaWRlKG9wdHMuaW5kZXgpXG4gICAgfSBlbHNlIGlmIChvcHRzLndvcmQpIHtcbiAgICAgIGxldCBpbnB1dFN0cmluZyA9ICgnZG9jdW1lbnQnIGluIHRoaXMuc291cmNlLmlucHV0KVxuICAgICAgICA/IHRoaXMuc291cmNlLmlucHV0LmRvY3VtZW50XG4gICAgICAgIDogdGhpcy5zb3VyY2UuaW5wdXQuY3NzXG4gICAgICBsZXQgc3RyaW5nUmVwcmVzZW50YXRpb24gPSBpbnB1dFN0cmluZy5zbGljZShcbiAgICAgICAgc291cmNlT2Zmc2V0KGlucHV0U3RyaW5nLCB0aGlzLnNvdXJjZS5zdGFydCksXG4gICAgICAgIHNvdXJjZU9mZnNldChpbnB1dFN0cmluZywgdGhpcy5zb3VyY2UuZW5kKVxuICAgICAgKVxuICAgICAgbGV0IGluZGV4ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uaW5kZXhPZihvcHRzLndvcmQpXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSBwb3MgPSB0aGlzLnBvc2l0aW9uSW5zaWRlKGluZGV4KVxuICAgIH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICBwb3NpdGlvbkluc2lkZShpbmRleCkge1xuICAgIGxldCBjb2x1bW4gPSB0aGlzLnNvdXJjZS5zdGFydC5jb2x1bW5cbiAgICBsZXQgbGluZSA9IHRoaXMuc291cmNlLnN0YXJ0LmxpbmVcbiAgICBsZXQgaW5wdXRTdHJpbmcgPSAoJ2RvY3VtZW50JyBpbiB0aGlzLnNvdXJjZS5pbnB1dClcbiAgICAgID8gdGhpcy5zb3VyY2UuaW5wdXQuZG9jdW1lbnRcbiAgICAgIDogdGhpcy5zb3VyY2UuaW5wdXQuY3NzXG4gICAgbGV0IG9mZnNldCA9IHNvdXJjZU9mZnNldChpbnB1dFN0cmluZywgdGhpcy5zb3VyY2Uuc3RhcnQpXG4gICAgbGV0IGVuZCA9IG9mZnNldCArIGluZGV4XG5cbiAgICBmb3IgKGxldCBpID0gb2Zmc2V0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIGlmIChpbnB1dFN0cmluZ1tpXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgY29sdW1uID0gMVxuICAgICAgICBsaW5lICs9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbiArPSAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29sdW1uLCBsaW5lIH1cbiAgfVxuXG4gIHByZXYoKSB7XG4gICAgaWYgKCF0aGlzLnBhcmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGxldCBpbmRleCA9IHRoaXMucGFyZW50LmluZGV4KHRoaXMpXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Lm5vZGVzW2luZGV4IC0gMV1cbiAgfVxuXG4gIHJhbmdlQnkob3B0cykge1xuICAgIGxldCBzdGFydCA9IHtcbiAgICAgIGNvbHVtbjogdGhpcy5zb3VyY2Uuc3RhcnQuY29sdW1uLFxuICAgICAgbGluZTogdGhpcy5zb3VyY2Uuc3RhcnQubGluZVxuICAgIH1cbiAgICBsZXQgZW5kID0gdGhpcy5zb3VyY2UuZW5kXG4gICAgICA/IHtcbiAgICAgICAgICBjb2x1bW46IHRoaXMuc291cmNlLmVuZC5jb2x1bW4gKyAxLFxuICAgICAgICAgIGxpbmU6IHRoaXMuc291cmNlLmVuZC5saW5lXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIGNvbHVtbjogc3RhcnQuY29sdW1uICsgMSxcbiAgICAgICAgICBsaW5lOiBzdGFydC5saW5lXG4gICAgICAgIH1cblxuICAgIGlmIChvcHRzLndvcmQpIHtcbiAgICAgIGxldCBpbnB1dFN0cmluZyA9ICgnZG9jdW1lbnQnIGluIHRoaXMuc291cmNlLmlucHV0KVxuICAgICAgICA/IHRoaXMuc291cmNlLmlucHV0LmRvY3VtZW50XG4gICAgICAgIDogdGhpcy5zb3VyY2UuaW5wdXQuY3NzXG4gICAgICBsZXQgc3RyaW5nUmVwcmVzZW50YXRpb24gPSBpbnB1dFN0cmluZy5zbGljZShcbiAgICAgICAgc291cmNlT2Zmc2V0KGlucHV0U3RyaW5nLCB0aGlzLnNvdXJjZS5zdGFydCksXG4gICAgICAgIHNvdXJjZU9mZnNldChpbnB1dFN0cmluZywgdGhpcy5zb3VyY2UuZW5kKVxuICAgICAgKVxuICAgICAgbGV0IGluZGV4ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uaW5kZXhPZihvcHRzLndvcmQpXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbkluc2lkZShpbmRleClcbiAgICAgICAgZW5kID0gdGhpcy5wb3NpdGlvbkluc2lkZShcbiAgICAgICAgICBpbmRleCArIG9wdHMud29yZC5sZW5ndGgsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdHMuc3RhcnQpIHtcbiAgICAgICAgc3RhcnQgPSB7XG4gICAgICAgICAgY29sdW1uOiBvcHRzLnN0YXJ0LmNvbHVtbixcbiAgICAgICAgICBsaW5lOiBvcHRzLnN0YXJ0LmxpbmVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvcHRzLmluZGV4KSB7XG4gICAgICAgIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbkluc2lkZShvcHRzLmluZGV4KVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5lbmQpIHtcbiAgICAgICAgZW5kID0ge1xuICAgICAgICAgIGNvbHVtbjogb3B0cy5lbmQuY29sdW1uLFxuICAgICAgICAgIGxpbmU6IG9wdHMuZW5kLmxpbmVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0cy5lbmRJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZW5kID0gdGhpcy5wb3NpdGlvbkluc2lkZShvcHRzLmVuZEluZGV4KVxuICAgICAgfSBlbHNlIGlmIChvcHRzLmluZGV4KSB7XG4gICAgICAgIGVuZCA9IHRoaXMucG9zaXRpb25JbnNpZGUob3B0cy5pbmRleCArIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZW5kLmxpbmUgPCBzdGFydC5saW5lIHx8XG4gICAgICAoZW5kLmxpbmUgPT09IHN0YXJ0LmxpbmUgJiYgZW5kLmNvbHVtbiA8PSBzdGFydC5jb2x1bW4pXG4gICAgKSB7XG4gICAgICBlbmQgPSB7IGNvbHVtbjogc3RhcnQuY29sdW1uICsgMSwgbGluZTogc3RhcnQubGluZSB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZW5kLCBzdGFydCB9XG4gIH1cblxuICByYXcocHJvcCwgZGVmYXVsdFR5cGUpIHtcbiAgICBsZXQgc3RyID0gbmV3IFN0cmluZ2lmaWVyKClcbiAgICByZXR1cm4gc3RyLnJhdyh0aGlzLCBwcm9wLCBkZWZhdWx0VHlwZSlcbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpXG4gICAgfVxuICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJlcGxhY2VXaXRoKC4uLm5vZGVzKSB7XG4gICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICBsZXQgYm9va21hcmsgPSB0aGlzXG4gICAgICBsZXQgZm91bmRTZWxmID0gZmFsc2VcbiAgICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMpIHtcbiAgICAgICAgICBmb3VuZFNlbGYgPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRTZWxmKSB7XG4gICAgICAgICAgdGhpcy5wYXJlbnQuaW5zZXJ0QWZ0ZXIoYm9va21hcmssIG5vZGUpXG4gICAgICAgICAgYm9va21hcmsgPSBub2RlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKGJvb2ttYXJrLCBub2RlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZm91bmRTZWxmKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcm9vdCgpIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpc1xuICAgIHdoaWxlIChyZXN1bHQucGFyZW50ICYmIHJlc3VsdC5wYXJlbnQudHlwZSAhPT0gJ2RvY3VtZW50Jykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnBhcmVudFxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICB0b0pTT04oXywgaW5wdXRzKSB7XG4gICAgbGV0IGZpeGVkID0ge31cbiAgICBsZXQgZW1pdElucHV0cyA9IGlucHV0cyA9PSBudWxsXG4gICAgaW5wdXRzID0gaW5wdXRzIHx8IG5ldyBNYXAoKVxuICAgIGxldCBpbnB1dHNOZXh0SW5kZXggPSAwXG5cbiAgICBmb3IgKGxldCBuYW1lIGluIHRoaXMpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsIG5hbWUpKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDIgKi9cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lID09PSAncGFyZW50JyB8fCBuYW1lID09PSAncHJveHlDYWNoZScpIGNvbnRpbnVlXG4gICAgICBsZXQgdmFsdWUgPSB0aGlzW25hbWVdXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBmaXhlZFtuYW1lXSA9IHZhbHVlLm1hcChpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGkgPT09ICdvYmplY3QnICYmIGkudG9KU09OKSB7XG4gICAgICAgICAgICByZXR1cm4gaS50b0pTT04obnVsbCwgaW5wdXRzKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS50b0pTT04pIHtcbiAgICAgICAgZml4ZWRbbmFtZV0gPSB2YWx1ZS50b0pTT04obnVsbCwgaW5wdXRzKVxuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnc291cmNlJykge1xuICAgICAgICBsZXQgaW5wdXRJZCA9IGlucHV0cy5nZXQodmFsdWUuaW5wdXQpXG4gICAgICAgIGlmIChpbnB1dElkID09IG51bGwpIHtcbiAgICAgICAgICBpbnB1dElkID0gaW5wdXRzTmV4dEluZGV4XG4gICAgICAgICAgaW5wdXRzLnNldCh2YWx1ZS5pbnB1dCwgaW5wdXRzTmV4dEluZGV4KVxuICAgICAgICAgIGlucHV0c05leHRJbmRleCsrXG4gICAgICAgIH1cbiAgICAgICAgZml4ZWRbbmFtZV0gPSB7XG4gICAgICAgICAgZW5kOiB2YWx1ZS5lbmQsXG4gICAgICAgICAgaW5wdXRJZCxcbiAgICAgICAgICBzdGFydDogdmFsdWUuc3RhcnRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZml4ZWRbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbWl0SW5wdXRzKSB7XG4gICAgICBmaXhlZC5pbnB1dHMgPSBbLi4uaW5wdXRzLmtleXMoKV0ubWFwKGlucHV0ID0+IGlucHV0LnRvSlNPTigpKVxuICAgIH1cblxuICAgIHJldHVybiBmaXhlZFxuICB9XG5cbiAgdG9Qcm94eSgpIHtcbiAgICBpZiAoIXRoaXMucHJveHlDYWNoZSkge1xuICAgICAgdGhpcy5wcm94eUNhY2hlID0gbmV3IFByb3h5KHRoaXMsIHRoaXMuZ2V0UHJveHlQcm9jZXNzb3IoKSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJveHlDYWNoZVxuICB9XG5cbiAgdG9TdHJpbmcoc3RyaW5naWZpZXIgPSBzdHJpbmdpZnkpIHtcbiAgICBpZiAoc3RyaW5naWZpZXIuc3RyaW5naWZ5KSBzdHJpbmdpZmllciA9IHN0cmluZ2lmaWVyLnN0cmluZ2lmeVxuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIHN0cmluZ2lmaWVyKHRoaXMsIGkgPT4ge1xuICAgICAgcmVzdWx0ICs9IGlcbiAgICB9KVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHdhcm4ocmVzdWx0LCB0ZXh0LCBvcHRzKSB7XG4gICAgbGV0IGRhdGEgPSB7IG5vZGU6IHRoaXMgfVxuICAgIGZvciAobGV0IGkgaW4gb3B0cykgZGF0YVtpXSA9IG9wdHNbaV1cbiAgICByZXR1cm4gcmVzdWx0Lndhcm4odGV4dCwgZGF0YSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE5vZGVcbk5vZGUuZGVmYXVsdCA9IE5vZGVcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgQ29udGFpbmVyID0gcmVxdWlyZSgnLi9jb250YWluZXInKVxubGV0IElucHV0ID0gcmVxdWlyZSgnLi9pbnB1dCcpXG5sZXQgUGFyc2VyID0gcmVxdWlyZSgnLi9wYXJzZXInKVxuXG5mdW5jdGlvbiBwYXJzZShjc3MsIG9wdHMpIHtcbiAgbGV0IGlucHV0ID0gbmV3IElucHV0KGNzcywgb3B0cylcbiAgbGV0IHBhcnNlciA9IG5ldyBQYXJzZXIoaW5wdXQpXG4gIHRyeSB7XG4gICAgcGFyc2VyLnBhcnNlKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoZS5uYW1lID09PSAnQ3NzU3ludGF4RXJyb3InICYmIG9wdHMgJiYgb3B0cy5mcm9tKSB7XG4gICAgICAgIGlmICgvXFwuc2NzcyQvaS50ZXN0KG9wdHMuZnJvbSkpIHtcbiAgICAgICAgICBlLm1lc3NhZ2UgKz1cbiAgICAgICAgICAgICdcXG5Zb3UgdHJpZWQgdG8gcGFyc2UgU0NTUyB3aXRoICcgK1xuICAgICAgICAgICAgJ3RoZSBzdGFuZGFyZCBDU1MgcGFyc2VyOyAnICtcbiAgICAgICAgICAgICd0cnkgYWdhaW4gd2l0aCB0aGUgcG9zdGNzcy1zY3NzIHBhcnNlcidcbiAgICAgICAgfSBlbHNlIGlmICgvXFwuc2Fzcy9pLnRlc3Qob3B0cy5mcm9tKSkge1xuICAgICAgICAgIGUubWVzc2FnZSArPVxuICAgICAgICAgICAgJ1xcbllvdSB0cmllZCB0byBwYXJzZSBTYXNzIHdpdGggJyArXG4gICAgICAgICAgICAndGhlIHN0YW5kYXJkIENTUyBwYXJzZXI7ICcgK1xuICAgICAgICAgICAgJ3RyeSBhZ2FpbiB3aXRoIHRoZSBwb3N0Y3NzLXNhc3MgcGFyc2VyJ1xuICAgICAgICB9IGVsc2UgaWYgKC9cXC5sZXNzJC9pLnRlc3Qob3B0cy5mcm9tKSkge1xuICAgICAgICAgIGUubWVzc2FnZSArPVxuICAgICAgICAgICAgJ1xcbllvdSB0cmllZCB0byBwYXJzZSBMZXNzIHdpdGggJyArXG4gICAgICAgICAgICAndGhlIHN0YW5kYXJkIENTUyBwYXJzZXI7ICcgK1xuICAgICAgICAgICAgJ3RyeSBhZ2FpbiB3aXRoIHRoZSBwb3N0Y3NzLWxlc3MgcGFyc2VyJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVcbiAgfVxuXG4gIHJldHVybiBwYXJzZXIucm9vdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlXG5wYXJzZS5kZWZhdWx0ID0gcGFyc2VcblxuQ29udGFpbmVyLnJlZ2lzdGVyUGFyc2UocGFyc2UpXG4iLCIndXNlIHN0cmljdCdcblxubGV0IEF0UnVsZSA9IHJlcXVpcmUoJy4vYXQtcnVsZScpXG5sZXQgQ29tbWVudCA9IHJlcXVpcmUoJy4vY29tbWVudCcpXG5sZXQgRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL2RlY2xhcmF0aW9uJylcbmxldCBSb290ID0gcmVxdWlyZSgnLi9yb290JylcbmxldCBSdWxlID0gcmVxdWlyZSgnLi9ydWxlJylcbmxldCB0b2tlbml6ZXIgPSByZXF1aXJlKCcuL3Rva2VuaXplJylcblxuY29uc3QgU0FGRV9DT01NRU5UX05FSUdIQk9SID0ge1xuICBlbXB0eTogdHJ1ZSxcbiAgc3BhY2U6IHRydWVcbn1cblxuZnVuY3Rpb24gZmluZExhc3RXaXRoUG9zaXRpb24odG9rZW5zKSB7XG4gIGZvciAobGV0IGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsZXQgdG9rZW4gPSB0b2tlbnNbaV1cbiAgICBsZXQgcG9zID0gdG9rZW5bM10gfHwgdG9rZW5bMl1cbiAgICBpZiAocG9zKSByZXR1cm4gcG9zXG4gIH1cbn1cblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXRcblxuICAgIHRoaXMucm9vdCA9IG5ldyBSb290KClcbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnJvb3RcbiAgICB0aGlzLnNwYWNlcyA9ICcnXG4gICAgdGhpcy5zZW1pY29sb24gPSBmYWxzZVxuXG4gICAgdGhpcy5jcmVhdGVUb2tlbml6ZXIoKVxuICAgIHRoaXMucm9vdC5zb3VyY2UgPSB7IGlucHV0LCBzdGFydDogeyBjb2x1bW46IDEsIGxpbmU6IDEsIG9mZnNldDogMCB9IH1cbiAgfVxuXG4gIGF0cnVsZSh0b2tlbikge1xuICAgIGxldCBub2RlID0gbmV3IEF0UnVsZSgpXG4gICAgbm9kZS5uYW1lID0gdG9rZW5bMV0uc2xpY2UoMSlcbiAgICBpZiAobm9kZS5uYW1lID09PSAnJykge1xuICAgICAgdGhpcy51bm5hbWVkQXRydWxlKG5vZGUsIHRva2VuKVxuICAgIH1cbiAgICB0aGlzLmluaXQobm9kZSwgdG9rZW5bMl0pXG5cbiAgICBsZXQgdHlwZVxuICAgIGxldCBwcmV2XG4gICAgbGV0IHNoaWZ0XG4gICAgbGV0IGxhc3QgPSBmYWxzZVxuICAgIGxldCBvcGVuID0gZmFsc2VcbiAgICBsZXQgcGFyYW1zID0gW11cbiAgICBsZXQgYnJhY2tldHMgPSBbXVxuXG4gICAgd2hpbGUgKCF0aGlzLnRva2VuaXplci5lbmRPZkZpbGUoKSkge1xuICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplci5uZXh0VG9rZW4oKVxuICAgICAgdHlwZSA9IHRva2VuWzBdXG5cbiAgICAgIGlmICh0eXBlID09PSAnKCcgfHwgdHlwZSA9PT0gJ1snKSB7XG4gICAgICAgIGJyYWNrZXRzLnB1c2godHlwZSA9PT0gJygnID8gJyknIDogJ10nKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAneycgJiYgYnJhY2tldHMubGVuZ3RoID4gMCkge1xuICAgICAgICBicmFja2V0cy5wdXNoKCd9JylcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gYnJhY2tldHNbYnJhY2tldHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgYnJhY2tldHMucG9wKClcbiAgICAgIH1cblxuICAgICAgaWYgKGJyYWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJzsnKSB7XG4gICAgICAgICAgbm9kZS5zb3VyY2UuZW5kID0gdGhpcy5nZXRQb3NpdGlvbih0b2tlblsyXSlcbiAgICAgICAgICBub2RlLnNvdXJjZS5lbmQub2Zmc2V0KytcbiAgICAgICAgICB0aGlzLnNlbWljb2xvbiA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd7Jykge1xuICAgICAgICAgIG9wZW4gPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnfScpIHtcbiAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNoaWZ0ID0gcGFyYW1zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgIHByZXYgPSBwYXJhbXNbc2hpZnRdXG4gICAgICAgICAgICB3aGlsZSAocHJldiAmJiBwcmV2WzBdID09PSAnc3BhY2UnKSB7XG4gICAgICAgICAgICAgIHByZXYgPSBwYXJhbXNbLS1zaGlmdF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgIG5vZGUuc291cmNlLmVuZCA9IHRoaXMuZ2V0UG9zaXRpb24ocHJldlszXSB8fCBwcmV2WzJdKVxuICAgICAgICAgICAgICBub2RlLnNvdXJjZS5lbmQub2Zmc2V0KytcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lbmQodG9rZW4pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJhbXMucHVzaCh0b2tlbilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2godG9rZW4pXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRva2VuaXplci5lbmRPZkZpbGUoKSkge1xuICAgICAgICBsYXN0ID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUucmF3cy5iZXR3ZWVuID0gdGhpcy5zcGFjZXNBbmRDb21tZW50c0Zyb21FbmQocGFyYW1zKVxuICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XG4gICAgICBub2RlLnJhd3MuYWZ0ZXJOYW1lID0gdGhpcy5zcGFjZXNBbmRDb21tZW50c0Zyb21TdGFydChwYXJhbXMpXG4gICAgICB0aGlzLnJhdyhub2RlLCAncGFyYW1zJywgcGFyYW1zKVxuICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgdG9rZW4gPSBwYXJhbXNbcGFyYW1zLmxlbmd0aCAtIDFdXG4gICAgICAgIG5vZGUuc291cmNlLmVuZCA9IHRoaXMuZ2V0UG9zaXRpb24odG9rZW5bM10gfHwgdG9rZW5bMl0pXG4gICAgICAgIG5vZGUuc291cmNlLmVuZC5vZmZzZXQrK1xuICAgICAgICB0aGlzLnNwYWNlcyA9IG5vZGUucmF3cy5iZXR3ZWVuXG4gICAgICAgIG5vZGUucmF3cy5iZXR3ZWVuID0gJydcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5yYXdzLmFmdGVyTmFtZSA9ICcnXG4gICAgICBub2RlLnBhcmFtcyA9ICcnXG4gICAgfVxuXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIG5vZGUubm9kZXMgPSBbXVxuICAgICAgdGhpcy5jdXJyZW50ID0gbm9kZVxuICAgIH1cbiAgfVxuXG4gIGNoZWNrTWlzc2VkU2VtaWNvbG9uKHRva2Vucykge1xuICAgIGxldCBjb2xvbiA9IHRoaXMuY29sb24odG9rZW5zKVxuICAgIGlmIChjb2xvbiA9PT0gZmFsc2UpIHJldHVyblxuXG4gICAgbGV0IGZvdW5kZWQgPSAwXG4gICAgbGV0IHRva2VuXG4gICAgZm9yIChsZXQgaiA9IGNvbG9uIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2pdXG4gICAgICBpZiAodG9rZW5bMF0gIT09ICdzcGFjZScpIHtcbiAgICAgICAgZm91bmRlZCArPSAxXG4gICAgICAgIGlmIChmb3VuZGVkID09PSAyKSBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgdG9rZW4gaXMgYSB3b3JkLCBlLmcuIGAhaW1wb3J0YW50YCwgYHJlZGAgb3IgYW55IG90aGVyIHZhbGlkIHByb3BlcnR5J3MgdmFsdWUuXG4gICAgLy8gVGhlbiB3ZSBuZWVkIHRvIHJldHVybiB0aGUgY29sb24gYWZ0ZXIgdGhhdCB3b3JkIHRva2VuLiBbM10gaXMgdGhlIFwiZW5kXCIgY29sb24gb2YgdGhhdCB3b3JkLlxuICAgIC8vIEFuZCBiZWNhdXNlIHdlIG5lZWQgaXQgYWZ0ZXIgdGhhdCBvbmUgd2UgZG8gKzEgdG8gZ2V0IHRoZSBuZXh0IG9uZS5cbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKFxuICAgICAgJ01pc3NlZCBzZW1pY29sb24nLFxuICAgICAgdG9rZW5bMF0gPT09ICd3b3JkJyA/IHRva2VuWzNdICsgMSA6IHRva2VuWzJdXG4gICAgKVxuICB9XG5cbiAgY29sb24odG9rZW5zKSB7XG4gICAgbGV0IGJyYWNrZXRzID0gMFxuICAgIGxldCBwcmV2LCB0b2tlbiwgdHlwZVxuICAgIGZvciAobGV0IFtpLCBlbGVtZW50XSBvZiB0b2tlbnMuZW50cmllcygpKSB7XG4gICAgICB0b2tlbiA9IGVsZW1lbnRcbiAgICAgIHR5cGUgPSB0b2tlblswXVxuXG4gICAgICBpZiAodHlwZSA9PT0gJygnKSB7XG4gICAgICAgIGJyYWNrZXRzICs9IDFcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAnKScpIHtcbiAgICAgICAgYnJhY2tldHMgLT0gMVxuICAgICAgfVxuICAgICAgaWYgKGJyYWNrZXRzID09PSAwICYmIHR5cGUgPT09ICc6Jykge1xuICAgICAgICBpZiAoIXByZXYpIHtcbiAgICAgICAgICB0aGlzLmRvdWJsZUNvbG9uKHRva2VuKVxuICAgICAgICB9IGVsc2UgaWYgKHByZXZbMF0gPT09ICd3b3JkJyAmJiBwcmV2WzFdID09PSAncHJvZ2lkJykge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmV2ID0gdG9rZW5cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb21tZW50KHRva2VuKSB7XG4gICAgbGV0IG5vZGUgPSBuZXcgQ29tbWVudCgpXG4gICAgdGhpcy5pbml0KG5vZGUsIHRva2VuWzJdKVxuICAgIG5vZGUuc291cmNlLmVuZCA9IHRoaXMuZ2V0UG9zaXRpb24odG9rZW5bM10gfHwgdG9rZW5bMl0pXG4gICAgbm9kZS5zb3VyY2UuZW5kLm9mZnNldCsrXG5cbiAgICBsZXQgdGV4dCA9IHRva2VuWzFdLnNsaWNlKDIsIC0yKVxuICAgIGlmICgvXlxccyokLy50ZXN0KHRleHQpKSB7XG4gICAgICBub2RlLnRleHQgPSAnJ1xuICAgICAgbm9kZS5yYXdzLmxlZnQgPSB0ZXh0XG4gICAgICBub2RlLnJhd3MucmlnaHQgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eKFxccyopKFteXSpcXFMpKFxccyopJC8pXG4gICAgICBub2RlLnRleHQgPSBtYXRjaFsyXVxuICAgICAgbm9kZS5yYXdzLmxlZnQgPSBtYXRjaFsxXVxuICAgICAgbm9kZS5yYXdzLnJpZ2h0ID0gbWF0Y2hbM11cbiAgICB9XG4gIH1cblxuICBjcmVhdGVUb2tlbml6ZXIoKSB7XG4gICAgdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXIodGhpcy5pbnB1dClcbiAgfVxuXG4gIGRlY2wodG9rZW5zLCBjdXN0b21Qcm9wZXJ0eSkge1xuICAgIGxldCBub2RlID0gbmV3IERlY2xhcmF0aW9uKClcbiAgICB0aGlzLmluaXQobm9kZSwgdG9rZW5zWzBdWzJdKVxuXG4gICAgbGV0IGxhc3QgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdXG4gICAgaWYgKGxhc3RbMF0gPT09ICc7Jykge1xuICAgICAgdGhpcy5zZW1pY29sb24gPSB0cnVlXG4gICAgICB0b2tlbnMucG9wKClcbiAgICB9XG5cbiAgICBub2RlLnNvdXJjZS5lbmQgPSB0aGlzLmdldFBvc2l0aW9uKFxuICAgICAgbGFzdFszXSB8fCBsYXN0WzJdIHx8IGZpbmRMYXN0V2l0aFBvc2l0aW9uKHRva2VucylcbiAgICApXG4gICAgbm9kZS5zb3VyY2UuZW5kLm9mZnNldCsrXG5cbiAgICB3aGlsZSAodG9rZW5zWzBdWzBdICE9PSAnd29yZCcpIHtcbiAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAxKSB0aGlzLnVua25vd25Xb3JkKHRva2VucylcbiAgICAgIG5vZGUucmF3cy5iZWZvcmUgKz0gdG9rZW5zLnNoaWZ0KClbMV1cbiAgICB9XG4gICAgbm9kZS5zb3VyY2Uuc3RhcnQgPSB0aGlzLmdldFBvc2l0aW9uKHRva2Vuc1swXVsyXSlcblxuICAgIG5vZGUucHJvcCA9ICcnXG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICAgIGxldCB0eXBlID0gdG9rZW5zWzBdWzBdXG4gICAgICBpZiAodHlwZSA9PT0gJzonIHx8IHR5cGUgPT09ICdzcGFjZScgfHwgdHlwZSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBub2RlLnByb3AgKz0gdG9rZW5zLnNoaWZ0KClbMV1cbiAgICB9XG5cbiAgICBub2RlLnJhd3MuYmV0d2VlbiA9ICcnXG5cbiAgICBsZXQgdG9rZW5cbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgICAgdG9rZW4gPSB0b2tlbnMuc2hpZnQoKVxuXG4gICAgICBpZiAodG9rZW5bMF0gPT09ICc6Jykge1xuICAgICAgICBub2RlLnJhd3MuYmV0d2VlbiArPSB0b2tlblsxXVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRva2VuWzBdID09PSAnd29yZCcgJiYgL1xcdy8udGVzdCh0b2tlblsxXSkpIHtcbiAgICAgICAgICB0aGlzLnVua25vd25Xb3JkKFt0b2tlbl0pXG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5yYXdzLmJldHdlZW4gKz0gdG9rZW5bMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5wcm9wWzBdID09PSAnXycgfHwgbm9kZS5wcm9wWzBdID09PSAnKicpIHtcbiAgICAgIG5vZGUucmF3cy5iZWZvcmUgKz0gbm9kZS5wcm9wWzBdXG4gICAgICBub2RlLnByb3AgPSBub2RlLnByb3Auc2xpY2UoMSlcbiAgICB9XG5cbiAgICBsZXQgZmlyc3RTcGFjZXMgPSBbXVxuICAgIGxldCBuZXh0XG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICAgIG5leHQgPSB0b2tlbnNbMF1bMF1cbiAgICAgIGlmIChuZXh0ICE9PSAnc3BhY2UnICYmIG5leHQgIT09ICdjb21tZW50JykgYnJlYWtcbiAgICAgIGZpcnN0U3BhY2VzLnB1c2godG9rZW5zLnNoaWZ0KCkpXG4gICAgfVxuXG4gICAgdGhpcy5wcmVjaGVja01pc3NlZFNlbWljb2xvbih0b2tlbnMpXG5cbiAgICBmb3IgKGxldCBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0b2tlbiA9IHRva2Vuc1tpXVxuICAgICAgaWYgKHRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT09ICchaW1wb3J0YW50Jykge1xuICAgICAgICBub2RlLmltcG9ydGFudCA9IHRydWVcbiAgICAgICAgbGV0IHN0cmluZyA9IHRoaXMuc3RyaW5nRnJvbSh0b2tlbnMsIGkpXG4gICAgICAgIHN0cmluZyA9IHRoaXMuc3BhY2VzRnJvbUVuZCh0b2tlbnMpICsgc3RyaW5nXG4gICAgICAgIGlmIChzdHJpbmcgIT09ICcgIWltcG9ydGFudCcpIG5vZGUucmF3cy5pbXBvcnRhbnQgPSBzdHJpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PT0gJ2ltcG9ydGFudCcpIHtcbiAgICAgICAgbGV0IGNhY2hlID0gdG9rZW5zLnNsaWNlKDApXG4gICAgICAgIGxldCBzdHIgPSAnJ1xuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA+IDA7IGotLSkge1xuICAgICAgICAgIGxldCB0eXBlID0gY2FjaGVbal1bMF1cbiAgICAgICAgICBpZiAoc3RyLnRyaW0oKS5zdGFydHNXaXRoKCchJykgJiYgdHlwZSAhPT0gJ3NwYWNlJykge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyID0gY2FjaGUucG9wKClbMV0gKyBzdHJcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyLnRyaW0oKS5zdGFydHNXaXRoKCchJykpIHtcbiAgICAgICAgICBub2RlLmltcG9ydGFudCA9IHRydWVcbiAgICAgICAgICBub2RlLnJhd3MuaW1wb3J0YW50ID0gc3RyXG4gICAgICAgICAgdG9rZW5zID0gY2FjaGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW5bMF0gIT09ICdzcGFjZScgJiYgdG9rZW5bMF0gIT09ICdjb21tZW50Jykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBoYXNXb3JkID0gdG9rZW5zLnNvbWUoaSA9PiBpWzBdICE9PSAnc3BhY2UnICYmIGlbMF0gIT09ICdjb21tZW50JylcblxuICAgIGlmIChoYXNXb3JkKSB7XG4gICAgICBub2RlLnJhd3MuYmV0d2VlbiArPSBmaXJzdFNwYWNlcy5tYXAoaSA9PiBpWzFdKS5qb2luKCcnKVxuICAgICAgZmlyc3RTcGFjZXMgPSBbXVxuICAgIH1cbiAgICB0aGlzLnJhdyhub2RlLCAndmFsdWUnLCBmaXJzdFNwYWNlcy5jb25jYXQodG9rZW5zKSwgY3VzdG9tUHJvcGVydHkpXG5cbiAgICBpZiAobm9kZS52YWx1ZS5pbmNsdWRlcygnOicpICYmICFjdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgdGhpcy5jaGVja01pc3NlZFNlbWljb2xvbih0b2tlbnMpXG4gICAgfVxuICB9XG5cbiAgZG91YmxlQ29sb24odG9rZW4pIHtcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKFxuICAgICAgJ0RvdWJsZSBjb2xvbicsXG4gICAgICB7IG9mZnNldDogdG9rZW5bMl0gfSxcbiAgICAgIHsgb2Zmc2V0OiB0b2tlblsyXSArIHRva2VuWzFdLmxlbmd0aCB9XG4gICAgKVxuICB9XG5cbiAgZW1wdHlSdWxlKHRva2VuKSB7XG4gICAgbGV0IG5vZGUgPSBuZXcgUnVsZSgpXG4gICAgdGhpcy5pbml0KG5vZGUsIHRva2VuWzJdKVxuICAgIG5vZGUuc2VsZWN0b3IgPSAnJ1xuICAgIG5vZGUucmF3cy5iZXR3ZWVuID0gJydcbiAgICB0aGlzLmN1cnJlbnQgPSBub2RlXG4gIH1cblxuICBlbmQodG9rZW4pIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lm5vZGVzICYmIHRoaXMuY3VycmVudC5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY3VycmVudC5yYXdzLnNlbWljb2xvbiA9IHRoaXMuc2VtaWNvbG9uXG4gICAgfVxuICAgIHRoaXMuc2VtaWNvbG9uID0gZmFsc2VcblxuICAgIHRoaXMuY3VycmVudC5yYXdzLmFmdGVyID0gKHRoaXMuY3VycmVudC5yYXdzLmFmdGVyIHx8ICcnKSArIHRoaXMuc3BhY2VzXG4gICAgdGhpcy5zcGFjZXMgPSAnJ1xuXG4gICAgaWYgKHRoaXMuY3VycmVudC5wYXJlbnQpIHtcbiAgICAgIHRoaXMuY3VycmVudC5zb3VyY2UuZW5kID0gdGhpcy5nZXRQb3NpdGlvbih0b2tlblsyXSlcbiAgICAgIHRoaXMuY3VycmVudC5zb3VyY2UuZW5kLm9mZnNldCsrXG4gICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQucGFyZW50XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5leHBlY3RlZENsb3NlKHRva2VuKVxuICAgIH1cbiAgfVxuXG4gIGVuZEZpbGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudC5wYXJlbnQpIHRoaXMudW5jbG9zZWRCbG9jaygpXG4gICAgaWYgKHRoaXMuY3VycmVudC5ub2RlcyAmJiB0aGlzLmN1cnJlbnQubm9kZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmN1cnJlbnQucmF3cy5zZW1pY29sb24gPSB0aGlzLnNlbWljb2xvblxuICAgIH1cbiAgICB0aGlzLmN1cnJlbnQucmF3cy5hZnRlciA9ICh0aGlzLmN1cnJlbnQucmF3cy5hZnRlciB8fCAnJykgKyB0aGlzLnNwYWNlc1xuICAgIHRoaXMucm9vdC5zb3VyY2UuZW5kID0gdGhpcy5nZXRQb3NpdGlvbih0aGlzLnRva2VuaXplci5wb3NpdGlvbigpKVxuICB9XG5cbiAgZnJlZVNlbWljb2xvbih0b2tlbikge1xuICAgIHRoaXMuc3BhY2VzICs9IHRva2VuWzFdXG4gICAgaWYgKHRoaXMuY3VycmVudC5ub2Rlcykge1xuICAgICAgbGV0IHByZXYgPSB0aGlzLmN1cnJlbnQubm9kZXNbdGhpcy5jdXJyZW50Lm5vZGVzLmxlbmd0aCAtIDFdXG4gICAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICdydWxlJyAmJiAhcHJldi5yYXdzLm93blNlbWljb2xvbikge1xuICAgICAgICBwcmV2LnJhd3Mub3duU2VtaWNvbG9uID0gdGhpcy5zcGFjZXNcbiAgICAgICAgdGhpcy5zcGFjZXMgPSAnJ1xuICAgICAgICBwcmV2LnNvdXJjZS5lbmQgPSB0aGlzLmdldFBvc2l0aW9uKHRva2VuWzJdKVxuICAgICAgICBwcmV2LnNvdXJjZS5lbmQub2Zmc2V0ICs9IHByZXYucmF3cy5vd25TZW1pY29sb24ubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyc1xuXG4gIGdldFBvc2l0aW9uKG9mZnNldCkge1xuICAgIGxldCBwb3MgPSB0aGlzLmlucHV0LmZyb21PZmZzZXQob2Zmc2V0KVxuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW46IHBvcy5jb2wsXG4gICAgICBsaW5lOiBwb3MubGluZSxcbiAgICAgIG9mZnNldFxuICAgIH1cbiAgfVxuXG4gIGluaXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgdGhpcy5jdXJyZW50LnB1c2gobm9kZSlcbiAgICBub2RlLnNvdXJjZSA9IHtcbiAgICAgIGlucHV0OiB0aGlzLmlucHV0LFxuICAgICAgc3RhcnQ6IHRoaXMuZ2V0UG9zaXRpb24ob2Zmc2V0KVxuICAgIH1cbiAgICBub2RlLnJhd3MuYmVmb3JlID0gdGhpcy5zcGFjZXNcbiAgICB0aGlzLnNwYWNlcyA9ICcnXG4gICAgaWYgKG5vZGUudHlwZSAhPT0gJ2NvbW1lbnQnKSB0aGlzLnNlbWljb2xvbiA9IGZhbHNlXG4gIH1cblxuICBvdGhlcihzdGFydCkge1xuICAgIGxldCBlbmQgPSBmYWxzZVxuICAgIGxldCB0eXBlID0gbnVsbFxuICAgIGxldCBjb2xvbiA9IGZhbHNlXG4gICAgbGV0IGJyYWNrZXQgPSBudWxsXG4gICAgbGV0IGJyYWNrZXRzID0gW11cbiAgICBsZXQgY3VzdG9tUHJvcGVydHkgPSBzdGFydFsxXS5zdGFydHNXaXRoKCctLScpXG5cbiAgICBsZXQgdG9rZW5zID0gW11cbiAgICBsZXQgdG9rZW4gPSBzdGFydFxuICAgIHdoaWxlICh0b2tlbikge1xuICAgICAgdHlwZSA9IHRva2VuWzBdXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbilcblxuICAgICAgaWYgKHR5cGUgPT09ICcoJyB8fCB0eXBlID09PSAnWycpIHtcbiAgICAgICAgaWYgKCFicmFja2V0KSBicmFja2V0ID0gdG9rZW5cbiAgICAgICAgYnJhY2tldHMucHVzaCh0eXBlID09PSAnKCcgPyAnKScgOiAnXScpXG4gICAgICB9IGVsc2UgaWYgKGN1c3RvbVByb3BlcnR5ICYmIGNvbG9uICYmIHR5cGUgPT09ICd7Jykge1xuICAgICAgICBpZiAoIWJyYWNrZXQpIGJyYWNrZXQgPSB0b2tlblxuICAgICAgICBicmFja2V0cy5wdXNoKCd9JylcbiAgICAgIH0gZWxzZSBpZiAoYnJhY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnOycpIHtcbiAgICAgICAgICBpZiAoY29sb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVjbCh0b2tlbnMsIGN1c3RvbVByb3BlcnR5KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd7Jykge1xuICAgICAgICAgIHRoaXMucnVsZSh0b2tlbnMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ30nKSB7XG4gICAgICAgICAgdGhpcy50b2tlbml6ZXIuYmFjayh0b2tlbnMucG9wKCkpXG4gICAgICAgICAgZW5kID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJzonKSB7XG4gICAgICAgICAgY29sb24gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gYnJhY2tldHNbYnJhY2tldHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgYnJhY2tldHMucG9wKClcbiAgICAgICAgaWYgKGJyYWNrZXRzLmxlbmd0aCA9PT0gMCkgYnJhY2tldCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplci5uZXh0VG9rZW4oKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2VuaXplci5lbmRPZkZpbGUoKSkgZW5kID0gdHJ1ZVxuICAgIGlmIChicmFja2V0cy5sZW5ndGggPiAwKSB0aGlzLnVuY2xvc2VkQnJhY2tldChicmFja2V0KVxuXG4gICAgaWYgKGVuZCAmJiBjb2xvbikge1xuICAgICAgaWYgKCFjdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgIHRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXVswXVxuICAgICAgICAgIGlmICh0b2tlbiAhPT0gJ3NwYWNlJyAmJiB0b2tlbiAhPT0gJ2NvbW1lbnQnKSBicmVha1xuICAgICAgICAgIHRoaXMudG9rZW5pemVyLmJhY2sodG9rZW5zLnBvcCgpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRlY2wodG9rZW5zLCBjdXN0b21Qcm9wZXJ0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bmtub3duV29yZCh0b2tlbnMpXG4gICAgfVxuICB9XG5cbiAgcGFyc2UoKSB7XG4gICAgbGV0IHRva2VuXG4gICAgd2hpbGUgKCF0aGlzLnRva2VuaXplci5lbmRPZkZpbGUoKSkge1xuICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplci5uZXh0VG9rZW4oKVxuXG4gICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7XG4gICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICB0aGlzLnNwYWNlcyArPSB0b2tlblsxXVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnOyc6XG4gICAgICAgICAgdGhpcy5mcmVlU2VtaWNvbG9uKHRva2VuKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgdGhpcy5lbmQodG9rZW4pXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICB0aGlzLmNvbW1lbnQodG9rZW4pXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdhdC13b3JkJzpcbiAgICAgICAgICB0aGlzLmF0cnVsZSh0b2tlbilcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgIHRoaXMuZW1wdHlSdWxlKHRva2VuKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLm90aGVyKHRva2VuKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW5kRmlsZSgpXG4gIH1cblxuICBwcmVjaGVja01pc3NlZFNlbWljb2xvbigvKiB0b2tlbnMgKi8pIHtcbiAgICAvLyBIb29rIGZvciBTYWZlIFBhcnNlclxuICB9XG5cbiAgcmF3KG5vZGUsIHByb3AsIHRva2VucywgY3VzdG9tUHJvcGVydHkpIHtcbiAgICBsZXQgdG9rZW4sIHR5cGVcbiAgICBsZXQgbGVuZ3RoID0gdG9rZW5zLmxlbmd0aFxuICAgIGxldCB2YWx1ZSA9ICcnXG4gICAgbGV0IGNsZWFuID0gdHJ1ZVxuICAgIGxldCBuZXh0LCBwcmV2XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0b2tlbiA9IHRva2Vuc1tpXVxuICAgICAgdHlwZSA9IHRva2VuWzBdXG4gICAgICBpZiAodHlwZSA9PT0gJ3NwYWNlJyAmJiBpID09PSBsZW5ndGggLSAxICYmICFjdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICBjbGVhbiA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb21tZW50Jykge1xuICAgICAgICBwcmV2ID0gdG9rZW5zW2kgLSAxXSA/IHRva2Vuc1tpIC0gMV1bMF0gOiAnZW1wdHknXG4gICAgICAgIG5leHQgPSB0b2tlbnNbaSArIDFdID8gdG9rZW5zW2kgKyAxXVswXSA6ICdlbXB0eSdcbiAgICAgICAgaWYgKCFTQUZFX0NPTU1FTlRfTkVJR0hCT1JbcHJldl0gJiYgIVNBRkVfQ09NTUVOVF9ORUlHSEJPUltuZXh0XSkge1xuICAgICAgICAgIGlmICh2YWx1ZS5zbGljZSgtMSkgPT09ICcsJykge1xuICAgICAgICAgICAgY2xlYW4gPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSArPSB0b2tlblsxXVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGVhbiA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlICs9IHRva2VuWzFdXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2xlYW4pIHtcbiAgICAgIGxldCByYXcgPSB0b2tlbnMucmVkdWNlKChhbGwsIGkpID0+IGFsbCArIGlbMV0sICcnKVxuICAgICAgbm9kZS5yYXdzW3Byb3BdID0geyByYXcsIHZhbHVlIH1cbiAgICB9XG4gICAgbm9kZVtwcm9wXSA9IHZhbHVlXG4gIH1cblxuICBydWxlKHRva2Vucykge1xuICAgIHRva2Vucy5wb3AoKVxuXG4gICAgbGV0IG5vZGUgPSBuZXcgUnVsZSgpXG4gICAgdGhpcy5pbml0KG5vZGUsIHRva2Vuc1swXVsyXSlcblxuICAgIG5vZGUucmF3cy5iZXR3ZWVuID0gdGhpcy5zcGFjZXNBbmRDb21tZW50c0Zyb21FbmQodG9rZW5zKVxuICAgIHRoaXMucmF3KG5vZGUsICdzZWxlY3RvcicsIHRva2VucylcbiAgICB0aGlzLmN1cnJlbnQgPSBub2RlXG4gIH1cblxuICBzcGFjZXNBbmRDb21tZW50c0Zyb21FbmQodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RUb2tlblR5cGVcbiAgICBsZXQgc3BhY2VzID0gJydcbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgICAgbGFzdFRva2VuVHlwZSA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1bMF1cbiAgICAgIGlmIChsYXN0VG9rZW5UeXBlICE9PSAnc3BhY2UnICYmIGxhc3RUb2tlblR5cGUgIT09ICdjb21tZW50JykgYnJlYWtcbiAgICAgIHNwYWNlcyA9IHRva2Vucy5wb3AoKVsxXSArIHNwYWNlc1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2VzXG4gIH1cblxuICAvLyBFcnJvcnNcblxuICBzcGFjZXNBbmRDb21tZW50c0Zyb21TdGFydCh0b2tlbnMpIHtcbiAgICBsZXQgbmV4dFxuICAgIGxldCBzcGFjZXMgPSAnJ1xuICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgICBuZXh0ID0gdG9rZW5zWzBdWzBdXG4gICAgICBpZiAobmV4dCAhPT0gJ3NwYWNlJyAmJiBuZXh0ICE9PSAnY29tbWVudCcpIGJyZWFrXG4gICAgICBzcGFjZXMgKz0gdG9rZW5zLnNoaWZ0KClbMV1cbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlc1xuICB9XG5cbiAgc3BhY2VzRnJvbUVuZCh0b2tlbnMpIHtcbiAgICBsZXQgbGFzdFRva2VuVHlwZVxuICAgIGxldCBzcGFjZXMgPSAnJ1xuICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgICBsYXN0VG9rZW5UeXBlID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXVswXVxuICAgICAgaWYgKGxhc3RUb2tlblR5cGUgIT09ICdzcGFjZScpIGJyZWFrXG4gICAgICBzcGFjZXMgPSB0b2tlbnMucG9wKClbMV0gKyBzcGFjZXNcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlc1xuICB9XG5cbiAgc3RyaW5nRnJvbSh0b2tlbnMsIGZyb20pIHtcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBmb3IgKGxldCBpID0gZnJvbTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ICs9IHRva2Vuc1tpXVsxXVxuICAgIH1cbiAgICB0b2tlbnMuc3BsaWNlKGZyb20sIHRva2Vucy5sZW5ndGggLSBmcm9tKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHVuY2xvc2VkQmxvY2soKSB7XG4gICAgbGV0IHBvcyA9IHRoaXMuY3VycmVudC5zb3VyY2Uuc3RhcnRcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKCdVbmNsb3NlZCBibG9jaycsIHBvcy5saW5lLCBwb3MuY29sdW1uKVxuICB9XG5cbiAgdW5jbG9zZWRCcmFja2V0KGJyYWNrZXQpIHtcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKFxuICAgICAgJ1VuY2xvc2VkIGJyYWNrZXQnLFxuICAgICAgeyBvZmZzZXQ6IGJyYWNrZXRbMl0gfSxcbiAgICAgIHsgb2Zmc2V0OiBicmFja2V0WzJdICsgMSB9XG4gICAgKVxuICB9XG5cbiAgdW5leHBlY3RlZENsb3NlKHRva2VuKSB7XG4gICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcihcbiAgICAgICdVbmV4cGVjdGVkIH0nLFxuICAgICAgeyBvZmZzZXQ6IHRva2VuWzJdIH0sXG4gICAgICB7IG9mZnNldDogdG9rZW5bMl0gKyAxIH1cbiAgICApXG4gIH1cblxuICB1bmtub3duV29yZCh0b2tlbnMpIHtcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKFxuICAgICAgJ1Vua25vd24gd29yZCAnICsgdG9rZW5zWzBdWzFdLFxuICAgICAgeyBvZmZzZXQ6IHRva2Vuc1swXVsyXSB9LFxuICAgICAgeyBvZmZzZXQ6IHRva2Vuc1swXVsyXSArIHRva2Vuc1swXVsxXS5sZW5ndGggfVxuICAgIClcbiAgfVxuXG4gIHVubmFtZWRBdHJ1bGUobm9kZSwgdG9rZW4pIHtcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKFxuICAgICAgJ0F0LXJ1bGUgd2l0aG91dCBuYW1lJyxcbiAgICAgIHsgb2Zmc2V0OiB0b2tlblsyXSB9LFxuICAgICAgeyBvZmZzZXQ6IHRva2VuWzJdICsgdG9rZW5bMV0ubGVuZ3RoIH1cbiAgICApXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZXJcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgQXRSdWxlID0gcmVxdWlyZSgnLi9hdC1ydWxlJylcbmxldCBDb21tZW50ID0gcmVxdWlyZSgnLi9jb21tZW50JylcbmxldCBDb250YWluZXIgPSByZXF1aXJlKCcuL2NvbnRhaW5lcicpXG5sZXQgQ3NzU3ludGF4RXJyb3IgPSByZXF1aXJlKCcuL2Nzcy1zeW50YXgtZXJyb3InKVxubGV0IERlY2xhcmF0aW9uID0gcmVxdWlyZSgnLi9kZWNsYXJhdGlvbicpXG5sZXQgRG9jdW1lbnQgPSByZXF1aXJlKCcuL2RvY3VtZW50JylcbmxldCBmcm9tSlNPTiA9IHJlcXVpcmUoJy4vZnJvbUpTT04nKVxubGV0IElucHV0ID0gcmVxdWlyZSgnLi9pbnB1dCcpXG5sZXQgTGF6eVJlc3VsdCA9IHJlcXVpcmUoJy4vbGF6eS1yZXN1bHQnKVxubGV0IGxpc3QgPSByZXF1aXJlKCcuL2xpc3QnKVxubGV0IE5vZGUgPSByZXF1aXJlKCcuL25vZGUnKVxubGV0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5sZXQgUHJvY2Vzc29yID0gcmVxdWlyZSgnLi9wcm9jZXNzb3InKVxubGV0IFJlc3VsdCA9IHJlcXVpcmUoJy4vcmVzdWx0LmpzJylcbmxldCBSb290ID0gcmVxdWlyZSgnLi9yb290JylcbmxldCBSdWxlID0gcmVxdWlyZSgnLi9ydWxlJylcbmxldCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpXG5sZXQgV2FybmluZyA9IHJlcXVpcmUoJy4vd2FybmluZycpXG5cbmZ1bmN0aW9uIHBvc3Rjc3MoLi4ucGx1Z2lucykge1xuICBpZiAocGx1Z2lucy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShwbHVnaW5zWzBdKSkge1xuICAgIHBsdWdpbnMgPSBwbHVnaW5zWzBdXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9jZXNzb3IocGx1Z2lucylcbn1cblxucG9zdGNzcy5wbHVnaW4gPSBmdW5jdGlvbiBwbHVnaW4obmFtZSwgaW5pdGlhbGl6ZXIpIHtcbiAgbGV0IHdhcm5pbmdQcmludGVkID0gZmFsc2VcbiAgZnVuY3Rpb24gY3JlYXRvciguLi5hcmdzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4gJiYgIXdhcm5pbmdQcmludGVkKSB7XG4gICAgICB3YXJuaW5nUHJpbnRlZCA9IHRydWVcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIG5hbWUgK1xuICAgICAgICAgICc6IHBvc3Rjc3MucGx1Z2luIHdhcyBkZXByZWNhdGVkLiBNaWdyYXRpb24gZ3VpZGU6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZXZpbG1hcnRpYW5zLmNvbS9jaHJvbmljbGVzL3Bvc3Rjc3MtOC1wbHVnaW4tbWlncmF0aW9uJ1xuICAgICAgKVxuICAgICAgaWYgKHByb2Nlc3MuZW52LkxBTkcgJiYgcHJvY2Vzcy5lbnYuTEFORy5zdGFydHNXaXRoKCdjbicpKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDcgKi9cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgJzog6YeM6Z2iIHBvc3Rjc3MucGx1Z2luIOiiq+W8g+eUqC4g6L+B56e75oyH5Y2XOlxcbicgK1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnczY3RlY2guY29tL3RvcGljLzIyMjYnXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRyYW5zZm9ybWVyID0gaW5pdGlhbGl6ZXIoLi4uYXJncylcbiAgICB0cmFuc2Zvcm1lci5wb3N0Y3NzUGx1Z2luID0gbmFtZVxuICAgIHRyYW5zZm9ybWVyLnBvc3Rjc3NWZXJzaW9uID0gbmV3IFByb2Nlc3NvcigpLnZlcnNpb25cbiAgICByZXR1cm4gdHJhbnNmb3JtZXJcbiAgfVxuXG4gIGxldCBjYWNoZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRvciwgJ3Bvc3Rjc3MnLCB7XG4gICAgZ2V0KCkge1xuICAgICAgaWYgKCFjYWNoZSkgY2FjaGUgPSBjcmVhdG9yKClcbiAgICAgIHJldHVybiBjYWNoZVxuICAgIH1cbiAgfSlcblxuICBjcmVhdG9yLnByb2Nlc3MgPSBmdW5jdGlvbiAoY3NzLCBwcm9jZXNzT3B0cywgcGx1Z2luT3B0cykge1xuICAgIHJldHVybiBwb3N0Y3NzKFtjcmVhdG9yKHBsdWdpbk9wdHMpXSkucHJvY2Vzcyhjc3MsIHByb2Nlc3NPcHRzKVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0b3Jcbn1cblxucG9zdGNzcy5zdHJpbmdpZnkgPSBzdHJpbmdpZnlcbnBvc3Rjc3MucGFyc2UgPSBwYXJzZVxucG9zdGNzcy5mcm9tSlNPTiA9IGZyb21KU09OXG5wb3N0Y3NzLmxpc3QgPSBsaXN0XG5cbnBvc3Rjc3MuY29tbWVudCA9IGRlZmF1bHRzID0+IG5ldyBDb21tZW50KGRlZmF1bHRzKVxucG9zdGNzcy5hdFJ1bGUgPSBkZWZhdWx0cyA9PiBuZXcgQXRSdWxlKGRlZmF1bHRzKVxucG9zdGNzcy5kZWNsID0gZGVmYXVsdHMgPT4gbmV3IERlY2xhcmF0aW9uKGRlZmF1bHRzKVxucG9zdGNzcy5ydWxlID0gZGVmYXVsdHMgPT4gbmV3IFJ1bGUoZGVmYXVsdHMpXG5wb3N0Y3NzLnJvb3QgPSBkZWZhdWx0cyA9PiBuZXcgUm9vdChkZWZhdWx0cylcbnBvc3Rjc3MuZG9jdW1lbnQgPSBkZWZhdWx0cyA9PiBuZXcgRG9jdW1lbnQoZGVmYXVsdHMpXG5cbnBvc3Rjc3MuQ3NzU3ludGF4RXJyb3IgPSBDc3NTeW50YXhFcnJvclxucG9zdGNzcy5EZWNsYXJhdGlvbiA9IERlY2xhcmF0aW9uXG5wb3N0Y3NzLkNvbnRhaW5lciA9IENvbnRhaW5lclxucG9zdGNzcy5Qcm9jZXNzb3IgPSBQcm9jZXNzb3JcbnBvc3Rjc3MuRG9jdW1lbnQgPSBEb2N1bWVudFxucG9zdGNzcy5Db21tZW50ID0gQ29tbWVudFxucG9zdGNzcy5XYXJuaW5nID0gV2FybmluZ1xucG9zdGNzcy5BdFJ1bGUgPSBBdFJ1bGVcbnBvc3Rjc3MuUmVzdWx0ID0gUmVzdWx0XG5wb3N0Y3NzLklucHV0ID0gSW5wdXRcbnBvc3Rjc3MuUnVsZSA9IFJ1bGVcbnBvc3Rjc3MuUm9vdCA9IFJvb3RcbnBvc3Rjc3MuTm9kZSA9IE5vZGVcblxuTGF6eVJlc3VsdC5yZWdpc3RlclBvc3Rjc3MocG9zdGNzcylcblxubW9kdWxlLmV4cG9ydHMgPSBwb3N0Y3NzXG5wb3N0Y3NzLmRlZmF1bHQgPSBwb3N0Y3NzXG4iLCIndXNlIHN0cmljdCdcblxubGV0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpXG5sZXQgeyBkaXJuYW1lLCBqb2luIH0gPSByZXF1aXJlKCdwYXRoJylcbmxldCB7IFNvdXJjZU1hcENvbnN1bWVyLCBTb3VyY2VNYXBHZW5lcmF0b3IgfSA9IHJlcXVpcmUoJ3NvdXJjZS1tYXAtanMnKVxuXG5mdW5jdGlvbiBmcm9tQmFzZTY0KHN0cikge1xuICBpZiAoQnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKClcbiAgfSBlbHNlIHtcbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAyICovXG4gICAgcmV0dXJuIHdpbmRvdy5hdG9iKHN0cilcbiAgfVxufVxuXG5jbGFzcyBQcmV2aW91c01hcCB7XG4gIGNvbnN0cnVjdG9yKGNzcywgb3B0cykge1xuICAgIGlmIChvcHRzLm1hcCA9PT0gZmFsc2UpIHJldHVyblxuICAgIHRoaXMubG9hZEFubm90YXRpb24oY3NzKVxuICAgIHRoaXMuaW5saW5lID0gdGhpcy5zdGFydFdpdGgodGhpcy5hbm5vdGF0aW9uLCAnZGF0YTonKVxuXG4gICAgbGV0IHByZXYgPSBvcHRzLm1hcCA/IG9wdHMubWFwLnByZXYgOiB1bmRlZmluZWRcbiAgICBsZXQgdGV4dCA9IHRoaXMubG9hZE1hcChvcHRzLmZyb20sIHByZXYpXG4gICAgaWYgKCF0aGlzLm1hcEZpbGUgJiYgb3B0cy5mcm9tKSB7XG4gICAgICB0aGlzLm1hcEZpbGUgPSBvcHRzLmZyb21cbiAgICB9XG4gICAgaWYgKHRoaXMubWFwRmlsZSkgdGhpcy5yb290ID0gZGlybmFtZSh0aGlzLm1hcEZpbGUpXG4gICAgaWYgKHRleHQpIHRoaXMudGV4dCA9IHRleHRcbiAgfVxuXG4gIGNvbnN1bWVyKCkge1xuICAgIGlmICghdGhpcy5jb25zdW1lckNhY2hlKSB7XG4gICAgICB0aGlzLmNvbnN1bWVyQ2FjaGUgPSBuZXcgU291cmNlTWFwQ29uc3VtZXIodGhpcy50ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25zdW1lckNhY2hlXG4gIH1cblxuICBkZWNvZGVJbmxpbmUodGV4dCkge1xuICAgIGxldCBiYXNlQ2hhcnNldFVyaSA9IC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247Y2hhcnNldD11dGYtPzg7YmFzZTY0LC9cbiAgICBsZXQgYmFzZVVyaSA9IC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247YmFzZTY0LC9cbiAgICBsZXQgY2hhcnNldFVyaSA9IC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247Y2hhcnNldD11dGYtPzgsL1xuICAgIGxldCB1cmkgPSAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uLC9cblxuICAgIGxldCB1cmlNYXRjaCA9IHRleHQubWF0Y2goY2hhcnNldFVyaSkgfHwgdGV4dC5tYXRjaCh1cmkpXG4gICAgaWYgKHVyaU1hdGNoKSB7XG4gICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHRleHQuc3Vic3RyKHVyaU1hdGNoWzBdLmxlbmd0aCkpXG4gICAgfVxuXG4gICAgbGV0IGJhc2VVcmlNYXRjaCA9IHRleHQubWF0Y2goYmFzZUNoYXJzZXRVcmkpIHx8IHRleHQubWF0Y2goYmFzZVVyaSlcbiAgICBpZiAoYmFzZVVyaU1hdGNoKSB7XG4gICAgICByZXR1cm4gZnJvbUJhc2U2NCh0ZXh0LnN1YnN0cihiYXNlVXJpTWF0Y2hbMF0ubGVuZ3RoKSlcbiAgICB9XG5cbiAgICBsZXQgZW5jb2RpbmcgPSB0ZXh0Lm1hdGNoKC9kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjsoW14sXSspLC8pWzFdXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzb3VyY2UgbWFwIGVuY29kaW5nICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIGdldEFubm90YXRpb25VUkwoc291cmNlTWFwU3RyaW5nKSB7XG4gICAgcmV0dXJuIHNvdXJjZU1hcFN0cmluZy5yZXBsYWNlKC9eXFwvXFwqXFxzKiMgc291cmNlTWFwcGluZ1VSTD0vLCAnJykudHJpbSgpXG4gIH1cblxuICBpc01hcChtYXApIHtcbiAgICBpZiAodHlwZW9mIG1hcCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgbWFwLm1hcHBpbmdzID09PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIG1hcC5fbWFwcGluZ3MgPT09ICdzdHJpbmcnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KG1hcC5zZWN0aW9ucylcbiAgICApXG4gIH1cblxuICBsb2FkQW5ub3RhdGlvbihjc3MpIHtcbiAgICBsZXQgY29tbWVudHMgPSBjc3MubWF0Y2goL1xcL1xcKlxccyojIHNvdXJjZU1hcHBpbmdVUkw9L2cpXG4gICAgaWYgKCFjb21tZW50cykgcmV0dXJuXG5cbiAgICAvLyBzb3VyY2VNYXBwaW5nVVJMcyBmcm9tIGNvbW1lbnRzLCBzdHJpbmdzLCBldGMuXG4gICAgbGV0IHN0YXJ0ID0gY3NzLmxhc3RJbmRleE9mKGNvbW1lbnRzLnBvcCgpKVxuICAgIGxldCBlbmQgPSBjc3MuaW5kZXhPZignKi8nLCBzdGFydClcblxuICAgIGlmIChzdGFydCA+IC0xICYmIGVuZCA+IC0xKSB7XG4gICAgICAvLyBMb2NhdGUgdGhlIGxhc3Qgc291cmNlTWFwcGluZ1VSTCB0byBhdm9pZCBwaWNraW5cbiAgICAgIHRoaXMuYW5ub3RhdGlvbiA9IHRoaXMuZ2V0QW5ub3RhdGlvblVSTChjc3Muc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKVxuICAgIH1cbiAgfVxuXG4gIGxvYWRGaWxlKHBhdGgpIHtcbiAgICB0aGlzLnJvb3QgPSBkaXJuYW1lKHBhdGgpXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgIHRoaXMubWFwRmlsZSA9IHBhdGhcbiAgICAgIHJldHVybiByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04JykudG9TdHJpbmcoKS50cmltKClcbiAgICB9XG4gIH1cblxuICBsb2FkTWFwKGZpbGUsIHByZXYpIHtcbiAgICBpZiAocHJldiA9PT0gZmFsc2UpIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJldiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHByZXYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IHByZXZQYXRoID0gcHJldihmaWxlKVxuICAgICAgICBpZiAocHJldlBhdGgpIHtcbiAgICAgICAgICBsZXQgbWFwID0gdGhpcy5sb2FkRmlsZShwcmV2UGF0aClcbiAgICAgICAgICBpZiAoIW1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnVW5hYmxlIHRvIGxvYWQgcHJldmlvdXMgc291cmNlIG1hcDogJyArIHByZXZQYXRoLnRvU3RyaW5nKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hcFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByZXYgaW5zdGFuY2VvZiBTb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICByZXR1cm4gU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAocHJldikudG9TdHJpbmcoKVxuICAgICAgfSBlbHNlIGlmIChwcmV2IGluc3RhbmNlb2YgU291cmNlTWFwR2VuZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBwcmV2LnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc01hcChwcmV2KSkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocHJldilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnVW5zdXBwb3J0ZWQgcHJldmlvdXMgc291cmNlIG1hcCBmb3JtYXQ6ICcgKyBwcmV2LnRvU3RyaW5nKClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pbmxpbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlY29kZUlubGluZSh0aGlzLmFubm90YXRpb24pXG4gICAgfSBlbHNlIGlmICh0aGlzLmFubm90YXRpb24pIHtcbiAgICAgIGxldCBtYXAgPSB0aGlzLmFubm90YXRpb25cbiAgICAgIGlmIChmaWxlKSBtYXAgPSBqb2luKGRpcm5hbWUoZmlsZSksIG1hcClcbiAgICAgIHJldHVybiB0aGlzLmxvYWRGaWxlKG1hcClcbiAgICB9XG4gIH1cblxuICBzdGFydFdpdGgoc3RyaW5nLCBzdGFydCkge1xuICAgIGlmICghc3RyaW5nKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gc3RyaW5nLnN1YnN0cigwLCBzdGFydC5sZW5ndGgpID09PSBzdGFydFxuICB9XG5cbiAgd2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgdGhpcy5jb25zdW1lcigpLnNvdXJjZXNDb250ZW50ICYmXG4gICAgICB0aGlzLmNvbnN1bWVyKCkuc291cmNlc0NvbnRlbnQubGVuZ3RoID4gMFxuICAgIClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByZXZpb3VzTWFwXG5QcmV2aW91c01hcC5kZWZhdWx0ID0gUHJldmlvdXNNYXBcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgRG9jdW1lbnQgPSByZXF1aXJlKCcuL2RvY3VtZW50JylcbmxldCBMYXp5UmVzdWx0ID0gcmVxdWlyZSgnLi9sYXp5LXJlc3VsdCcpXG5sZXQgTm9Xb3JrUmVzdWx0ID0gcmVxdWlyZSgnLi9uby13b3JrLXJlc3VsdCcpXG5sZXQgUm9vdCA9IHJlcXVpcmUoJy4vcm9vdCcpXG5cbmNsYXNzIFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKHBsdWdpbnMgPSBbXSkge1xuICAgIHRoaXMudmVyc2lvbiA9ICc4LjUuMydcbiAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLm5vcm1hbGl6ZShwbHVnaW5zKVxuICB9XG5cbiAgbm9ybWFsaXplKHBsdWdpbnMpIHtcbiAgICBsZXQgbm9ybWFsaXplZCA9IFtdXG4gICAgZm9yIChsZXQgaSBvZiBwbHVnaW5zKSB7XG4gICAgICBpZiAoaS5wb3N0Y3NzID09PSB0cnVlKSB7XG4gICAgICAgIGkgPSBpKClcbiAgICAgIH0gZWxzZSBpZiAoaS5wb3N0Y3NzKSB7XG4gICAgICAgIGkgPSBpLnBvc3Rjc3NcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KGkucGx1Z2lucykpIHtcbiAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuY29uY2F0KGkucGx1Z2lucylcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGkgPT09ICdvYmplY3QnICYmIGkucG9zdGNzc1BsdWdpbikge1xuICAgICAgICBub3JtYWxpemVkLnB1c2goaSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbm9ybWFsaXplZC5wdXNoKGkpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpID09PSAnb2JqZWN0JyAmJiAoaS5wYXJzZSB8fCBpLnN0cmluZ2lmeSkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnUG9zdENTUyBzeW50YXhlcyBjYW5ub3QgYmUgdXNlZCBhcyBwbHVnaW5zLiBJbnN0ZWFkLCBwbGVhc2UgdXNlICcgK1xuICAgICAgICAgICAgICAnb25lIG9mIHRoZSBzeW50YXgvcGFyc2VyL3N0cmluZ2lmaWVyIG9wdGlvbnMgYXMgb3V0bGluZWQgJyArXG4gICAgICAgICAgICAgICdpbiB5b3VyIFBvc3RDU1MgcnVubmVyIGRvY3VtZW50YXRpb24uJ1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGkgKyAnIGlzIG5vdCBhIFBvc3RDU1MgcGx1Z2luJylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIHByb2Nlc3MoY3NzLCBvcHRzID0ge30pIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5wbHVnaW5zLmxlbmd0aCAmJlxuICAgICAgIW9wdHMucGFyc2VyICYmXG4gICAgICAhb3B0cy5zdHJpbmdpZmllciAmJlxuICAgICAgIW9wdHMuc3ludGF4XG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IE5vV29ya1Jlc3VsdCh0aGlzLCBjc3MsIG9wdHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgTGF6eVJlc3VsdCh0aGlzLCBjc3MsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgdXNlKHBsdWdpbikge1xuICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucy5jb25jYXQodGhpcy5ub3JtYWxpemUoW3BsdWdpbl0pKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9jZXNzb3JcblByb2Nlc3Nvci5kZWZhdWx0ID0gUHJvY2Vzc29yXG5cblJvb3QucmVnaXN0ZXJQcm9jZXNzb3IoUHJvY2Vzc29yKVxuRG9jdW1lbnQucmVnaXN0ZXJQcm9jZXNzb3IoUHJvY2Vzc29yKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmxldCBXYXJuaW5nID0gcmVxdWlyZSgnLi93YXJuaW5nJylcblxuY2xhc3MgUmVzdWx0IHtcbiAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NzXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9jZXNzb3IsIHJvb3QsIG9wdHMpIHtcbiAgICB0aGlzLnByb2Nlc3NvciA9IHByb2Nlc3NvclxuICAgIHRoaXMubWVzc2FnZXMgPSBbXVxuICAgIHRoaXMucm9vdCA9IHJvb3RcbiAgICB0aGlzLm9wdHMgPSBvcHRzXG4gICAgdGhpcy5jc3MgPSB1bmRlZmluZWRcbiAgICB0aGlzLm1hcCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NzXG4gIH1cblxuICB3YXJuKHRleHQsIG9wdHMgPSB7fSkge1xuICAgIGlmICghb3B0cy5wbHVnaW4pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RQbHVnaW4gJiYgdGhpcy5sYXN0UGx1Z2luLnBvc3Rjc3NQbHVnaW4pIHtcbiAgICAgICAgb3B0cy5wbHVnaW4gPSB0aGlzLmxhc3RQbHVnaW4ucG9zdGNzc1BsdWdpblxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB3YXJuaW5nID0gbmV3IFdhcm5pbmcodGV4dCwgb3B0cylcbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2god2FybmluZylcblxuICAgIHJldHVybiB3YXJuaW5nXG4gIH1cblxuICB3YXJuaW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlcy5maWx0ZXIoaSA9PiBpLnR5cGUgPT09ICd3YXJuaW5nJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3VsdFxuUmVzdWx0LmRlZmF1bHQgPSBSZXN1bHRcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgQ29udGFpbmVyID0gcmVxdWlyZSgnLi9jb250YWluZXInKVxuXG5sZXQgTGF6eVJlc3VsdCwgUHJvY2Vzc29yXG5cbmNsYXNzIFJvb3QgZXh0ZW5kcyBDb250YWluZXIge1xuICBjb25zdHJ1Y3RvcihkZWZhdWx0cykge1xuICAgIHN1cGVyKGRlZmF1bHRzKVxuICAgIHRoaXMudHlwZSA9ICdyb290J1xuICAgIGlmICghdGhpcy5ub2RlcykgdGhpcy5ub2RlcyA9IFtdXG4gIH1cblxuICBub3JtYWxpemUoY2hpbGQsIHNhbXBsZSwgdHlwZSkge1xuICAgIGxldCBub2RlcyA9IHN1cGVyLm5vcm1hbGl6ZShjaGlsZClcblxuICAgIGlmIChzYW1wbGUpIHtcbiAgICAgIGlmICh0eXBlID09PSAncHJlcGVuZCcpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHNhbXBsZS5yYXdzLmJlZm9yZSA9IHRoaXMubm9kZXNbMV0ucmF3cy5iZWZvcmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgc2FtcGxlLnJhd3MuYmVmb3JlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maXJzdCAhPT0gc2FtcGxlKSB7XG4gICAgICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICBub2RlLnJhd3MuYmVmb3JlID0gc2FtcGxlLnJhd3MuYmVmb3JlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZXNcbiAgfVxuXG4gIHJlbW92ZUNoaWxkKGNoaWxkLCBpZ25vcmUpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4KGNoaWxkKVxuXG4gICAgaWYgKCFpZ25vcmUgJiYgaW5kZXggPT09IDAgJiYgdGhpcy5ub2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLm5vZGVzWzFdLnJhd3MuYmVmb3JlID0gdGhpcy5ub2Rlc1tpbmRleF0ucmF3cy5iZWZvcmVcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQoY2hpbGQpXG4gIH1cblxuICB0b1Jlc3VsdChvcHRzID0ge30pIHtcbiAgICBsZXQgbGF6eSA9IG5ldyBMYXp5UmVzdWx0KG5ldyBQcm9jZXNzb3IoKSwgdGhpcywgb3B0cylcbiAgICByZXR1cm4gbGF6eS5zdHJpbmdpZnkoKVxuICB9XG59XG5cblJvb3QucmVnaXN0ZXJMYXp5UmVzdWx0ID0gZGVwZW5kYW50ID0+IHtcbiAgTGF6eVJlc3VsdCA9IGRlcGVuZGFudFxufVxuXG5Sb290LnJlZ2lzdGVyUHJvY2Vzc29yID0gZGVwZW5kYW50ID0+IHtcbiAgUHJvY2Vzc29yID0gZGVwZW5kYW50XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUm9vdFxuUm9vdC5kZWZhdWx0ID0gUm9vdFxuXG5Db250YWluZXIucmVnaXN0ZXJSb290KFJvb3QpXG4iLCIndXNlIHN0cmljdCdcblxubGV0IENvbnRhaW5lciA9IHJlcXVpcmUoJy4vY29udGFpbmVyJylcbmxldCBsaXN0ID0gcmVxdWlyZSgnLi9saXN0JylcblxuY2xhc3MgUnVsZSBleHRlbmRzIENvbnRhaW5lciB7XG4gIGdldCBzZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIGxpc3QuY29tbWEodGhpcy5zZWxlY3RvcilcbiAgfVxuXG4gIHNldCBzZWxlY3RvcnModmFsdWVzKSB7XG4gICAgbGV0IG1hdGNoID0gdGhpcy5zZWxlY3RvciA/IHRoaXMuc2VsZWN0b3IubWF0Y2goLyxcXHMqLykgOiBudWxsXG4gICAgbGV0IHNlcCA9IG1hdGNoID8gbWF0Y2hbMF0gOiAnLCcgKyB0aGlzLnJhdygnYmV0d2VlbicsICdiZWZvcmVPcGVuJylcbiAgICB0aGlzLnNlbGVjdG9yID0gdmFsdWVzLmpvaW4oc2VwKVxuICB9XG5cbiAgY29uc3RydWN0b3IoZGVmYXVsdHMpIHtcbiAgICBzdXBlcihkZWZhdWx0cylcbiAgICB0aGlzLnR5cGUgPSAncnVsZSdcbiAgICBpZiAoIXRoaXMubm9kZXMpIHRoaXMubm9kZXMgPSBbXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUnVsZVxuUnVsZS5kZWZhdWx0ID0gUnVsZVxuXG5Db250YWluZXIucmVnaXN0ZXJSdWxlKFJ1bGUpXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgREVGQVVMVF9SQVcgPSB7XG4gIGFmdGVyOiAnXFxuJyxcbiAgYmVmb3JlQ2xvc2U6ICdcXG4nLFxuICBiZWZvcmVDb21tZW50OiAnXFxuJyxcbiAgYmVmb3JlRGVjbDogJ1xcbicsXG4gIGJlZm9yZU9wZW46ICcgJyxcbiAgYmVmb3JlUnVsZTogJ1xcbicsXG4gIGNvbG9uOiAnOiAnLFxuICBjb21tZW50TGVmdDogJyAnLFxuICBjb21tZW50UmlnaHQ6ICcgJyxcbiAgZW1wdHlCb2R5OiAnJyxcbiAgaW5kZW50OiAnICAgICcsXG4gIHNlbWljb2xvbjogZmFsc2Vcbn1cblxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59XG5cbmNsYXNzIFN0cmluZ2lmaWVyIHtcbiAgY29uc3RydWN0b3IoYnVpbGRlcikge1xuICAgIHRoaXMuYnVpbGRlciA9IGJ1aWxkZXJcbiAgfVxuXG4gIGF0cnVsZShub2RlLCBzZW1pY29sb24pIHtcbiAgICBsZXQgbmFtZSA9ICdAJyArIG5vZGUubmFtZVxuICAgIGxldCBwYXJhbXMgPSBub2RlLnBhcmFtcyA/IHRoaXMucmF3VmFsdWUobm9kZSwgJ3BhcmFtcycpIDogJydcblxuICAgIGlmICh0eXBlb2Ygbm9kZS5yYXdzLmFmdGVyTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5hbWUgKz0gbm9kZS5yYXdzLmFmdGVyTmFtZVxuICAgIH0gZWxzZSBpZiAocGFyYW1zKSB7XG4gICAgICBuYW1lICs9ICcgJ1xuICAgIH1cblxuICAgIGlmIChub2RlLm5vZGVzKSB7XG4gICAgICB0aGlzLmJsb2NrKG5vZGUsIG5hbWUgKyBwYXJhbXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBlbmQgPSAobm9kZS5yYXdzLmJldHdlZW4gfHwgJycpICsgKHNlbWljb2xvbiA/ICc7JyA6ICcnKVxuICAgICAgdGhpcy5idWlsZGVyKG5hbWUgKyBwYXJhbXMgKyBlbmQsIG5vZGUpXG4gICAgfVxuICB9XG5cbiAgYmVmb3JlQWZ0ZXIobm9kZSwgZGV0ZWN0KSB7XG4gICAgbGV0IHZhbHVlXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucmF3KG5vZGUsIG51bGwsICdiZWZvcmVEZWNsJylcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucmF3KG5vZGUsIG51bGwsICdiZWZvcmVDb21tZW50JylcbiAgICB9IGVsc2UgaWYgKGRldGVjdCA9PT0gJ2JlZm9yZScpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5yYXcobm9kZSwgbnVsbCwgJ2JlZm9yZVJ1bGUnKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucmF3KG5vZGUsIG51bGwsICdiZWZvcmVDbG9zZScpXG4gICAgfVxuXG4gICAgbGV0IGJ1ZiA9IG5vZGUucGFyZW50XG4gICAgbGV0IGRlcHRoID0gMFxuICAgIHdoaWxlIChidWYgJiYgYnVmLnR5cGUgIT09ICdyb290Jykge1xuICAgICAgZGVwdGggKz0gMVxuICAgICAgYnVmID0gYnVmLnBhcmVudFxuICAgIH1cblxuICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgIGxldCBpbmRlbnQgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnaW5kZW50JylcbiAgICAgIGlmIChpbmRlbnQubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IHN0ZXAgPSAwOyBzdGVwIDwgZGVwdGg7IHN0ZXArKykgdmFsdWUgKz0gaW5kZW50XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBibG9jayhub2RlLCBzdGFydCkge1xuICAgIGxldCBiZXR3ZWVuID0gdGhpcy5yYXcobm9kZSwgJ2JldHdlZW4nLCAnYmVmb3JlT3BlbicpXG4gICAgdGhpcy5idWlsZGVyKHN0YXJ0ICsgYmV0d2VlbiArICd7Jywgbm9kZSwgJ3N0YXJ0JylcblxuICAgIGxldCBhZnRlclxuICAgIGlmIChub2RlLm5vZGVzICYmIG5vZGUubm9kZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmJvZHkobm9kZSlcbiAgICAgIGFmdGVyID0gdGhpcy5yYXcobm9kZSwgJ2FmdGVyJylcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXIgPSB0aGlzLnJhdyhub2RlLCAnYWZ0ZXInLCAnZW1wdHlCb2R5JylcbiAgICB9XG5cbiAgICBpZiAoYWZ0ZXIpIHRoaXMuYnVpbGRlcihhZnRlcilcbiAgICB0aGlzLmJ1aWxkZXIoJ30nLCBub2RlLCAnZW5kJylcbiAgfVxuXG4gIGJvZHkobm9kZSkge1xuICAgIGxldCBsYXN0ID0gbm9kZS5ub2Rlcy5sZW5ndGggLSAxXG4gICAgd2hpbGUgKGxhc3QgPiAwKSB7XG4gICAgICBpZiAobm9kZS5ub2Rlc1tsYXN0XS50eXBlICE9PSAnY29tbWVudCcpIGJyZWFrXG4gICAgICBsYXN0IC09IDFcbiAgICB9XG5cbiAgICBsZXQgc2VtaWNvbG9uID0gdGhpcy5yYXcobm9kZSwgJ3NlbWljb2xvbicpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGQgPSBub2RlLm5vZGVzW2ldXG4gICAgICBsZXQgYmVmb3JlID0gdGhpcy5yYXcoY2hpbGQsICdiZWZvcmUnKVxuICAgICAgaWYgKGJlZm9yZSkgdGhpcy5idWlsZGVyKGJlZm9yZSlcbiAgICAgIHRoaXMuc3RyaW5naWZ5KGNoaWxkLCBsYXN0ICE9PSBpIHx8IHNlbWljb2xvbilcbiAgICB9XG4gIH1cblxuICBjb21tZW50KG5vZGUpIHtcbiAgICBsZXQgbGVmdCA9IHRoaXMucmF3KG5vZGUsICdsZWZ0JywgJ2NvbW1lbnRMZWZ0JylcbiAgICBsZXQgcmlnaHQgPSB0aGlzLnJhdyhub2RlLCAncmlnaHQnLCAnY29tbWVudFJpZ2h0JylcbiAgICB0aGlzLmJ1aWxkZXIoJy8qJyArIGxlZnQgKyBub2RlLnRleHQgKyByaWdodCArICcqLycsIG5vZGUpXG4gIH1cblxuICBkZWNsKG5vZGUsIHNlbWljb2xvbikge1xuICAgIGxldCBiZXR3ZWVuID0gdGhpcy5yYXcobm9kZSwgJ2JldHdlZW4nLCAnY29sb24nKVxuICAgIGxldCBzdHJpbmcgPSBub2RlLnByb3AgKyBiZXR3ZWVuICsgdGhpcy5yYXdWYWx1ZShub2RlLCAndmFsdWUnKVxuXG4gICAgaWYgKG5vZGUuaW1wb3J0YW50KSB7XG4gICAgICBzdHJpbmcgKz0gbm9kZS5yYXdzLmltcG9ydGFudCB8fCAnICFpbXBvcnRhbnQnXG4gICAgfVxuXG4gICAgaWYgKHNlbWljb2xvbikgc3RyaW5nICs9ICc7J1xuICAgIHRoaXMuYnVpbGRlcihzdHJpbmcsIG5vZGUpXG4gIH1cblxuICBkb2N1bWVudChub2RlKSB7XG4gICAgdGhpcy5ib2R5KG5vZGUpXG4gIH1cblxuICByYXcobm9kZSwgb3duLCBkZXRlY3QpIHtcbiAgICBsZXQgdmFsdWVcbiAgICBpZiAoIWRldGVjdCkgZGV0ZWN0ID0gb3duXG5cbiAgICAvLyBBbHJlYWR5IGhhZFxuICAgIGlmIChvd24pIHtcbiAgICAgIHZhbHVlID0gbm9kZS5yYXdzW293bl1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gdmFsdWVcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnRcblxuICAgIGlmIChkZXRlY3QgPT09ICdiZWZvcmUnKSB7XG4gICAgICAvLyBIYWNrIGZvciBmaXJzdCBydWxlIGluIENTU1xuICAgICAgaWYgKCFwYXJlbnQgfHwgKHBhcmVudC50eXBlID09PSAncm9vdCcgJiYgcGFyZW50LmZpcnN0ID09PSBub2RlKSkge1xuICAgICAgICByZXR1cm4gJydcbiAgICAgIH1cblxuICAgICAgLy8gYHJvb3RgIG5vZGVzIGluIGBkb2N1bWVudGAgc2hvdWxkIHVzZSBvbmx5IHRoZWlyIG93biByYXdzXG4gICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnZG9jdW1lbnQnKSB7XG4gICAgICAgIHJldHVybiAnJ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZsb2F0aW5nIGNoaWxkIHdpdGhvdXQgcGFyZW50XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybiBERUZBVUxUX1JBV1tkZXRlY3RdXG5cbiAgICAvLyBEZXRlY3Qgc3R5bGUgYnkgb3RoZXIgbm9kZXNcbiAgICBsZXQgcm9vdCA9IG5vZGUucm9vdCgpXG4gICAgaWYgKCFyb290LnJhd0NhY2hlKSByb290LnJhd0NhY2hlID0ge31cbiAgICBpZiAodHlwZW9mIHJvb3QucmF3Q2FjaGVbZGV0ZWN0XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiByb290LnJhd0NhY2hlW2RldGVjdF1cbiAgICB9XG5cbiAgICBpZiAoZGV0ZWN0ID09PSAnYmVmb3JlJyB8fCBkZXRlY3QgPT09ICdhZnRlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlZm9yZUFmdGVyKG5vZGUsIGRldGVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1ldGhvZCA9ICdyYXcnICsgY2FwaXRhbGl6ZShkZXRlY3QpXG4gICAgICBpZiAodGhpc1ttZXRob2RdKSB7XG4gICAgICAgIHZhbHVlID0gdGhpc1ttZXRob2RdKHJvb3QsIG5vZGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290LndhbGsoaSA9PiB7XG4gICAgICAgICAgdmFsdWUgPSBpLnJhd3Nbb3duXVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykgdmFsdWUgPSBERUZBVUxUX1JBV1tkZXRlY3RdXG5cbiAgICByb290LnJhd0NhY2hlW2RldGVjdF0gPSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3QmVmb3JlQ2xvc2Uocm9vdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIHJvb3Qud2FsayhpID0+IHtcbiAgICAgIGlmIChpLm5vZGVzICYmIGkubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodHlwZW9mIGkucmF3cy5hZnRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YWx1ZSA9IGkucmF3cy5hZnRlclxuICAgICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXG5dKyQvLCAnJylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICh2YWx1ZSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXFMvZywgJycpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByYXdCZWZvcmVDb21tZW50KHJvb3QsIG5vZGUpIHtcbiAgICBsZXQgdmFsdWVcbiAgICByb290LndhbGtDb21tZW50cyhpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaS5yYXdzLmJlZm9yZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFsdWUgPSBpLnJhd3MuYmVmb3JlXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxuXSskLywgJycpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlRGVjbCcpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXFMvZywgJycpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3QmVmb3JlRGVjbChyb290LCBub2RlKSB7XG4gICAgbGV0IHZhbHVlXG4gICAgcm9vdC53YWxrRGVjbHMoaSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkucmF3cy5iZWZvcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlID0gaS5yYXdzLmJlZm9yZVxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcbl0rJC8sICcnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5yYXcobm9kZSwgbnVsbCwgJ2JlZm9yZVJ1bGUnKVxuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxTL2csICcnKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJhd0JlZm9yZU9wZW4ocm9vdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIHJvb3Qud2FsayhpID0+IHtcbiAgICAgIGlmIChpLnR5cGUgIT09ICdkZWNsJykge1xuICAgICAgICB2YWx1ZSA9IGkucmF3cy5iZXR3ZWVuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3QmVmb3JlUnVsZShyb290KSB7XG4gICAgbGV0IHZhbHVlXG4gICAgcm9vdC53YWxrKGkgPT4ge1xuICAgICAgaWYgKGkubm9kZXMgJiYgKGkucGFyZW50ICE9PSByb290IHx8IHJvb3QuZmlyc3QgIT09IGkpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaS5yYXdzLmJlZm9yZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YWx1ZSA9IGkucmF3cy5iZWZvcmVcbiAgICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxuXSskLywgJycpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAodmFsdWUpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxTL2csICcnKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3Q29sb24ocm9vdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIHJvb3Qud2Fsa0RlY2xzKGkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpLnJhd3MuYmV0d2VlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFsdWUgPSBpLnJhd3MuYmV0d2Vlbi5yZXBsYWNlKC9bXlxcczpdL2csICcnKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3RW1wdHlCb2R5KHJvb3QpIHtcbiAgICBsZXQgdmFsdWVcbiAgICByb290LndhbGsoaSA9PiB7XG4gICAgICBpZiAoaS5ub2RlcyAmJiBpLm5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YWx1ZSA9IGkucmF3cy5hZnRlclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJhd0luZGVudChyb290KSB7XG4gICAgaWYgKHJvb3QucmF3cy5pbmRlbnQpIHJldHVybiByb290LnJhd3MuaW5kZW50XG4gICAgbGV0IHZhbHVlXG4gICAgcm9vdC53YWxrKGkgPT4ge1xuICAgICAgbGV0IHAgPSBpLnBhcmVudFxuICAgICAgaWYgKHAgJiYgcCAhPT0gcm9vdCAmJiBwLnBhcmVudCAmJiBwLnBhcmVudCA9PT0gcm9vdCkge1xuICAgICAgICBpZiAodHlwZW9mIGkucmF3cy5iZWZvcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbGV0IHBhcnRzID0gaS5yYXdzLmJlZm9yZS5zcGxpdCgnXFxuJylcbiAgICAgICAgICB2YWx1ZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXFMvZywgJycpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3U2VtaWNvbG9uKHJvb3QpIHtcbiAgICBsZXQgdmFsdWVcbiAgICByb290LndhbGsoaSA9PiB7XG4gICAgICBpZiAoaS5ub2RlcyAmJiBpLm5vZGVzLmxlbmd0aCAmJiBpLmxhc3QudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgICAgIHZhbHVlID0gaS5yYXdzLnNlbWljb2xvblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJhd1ZhbHVlKG5vZGUsIHByb3ApIHtcbiAgICBsZXQgdmFsdWUgPSBub2RlW3Byb3BdXG4gICAgbGV0IHJhdyA9IG5vZGUucmF3c1twcm9wXVxuICAgIGlmIChyYXcgJiYgcmF3LnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHJhdy5yYXdcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJvb3Qobm9kZSkge1xuICAgIHRoaXMuYm9keShub2RlKVxuICAgIGlmIChub2RlLnJhd3MuYWZ0ZXIpIHRoaXMuYnVpbGRlcihub2RlLnJhd3MuYWZ0ZXIpXG4gIH1cblxuICBydWxlKG5vZGUpIHtcbiAgICB0aGlzLmJsb2NrKG5vZGUsIHRoaXMucmF3VmFsdWUobm9kZSwgJ3NlbGVjdG9yJykpXG4gICAgaWYgKG5vZGUucmF3cy5vd25TZW1pY29sb24pIHtcbiAgICAgIHRoaXMuYnVpbGRlcihub2RlLnJhd3Mub3duU2VtaWNvbG9uLCBub2RlLCAnZW5kJylcbiAgICB9XG4gIH1cblxuICBzdHJpbmdpZnkobm9kZSwgc2VtaWNvbG9uKSB7XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgaWYgKCF0aGlzW25vZGUudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1Vua25vd24gQVNUIG5vZGUgdHlwZSAnICtcbiAgICAgICAgICBub2RlLnR5cGUgK1xuICAgICAgICAgICcuICcgK1xuICAgICAgICAgICdNYXliZSB5b3UgbmVlZCB0byBjaGFuZ2UgUG9zdENTUyBzdHJpbmdpZmllci4nXG4gICAgICApXG4gICAgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgdGhpc1tub2RlLnR5cGVdKG5vZGUsIHNlbWljb2xvbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZ2lmaWVyXG5TdHJpbmdpZmllci5kZWZhdWx0ID0gU3RyaW5naWZpZXJcbiIsIid1c2Ugc3RyaWN0J1xuXG5sZXQgU3RyaW5naWZpZXIgPSByZXF1aXJlKCcuL3N0cmluZ2lmaWVyJylcblxuZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUsIGJ1aWxkZXIpIHtcbiAgbGV0IHN0ciA9IG5ldyBTdHJpbmdpZmllcihidWlsZGVyKVxuICBzdHIuc3RyaW5naWZ5KG5vZGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5naWZ5XG5zdHJpbmdpZnkuZGVmYXVsdCA9IHN0cmluZ2lmeVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzLmlzQ2xlYW4gPSBTeW1ib2woJ2lzQ2xlYW4nKVxuXG5tb2R1bGUuZXhwb3J0cy5teSA9IFN5bWJvbCgnbXknKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNJTkdMRV9RVU9URSA9IFwiJ1wiLmNoYXJDb2RlQXQoMClcbmNvbnN0IERPVUJMRV9RVU9URSA9ICdcIicuY2hhckNvZGVBdCgwKVxuY29uc3QgQkFDS1NMQVNIID0gJ1xcXFwnLmNoYXJDb2RlQXQoMClcbmNvbnN0IFNMQVNIID0gJy8nLmNoYXJDb2RlQXQoMClcbmNvbnN0IE5FV0xJTkUgPSAnXFxuJy5jaGFyQ29kZUF0KDApXG5jb25zdCBTUEFDRSA9ICcgJy5jaGFyQ29kZUF0KDApXG5jb25zdCBGRUVEID0gJ1xcZicuY2hhckNvZGVBdCgwKVxuY29uc3QgVEFCID0gJ1xcdCcuY2hhckNvZGVBdCgwKVxuY29uc3QgQ1IgPSAnXFxyJy5jaGFyQ29kZUF0KDApXG5jb25zdCBPUEVOX1NRVUFSRSA9ICdbJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDTE9TRV9TUVVBUkUgPSAnXScuY2hhckNvZGVBdCgwKVxuY29uc3QgT1BFTl9QQVJFTlRIRVNFUyA9ICcoJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDTE9TRV9QQVJFTlRIRVNFUyA9ICcpJy5jaGFyQ29kZUF0KDApXG5jb25zdCBPUEVOX0NVUkxZID0gJ3snLmNoYXJDb2RlQXQoMClcbmNvbnN0IENMT1NFX0NVUkxZID0gJ30nLmNoYXJDb2RlQXQoMClcbmNvbnN0IFNFTUlDT0xPTiA9ICc7Jy5jaGFyQ29kZUF0KDApXG5jb25zdCBBU1RFUklTSyA9ICcqJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDT0xPTiA9ICc6Jy5jaGFyQ29kZUF0KDApXG5jb25zdCBBVCA9ICdAJy5jaGFyQ29kZUF0KDApXG5cbmNvbnN0IFJFX0FUX0VORCA9IC9bXFx0XFxuXFxmXFxyIFwiIycoKS87W1xcXFxcXF17fV0vZ1xuY29uc3QgUkVfV09SRF9FTkQgPSAvW1xcdFxcblxcZlxcciAhXCIjJygpOjtAW1xcXFxcXF17fV18XFwvKD89XFwqKS9nXG5jb25zdCBSRV9CQURfQlJBQ0tFVCA9IC8uW1xcclxcblwiJygvXFxcXF0vXG5jb25zdCBSRV9IRVhfRVNDQVBFID0gL1tcXGRhLWZdL2lcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0b2tlbml6ZXIoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgY3NzID0gaW5wdXQuY3NzLnZhbHVlT2YoKVxuICBsZXQgaWdub3JlID0gb3B0aW9ucy5pZ25vcmVFcnJvcnNcblxuICBsZXQgY29kZSwgY29udGVudCwgZXNjYXBlLCBuZXh0LCBxdW90ZVxuICBsZXQgY3VycmVudFRva2VuLCBlc2NhcGVkLCBlc2NhcGVQb3MsIG4sIHByZXZcblxuICBsZXQgbGVuZ3RoID0gY3NzLmxlbmd0aFxuICBsZXQgcG9zID0gMFxuICBsZXQgYnVmZmVyID0gW11cbiAgbGV0IHJldHVybmVkID0gW11cblxuICBmdW5jdGlvbiBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICBmdW5jdGlvbiB1bmNsb3NlZCh3aGF0KSB7XG4gICAgdGhyb3cgaW5wdXQuZXJyb3IoJ1VuY2xvc2VkICcgKyB3aGF0LCBwb3MpXG4gIH1cblxuICBmdW5jdGlvbiBlbmRPZkZpbGUoKSB7XG4gICAgcmV0dXJuIHJldHVybmVkLmxlbmd0aCA9PT0gMCAmJiBwb3MgPj0gbGVuZ3RoXG4gIH1cblxuICBmdW5jdGlvbiBuZXh0VG9rZW4ob3B0cykge1xuICAgIGlmIChyZXR1cm5lZC5sZW5ndGgpIHJldHVybiByZXR1cm5lZC5wb3AoKVxuICAgIGlmIChwb3MgPj0gbGVuZ3RoKSByZXR1cm5cblxuICAgIGxldCBpZ25vcmVVbmNsb3NlZCA9IG9wdHMgPyBvcHRzLmlnbm9yZVVuY2xvc2VkIDogZmFsc2VcblxuICAgIGNvZGUgPSBjc3MuY2hhckNvZGVBdChwb3MpXG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgTkVXTElORTpcbiAgICAgIGNhc2UgU1BBQ0U6XG4gICAgICBjYXNlIFRBQjpcbiAgICAgIGNhc2UgQ1I6XG4gICAgICBjYXNlIEZFRUQ6IHtcbiAgICAgICAgbmV4dCA9IHBvc1xuICAgICAgICBkbyB7XG4gICAgICAgICAgbmV4dCArPSAxXG4gICAgICAgICAgY29kZSA9IGNzcy5jaGFyQ29kZUF0KG5leHQpXG4gICAgICAgIH0gd2hpbGUgKFxuICAgICAgICAgIGNvZGUgPT09IFNQQUNFIHx8XG4gICAgICAgICAgY29kZSA9PT0gTkVXTElORSB8fFxuICAgICAgICAgIGNvZGUgPT09IFRBQiB8fFxuICAgICAgICAgIGNvZGUgPT09IENSIHx8XG4gICAgICAgICAgY29kZSA9PT0gRkVFRFxuICAgICAgICApXG5cbiAgICAgICAgY3VycmVudFRva2VuID0gWydzcGFjZScsIGNzcy5zbGljZShwb3MsIG5leHQpXVxuICAgICAgICBwb3MgPSBuZXh0IC0gMVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlIE9QRU5fU1FVQVJFOlxuICAgICAgY2FzZSBDTE9TRV9TUVVBUkU6XG4gICAgICBjYXNlIE9QRU5fQ1VSTFk6XG4gICAgICBjYXNlIENMT1NFX0NVUkxZOlxuICAgICAgY2FzZSBDT0xPTjpcbiAgICAgIGNhc2UgU0VNSUNPTE9OOlxuICAgICAgY2FzZSBDTE9TRV9QQVJFTlRIRVNFUzoge1xuICAgICAgICBsZXQgY29udHJvbENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IFtjb250cm9sQ2hhciwgY29udHJvbENoYXIsIHBvc11cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSBPUEVOX1BBUkVOVEhFU0VTOiB7XG4gICAgICAgIHByZXYgPSBidWZmZXIubGVuZ3RoID8gYnVmZmVyLnBvcCgpWzFdIDogJydcbiAgICAgICAgbiA9IGNzcy5jaGFyQ29kZUF0KHBvcyArIDEpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2ID09PSAndXJsJyAmJlxuICAgICAgICAgIG4gIT09IFNJTkdMRV9RVU9URSAmJlxuICAgICAgICAgIG4gIT09IERPVUJMRV9RVU9URSAmJlxuICAgICAgICAgIG4gIT09IFNQQUNFICYmXG4gICAgICAgICAgbiAhPT0gTkVXTElORSAmJlxuICAgICAgICAgIG4gIT09IFRBQiAmJlxuICAgICAgICAgIG4gIT09IEZFRUQgJiZcbiAgICAgICAgICBuICE9PSBDUlxuICAgICAgICApIHtcbiAgICAgICAgICBuZXh0ID0gcG9zXG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlXG4gICAgICAgICAgICBuZXh0ID0gY3NzLmluZGV4T2YoJyknLCBuZXh0ICsgMSlcbiAgICAgICAgICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgICAgICAgICBpZiAoaWdub3JlIHx8IGlnbm9yZVVuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IHBvc1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5jbG9zZWQoJ2JyYWNrZXQnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlc2NhcGVQb3MgPSBuZXh0XG4gICAgICAgICAgICB3aGlsZSAoY3NzLmNoYXJDb2RlQXQoZXNjYXBlUG9zIC0gMSkgPT09IEJBQ0tTTEFTSCkge1xuICAgICAgICAgICAgICBlc2NhcGVQb3MgLT0gMVxuICAgICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IHdoaWxlIChlc2NhcGVkKVxuXG4gICAgICAgICAgY3VycmVudFRva2VuID0gWydicmFja2V0cycsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSwgcG9zLCBuZXh0XVxuXG4gICAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQgPSBjc3MuaW5kZXhPZignKScsIHBvcyArIDEpXG4gICAgICAgICAgY29udGVudCA9IGNzcy5zbGljZShwb3MsIG5leHQgKyAxKVxuXG4gICAgICAgICAgaWYgKG5leHQgPT09IC0xIHx8IFJFX0JBRF9CUkFDS0VULnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnKCcsICcoJywgcG9zXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJ2JyYWNrZXRzJywgY29udGVudCwgcG9zLCBuZXh0XVxuICAgICAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgU0lOR0xFX1FVT1RFOlxuICAgICAgY2FzZSBET1VCTEVfUVVPVEU6IHtcbiAgICAgICAgcXVvdGUgPSBjb2RlID09PSBTSU5HTEVfUVVPVEUgPyBcIidcIiA6ICdcIidcbiAgICAgICAgbmV4dCA9IHBvc1xuICAgICAgICBkbyB7XG4gICAgICAgICAgZXNjYXBlZCA9IGZhbHNlXG4gICAgICAgICAgbmV4dCA9IGNzcy5pbmRleE9mKHF1b3RlLCBuZXh0ICsgMSlcbiAgICAgICAgICBpZiAobmV4dCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChpZ25vcmUgfHwgaWdub3JlVW5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgbmV4dCA9IHBvcyArIDFcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVuY2xvc2VkKCdzdHJpbmcnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlc2NhcGVQb3MgPSBuZXh0XG4gICAgICAgICAgd2hpbGUgKGNzcy5jaGFyQ29kZUF0KGVzY2FwZVBvcyAtIDEpID09PSBCQUNLU0xBU0gpIHtcbiAgICAgICAgICAgIGVzY2FwZVBvcyAtPSAxXG4gICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGVzY2FwZWQpXG5cbiAgICAgICAgY3VycmVudFRva2VuID0gWydzdHJpbmcnLCBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSksIHBvcywgbmV4dF1cbiAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlIEFUOiB7XG4gICAgICAgIFJFX0FUX0VORC5sYXN0SW5kZXggPSBwb3MgKyAxXG4gICAgICAgIFJFX0FUX0VORC50ZXN0KGNzcylcbiAgICAgICAgaWYgKFJFX0FUX0VORC5sYXN0SW5kZXggPT09IDApIHtcbiAgICAgICAgICBuZXh0ID0gY3NzLmxlbmd0aCAtIDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0ID0gUkVfQVRfRU5ELmxhc3RJbmRleCAtIDJcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnYXQtd29yZCcsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSwgcG9zLCBuZXh0XVxuXG4gICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSBCQUNLU0xBU0g6IHtcbiAgICAgICAgbmV4dCA9IHBvc1xuICAgICAgICBlc2NhcGUgPSB0cnVlXG4gICAgICAgIHdoaWxlIChjc3MuY2hhckNvZGVBdChuZXh0ICsgMSkgPT09IEJBQ0tTTEFTSCkge1xuICAgICAgICAgIG5leHQgKz0gMVxuICAgICAgICAgIGVzY2FwZSA9ICFlc2NhcGVcbiAgICAgICAgfVxuICAgICAgICBjb2RlID0gY3NzLmNoYXJDb2RlQXQobmV4dCArIDEpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBlc2NhcGUgJiZcbiAgICAgICAgICBjb2RlICE9PSBTTEFTSCAmJlxuICAgICAgICAgIGNvZGUgIT09IFNQQUNFICYmXG4gICAgICAgICAgY29kZSAhPT0gTkVXTElORSAmJlxuICAgICAgICAgIGNvZGUgIT09IFRBQiAmJlxuICAgICAgICAgIGNvZGUgIT09IENSICYmXG4gICAgICAgICAgY29kZSAhPT0gRkVFRFxuICAgICAgICApIHtcbiAgICAgICAgICBuZXh0ICs9IDFcbiAgICAgICAgICBpZiAoUkVfSEVYX0VTQ0FQRS50ZXN0KGNzcy5jaGFyQXQobmV4dCkpKSB7XG4gICAgICAgICAgICB3aGlsZSAoUkVfSEVYX0VTQ0FQRS50ZXN0KGNzcy5jaGFyQXQobmV4dCArIDEpKSkge1xuICAgICAgICAgICAgICBuZXh0ICs9IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjc3MuY2hhckNvZGVBdChuZXh0ICsgMSkgPT09IFNQQUNFKSB7XG4gICAgICAgICAgICAgIG5leHQgKz0gMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnd29yZCcsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSwgcG9zLCBuZXh0XVxuXG4gICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAoY29kZSA9PT0gU0xBU0ggJiYgY3NzLmNoYXJDb2RlQXQocG9zICsgMSkgPT09IEFTVEVSSVNLKSB7XG4gICAgICAgICAgbmV4dCA9IGNzcy5pbmRleE9mKCcqLycsIHBvcyArIDIpICsgMVxuICAgICAgICAgIGlmIChuZXh0ID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoaWdub3JlIHx8IGlnbm9yZVVuY2xvc2VkKSB7XG4gICAgICAgICAgICAgIG5leHQgPSBjc3MubGVuZ3RoXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmNsb3NlZCgnY29tbWVudCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudFRva2VuID0gWydjb21tZW50JywgY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpLCBwb3MsIG5leHRdXG4gICAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFJFX1dPUkRfRU5ELmxhc3RJbmRleCA9IHBvcyArIDFcbiAgICAgICAgICBSRV9XT1JEX0VORC50ZXN0KGNzcylcbiAgICAgICAgICBpZiAoUkVfV09SRF9FTkQubGFzdEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBuZXh0ID0gY3NzLmxlbmd0aCAtIDFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dCA9IFJFX1dPUkRfRU5ELmxhc3RJbmRleCAtIDJcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJ3dvcmQnLCBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSksIHBvcywgbmV4dF1cbiAgICAgICAgICBidWZmZXIucHVzaChjdXJyZW50VG9rZW4pXG4gICAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwb3MrK1xuICAgIHJldHVybiBjdXJyZW50VG9rZW5cbiAgfVxuXG4gIGZ1bmN0aW9uIGJhY2sodG9rZW4pIHtcbiAgICByZXR1cm5lZC5wdXNoKHRva2VuKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiYWNrLFxuICAgIGVuZE9mRmlsZSxcbiAgICBuZXh0VG9rZW4sXG4gICAgcG9zaXRpb25cbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuJ3VzZSBzdHJpY3QnXG5cbmxldCBwcmludGVkID0ge31cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3YXJuT25jZShtZXNzYWdlKSB7XG4gIGlmIChwcmludGVkW21lc3NhZ2VdKSByZXR1cm5cbiAgcHJpbnRlZFttZXNzYWdlXSA9IHRydWVcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuY2xhc3MgV2FybmluZyB7XG4gIGNvbnN0cnVjdG9yKHRleHQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXMudHlwZSA9ICd3YXJuaW5nJ1xuICAgIHRoaXMudGV4dCA9IHRleHRcblxuICAgIGlmIChvcHRzLm5vZGUgJiYgb3B0cy5ub2RlLnNvdXJjZSkge1xuICAgICAgbGV0IHJhbmdlID0gb3B0cy5ub2RlLnJhbmdlQnkob3B0cylcbiAgICAgIHRoaXMubGluZSA9IHJhbmdlLnN0YXJ0LmxpbmVcbiAgICAgIHRoaXMuY29sdW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICB0aGlzLmVuZExpbmUgPSByYW5nZS5lbmQubGluZVxuICAgICAgdGhpcy5lbmRDb2x1bW4gPSByYW5nZS5lbmQuY29sdW1uXG4gICAgfVxuXG4gICAgZm9yIChsZXQgb3B0IGluIG9wdHMpIHRoaXNbb3B0XSA9IG9wdHNbb3B0XVxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgaWYgKHRoaXMubm9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS5lcnJvcih0aGlzLnRleHQsIHtcbiAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgIHBsdWdpbjogdGhpcy5wbHVnaW4sXG4gICAgICAgIHdvcmQ6IHRoaXMud29yZFxuICAgICAgfSkubWVzc2FnZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBsdWdpbikge1xuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luICsgJzogJyArIHRoaXMudGV4dFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRleHRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFdhcm5pbmdcbldhcm5pbmcuZGVmYXVsdCA9IFdhcm5pbmdcbiIsImNvbnN0IGh0bWxwYXJzZXIgPSByZXF1aXJlKCdodG1scGFyc2VyMicpO1xuY29uc3QgZXNjYXBlU3RyaW5nUmVnZXhwID0gcmVxdWlyZSgnZXNjYXBlLXN0cmluZy1yZWdleHAnKTtcbmNvbnN0IHsgaXNQbGFpbk9iamVjdCB9ID0gcmVxdWlyZSgnaXMtcGxhaW4tb2JqZWN0Jyk7XG5jb25zdCBkZWVwbWVyZ2UgPSByZXF1aXJlKCdkZWVwbWVyZ2UnKTtcbmNvbnN0IHBhcnNlU3Jjc2V0ID0gcmVxdWlyZSgncGFyc2Utc3Jjc2V0Jyk7XG5jb25zdCB7IHBhcnNlOiBwb3N0Y3NzUGFyc2UgfSA9IHJlcXVpcmUoJ3Bvc3Rjc3MnKTtcbi8vIFRhZ3MgdGhhdCBjYW4gY29uY2VpdmFibHkgcmVwcmVzZW50IHN0YW5kLWFsb25lIG1lZGlhLlxuY29uc3QgbWVkaWFUYWdzID0gW1xuICAnaW1nJywgJ2F1ZGlvJywgJ3ZpZGVvJywgJ3BpY3R1cmUnLCAnc3ZnJyxcbiAgJ29iamVjdCcsICdtYXAnLCAnaWZyYW1lJywgJ2VtYmVkJ1xuXTtcbi8vIFRhZ3MgdGhhdCBhcmUgaW5oZXJlbnRseSB2dWxuZXJhYmxlIHRvIGJlaW5nIHVzZWQgaW4gWFNTIGF0dGFja3MuXG5jb25zdCB2dWxuZXJhYmxlVGFncyA9IFsgJ3NjcmlwdCcsICdzdHlsZScgXTtcblxuZnVuY3Rpb24gZWFjaChvYmosIGNiKSB7XG4gIGlmIChvYmopIHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgY2Iob2JqW2tleV0sIGtleSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gQXZvaWQgZmFsc2UgcG9zaXRpdmVzIHdpdGggLl9fcHJvdG9fXywgLmhhc093blByb3BlcnR5LCBldGMuXG5mdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgcmV0dXJuICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG5cbi8vIFJldHVybnMgdGhvc2UgZWxlbWVudHMgb2YgYGFgIGZvciB3aGljaCBgY2IoYSlgIHJldHVybnMgdHJ1dGh5XG5mdW5jdGlvbiBmaWx0ZXIoYSwgY2IpIHtcbiAgY29uc3QgbiA9IFtdO1xuICBlYWNoKGEsIGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAoY2IodikpIHtcbiAgICAgIG4ucHVzaCh2KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhcyhvYmosIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNyY3NldChwYXJzZWRTcmNzZXQpIHtcbiAgcmV0dXJuIHBhcnNlZFNyY3NldC5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghcGFydC51cmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVVJMIG1pc3NpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgcGFydC51cmwgK1xuICAgICAgKHBhcnQudyA/IGAgJHtwYXJ0Lnd9d2AgOiAnJykgK1xuICAgICAgKHBhcnQuaCA/IGAgJHtwYXJ0Lmh9aGAgOiAnJykgK1xuICAgICAgKHBhcnQuZCA/IGAgJHtwYXJ0LmR9eGAgOiAnJylcbiAgICApO1xuICB9KS5qb2luKCcsICcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNhbml0aXplSHRtbDtcblxuLy8gQSB2YWxpZCBhdHRyaWJ1dGUgbmFtZS5cbi8vIFdlIHVzZSBhIHRvbGVyYW50IGRlZmluaXRpb24gYmFzZWQgb24gdGhlIHNldCBvZiBzdHJpbmdzIGRlZmluZWQgYnlcbi8vIGh0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjYmVmb3JlLWF0dHJpYnV0ZS1uYW1lLXN0YXRlXG4vLyBhbmQgaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNhdHRyaWJ1dGUtbmFtZS1zdGF0ZSAuXG4vLyBUaGUgY2hhcmFjdGVycyBhY2NlcHRlZCBhcmUgb25lcyB3aGljaCBjYW4gYmUgYXBwZW5kZWQgdG8gdGhlIGF0dHJpYnV0ZVxuLy8gbmFtZSBidWZmZXIgd2l0aG91dCB0cmlnZ2VyaW5nIGEgcGFyc2UgZXJyb3I6XG4vLyAgICogdW5leHBlY3RlZC1lcXVhbHMtc2lnbi1iZWZvcmUtYXR0cmlidXRlLW5hbWVcbi8vICAgKiB1bmV4cGVjdGVkLW51bGwtY2hhcmFjdGVyXG4vLyAgICogdW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tYXR0cmlidXRlLW5hbWVcbi8vIFdlIGV4Y2x1ZGUgdGhlIGVtcHR5IHN0cmluZyBiZWNhdXNlIGl0J3MgaW1wb3NzaWJsZSB0byBnZXQgdG8gdGhlIGFmdGVyXG4vLyBhdHRyaWJ1dGUgbmFtZSBzdGF0ZSB3aXRoIGFuIGVtcHR5IGF0dHJpYnV0ZSBuYW1lIGJ1ZmZlci5cbmNvbnN0IFZBTElEX0hUTUxfQVRUUklCVVRFX05BTUUgPSAvXlteXFwwXFx0XFxuXFxmXFxyIC88PT5dKyQvO1xuXG4vLyBJZ25vcmUgdGhlIF9yZWN1cnNpbmcgZmxhZzsgaXQncyB0aGVyZSBmb3IgcmVjdXJzaXZlXG4vLyBpbnZvY2F0aW9uIGFzIGEgZ3VhcmQgYWdhaW5zdCB0aGlzIGV4cGxvaXQ6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmI1NS9odG1scGFyc2VyMi9pc3N1ZXMvMTA1XG5cbmZ1bmN0aW9uIHNhbml0aXplSHRtbChodG1sLCBvcHRpb25zLCBfcmVjdXJzaW5nKSB7XG4gIGlmIChodG1sID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKHR5cGVvZiBodG1sID09PSAnbnVtYmVyJykge1xuICAgIGh0bWwgPSBodG1sLnRvU3RyaW5nKCk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIC8vIFVzZWQgZm9yIGhvdCBzd2FwcGluZyB0aGUgcmVzdWx0IHZhcmlhYmxlIHdpdGggYW4gZW1wdHkgc3RyaW5nIGluIG9yZGVyIHRvIFwiY2FwdHVyZVwiIHRoZSB0ZXh0IHdyaXR0ZW4gdG8gaXQuXG4gIGxldCB0ZW1wUmVzdWx0ID0gJyc7XG5cbiAgZnVuY3Rpb24gRnJhbWUodGFnLCBhdHRyaWJzKSB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgdGhpcy50YWcgPSB0YWc7XG4gICAgdGhpcy5hdHRyaWJzID0gYXR0cmlicyB8fCB7fTtcbiAgICB0aGlzLnRhZ1Bvc2l0aW9uID0gcmVzdWx0Lmxlbmd0aDtcbiAgICB0aGlzLnRleHQgPSAnJzsgLy8gTm9kZSBpbm5lciB0ZXh0XG4gICAgdGhpcy5vcGVuaW5nVGFnTGVuZ3RoID0gMDtcbiAgICB0aGlzLm1lZGlhQ2hpbGRyZW4gPSBbXTtcblxuICAgIHRoaXMudXBkYXRlUGFyZW50Tm9kZVRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcGFyZW50RnJhbWUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgcGFyZW50RnJhbWUudGV4dCArPSB0aGF0LnRleHQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlUGFyZW50Tm9kZU1lZGlhQ2hpbGRyZW4gPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzdGFjay5sZW5ndGggJiYgbWVkaWFUYWdzLmluY2x1ZGVzKHRoaXMudGFnKSkge1xuICAgICAgICBjb25zdCBwYXJlbnRGcmFtZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBwYXJlbnRGcmFtZS5tZWRpYUNoaWxkcmVuLnB1c2godGhpcy50YWcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgc2FuaXRpemVIdG1sLmRlZmF1bHRzLCBvcHRpb25zKTtcbiAgb3B0aW9ucy5wYXJzZXIgPSBPYmplY3QuYXNzaWduKHt9LCBodG1sUGFyc2VyRGVmYXVsdHMsIG9wdGlvbnMucGFyc2VyKTtcblxuICBjb25zdCB0YWdBbGxvd2VkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hbGxvd2VkVGFncyA9PT0gZmFsc2UgfHwgKG9wdGlvbnMuYWxsb3dlZFRhZ3MgfHwgW10pLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgfTtcblxuICAvLyB2dWxuZXJhYmxlVGFnc1xuICB2dWxuZXJhYmxlVGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICBpZiAodGFnQWxsb3dlZCh0YWcpICYmICFvcHRpb25zLmFsbG93VnVsbmVyYWJsZVRhZ3MpIHtcbiAgICAgIGNvbnNvbGUud2FybihgXFxuXFxu4pqg77iPIFlvdXIgXFxgYWxsb3dlZFRhZ3NcXGAgb3B0aW9uIGluY2x1ZGVzLCBcXGAke3RhZ31cXGAsIHdoaWNoIGlzIGluaGVyZW50bHlcXG52dWxuZXJhYmxlIHRvIFhTUyBhdHRhY2tzLiBQbGVhc2UgcmVtb3ZlIGl0IGZyb20gXFxgYWxsb3dlZFRhZ3NcXGAuXFxuT3IsIHRvIGRpc2FibGUgdGhpcyB3YXJuaW5nLCBhZGQgdGhlIFxcYGFsbG93VnVsbmVyYWJsZVRhZ3NcXGAgb3B0aW9uXFxuYW5kIGVuc3VyZSB5b3UgYXJlIGFjY291bnRpbmcgZm9yIHRoaXMgcmlzay5cXG5cXG5gKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFRhZ3MgdGhhdCBjb250YWluIHNvbWV0aGluZyBvdGhlciB0aGFuIEhUTUwsIG9yIHdoZXJlIGRpc2NhcmRpbmdcbiAgLy8gdGhlIHRleHQgd2hlbiB0aGUgdGFnIGlzIGRpc2FsbG93ZWQgbWFrZXMgc2Vuc2UgZm9yIG90aGVyIHJlYXNvbnMuXG4gIC8vIElmIHdlIGFyZSBub3QgYWxsb3dpbmcgdGhlc2UgdGFncywgd2Ugc2hvdWxkIGRyb3AgdGhlaXIgY29udGVudCB0b28uXG4gIC8vIEZvciBvdGhlciB0YWdzIHlvdSB3b3VsZCBkcm9wIHRoZSB0YWcgYnV0IGtlZXAgaXRzIGNvbnRlbnQuXG4gIGNvbnN0IG5vblRleHRUYWdzQXJyYXkgPSBvcHRpb25zLm5vblRleHRUYWdzIHx8IFtcbiAgICAnc2NyaXB0JyxcbiAgICAnc3R5bGUnLFxuICAgICd0ZXh0YXJlYScsXG4gICAgJ29wdGlvbidcbiAgXTtcbiAgbGV0IGFsbG93ZWRBdHRyaWJ1dGVzTWFwO1xuICBsZXQgYWxsb3dlZEF0dHJpYnV0ZXNHbG9iTWFwO1xuICBpZiAob3B0aW9ucy5hbGxvd2VkQXR0cmlidXRlcykge1xuICAgIGFsbG93ZWRBdHRyaWJ1dGVzTWFwID0ge307XG4gICAgYWxsb3dlZEF0dHJpYnV0ZXNHbG9iTWFwID0ge307XG4gICAgZWFjaChvcHRpb25zLmFsbG93ZWRBdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyaWJ1dGVzLCB0YWcpIHtcbiAgICAgIGFsbG93ZWRBdHRyaWJ1dGVzTWFwW3RhZ10gPSBbXTtcbiAgICAgIGNvbnN0IGdsb2JSZWdleCA9IFtdO1xuICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgb2JqLmluZGV4T2YoJyonKSA+PSAwKSB7XG4gICAgICAgICAgZ2xvYlJlZ2V4LnB1c2goZXNjYXBlU3RyaW5nUmVnZXhwKG9iaikucmVwbGFjZSgvXFxcXFxcKi9nLCAnLionKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWxsb3dlZEF0dHJpYnV0ZXNNYXBbdGFnXS5wdXNoKG9iaik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGdsb2JSZWdleC5sZW5ndGgpIHtcbiAgICAgICAgYWxsb3dlZEF0dHJpYnV0ZXNHbG9iTWFwW3RhZ10gPSBuZXcgUmVnRXhwKCdeKCcgKyBnbG9iUmVnZXguam9pbignfCcpICsgJykkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgYWxsb3dlZENsYXNzZXNNYXAgPSB7fTtcbiAgY29uc3QgYWxsb3dlZENsYXNzZXNHbG9iTWFwID0ge307XG4gIGNvbnN0IGFsbG93ZWRDbGFzc2VzUmVnZXhNYXAgPSB7fTtcbiAgZWFjaChvcHRpb25zLmFsbG93ZWRDbGFzc2VzLCBmdW5jdGlvbihjbGFzc2VzLCB0YWcpIHtcbiAgICAvLyBJbXBsaWNpdGx5IGFsbG93cyB0aGUgY2xhc3MgYXR0cmlidXRlXG4gICAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVzTWFwKSB7XG4gICAgICBpZiAoIWhhcyhhbGxvd2VkQXR0cmlidXRlc01hcCwgdGFnKSkge1xuICAgICAgICBhbGxvd2VkQXR0cmlidXRlc01hcFt0YWddID0gW107XG4gICAgICB9XG4gICAgICBhbGxvd2VkQXR0cmlidXRlc01hcFt0YWddLnB1c2goJ2NsYXNzJyk7XG4gICAgfVxuXG4gICAgYWxsb3dlZENsYXNzZXNNYXBbdGFnXSA9IGNsYXNzZXM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgY29uc3QgZ2xvYlJlZ2V4ID0gW107XG4gICAgICBhbGxvd2VkQ2xhc3Nlc01hcFt0YWddID0gW107XG4gICAgICBhbGxvd2VkQ2xhc3Nlc1JlZ2V4TWFwW3RhZ10gPSBbXTtcbiAgICAgIGNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnICYmIG9iai5pbmRleE9mKCcqJykgPj0gMCkge1xuICAgICAgICAgIGdsb2JSZWdleC5wdXNoKGVzY2FwZVN0cmluZ1JlZ2V4cChvYmopLnJlcGxhY2UoL1xcXFxcXCovZywgJy4qJykpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgIGFsbG93ZWRDbGFzc2VzUmVnZXhNYXBbdGFnXS5wdXNoKG9iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWxsb3dlZENsYXNzZXNNYXBbdGFnXS5wdXNoKG9iaik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGdsb2JSZWdleC5sZW5ndGgpIHtcbiAgICAgICAgYWxsb3dlZENsYXNzZXNHbG9iTWFwW3RhZ10gPSBuZXcgUmVnRXhwKCdeKCcgKyBnbG9iUmVnZXguam9pbignfCcpICsgJykkJyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB0cmFuc2Zvcm1UYWdzTWFwID0ge307XG4gIGxldCB0cmFuc2Zvcm1UYWdzQWxsO1xuICBlYWNoKG9wdGlvbnMudHJhbnNmb3JtVGFncywgZnVuY3Rpb24odHJhbnNmb3JtLCB0YWcpIHtcbiAgICBsZXQgdHJhbnNGdW47XG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyYW5zRnVuID0gdHJhbnNmb3JtO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyYW5zRnVuID0gc2FuaXRpemVIdG1sLnNpbXBsZVRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAnKicpIHtcbiAgICAgIHRyYW5zZm9ybVRhZ3NBbGwgPSB0cmFuc0Z1bjtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmb3JtVGFnc01hcFt0YWddID0gdHJhbnNGdW47XG4gICAgfVxuICB9KTtcblxuICBsZXQgZGVwdGg7XG4gIGxldCBzdGFjaztcbiAgbGV0IHNraXBNYXA7XG4gIGxldCB0cmFuc2Zvcm1NYXA7XG4gIGxldCBza2lwVGV4dDtcbiAgbGV0IHNraXBUZXh0RGVwdGg7XG4gIGxldCBhZGRlZFRleHQgPSBmYWxzZTtcblxuICBpbml0aWFsaXplU3RhdGUoKTtcblxuICBjb25zdCBwYXJzZXIgPSBuZXcgaHRtbHBhcnNlci5QYXJzZXIoe1xuICAgIG9ub3BlbnRhZzogZnVuY3Rpb24obmFtZSwgYXR0cmlicykge1xuICAgICAgaWYgKG9wdGlvbnMub25PcGVuVGFnKSB7XG4gICAgICAgIG9wdGlvbnMub25PcGVuVGFnKG5hbWUsIGF0dHJpYnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBgZW5mb3JjZUh0bWxCb3VuZGFyeWAgaXMgYHRydWVgIGFuZCB0aGlzIGhhcyBmb3VuZCB0aGUgb3BlbmluZ1xuICAgICAgLy8gYGh0bWxgIHRhZywgcmVzZXQgdGhlIHN0YXRlLlxuICAgICAgaWYgKG9wdGlvbnMuZW5mb3JjZUh0bWxCb3VuZGFyeSAmJiBuYW1lID09PSAnaHRtbCcpIHtcbiAgICAgICAgaW5pdGlhbGl6ZVN0YXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChza2lwVGV4dCkge1xuICAgICAgICBza2lwVGV4dERlcHRoKys7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKG5hbWUsIGF0dHJpYnMpO1xuICAgICAgc3RhY2sucHVzaChmcmFtZSk7XG5cbiAgICAgIGxldCBza2lwID0gZmFsc2U7XG4gICAgICBjb25zdCBoYXNUZXh0ID0gISFmcmFtZS50ZXh0O1xuICAgICAgbGV0IHRyYW5zZm9ybWVkVGFnO1xuICAgICAgaWYgKGhhcyh0cmFuc2Zvcm1UYWdzTWFwLCBuYW1lKSkge1xuICAgICAgICB0cmFuc2Zvcm1lZFRhZyA9IHRyYW5zZm9ybVRhZ3NNYXBbbmFtZV0obmFtZSwgYXR0cmlicyk7XG5cbiAgICAgICAgZnJhbWUuYXR0cmlicyA9IGF0dHJpYnMgPSB0cmFuc2Zvcm1lZFRhZy5hdHRyaWJzO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZFRhZy50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmcmFtZS5pbm5lclRleHQgPSB0cmFuc2Zvcm1lZFRhZy50ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgIT09IHRyYW5zZm9ybWVkVGFnLnRhZ05hbWUpIHtcbiAgICAgICAgICBmcmFtZS5uYW1lID0gbmFtZSA9IHRyYW5zZm9ybWVkVGFnLnRhZ05hbWU7XG4gICAgICAgICAgdHJhbnNmb3JtTWFwW2RlcHRoXSA9IHRyYW5zZm9ybWVkVGFnLnRhZ05hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2Zvcm1UYWdzQWxsKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkVGFnID0gdHJhbnNmb3JtVGFnc0FsbChuYW1lLCBhdHRyaWJzKTtcblxuICAgICAgICBmcmFtZS5hdHRyaWJzID0gYXR0cmlicyA9IHRyYW5zZm9ybWVkVGFnLmF0dHJpYnM7XG4gICAgICAgIGlmIChuYW1lICE9PSB0cmFuc2Zvcm1lZFRhZy50YWdOYW1lKSB7XG4gICAgICAgICAgZnJhbWUubmFtZSA9IG5hbWUgPSB0cmFuc2Zvcm1lZFRhZy50YWdOYW1lO1xuICAgICAgICAgIHRyYW5zZm9ybU1hcFtkZXB0aF0gPSB0cmFuc2Zvcm1lZFRhZy50YWdOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGFnQWxsb3dlZChuYW1lKSB8fCAob3B0aW9ucy5kaXNhbGxvd2VkVGFnc01vZGUgPT09ICdyZWN1cnNpdmVFc2NhcGUnICYmICFpc0VtcHR5T2JqZWN0KHNraXBNYXApKSB8fCAob3B0aW9ucy5uZXN0aW5nTGltaXQgIT0gbnVsbCAmJiBkZXB0aCA+PSBvcHRpb25zLm5lc3RpbmdMaW1pdCkpIHtcbiAgICAgICAgc2tpcCA9IHRydWU7XG4gICAgICAgIHNraXBNYXBbZGVwdGhdID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGlzYWxsb3dlZFRhZ3NNb2RlID09PSAnZGlzY2FyZCcgfHwgb3B0aW9ucy5kaXNhbGxvd2VkVGFnc01vZGUgPT09ICdjb21wbGV0ZWx5RGlzY2FyZCcpIHtcbiAgICAgICAgICBpZiAobm9uVGV4dFRhZ3NBcnJheS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgc2tpcFRleHQgPSB0cnVlO1xuICAgICAgICAgICAgc2tpcFRleHREZXB0aCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZXB0aCsrO1xuICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGlzYWxsb3dlZFRhZ3NNb2RlID09PSAnZGlzY2FyZCcgfHwgb3B0aW9ucy5kaXNhbGxvd2VkVGFnc01vZGUgPT09ICdjb21wbGV0ZWx5RGlzY2FyZCcpIHtcbiAgICAgICAgICAvLyBXZSB3YW50IHRoZSBjb250ZW50cyBidXQgbm90IHRoaXMgdGFnXG4gICAgICAgICAgaWYgKGZyYW1lLmlubmVyVGV4dCAmJiAhaGFzVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgZXNjYXBlZCA9IGVzY2FwZUh0bWwoZnJhbWUuaW5uZXJUZXh0KTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRleHRGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgcmVzdWx0ICs9IG9wdGlvbnMudGV4dEZpbHRlcihlc2NhcGVkLCBuYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkZWRUZXh0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHJlc3VsdCA9ICcnO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9ICc8JyArIG5hbWU7XG5cbiAgICAgIGlmIChuYW1lID09PSAnc2NyaXB0Jykge1xuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd2VkU2NyaXB0SG9zdG5hbWVzIHx8IG9wdGlvbnMuYWxsb3dlZFNjcmlwdERvbWFpbnMpIHtcbiAgICAgICAgICBmcmFtZS5pbm5lclRleHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGVzTWFwIHx8IGhhcyhhbGxvd2VkQXR0cmlidXRlc01hcCwgbmFtZSkgfHwgYWxsb3dlZEF0dHJpYnV0ZXNNYXBbJyonXSkge1xuICAgICAgICBlYWNoKGF0dHJpYnMsIGZ1bmN0aW9uKHZhbHVlLCBhKSB7XG4gICAgICAgICAgaWYgKCFWQUxJRF9IVE1MX0FUVFJJQlVURV9OQU1FLnRlc3QoYSkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgcGFydCBvZiBhbiBhdHRyaWJ1dGUgbmFtZSBpbiB0aGUgb3V0cHV0IGZyb20gYmVpbmdcbiAgICAgICAgICAgIC8vIGludGVycHJldGVkIGFzIHRoZSBlbmQgb2YgYW4gYXR0cmlidXRlLCBvciBlbmQgb2YgYSB0YWcuXG4gICAgICAgICAgICBkZWxldGUgZnJhbWUuYXR0cmlic1thXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGVtcHR5LCBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGluIHRoZSBhbGxvd2VkRW1wdHlBdHRyaWJ1dGVzIGFycmF5LlxuICAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBpbiB0aGUgYWxsb3dlZEVtcHR5QXR0cmlidXRlcyBhcnJheSwgYW5kIGl0IGlzIGEga25vd24gbm9uLWJvb2xlYW4gYXR0cmlidXRlLCBkZWxldGUgaXRcbiAgICAgICAgICAvLyBMaXN0IHRha2VuIGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5kaWNlcy5odG1sI2F0dHJpYnV0ZXMtM1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycgJiYgKCFvcHRpb25zLmFsbG93ZWRFbXB0eUF0dHJpYnV0ZXMuaW5jbHVkZXMoYSkpICYmXG4gICAgICAgICAgICAob3B0aW9ucy5ub25Cb29sZWFuQXR0cmlidXRlcy5pbmNsdWRlcyhhKSB8fCBvcHRpb25zLm5vbkJvb2xlYW5BdHRyaWJ1dGVzLmluY2x1ZGVzKCcqJykpKSB7XG4gICAgICAgICAgICBkZWxldGUgZnJhbWUuYXR0cmlic1thXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY2hlY2sgYWxsb3dlZEF0dHJpYnV0ZXNNYXAgZm9yIHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgYW5kIG1vZGlmeSB0aGUgdmFsdWVcbiAgICAgICAgICAvLyBhcyBuZWNlc3NhcnkgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHZhbHVlcyBkZWZpbmVkLlxuICAgICAgICAgIGxldCBwYXNzZWRBbGxvd2VkQXR0cmlidXRlc01hcENoZWNrID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCFhbGxvd2VkQXR0cmlidXRlc01hcCB8fFxuICAgICAgICAgICAgKGhhcyhhbGxvd2VkQXR0cmlidXRlc01hcCwgbmFtZSkgJiYgYWxsb3dlZEF0dHJpYnV0ZXNNYXBbbmFtZV0uaW5kZXhPZihhKSAhPT0gLTEpIHx8XG4gICAgICAgICAgICAoYWxsb3dlZEF0dHJpYnV0ZXNNYXBbJyonXSAmJiBhbGxvd2VkQXR0cmlidXRlc01hcFsnKiddLmluZGV4T2YoYSkgIT09IC0xKSB8fFxuICAgICAgICAgICAgKGhhcyhhbGxvd2VkQXR0cmlidXRlc0dsb2JNYXAsIG5hbWUpICYmIGFsbG93ZWRBdHRyaWJ1dGVzR2xvYk1hcFtuYW1lXS50ZXN0KGEpKSB8fFxuICAgICAgICAgICAgKGFsbG93ZWRBdHRyaWJ1dGVzR2xvYk1hcFsnKiddICYmIGFsbG93ZWRBdHRyaWJ1dGVzR2xvYk1hcFsnKiddLnRlc3QoYSkpKSB7XG4gICAgICAgICAgICBwYXNzZWRBbGxvd2VkQXR0cmlidXRlc01hcENoZWNrID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFsbG93ZWRBdHRyaWJ1dGVzTWFwICYmIGFsbG93ZWRBdHRyaWJ1dGVzTWFwW25hbWVdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG8gb2YgYWxsb3dlZEF0dHJpYnV0ZXNNYXBbbmFtZV0pIHtcbiAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QobykgJiYgby5uYW1lICYmIChvLm5hbWUgPT09IGEpKSB7XG4gICAgICAgICAgICAgICAgcGFzc2VkQWxsb3dlZEF0dHJpYnV0ZXNNYXBDaGVjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKG8ubXVsdGlwbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHZlcmlmeSB0aGUgdmFsdWVzIHRoYXQgYXJlIGFsbG93ZWRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0U3RyQXJyYXkgPSB2YWx1ZS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNwbGl0U3RyQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG8udmFsdWVzLmluZGV4T2YocykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBzO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArPSAnICcgKyBzO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoby52YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgLy8gdmVyaWZpZWQgYW4gYWxsb3dlZCB2YWx1ZSBtYXRjaGVzIHRoZSBlbnRpcmUgYXR0cmlidXRlIHZhbHVlXG4gICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXNzZWRBbGxvd2VkQXR0cmlidXRlc01hcENoZWNrKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd2VkU2NoZW1lc0FwcGxpZWRUb0F0dHJpYnV0ZXMuaW5kZXhPZihhKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKG5hdWdodHlIcmVmKG5hbWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmcmFtZS5hdHRyaWJzW2FdO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3NjcmlwdCcgJiYgYSA9PT0gJ3NyYycpIHtcblxuICAgICAgICAgICAgICBsZXQgYWxsb3dlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVVybCh2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd2VkU2NyaXB0SG9zdG5hbWVzIHx8IG9wdGlvbnMuYWxsb3dlZFNjcmlwdERvbWFpbnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRIb3N0bmFtZSA9IChvcHRpb25zLmFsbG93ZWRTY3JpcHRIb3N0bmFtZXMgfHwgW10pLmZpbmQoZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0bmFtZSA9PT0gcGFyc2VkLnVybC5ob3N0bmFtZTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb3dlZERvbWFpbiA9IChvcHRpb25zLmFsbG93ZWRTY3JpcHREb21haW5zIHx8IFtdKS5maW5kKGZ1bmN0aW9uKGRvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkLnVybC5ob3N0bmFtZSA9PT0gZG9tYWluIHx8IHBhcnNlZC51cmwuaG9zdG5hbWUuZW5kc1dpdGgoYC4ke2RvbWFpbn1gKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgYWxsb3dlZCA9IGFsbG93ZWRIb3N0bmFtZSB8fCBhbGxvd2VkRG9tYWluO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghYWxsb3dlZCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmcmFtZS5hdHRyaWJzW2FdO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lmcmFtZScgJiYgYSA9PT0gJ3NyYycpIHtcbiAgICAgICAgICAgICAgbGV0IGFsbG93ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlVXJsKHZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuaXNSZWxhdGl2ZVVybCkge1xuICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiBhbGxvd0lmcmFtZVJlbGF0aXZlVXJscyBpcyB0cnVlXG4gICAgICAgICAgICAgICAgICAvLyB1bmxlc3MgYWxsb3dlZElmcmFtZUhvc3RuYW1lcyBvciBhbGxvd2VkSWZyYW1lRG9tYWlucyBzcGVjaWZpZWRcbiAgICAgICAgICAgICAgICAgIGFsbG93ZWQgPSBoYXMob3B0aW9ucywgJ2FsbG93SWZyYW1lUmVsYXRpdmVVcmxzJylcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmFsbG93SWZyYW1lUmVsYXRpdmVVcmxzXG4gICAgICAgICAgICAgICAgICAgIDogKCFvcHRpb25zLmFsbG93ZWRJZnJhbWVIb3N0bmFtZXMgJiYgIW9wdGlvbnMuYWxsb3dlZElmcmFtZURvbWFpbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hbGxvd2VkSWZyYW1lSG9zdG5hbWVzIHx8IG9wdGlvbnMuYWxsb3dlZElmcmFtZURvbWFpbnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRIb3N0bmFtZSA9IChvcHRpb25zLmFsbG93ZWRJZnJhbWVIb3N0bmFtZXMgfHwgW10pLmZpbmQoZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0bmFtZSA9PT0gcGFyc2VkLnVybC5ob3N0bmFtZTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb3dlZERvbWFpbiA9IChvcHRpb25zLmFsbG93ZWRJZnJhbWVEb21haW5zIHx8IFtdKS5maW5kKGZ1bmN0aW9uKGRvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkLnVybC5ob3N0bmFtZSA9PT0gZG9tYWluIHx8IHBhcnNlZC51cmwuaG9zdG5hbWUuZW5kc1dpdGgoYC4ke2RvbWFpbn1gKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgYWxsb3dlZCA9IGFsbG93ZWRIb3N0bmFtZSB8fCBhbGxvd2VkRG9tYWluO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFVucGFyc2VhYmxlIGlmcmFtZSBzcmNcbiAgICAgICAgICAgICAgICBhbGxvd2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFhbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZyYW1lLmF0dHJpYnNbYV07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYSA9PT0gJ3NyY3NldCcpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkID0gcGFyc2VTcmNzZXQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHBhcnNlZC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmF1Z2h0eUhyZWYoJ3NyY3NldCcsIHZhbHVlLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXZpbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gZmlsdGVyKHBhcnNlZCwgZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICF2LmV2aWw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgZnJhbWUuYXR0cmlic1thXTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJpbmdpZnlTcmNzZXQoZmlsdGVyKHBhcnNlZCwgZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXYuZXZpbDtcbiAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgIGZyYW1lLmF0dHJpYnNbYV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBVbnBhcnNlYWJsZSBzcmNzZXRcbiAgICAgICAgICAgICAgICBkZWxldGUgZnJhbWUuYXR0cmlic1thXTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRTcGVjaWZpY0NsYXNzZXMgPSBhbGxvd2VkQ2xhc3Nlc01hcFtuYW1lXTtcbiAgICAgICAgICAgICAgY29uc3QgYWxsb3dlZFdpbGRjYXJkQ2xhc3NlcyA9IGFsbG93ZWRDbGFzc2VzTWFwWycqJ107XG4gICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRTcGVjaWZpY0NsYXNzZXNHbG9iID0gYWxsb3dlZENsYXNzZXNHbG9iTWFwW25hbWVdO1xuICAgICAgICAgICAgICBjb25zdCBhbGxvd2VkU3BlY2lmaWNDbGFzc2VzUmVnZXggPSBhbGxvd2VkQ2xhc3Nlc1JlZ2V4TWFwW25hbWVdO1xuICAgICAgICAgICAgICBjb25zdCBhbGxvd2VkV2lsZGNhcmRDbGFzc2VzUmVnZXggPSBhbGxvd2VkQ2xhc3Nlc1JlZ2V4TWFwWycqJ107XG4gICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRXaWxkY2FyZENsYXNzZXNHbG9iID0gYWxsb3dlZENsYXNzZXNHbG9iTWFwWycqJ107XG4gICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRDbGFzc2VzR2xvYnMgPSBbXG4gICAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpZmljQ2xhc3Nlc0dsb2IsXG4gICAgICAgICAgICAgICAgYWxsb3dlZFdpbGRjYXJkQ2xhc3Nlc0dsb2JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIC5jb25jYXQoYWxsb3dlZFNwZWNpZmljQ2xhc3Nlc1JlZ2V4LCBhbGxvd2VkV2lsZGNhcmRDbGFzc2VzUmVnZXgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChhbGxvd2VkU3BlY2lmaWNDbGFzc2VzICYmIGFsbG93ZWRXaWxkY2FyZENsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlckNsYXNzZXModmFsdWUsIGRlZXBtZXJnZShhbGxvd2VkU3BlY2lmaWNDbGFzc2VzLCBhbGxvd2VkV2lsZGNhcmRDbGFzc2VzKSwgYWxsb3dlZENsYXNzZXNHbG9icyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmaWx0ZXJDbGFzc2VzKHZhbHVlLCBhbGxvd2VkU3BlY2lmaWNDbGFzc2VzIHx8IGFsbG93ZWRXaWxkY2FyZENsYXNzZXMsIGFsbG93ZWRDbGFzc2VzR2xvYnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZyYW1lLmF0dHJpYnNbYV07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYSA9PT0gJ3N0eWxlJykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJzZVN0eWxlQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhYnN0cmFjdFN5bnRheFRyZWUgPSBwb3N0Y3NzUGFyc2UobmFtZSArICcgeycgKyB2YWx1ZSArICd9JywgeyBtYXA6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBU1QgPSBmaWx0ZXJDc3MoYWJzdHJhY3RTeW50YXhUcmVlLCBvcHRpb25zLmFsbG93ZWRTdHlsZXMpO1xuXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0cmluZ2lmeVN0eWxlQXR0cmlidXRlcyhmaWx0ZXJlZEFTVCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZyYW1lLmF0dHJpYnNbYV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgXCInICsgbmFtZSArICcgeycgKyB2YWx1ZSArICd9JyArICdcIiwgSWYgeW91XFwncmUgcnVubmluZyB0aGlzIGluIGEgYnJvd3Nlciwgd2UgcmVjb21tZW5kIHRvIGRpc2FibGUgc3R5bGUgcGFyc2luZzogb3B0aW9ucy5wYXJzZVN0eWxlQXR0cmlidXRlczogZmFsc2UsIHNpbmNlIHRoaXMgb25seSB3b3JrcyBpbiBhIG5vZGUgZW52aXJvbm1lbnQgZHVlIHRvIGEgcG9zdGNzcyBkZXBlbmRlbmN5LCBNb3JlIGluZm86IGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9zdHJvcGhlY21zL3Nhbml0aXplLWh0bWwvaXNzdWVzLzU0NycpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVsZXRlIGZyYW1lLmF0dHJpYnNbYV07XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYWxsb3dlZFN0eWxlcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYWxsb3dlZFN0eWxlcyBvcHRpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBwYXJzZVN0eWxlQXR0cmlidXRlczogZmFsc2UuJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyBhO1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXN1bHQgKz0gJz1cIicgKyBlc2NhcGVIdG1sKHZhbHVlLCB0cnVlKSArICdcIic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYWxsb3dlZEVtcHR5QXR0cmlidXRlcy5pbmNsdWRlcyhhKSkge1xuICAgICAgICAgICAgICByZXN1bHQgKz0gJz1cIlwiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGZyYW1lLmF0dHJpYnNbYV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnNlbGZDbG9zaW5nLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdCArPSAnIC8+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSAnPic7XG4gICAgICAgIGlmIChmcmFtZS5pbm5lclRleHQgJiYgIWhhc1RleHQgJiYgIW9wdGlvbnMudGV4dEZpbHRlcikge1xuICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGVIdG1sKGZyYW1lLmlubmVyVGV4dCk7XG4gICAgICAgICAgYWRkZWRUZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdCArIGVzY2FwZUh0bWwocmVzdWx0KTtcbiAgICAgICAgdGVtcFJlc3VsdCA9ICcnO1xuICAgICAgfVxuICAgICAgZnJhbWUub3BlbmluZ1RhZ0xlbmd0aCA9IHJlc3VsdC5sZW5ndGggLSBmcmFtZS50YWdQb3NpdGlvbjtcbiAgICB9LFxuICAgIG9udGV4dDogZnVuY3Rpb24odGV4dCkge1xuICAgICAgaWYgKHNraXBUZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhc3RGcmFtZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgbGV0IHRhZztcblxuICAgICAgaWYgKGxhc3RGcmFtZSkge1xuICAgICAgICB0YWcgPSBsYXN0RnJhbWUudGFnO1xuICAgICAgICAvLyBJZiBpbm5lciB0ZXh0IHdhcyBzZXQgYnkgdHJhbnNmb3JtIGZ1bmN0aW9uIHRoZW4gbGV0J3MgdXNlIGl0XG4gICAgICAgIHRleHQgPSBsYXN0RnJhbWUuaW5uZXJUZXh0ICE9PSB1bmRlZmluZWQgPyBsYXN0RnJhbWUuaW5uZXJUZXh0IDogdGV4dDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZGlzYWxsb3dlZFRhZ3NNb2RlID09PSAnY29tcGxldGVseURpc2NhcmQnICYmICF0YWdBbGxvd2VkKHRhZykpIHtcbiAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgfSBlbHNlIGlmICgob3B0aW9ucy5kaXNhbGxvd2VkVGFnc01vZGUgPT09ICdkaXNjYXJkJyB8fCBvcHRpb25zLmRpc2FsbG93ZWRUYWdzTW9kZSA9PT0gJ2NvbXBsZXRlbHlEaXNjYXJkJykgJiYgKCh0YWcgPT09ICdzY3JpcHQnKSB8fCAodGFnID09PSAnc3R5bGUnKSkpIHtcbiAgICAgICAgLy8gaHRtbHBhcnNlcjIgZ2l2ZXMgdXMgdGhlc2UgYXMtaXMuIEVzY2FwaW5nIHRoZW0gcnVpbnMgdGhlIGNvbnRlbnQuIEFsbG93aW5nXG4gICAgICAgIC8vIHNjcmlwdCB0YWdzIGlzLCBieSBkZWZpbml0aW9uLCBnYW1lIG92ZXIgZm9yIFhTUyBwcm90ZWN0aW9uLCBzbyBpZiB0aGF0J3NcbiAgICAgICAgLy8geW91ciBjb25jZXJuLCBkb24ndCBhbGxvdyB0aGVtLiBUaGUgc2FtZSBpcyBlc3NlbnRpYWxseSB0cnVlIGZvciBzdHlsZSB0YWdzXG4gICAgICAgIC8vIHdoaWNoIGhhdmUgdGhlaXIgb3duIGNvbGxlY3Rpb24gb2YgWFNTIHZlY3RvcnMuXG4gICAgICAgIHJlc3VsdCArPSB0ZXh0O1xuICAgICAgfSBlbHNlIGlmICghYWRkZWRUZXh0KSB7XG4gICAgICAgIGNvbnN0IGVzY2FwZWQgPSBlc2NhcGVIdG1sKHRleHQsIGZhbHNlKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGV4dEZpbHRlcikge1xuICAgICAgICAgIHJlc3VsdCArPSBvcHRpb25zLnRleHRGaWx0ZXIoZXNjYXBlZCwgdGFnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgKz0gZXNjYXBlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBmcmFtZS50ZXh0ICs9IHRleHQ7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbmNsb3NldGFnOiBmdW5jdGlvbihuYW1lLCBpc0ltcGxpZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uQ2xvc2VUYWcpIHtcbiAgICAgICAgb3B0aW9ucy5vbkNsb3NlVGFnKG5hbWUsIGlzSW1wbGllZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChza2lwVGV4dCkge1xuICAgICAgICBza2lwVGV4dERlcHRoLS07XG4gICAgICAgIGlmICghc2tpcFRleHREZXB0aCkge1xuICAgICAgICAgIHNraXBUZXh0ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyYW1lID0gc3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWZyYW1lKSB7XG4gICAgICAgIC8vIERvIG5vdCBjcmFzaCBvbiBiYWQgbWFya3VwXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZyYW1lLnRhZyAhPT0gbmFtZSkge1xuICAgICAgICAvLyBBbm90aGVyIGNhc2Ugb2YgYmFkIG1hcmt1cC5cbiAgICAgICAgLy8gUHVzaCB0byBzdGFjaywgc28gdGhhdCBpdCB3aWxsIGJlIHVzZWQgaW4gZnV0dXJlIGNsb3NpbmcgdGFncy5cbiAgICAgICAgc3RhY2sucHVzaChmcmFtZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2tpcFRleHQgPSBvcHRpb25zLmVuZm9yY2VIdG1sQm91bmRhcnkgPyBuYW1lID09PSAnaHRtbCcgOiBmYWxzZTtcbiAgICAgIGRlcHRoLS07XG4gICAgICBjb25zdCBza2lwID0gc2tpcE1hcFtkZXB0aF07XG4gICAgICBpZiAoc2tpcCkge1xuICAgICAgICBkZWxldGUgc2tpcE1hcFtkZXB0aF07XG4gICAgICAgIGlmIChvcHRpb25zLmRpc2FsbG93ZWRUYWdzTW9kZSA9PT0gJ2Rpc2NhcmQnIHx8IG9wdGlvbnMuZGlzYWxsb3dlZFRhZ3NNb2RlID09PSAnY29tcGxldGVseURpc2NhcmQnKSB7XG4gICAgICAgICAgZnJhbWUudXBkYXRlUGFyZW50Tm9kZVRleHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGVtcFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgcmVzdWx0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFuc2Zvcm1NYXBbZGVwdGhdKSB7XG4gICAgICAgIG5hbWUgPSB0cmFuc2Zvcm1NYXBbZGVwdGhdO1xuICAgICAgICBkZWxldGUgdHJhbnNmb3JtTWFwW2RlcHRoXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVzaXZlRmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlclJlc3VsdCA9IG9wdGlvbnMuZXhjbHVzaXZlRmlsdGVyKGZyYW1lKTtcbiAgICAgICAgaWYgKGZpbHRlclJlc3VsdCA9PT0gJ2V4Y2x1ZGVUYWcnKSB7XG4gICAgICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgICAgIC8vIG5vIGxvbmdlciBlc2NhcGluZyB0aGUgdGFnIHNpbmNlIGl0J3Mgbm90IGFkZGVkIGF0IGFsbFxuICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDtcbiAgICAgICAgICAgIHRlbXBSZXN1bHQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBvcGVuaW5nIHRhZyBmcm9tIHRoZSByZXN1bHRcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIGZyYW1lLnRhZ1Bvc2l0aW9uKSArIHJlc3VsdC5zdWJzdHJpbmcoZnJhbWUudGFnUG9zaXRpb24gKyBmcmFtZS5vcGVuaW5nVGFnTGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyUmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBmcmFtZS50YWdQb3NpdGlvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZyYW1lLnVwZGF0ZVBhcmVudE5vZGVNZWRpYUNoaWxkcmVuKCk7XG4gICAgICBmcmFtZS51cGRhdGVQYXJlbnROb2RlVGV4dCgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIEFscmVhZHkgb3V0cHV0IC8+XG4gICAgICAgIG9wdGlvbnMuc2VsZkNsb3NpbmcuaW5kZXhPZihuYW1lKSAhPT0gLTEgfHxcbiAgICAgICAgLy8gRXNjYXBlZCB0YWcsIGNsb3NpbmcgdGFnIGlzIGltcGxpZWRcbiAgICAgICAgKGlzSW1wbGllZCAmJiAhdGFnQWxsb3dlZChuYW1lKSAmJiBbICdlc2NhcGUnLCAncmVjdXJzaXZlRXNjYXBlJyBdLmluZGV4T2Yob3B0aW9ucy5kaXNhbGxvd2VkVGFnc01vZGUpID49IDApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0O1xuICAgICAgICAgIHRlbXBSZXN1bHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSAnPC8nICsgbmFtZSArICc+JztcbiAgICAgIGlmIChza2lwKSB7XG4gICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQgKyBlc2NhcGVIdG1sKHJlc3VsdCk7XG4gICAgICAgIHRlbXBSZXN1bHQgPSAnJztcbiAgICAgIH1cbiAgICAgIGFkZGVkVGV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgb3B0aW9ucy5wYXJzZXIpO1xuICBwYXJzZXIud3JpdGUoaHRtbCk7XG4gIHBhcnNlci5lbmQoKTtcblxuICByZXR1cm4gcmVzdWx0O1xuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICByZXN1bHQgPSAnJztcbiAgICBkZXB0aCA9IDA7XG4gICAgc3RhY2sgPSBbXTtcbiAgICBza2lwTWFwID0ge307XG4gICAgdHJhbnNmb3JtTWFwID0ge307XG4gICAgc2tpcFRleHQgPSBmYWxzZTtcbiAgICBza2lwVGV4dERlcHRoID0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUh0bWwocywgcXVvdGUpIHtcbiAgICBpZiAodHlwZW9mIChzKSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHMgPSBzICsgJyc7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnBhcnNlci5kZWNvZGVFbnRpdGllcykge1xuICAgICAgcyA9IHMucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgICAgaWYgKHF1b3RlKSB7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETzogdGhpcyBpcyBpbmFkZXF1YXRlIGJlY2F1c2UgaXQgd2lsbCBwYXNzIGAmMDtgLiBUaGlzIGFwcHJvYWNoXG4gICAgLy8gd2lsbCBub3Qgd29yaywgZWFjaCAmIG11c3QgYmUgY29uc2lkZXJlZCB3aXRoIHJlZ2FyZCB0byB3aGV0aGVyIGl0XG4gICAgLy8gaXMgZm9sbG93ZWQgYnkgYSAxMDAlIHN5bnRhY3RpY2FsbHkgdmFsaWQgZW50aXR5IG9yIG5vdCwgYW5kIGVzY2FwZWRcbiAgICAvLyBpZiBpdCBpcyBub3QuIElmIHRoaXMgYm90aGVycyB5b3UsIGRvbid0IHNldCBwYXJzZXIuZGVjb2RlRW50aXRpZXNcbiAgICAvLyB0byBmYWxzZS4gKFRoZSBkZWZhdWx0IGlzIHRydWUuKVxuICAgIHMgPSBzLnJlcGxhY2UoLyYoPyFbYS16QS1aMC05I117MSwyMH07KS9nLCAnJmFtcDsnKSAvLyBNYXRjaCBhbXBlcnNhbmRzIG5vdCBwYXJ0IG9mIGV4aXN0aW5nIEhUTUwgZW50aXR5XG4gICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgIGlmIChxdW90ZSkge1xuICAgICAgcyA9IHMucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdWdodHlIcmVmKG5hbWUsIGhyZWYpIHtcbiAgICAvLyBCcm93c2VycyBpZ25vcmUgY2hhcmFjdGVyIGNvZGVzIG9mIDMyIChzcGFjZSkgYW5kIGJlbG93IGluIGEgc3VycHJpc2luZ1xuICAgIC8vIG51bWJlciBvZiBzaXR1YXRpb25zLiBTdGFydCByZWFkaW5nIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXQjRW1iZWRkZWRfdGFiXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICBocmVmID0gaHJlZi5yZXBsYWNlKC9bXFx4MDAtXFx4MjBdKy9nLCAnJyk7XG4gICAgLy8gQ2xvYmJlciBhbnkgY29tbWVudHMgaW4gVVJMcywgd2hpY2ggdGhlIGJyb3dzZXIgbWlnaHRcbiAgICAvLyBpbnRlcnByZXQgaW5zaWRlIGFuIFhNTCBkYXRhIGlzbGFuZCwgYWxsb3dpbmdcbiAgICAvLyBhIGphdmFzY3JpcHQ6IFVSTCB0byBiZSBzbnVjayB0aHJvdWdoXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBocmVmLmluZGV4T2YoJzwhLS0nKTtcbiAgICAgIGlmIChmaXJzdEluZGV4ID09PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGhyZWYuaW5kZXhPZignLS0+JywgZmlyc3RJbmRleCArIDQpO1xuICAgICAgaWYgKGxhc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBocmVmID0gaHJlZi5zdWJzdHJpbmcoMCwgZmlyc3RJbmRleCkgKyBocmVmLnN1YnN0cmluZyhsYXN0SW5kZXggKyAzKTtcbiAgICB9XG4gICAgLy8gQ2FzZSBpbnNlbnNpdGl2ZSBzbyB3ZSBkb24ndCBnZXQgZmFrZWQgb3V0IGJ5IEpBVkFTQ1JJUFQgIzFcbiAgICAvLyBBbGxvdyBtb3JlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGZpcnN0IHNvIHdlIGRvbid0IGdldCBmYWtlZFxuICAgIC8vIG91dCBieSBjZXJ0YWluIHNjaGVtZXMgYnJvd3NlcnMgYWNjZXB0XG4gICAgY29uc3QgbWF0Y2hlcyA9IGhyZWYubWF0Y2goL14oW2EtekEtWl1bYS16QS1aMC05LlxcLStdKik6Lyk7XG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAvLyBQcm90b2NvbC1yZWxhdGl2ZSBVUkwgc3RhcnRpbmcgd2l0aCBhbnkgY29tYmluYXRpb24gb2YgJy8nIGFuZCAnXFwnXG4gICAgICBpZiAoaHJlZi5tYXRjaCgvXlsvXFxcXF17Mn0vKSkge1xuICAgICAgICByZXR1cm4gIW9wdGlvbnMuYWxsb3dQcm90b2NvbFJlbGF0aXZlO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBzY2hlbWVcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1lID0gbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGhhcyhvcHRpb25zLmFsbG93ZWRTY2hlbWVzQnlUYWcsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5hbGxvd2VkU2NoZW1lc0J5VGFnW25hbWVdLmluZGV4T2Yoc2NoZW1lKSA9PT0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuICFvcHRpb25zLmFsbG93ZWRTY2hlbWVzIHx8IG9wdGlvbnMuYWxsb3dlZFNjaGVtZXMuaW5kZXhPZihzY2hlbWUpID09PSAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVXJsKHZhbHVlKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eKFxcdys6KT9cXHMqW1xcXFwvXVxccypbXFxcXC9dLywgJyQxLy8nKTtcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgncmVsYXRpdmU6JykpIHtcbiAgICAgIC8vIEFuIGF0dGVtcHQgdG8gZXhwbG9pdCBvdXIgd29ya2Fyb3VuZCBmb3IgYmFzZSBVUkxzIGJlaW5nXG4gICAgICAvLyBtYW5kYXRvcnkgZm9yIHJlbGF0aXZlIFVSTCB2YWxpZGF0aW9uIGluIHRoZSBXSEFUV0dcbiAgICAgIC8vIFVSTCBwYXJzZXIsIHJlamVjdCBpdFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWxhdGl2ZTogZXhwbG9pdCBhdHRlbXB0Jyk7XG4gICAgfVxuICAgIC8vIG5hdWdodHlIcmVmIGlzIGluIGNoYXJnZSBvZiB3aGV0aGVyIHByb3RvY29sIHJlbGF0aXZlIFVSTHNcbiAgICAvLyBhcmUgY29vbC4gSGVyZSB3ZSBhcmUgY29uY2VybmVkIGp1c3Qgd2l0aCBhbGxvd2VkIGhvc3RuYW1lcyBhbmRcbiAgICAvLyB3aGV0aGVyIHRvIGFsbG93IHJlbGF0aXZlIFVSTHMuXG4gICAgLy9cbiAgICAvLyBCdWlsZCBhIHBsYWNlaG9sZGVyIFwiYmFzZSBVUkxcIiBhZ2FpbnN0IHdoaWNoIGFueSByZWFzb25hYmxlXG4gICAgLy8gcmVsYXRpdmUgVVJMIG1heSBiZSBwYXJzZWQgc3VjY2Vzc2Z1bGx5XG4gICAgbGV0IGJhc2UgPSAncmVsYXRpdmU6Ly9yZWxhdGl2ZS1zaXRlJztcbiAgICBmb3IgKGxldCBpID0gMDsgKGkgPCAxMDApOyBpKyspIHtcbiAgICAgIGJhc2UgKz0gYC8ke2l9YDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHZhbHVlLCBiYXNlKTtcblxuICAgIGNvbnN0IGlzUmVsYXRpdmVVcmwgPSBwYXJzZWQgJiYgcGFyc2VkLmhvc3RuYW1lID09PSAncmVsYXRpdmUtc2l0ZScgJiYgcGFyc2VkLnByb3RvY29sID09PSAncmVsYXRpdmU6JztcbiAgICByZXR1cm4ge1xuICAgICAgaXNSZWxhdGl2ZVVybCxcbiAgICAgIHVybDogcGFyc2VkXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogRmlsdGVycyB1c2VyIGlucHV0IGNzcyBwcm9wZXJ0aWVzIGJ5IGFsbG93bGlzdGVkIHJlZ2V4IGF0dHJpYnV0ZXMuXG4gICAqIE1vZGlmaWVzIHRoZSBhYnN0cmFjdFN5bnRheFRyZWUgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWJzdHJhY3RTeW50YXhUcmVlICAtIE9iamVjdCByZXByZXNlbnRhdGlvbiBvZiBDU1MgYXR0cmlidXRlcy5cbiAgICogQHByb3BlcnR5IHthcnJheVtEZWNsYXJhdGlvbl19IGFic3RyYWN0U3ludGF4VHJlZS5ub2Rlc1swXSAtIEVhY2ggb2JqZWN0IGNvaW50YWlucyBwcm9wIGFuZCB2YWx1ZSBrZXksIGkuZSB7IHByb3A6ICdjb2xvcicsIHZhbHVlOiAncmVkJyB9LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWxsb3dlZFN0eWxlcyAgICAgICAtIEtleXMgYXJlIHByb3BlcnRpZXMgKGkuZSBjb2xvciksIHZhbHVlIGlzIGxpc3Qgb2YgcGVybWl0dGVkIHJlZ2V4IHJ1bGVzIChpLmUgL2dyZWVuL2kpLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICAtIFRoZSBtb2RpZmllZCB0cmVlLlxuICAgKi9cbiAgZnVuY3Rpb24gZmlsdGVyQ3NzKGFic3RyYWN0U3ludGF4VHJlZSwgYWxsb3dlZFN0eWxlcykge1xuICAgIGlmICghYWxsb3dlZFN0eWxlcykge1xuICAgICAgcmV0dXJuIGFic3RyYWN0U3ludGF4VHJlZTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3RSdWxlcyA9IGFic3RyYWN0U3ludGF4VHJlZS5ub2Rlc1swXTtcbiAgICBsZXQgc2VsZWN0ZWRSdWxlO1xuXG4gICAgLy8gTWVyZ2UgZ2xvYmFsIGFuZCB0YWctc3BlY2lmaWMgc3R5bGVzIGludG8gbmV3IEFTVC5cbiAgICBpZiAoYWxsb3dlZFN0eWxlc1thc3RSdWxlcy5zZWxlY3Rvcl0gJiYgYWxsb3dlZFN0eWxlc1snKiddKSB7XG4gICAgICBzZWxlY3RlZFJ1bGUgPSBkZWVwbWVyZ2UoXG4gICAgICAgIGFsbG93ZWRTdHlsZXNbYXN0UnVsZXMuc2VsZWN0b3JdLFxuICAgICAgICBhbGxvd2VkU3R5bGVzWycqJ11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkUnVsZSA9IGFsbG93ZWRTdHlsZXNbYXN0UnVsZXMuc2VsZWN0b3JdIHx8IGFsbG93ZWRTdHlsZXNbJyonXTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0ZWRSdWxlKSB7XG4gICAgICBhYnN0cmFjdFN5bnRheFRyZWUubm9kZXNbMF0ubm9kZXMgPSBhc3RSdWxlcy5ub2Rlcy5yZWR1Y2UoZmlsdGVyRGVjbGFyYXRpb25zKHNlbGVjdGVkUnVsZSksIFtdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWJzdHJhY3RTeW50YXhUcmVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBzdHlsZSBhdHRyaWJ1dGVzIGZyb20gYW4gQWJzdHJhY3RTeW50YXhUcmVlIGFuZCBmb3JtYXRzIHRob3NlXG4gICAqIHZhbHVlcyBpbiB0aGUgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZSBmb3JtYXQuXG4gICAqXG4gICAqIEBwYXJhbSAge0Fic3RyYWN0U3ludGF4VHJlZX0gZmlsdGVyZWRBU1RcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAtIEV4YW1wbGU6IFwiY29sb3I6eWVsbG93O3RleHQtYWxpZ246Y2VudGVyICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6aGVsdmV0aWNhO1wiXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpbmdpZnlTdHlsZUF0dHJpYnV0ZXMoZmlsdGVyZWRBU1QpIHtcbiAgICByZXR1cm4gZmlsdGVyZWRBU1Qubm9kZXNbMF0ubm9kZXNcbiAgICAgIC5yZWR1Y2UoZnVuY3Rpb24oZXh0cmFjdGVkQXR0cmlidXRlcywgYXR0ck9iamVjdCkge1xuICAgICAgICBleHRyYWN0ZWRBdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgYCR7YXR0ck9iamVjdC5wcm9wfToke2F0dHJPYmplY3QudmFsdWV9JHthdHRyT2JqZWN0LmltcG9ydGFudCA/ICcgIWltcG9ydGFudCcgOiAnJ31gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBleHRyYWN0ZWRBdHRyaWJ1dGVzO1xuICAgICAgfSwgW10pXG4gICAgICAuam9pbignOycpO1xuICB9XG5cbiAgLyoqXG4gICAgKiBGaWx0ZXJzIHRoZSBleGlzdGluZyBhdHRyaWJ1dGVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuIERpc2NhcmRzIGFueSBhdHRyaWJ1dGVzXG4gICAgKiB3aGljaCBkb24ndCBtYXRjaCB0aGUgYWxsb3dsaXN0LlxuICAgICpcbiAgICAqIEBwYXJhbSAge29iamVjdH0gc2VsZWN0ZWRSdWxlICAgICAgICAgICAgIC0gRXhhbXBsZTogeyBjb2xvcjogcmVkLCBmb250LWZhbWlseTogaGVsdmV0aWNhIH1cbiAgICAqIEBwYXJhbSAge2FycmF5fSBhbGxvd2VkRGVjbGFyYXRpb25zTGlzdCAgIC0gTGlzdCBvZiBkZWNsYXJhdGlvbnMgd2hpY2ggcGFzcyB0aGUgYWxsb3dsaXN0LlxuICAgICogQHBhcmFtICB7b2JqZWN0fSBhdHRyaWJ1dGVPYmplY3QgICAgICAgICAgLSBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGNzcyBwcm9wZXJ0eS5cbiAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhdHRyaWJ1dGVPYmplY3QudHlwZSAgIC0gVHlwaWNhbGx5ICdkZWNsYXJhdGlvbicuXG4gICAgKiBAcHJvcGVydHkge3N0cmluZ30gYXR0cmlidXRlT2JqZWN0LnByb3AgICAtIFRoZSBDU1MgcHJvcGVydHksIGkuZSAnY29sb3InLlxuICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGF0dHJpYnV0ZU9iamVjdC52YWx1ZSAgLSBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSB0byB0aGUgY3NzIHByb3BlcnR5LCBpLmUgJ3JlZCcuXG4gICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gICAgICAgICAgICAgICAgICAgICAgICAtIFdoZW4gdXNlZCBpbiBBcnJheS5yZWR1Y2UsIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIERlY2xhcmF0aW9uIG9iamVjdHNcbiAgICAqL1xuICBmdW5jdGlvbiBmaWx0ZXJEZWNsYXJhdGlvbnMoc2VsZWN0ZWRSdWxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhbGxvd2VkRGVjbGFyYXRpb25zTGlzdCwgYXR0cmlidXRlT2JqZWN0KSB7XG4gICAgICAvLyBJZiB0aGlzIHByb3BlcnR5IGlzIGFsbG93bGlzdGVkLi4uXG4gICAgICBpZiAoaGFzKHNlbGVjdGVkUnVsZSwgYXR0cmlidXRlT2JqZWN0LnByb3ApKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXNSZWdleCA9IHNlbGVjdGVkUnVsZVthdHRyaWJ1dGVPYmplY3QucHJvcF0uc29tZShmdW5jdGlvbihyZWd1bGFyRXhwcmVzc2lvbikge1xuICAgICAgICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvbi50ZXN0KGF0dHJpYnV0ZU9iamVjdC52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVzUmVnZXgpIHtcbiAgICAgICAgICBhbGxvd2VkRGVjbGFyYXRpb25zTGlzdC5wdXNoKGF0dHJpYnV0ZU9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbGxvd2VkRGVjbGFyYXRpb25zTGlzdDtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyQ2xhc3NlcyhjbGFzc2VzLCBhbGxvd2VkLCBhbGxvd2VkR2xvYnMpIHtcbiAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgIC8vIFRoZSBjbGFzcyBhdHRyaWJ1dGUgaXMgYWxsb3dlZCB3aXRob3V0IGZpbHRlcmluZyBvbiB0aGlzIHRhZ1xuICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLnNwbGl0KC9cXHMrLyk7XG4gICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uKGNsc3MpIHtcbiAgICAgIHJldHVybiBhbGxvd2VkLmluZGV4T2YoY2xzcykgIT09IC0xIHx8IGFsbG93ZWRHbG9icy5zb21lKGZ1bmN0aW9uKGdsb2IpIHtcbiAgICAgICAgcmV0dXJuIGdsb2IudGVzdChjbHNzKTtcbiAgICAgIH0pO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxufVxuXG4vLyBEZWZhdWx0cyBhcmUgYWNjZXNzaWJsZSB0byB5b3Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGVtIGFzIGEgc3RhcnRpbmcgcG9pbnRcbi8vIHByb2dyYW1tYXRpY2FsbHkgaWYgeW91IHdpc2hcblxuY29uc3QgaHRtbFBhcnNlckRlZmF1bHRzID0ge1xuICBkZWNvZGVFbnRpdGllczogdHJ1ZVxufTtcbnNhbml0aXplSHRtbC5kZWZhdWx0cyA9IHtcbiAgYWxsb3dlZFRhZ3M6IFtcbiAgICAvLyBTZWN0aW9ucyBkZXJpdmVkIGZyb20gTUROIGVsZW1lbnQgY2F0ZWdvcmllcyBhbmQgbGltaXRlZCB0byB0aGUgbW9yZVxuICAgIC8vIGJlbmlnbiBjYXRlZ29yaWVzLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudFxuICAgIC8vIENvbnRlbnQgc2VjdGlvbmluZ1xuICAgICdhZGRyZXNzJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnZm9vdGVyJywgJ2hlYWRlcicsXG4gICAgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hncm91cCcsXG4gICAgJ21haW4nLCAnbmF2JywgJ3NlY3Rpb24nLFxuICAgIC8vIFRleHQgY29udGVudFxuICAgICdibG9ja3F1b3RlJywgJ2RkJywgJ2RpdicsICdkbCcsICdkdCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsXG4gICAgJ2hyJywgJ2xpJywgJ21lbnUnLCAnb2wnLCAncCcsICdwcmUnLCAndWwnLFxuICAgIC8vIElubGluZSB0ZXh0IHNlbWFudGljc1xuICAgICdhJywgJ2FiYnInLCAnYicsICdiZGknLCAnYmRvJywgJ2JyJywgJ2NpdGUnLCAnY29kZScsICdkYXRhJywgJ2RmbicsXG4gICAgJ2VtJywgJ2knLCAna2JkJywgJ21hcmsnLCAncScsXG4gICAgJ3JiJywgJ3JwJywgJ3J0JywgJ3J0YycsICdydWJ5JyxcbiAgICAncycsICdzYW1wJywgJ3NtYWxsJywgJ3NwYW4nLCAnc3Ryb25nJywgJ3N1YicsICdzdXAnLCAndGltZScsICd1JywgJ3ZhcicsICd3YnInLFxuICAgIC8vIFRhYmxlIGNvbnRlbnRcbiAgICAnY2FwdGlvbicsICdjb2wnLCAnY29sZ3JvdXAnLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGZvb3QnLCAndGgnLFxuICAgICd0aGVhZCcsICd0cidcbiAgXSxcbiAgLy8gVGFncyB0aGF0IGNhbm5vdCBiZSBib29sZWFuXG4gIG5vbkJvb2xlYW5BdHRyaWJ1dGVzOiBbXG4gICAgJ2FiYnInLCAnYWNjZXB0JywgJ2FjY2VwdC1jaGFyc2V0JywgJ2FjY2Vzc2tleScsICdhY3Rpb24nLFxuICAgICdhbGxvdycsICdhbHQnLCAnYXMnLCAnYXV0b2NhcGl0YWxpemUnLCAnYXV0b2NvbXBsZXRlJyxcbiAgICAnYmxvY2tpbmcnLCAnY2hhcnNldCcsICdjaXRlJywgJ2NsYXNzJywgJ2NvbG9yJywgJ2NvbHMnLFxuICAgICdjb2xzcGFuJywgJ2NvbnRlbnQnLCAnY29udGVudGVkaXRhYmxlJywgJ2Nvb3JkcycsICdjcm9zc29yaWdpbicsXG4gICAgJ2RhdGEnLCAnZGF0ZXRpbWUnLCAnZGVjb2RpbmcnLCAnZGlyJywgJ2Rpcm5hbWUnLCAnZG93bmxvYWQnLFxuICAgICdkcmFnZ2FibGUnLCAnZW5jdHlwZScsICdlbnRlcmtleWhpbnQnLCAnZmV0Y2hwcmlvcml0eScsICdmb3InLFxuICAgICdmb3JtJywgJ2Zvcm1hY3Rpb24nLCAnZm9ybWVuY3R5cGUnLCAnZm9ybW1ldGhvZCcsICdmb3JtdGFyZ2V0JyxcbiAgICAnaGVhZGVycycsICdoZWlnaHQnLCAnaGlkZGVuJywgJ2hpZ2gnLCAnaHJlZicsICdocmVmbGFuZycsXG4gICAgJ2h0dHAtZXF1aXYnLCAnaWQnLCAnaW1hZ2VzaXplcycsICdpbWFnZXNyY3NldCcsICdpbnB1dG1vZGUnLFxuICAgICdpbnRlZ3JpdHknLCAnaXMnLCAnaXRlbWlkJywgJ2l0ZW1wcm9wJywgJ2l0ZW1yZWYnLCAnaXRlbXR5cGUnLFxuICAgICdraW5kJywgJ2xhYmVsJywgJ2xhbmcnLCAnbGlzdCcsICdsb2FkaW5nJywgJ2xvdycsICdtYXgnLFxuICAgICdtYXhsZW5ndGgnLCAnbWVkaWEnLCAnbWV0aG9kJywgJ21pbicsICdtaW5sZW5ndGgnLCAnbmFtZScsXG4gICAgJ25vbmNlJywgJ29wdGltdW0nLCAncGF0dGVybicsICdwaW5nJywgJ3BsYWNlaG9sZGVyJywgJ3BvcG92ZXInLFxuICAgICdwb3BvdmVydGFyZ2V0JywgJ3BvcG92ZXJ0YXJnZXRhY3Rpb24nLCAncG9zdGVyJywgJ3ByZWxvYWQnLFxuICAgICdyZWZlcnJlcnBvbGljeScsICdyZWwnLCAncm93cycsICdyb3dzcGFuJywgJ3NhbmRib3gnLCAnc2NvcGUnLFxuICAgICdzaGFwZScsICdzaXplJywgJ3NpemVzJywgJ3Nsb3QnLCAnc3BhbicsICdzcGVsbGNoZWNrJywgJ3NyYycsXG4gICAgJ3NyY2RvYycsICdzcmNsYW5nJywgJ3NyY3NldCcsICdzdGFydCcsICdzdGVwJywgJ3N0eWxlJyxcbiAgICAndGFiaW5kZXgnLCAndGFyZ2V0JywgJ3RpdGxlJywgJ3RyYW5zbGF0ZScsICd0eXBlJywgJ3VzZW1hcCcsXG4gICAgJ3ZhbHVlJywgJ3dpZHRoJywgJ3dyYXAnLFxuICAgIC8vIEV2ZW50IGhhbmRsZXJzXG4gICAgJ29uYXV4Y2xpY2snLCAnb25hZnRlcnByaW50JywgJ29uYmVmb3JlbWF0Y2gnLCAnb25iZWZvcmVwcmludCcsXG4gICAgJ29uYmVmb3JldW5sb2FkJywgJ29uYmVmb3JldG9nZ2xlJywgJ29uYmx1cicsICdvbmNhbmNlbCcsXG4gICAgJ29uY2FucGxheScsICdvbmNhbnBsYXl0aHJvdWdoJywgJ29uY2hhbmdlJywgJ29uY2xpY2snLCAnb25jbG9zZScsXG4gICAgJ29uY29udGV4dGxvc3QnLCAnb25jb250ZXh0bWVudScsICdvbmNvbnRleHRyZXN0b3JlZCcsICdvbmNvcHknLFxuICAgICdvbmN1ZWNoYW5nZScsICdvbmN1dCcsICdvbmRibGNsaWNrJywgJ29uZHJhZycsICdvbmRyYWdlbmQnLFxuICAgICdvbmRyYWdlbnRlcicsICdvbmRyYWdsZWF2ZScsICdvbmRyYWdvdmVyJywgJ29uZHJhZ3N0YXJ0JyxcbiAgICAnb25kcm9wJywgJ29uZHVyYXRpb25jaGFuZ2UnLCAnb25lbXB0aWVkJywgJ29uZW5kZWQnLFxuICAgICdvbmVycm9yJywgJ29uZm9jdXMnLCAnb25mb3JtZGF0YScsICdvbmhhc2hjaGFuZ2UnLCAnb25pbnB1dCcsXG4gICAgJ29uaW52YWxpZCcsICdvbmtleWRvd24nLCAnb25rZXlwcmVzcycsICdvbmtleXVwJyxcbiAgICAnb25sYW5ndWFnZWNoYW5nZScsICdvbmxvYWQnLCAnb25sb2FkZWRkYXRhJywgJ29ubG9hZGVkbWV0YWRhdGEnLFxuICAgICdvbmxvYWRzdGFydCcsICdvbm1lc3NhZ2UnLCAnb25tZXNzYWdlZXJyb3InLCAnb25tb3VzZWRvd24nLFxuICAgICdvbm1vdXNlZW50ZXInLCAnb25tb3VzZWxlYXZlJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLFxuICAgICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAnb25vZmZsaW5lJywgJ29ub25saW5lJywgJ29ucGFnZWhpZGUnLFxuICAgICdvbnBhZ2VzaG93JywgJ29ucGFzdGUnLCAnb25wYXVzZScsICdvbnBsYXknLCAnb25wbGF5aW5nJyxcbiAgICAnb25wb3BzdGF0ZScsICdvbnByb2dyZXNzJywgJ29ucmF0ZWNoYW5nZScsICdvbnJlc2V0JywgJ29ucmVzaXplJyxcbiAgICAnb25yZWplY3Rpb25oYW5kbGVkJywgJ29uc2Nyb2xsJywgJ29uc2Nyb2xsZW5kJyxcbiAgICAnb25zZWN1cml0eXBvbGljeXZpb2xhdGlvbicsICdvbnNlZWtlZCcsICdvbnNlZWtpbmcnLCAnb25zZWxlY3QnLFxuICAgICdvbnNsb3RjaGFuZ2UnLCAnb25zdGFsbGVkJywgJ29uc3RvcmFnZScsICdvbnN1Ym1pdCcsICdvbnN1c3BlbmQnLFxuICAgICdvbnRpbWV1cGRhdGUnLCAnb250b2dnbGUnLCAnb251bmhhbmRsZWRyZWplY3Rpb24nLCAnb251bmxvYWQnLFxuICAgICdvbnZvbHVtZWNoYW5nZScsICdvbndhaXRpbmcnLCAnb253aGVlbCdcbiAgXSxcbiAgZGlzYWxsb3dlZFRhZ3NNb2RlOiAnZGlzY2FyZCcsXG4gIGFsbG93ZWRBdHRyaWJ1dGVzOiB7XG4gICAgYTogWyAnaHJlZicsICduYW1lJywgJ3RhcmdldCcgXSxcbiAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgYWxsb3cgaW1nIGl0c2VsZiBieSBkZWZhdWx0LCBidXRcbiAgICAvLyB0aGVzZSBhdHRyaWJ1dGVzIHdvdWxkIG1ha2Ugc2Vuc2UgaWYgd2UgZGlkLlxuICAgIGltZzogWyAnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ2xvYWRpbmcnIF1cbiAgfSxcbiAgYWxsb3dlZEVtcHR5QXR0cmlidXRlczogW1xuICAgICdhbHQnXG4gIF0sXG4gIC8vIExvdHMgb2YgdGhlc2Ugd29uJ3QgY29tZSB1cCBieSBkZWZhdWx0IGJlY2F1c2Ugd2UgZG9uJ3QgYWxsb3cgdGhlbVxuICBzZWxmQ2xvc2luZzogWyAnaW1nJywgJ2JyJywgJ2hyJywgJ2FyZWEnLCAnYmFzZScsICdiYXNlZm9udCcsICdpbnB1dCcsICdsaW5rJywgJ21ldGEnIF0sXG4gIC8vIFVSTCBzY2hlbWVzIHdlIHBlcm1pdFxuICBhbGxvd2VkU2NoZW1lczogWyAnaHR0cCcsICdodHRwcycsICdmdHAnLCAnbWFpbHRvJywgJ3RlbCcgXSxcbiAgYWxsb3dlZFNjaGVtZXNCeVRhZzoge30sXG4gIGFsbG93ZWRTY2hlbWVzQXBwbGllZFRvQXR0cmlidXRlczogWyAnaHJlZicsICdzcmMnLCAnY2l0ZScgXSxcbiAgYWxsb3dQcm90b2NvbFJlbGF0aXZlOiB0cnVlLFxuICBlbmZvcmNlSHRtbEJvdW5kYXJ5OiBmYWxzZSxcbiAgcGFyc2VTdHlsZUF0dHJpYnV0ZXM6IHRydWVcbn07XG5cbnNhbml0aXplSHRtbC5zaW1wbGVUcmFuc2Zvcm0gPSBmdW5jdGlvbihuZXdUYWdOYW1lLCBuZXdBdHRyaWJzLCBtZXJnZSkge1xuICBtZXJnZSA9IChtZXJnZSA9PT0gdW5kZWZpbmVkKSA/IHRydWUgOiBtZXJnZTtcbiAgbmV3QXR0cmlicyA9IG5ld0F0dHJpYnMgfHwge307XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHRhZ05hbWUsIGF0dHJpYnMpIHtcbiAgICBsZXQgYXR0cmliO1xuICAgIGlmIChtZXJnZSkge1xuICAgICAgZm9yIChhdHRyaWIgaW4gbmV3QXR0cmlicykge1xuICAgICAgICBhdHRyaWJzW2F0dHJpYl0gPSBuZXdBdHRyaWJzW2F0dHJpYl07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnMgPSBuZXdBdHRyaWJzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0YWdOYW1lOiBuZXdUYWdOYW1lLFxuICAgICAgYXR0cmliczogYXR0cmlic1xuICAgIH07XG4gIH07XG59O1xuIiwiaW1wb3J0IHNhbml0aXplSHRtbCBmcm9tICdzYW5pdGl6ZS1odG1sJztcclxuXHJcbmNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblxyXG5mdW5jdGlvbiBnZXRGb3JtSW5uZXJIVE1MKCBodG1sQ29udGVudCApIHtcclxuXHRjb25zdCBjbGVhbiA9IHNhbml0aXplSHRtbChodG1sQ29udGVudCwge1xyXG5cdFx0YWxsb3dlZFRhZ3M6IFtcclxuXHRcdFx0J2Zvcm0nLFxyXG5cdFx0XHQnaW5wdXQnLFxyXG5cdFx0XHQnc2VsZWN0JyxcclxuXHRcdFx0J29wdGlvbicsXHJcblx0XHRcdCd0ZXh0YXJlYScsXHJcblx0XHRcdCdidXR0b24nLFxyXG5cdFx0XHQnZmllbGRzZXQnLFxyXG5cdFx0XHQnbGVnZW5kJyxcclxuXHRcdFx0J2xhYmVsJyxcclxuXHRcdFx0J2RpdicsXHJcblx0XHRcdCdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsXHJcblx0XHRcdCdzcGFuJyxcclxuXHRcdFx0J3AnLFxyXG5cdFx0XHQnYnInXHJcblx0XHRdLFxyXG5cdFx0YWxsb3dlZEF0dHJpYnV0ZXM6IGZhbHNlXHJcblx0fSk7XHJcblxyXG5cdGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdGRpdi5pbm5lckhUTUwgPSBjbGVhbjtcclxuXHJcblx0Y29uc3QgZm9ybSA9IGRpdi5xdWVyeVNlbGVjdG9yKCdmb3JtJyk7XHJcblx0cmV0dXJuIGZvcm0gPyBmb3JtLmlubmVySFRNTCA6ICcnO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBnZXRGb3JtSW5uZXJIVE1MOyIsImltcG9ydCByZXNvbHZlTGFiZWwgZnJvbSAnLi9yZXNvbHZlTGFiZWwnO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBpbnB1dCB7SFRNTElucHV0RWxlbWVudH1cclxuICovXHJcbmZ1bmN0aW9uIGdldElucHV0TnVtYmVyQXR0cnMoIGlucHV0ICkge1xyXG5cdGNvbnN0IGF0dHJpYnV0ZXMgPSB7XHJcblx0XHRuYW1lOiBpbnB1dC5uYW1lLFxyXG5cdFx0Y2xhc3NfbmFtZTogaW5wdXQuY2xhc3NOYW1lLFxyXG5cdFx0ZGVmYXVsdDogaW5wdXQudmFsdWUsXHJcblx0XHRsYWJlbDogcmVzb2x2ZUxhYmVsKCBpbnB1dCApLFxyXG5cdFx0cmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkLFxyXG5cdH07XHJcblxyXG5cdGlmICggaW5wdXQuaGFzQXR0cmlidXRlKCAnbWluJyApICkge1xyXG5cdFx0YXR0cmlidXRlcy5taW4gPSBpbnB1dC5taW47XHJcblx0fVxyXG5cclxuXHRpZiAoIGlucHV0Lmhhc0F0dHJpYnV0ZSggJ21heCcgKSApIHtcclxuXHRcdGF0dHJpYnV0ZXMubWF4ID0gaW5wdXQubWF4O1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGF0dHJpYnV0ZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdldElucHV0TnVtYmVyQXR0cnM7IiwiY29uc3Qge1xyXG5cdCAgICAgIG1pbWVzLFxyXG4gICAgICB9ID0gd2luZG93LkpldEZvcm1CdWlsZGVyUGFyc2VyQ29uZmlnO1xyXG5cclxuZnVuY3Rpb24gZ2V0TWltZVR5cGUoIGZpbGVuYW1lICkge1xyXG5cdGxldCB0eXBlID0gZmFsc2U7XHJcblxyXG5cdGZvciAoIGNvbnN0IGV4dFByZWcgaW4gbWltZXMgKSB7XHJcblx0XHRpZiAoICFtaW1lcy5oYXNPd25Qcm9wZXJ0eSggZXh0UHJlZyApICkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoICdcXC4oJyArIGV4dFByZWcgKyAnKSQnLCAnaScgKTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERvIG5vdCByZXR1cm4gdG9vIGxhdGUsXHJcblx0XHQgKiBiZWNhdXNlIHNhbWUgZmlsZSBjYW4gbWF0Y2ggbXVsdGlwbGUgZXh0ZW5zaW9uc1xyXG5cdFx0ICovXHJcblx0XHRpZiAoIGZpbGVuYW1lLm1hdGNoKCByZWdleCApICkge1xyXG5cdFx0XHR0eXBlID0gbWltZXNbIGV4dFByZWcgXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiB0eXBlO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBnZXRNaW1lVHlwZTsiLCJmdW5jdGlvbiogYnV0dG9uUGFyc2VyKCBidXR0b24gKSB7XHJcblx0aWYgKCFidXR0b24udHlwZSB8fCBidXR0b24udHlwZSAmJiBidXR0b24udHlwZSAhPT0gJ3N1Ym1pdCcpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdHlpZWxkIHtcclxuXHRcdG5hbWU6ICdqZXQtZm9ybXMvc3VibWl0LWZpZWxkJyxcclxuXHRcdGF0dHJpYnV0ZXM6IHtcclxuXHRcdFx0bGFiZWw6IGJ1dHRvbi5pbm5lckhUTUwudHJpbSgpLFxyXG5cdFx0XHRjbGFzc19uYW1lOiBidXR0b24uY2xhc3NOYW1lLFxyXG5cdFx0fSxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidXR0b25QYXJzZXI7IiwiaW1wb3J0IHJlc29sdmVMYWJlbCBmcm9tICcuLi9yZXNvbHZlTGFiZWwnO1xyXG5pbXBvcnQgcmVzb2x2ZUxlZ2VuZCBmcm9tICcuLi9yZXNvbHZlTGVnZW5kJztcclxuaW1wb3J0IGdldElucHV0TnVtYmVyQXR0cnMgZnJvbSAnLi4vZ2V0SW5wdXROdW1iZXJBdHRycyc7XHJcbmltcG9ydCByZXNvbHZlT3B0aW9uTGFiZWwgZnJvbSAnLi4vcmVzb2x2ZU9wdGlvbkxhYmVsJztcclxuaW1wb3J0IGdldE1pbWVUeXBlIGZyb20gJy4uL2dldE1pbWVUeXBlJztcclxuXHJcbmNvbnN0IHR5cGVNYXAgPSB7XHJcblx0ZW1haWw6IHRleHRQYXJzZXIsXHJcblx0dGVsOiB0ZXh0UGFyc2VyLFxyXG5cdHVybDogdGV4dFBhcnNlcixcclxuXHRwYXNzd29yZDogdGV4dFBhcnNlcixcclxuXHR0ZXh0OiB0ZXh0UGFyc2VyLFxyXG5cdGNvbG9yOiBjb2xvclBpY2tlclBhcnNlcixcclxuXHRyYWRpbzogcmFkaW9QYXJzZXIsXHJcblx0Y2hlY2tib3g6IGNoZWNrYm94UGFyc2VyLFxyXG5cdGRhdGU6IGRhdGVQYXJzZXIsXHJcblx0ZGF0ZXRpbWU6IGRhdGVUaW1lUGFyc2VyLFxyXG5cdCdkYXRldGltZS1sb2NhbCc6IGRhdGVUaW1lUGFyc2VyLFxyXG5cdHRpbWU6IHRpbWVQYXJzZXIsXHJcblx0ZmlsZTogbWVkaWFQYXJzZXIsXHJcblx0aGlkZGVuOiBoaWRkZW5QYXJzZXIsXHJcblx0bnVtYmVyOiBudW1iZXJQYXJzZXIsXHJcblx0cmFuZ2U6IHJhbmdlUGFyc2VyLFxyXG5cdHN1Ym1pdDogc3VibWl0UGFyc2VyLFxyXG59O1xyXG5cclxuZnVuY3Rpb24qIGlucHV0UGFyc2VyKCBpbnB1dCApIHtcclxuXHRpbnB1dC50eXBlID0gaW5wdXQudHlwZSB8fCAndGV4dCc7XHJcblxyXG5cdGlmICggIXR5cGVNYXAuaGFzT3duUHJvcGVydHkoIGlucHV0LnR5cGUgKSApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGdlbmVyYXRvciA9IHR5cGVNYXBbIGlucHV0LnR5cGUgXTtcclxuXHJcblx0eWllbGQqIGdlbmVyYXRvciggaW5wdXQgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBpbnB1dCB7SFRNTElucHV0RWxlbWVudH1cclxuICogQHJldHVybnMge0dlbmVyYXRvcjwqLCAoc3RyaW5nfHtuYW1lLCBmaWVsZF90eXBlfSlbXSwgKj59XHJcbiAqL1xyXG5mdW5jdGlvbiogdGV4dFBhcnNlciggaW5wdXQgKSB7XHJcblx0Y29uc3QgYXR0cmlidXRlcyA9IHtcclxuXHRcdGZpZWxkX3R5cGU6IGlucHV0LnR5cGUsXHJcblx0XHRuYW1lOiBpbnB1dC5uYW1lLFxyXG5cdFx0Y2xhc3NfbmFtZTogaW5wdXQuY2xhc3NOYW1lLFxyXG5cdFx0ZGVmYXVsdDogaW5wdXQudmFsdWUsXHJcblx0XHRsYWJlbDogcmVzb2x2ZUxhYmVsKCBpbnB1dCApLFxyXG5cdFx0cmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkLFxyXG5cdFx0cGxhY2Vob2xkZXI6IGlucHV0LnBsYWNlaG9sZGVyLFxyXG5cdH07XHJcblxyXG5cdGlmICggaW5wdXQuaGFzQXR0cmlidXRlKCAnbWF4bGVuZ3RoJyApICkge1xyXG5cdFx0YXR0cmlidXRlcy5tYXhsZW5ndGggPSBpbnB1dC5tYXhMZW5ndGg7XHJcblx0fVxyXG5cclxuXHRpZiAoIGlucHV0Lmhhc0F0dHJpYnV0ZSggJ21pbmxlbmd0aCcgKSApIHtcclxuXHRcdGF0dHJpYnV0ZXMubWlubGVuZ3RoID0gaW5wdXQubWluTGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy90ZXh0LWZpZWxkJyxcclxuXHRcdGF0dHJpYnV0ZXMsXHJcblx0XHRpbm5lckJsb2NrczogW10sXHJcblx0fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBpbnB1dCB7SFRNTElucHV0RWxlbWVudH1cclxuICogQHJldHVybnMge0dlbmVyYXRvcjwqLCAoc3RyaW5nfHtuYW1lLCBmaWVsZF90eXBlfSlbXSwgKj59XHJcbiAqL1xyXG5mdW5jdGlvbiogY29sb3JQaWNrZXJQYXJzZXIoIGlucHV0ICkge1xyXG5cdGNvbnN0IGF0dHJpYnV0ZXMgPSB7XHJcblx0XHRuYW1lOiBpbnB1dC5uYW1lLFxyXG5cdFx0Y2xhc3NfbmFtZTogaW5wdXQuY2xhc3NOYW1lLFxyXG5cdFx0ZGVmYXVsdDogaW5wdXQudmFsdWUsXHJcblx0XHRsYWJlbDogcmVzb2x2ZUxhYmVsKCBpbnB1dCApLFxyXG5cdFx0cmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkLFxyXG5cdH07XHJcblxyXG5cdHlpZWxkIHtcclxuXHRcdG5hbWU6ICdqZXQtZm9ybXMvY29sb3ItcGlja2VyLWZpZWxkJyxcclxuXHRcdGF0dHJpYnV0ZXMsXHJcblx0XHRpbm5lckJsb2NrczogW10sXHJcblx0fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBpbnB1dCB7SFRNTElucHV0RWxlbWVudH1cclxuICogQHJldHVybnMge0dlbmVyYXRvcjwqLCAoc3RyaW5nfHtuYW1lLCBmaWVsZF90eXBlfSlbXSwgKj59XHJcbiAqL1xyXG5mdW5jdGlvbiogcmFkaW9QYXJzZXIoIGlucHV0ICkge1xyXG5cdGlmICggaW5wdXQuamZiT2JzZXJ2ZWQgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdGNvbnN0IHJvb3QgPSBpbnB1dC5nZXRSb290Tm9kZSgpO1xyXG5cclxuXHQvKipcclxuXHQgKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudFtdfVxyXG5cdCAqL1xyXG5cdGNvbnN0IG9wdGlvbk5vZGVzID0gQXJyYXkuZnJvbShcclxuXHRcdHJvb3QucXVlcnlTZWxlY3RvckFsbChcclxuXHRcdFx0YGlucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJHsgaW5wdXQubmFtZSB9XCJdYCxcclxuXHRcdCksXHJcblx0KTtcclxuXHJcblx0Ly8gcHJldmVudCBwYXJzaW5nIGZ1dHVyZSByYWRpbyBub2Rlc1xyXG5cdG9wdGlvbk5vZGVzLmZvckVhY2goIG5vZGUgPT4geyBub2RlLmpmYk9ic2VydmVkID0gdHJ1ZTsgfSApO1xyXG5cclxuXHRjb25zdCBhdHRyaWJ1dGVzID0ge1xyXG5cdFx0bmFtZTogaW5wdXQubmFtZSxcclxuXHRcdGNsYXNzX25hbWU6IGlucHV0LmNsYXNzTmFtZSxcclxuXHRcdGZpZWxkX29wdGlvbnM6IFtdLFxyXG5cdFx0bGFiZWw6IHJlc29sdmVMZWdlbmQoIGlucHV0ICkgfHwgcmVzb2x2ZUxhYmVsKCBpbnB1dCApLFxyXG5cdFx0cmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkLFxyXG5cdH07XHJcblxyXG5cdGZvciAoIGNvbnN0IG9wdGlvbk5vZGUgb2Ygb3B0aW9uTm9kZXMgKSB7XHJcblx0XHRhdHRyaWJ1dGVzLmZpZWxkX29wdGlvbnMucHVzaCgge1xyXG5cdFx0XHR2YWx1ZTogb3B0aW9uTm9kZS52YWx1ZSxcclxuXHRcdFx0bGFiZWw6IHJlc29sdmVPcHRpb25MYWJlbCggb3B0aW9uTm9kZSApLFxyXG5cdFx0fSApO1xyXG5cclxuXHRcdGlmICggb3B0aW9uTm9kZS5jaGVja2VkICkge1xyXG5cdFx0XHRhdHRyaWJ1dGVzLmRlZmF1bHQgPSBvcHRpb25Ob2RlLnZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy9yYWRpby1maWVsZCcsXHJcblx0XHRhdHRyaWJ1dGVzLFxyXG5cdFx0aW5uZXJCbG9ja3M6IFtdLFxyXG5cdH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gaW5wdXQge0hUTUxJbnB1dEVsZW1lbnR9XHJcbiAqIEByZXR1cm5zIHtHZW5lcmF0b3I8KiwgKHN0cmluZ3x7bmFtZSwgZmllbGRfdHlwZX0pW10sICo+fVxyXG4gKi9cclxuZnVuY3Rpb24qIGNoZWNrYm94UGFyc2VyKCBpbnB1dCApIHtcclxuXHRpZiAoIGlucHV0LmpmYk9ic2VydmVkICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHRjb25zdCByb290ID0gaW5wdXQuZ2V0Um9vdE5vZGUoKTtcclxuXHJcblx0LyoqXHJcblx0ICogQHR5cGUge0hUTUxJbnB1dEVsZW1lbnRbXX1cclxuXHQgKi9cclxuXHRjb25zdCBvcHRpb25Ob2RlcyA9IEFycmF5LmZyb20oXHJcblx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcblx0XHRcdGBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1bbmFtZT1cIiR7IGlucHV0Lm5hbWUgfVwiXWAsXHJcblx0XHQpLFxyXG5cdCk7XHJcblxyXG5cdC8vIHByZXZlbnQgcGFyc2luZyBmdXR1cmUgcmFkaW8gbm9kZXNcclxuXHRvcHRpb25Ob2Rlcy5mb3JFYWNoKCBub2RlID0+IHsgbm9kZS5qZmJPYnNlcnZlZCA9IHRydWU7IH0gKTtcclxuXHJcblx0Y29uc3QgYXR0cmlidXRlcyA9IHtcclxuXHRcdG5hbWU6IGlucHV0Lm5hbWUsXHJcblx0XHRjbGFzc19uYW1lOiBpbnB1dC5jbGFzc05hbWUsXHJcblx0XHRmaWVsZF9vcHRpb25zOiBbXSxcclxuXHRcdGxhYmVsOiByZXNvbHZlTGVnZW5kKCBpbnB1dCApIHx8IHJlc29sdmVMYWJlbCggaW5wdXQgKSxcclxuXHRcdHJlcXVpcmVkOiBpbnB1dC5yZXF1aXJlZCxcclxuXHR9O1xyXG5cclxuXHRmb3IgKCBjb25zdCBvcHRpb25Ob2RlIG9mIG9wdGlvbk5vZGVzICkge1xyXG5cdFx0YXR0cmlidXRlcy5maWVsZF9vcHRpb25zLnB1c2goIHtcclxuXHRcdFx0dmFsdWU6IG9wdGlvbk5vZGUudmFsdWUsXHJcblx0XHRcdGxhYmVsOiByZXNvbHZlT3B0aW9uTGFiZWwoIG9wdGlvbk5vZGUgKSxcclxuXHRcdH0gKTtcclxuXHRcdGlmICggb3B0aW9uTm9kZS5jaGVja2VkICkge1xyXG5cdFx0XHRhdHRyaWJ1dGVzLmRlZmF1bHQgPSBvcHRpb25Ob2RlLnZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy9jaGVja2JveC1maWVsZCcsXHJcblx0XHRhdHRyaWJ1dGVzLFxyXG5cdFx0aW5uZXJCbG9ja3M6IFtdLFxyXG5cdH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uKiBkYXRlUGFyc2VyKCBpbnB1dCApIHtcclxuXHR5aWVsZCB7XHJcblx0XHRuYW1lOiAnamV0LWZvcm1zL2RhdGUtZmllbGQnLFxyXG5cdFx0YXR0cmlidXRlczogZ2V0SW5wdXROdW1iZXJBdHRycyggaW5wdXQgKSxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiogZGF0ZVRpbWVQYXJzZXIoIGlucHV0ICkge1xyXG5cdHlpZWxkIHtcclxuXHRcdG5hbWU6ICdqZXQtZm9ybXMvZGF0ZXRpbWUtZmllbGQnLFxyXG5cdFx0YXR0cmlidXRlczogZ2V0SW5wdXROdW1iZXJBdHRycyggaW5wdXQgKSxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiogdGltZVBhcnNlciggaW5wdXQgKSB7XHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy90aW1lLWZpZWxkJyxcclxuXHRcdGF0dHJpYnV0ZXM6IGdldElucHV0TnVtYmVyQXR0cnMoIGlucHV0ICksXHJcblx0XHRpbm5lckJsb2NrczogW10sXHJcblx0fTtcclxufVxyXG5cclxuZnVuY3Rpb24qIGhpZGRlblBhcnNlciggaW5wdXQgKSB7XHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy9oaWRkZW4tZmllbGQnLFxyXG5cdFx0YXR0cmlidXRlczoge1xyXG5cdFx0XHRuYW1lOiBpbnB1dC5uYW1lLFxyXG5cdFx0XHRjbGFzc19uYW1lOiBpbnB1dC5jbGFzc05hbWUsXHJcblx0XHRcdGRlZmF1bHQ6IGlucHV0LnZhbHVlLFxyXG5cdFx0fSxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiogbWVkaWFQYXJzZXIoIGlucHV0ICkge1xyXG5cdGNvbnN0IGF0dHJpYnV0ZXMgPSB7XHJcblx0XHRuYW1lOiBpbnB1dC5uYW1lLFxyXG5cdFx0Y2xhc3NfbmFtZTogaW5wdXQuY2xhc3NOYW1lLFxyXG5cdFx0bGFiZWw6IHJlc29sdmVMYWJlbCggaW5wdXQgKSxcclxuXHRcdHJlcXVpcmVkOiBpbnB1dC5yZXF1aXJlZCxcclxuXHRcdGFsbG93ZWRfbWltZXM6IFtdLFxyXG5cdH07XHJcblxyXG5cdGF0dHJpYnV0ZXMuYWxsb3dlZF9taW1lcyA9IGlucHV0LmFjY2VwdC5zcGxpdCggJywnICkubWFwKFxyXG5cdFx0cGFydCA9PiBnZXRNaW1lVHlwZSggcGFydC50cmltKCkgKSxcclxuXHQpO1xyXG5cclxuXHR5aWVsZCB7XHJcblx0XHRuYW1lOiAnamV0LWZvcm1zL21lZGlhLWZpZWxkJyxcclxuXHRcdGF0dHJpYnV0ZXMsXHJcblx0XHRpbm5lckJsb2NrczogW10sXHJcblx0fTtcclxufVxyXG5cclxuZnVuY3Rpb24qIG51bWJlclBhcnNlciggaW5wdXQgKSB7XHJcblx0Y29uc3QgYXR0cmlidXRlcyAgICAgICA9IGdldElucHV0TnVtYmVyQXR0cnMoIGlucHV0ICk7XHJcblx0YXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IGlucHV0LnBsYWNlaG9sZGVyO1xyXG5cclxuXHRpZiAoIGlucHV0Lmhhc0F0dHJpYnV0ZSggJ3N0ZXAnICkgKSB7XHJcblx0XHRhdHRyaWJ1dGVzLnN0ZXAgPSBpbnB1dC5zdGVwO1xyXG5cdH1cclxuXHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy9udW1iZXItZmllbGQnLFxyXG5cdFx0YXR0cmlidXRlcyxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIGlucHV0IHtIVE1MSW5wdXRFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24qIHJhbmdlUGFyc2VyKCBpbnB1dCApIHtcclxuXHRjb25zdCBhdHRyaWJ1dGVzID0gZ2V0SW5wdXROdW1iZXJBdHRycyggaW5wdXQgKTtcclxuXHJcblx0aWYgKCBpbnB1dC5oYXNBdHRyaWJ1dGUoICdzdGVwJyApICkge1xyXG5cdFx0YXR0cmlidXRlcy5zdGVwID0gaW5wdXQuc3RlcDtcclxuXHR9XHJcblxyXG5cdHlpZWxkIHtcclxuXHRcdG5hbWU6ICdqZXQtZm9ybXMvcmFuZ2UtZmllbGQnLFxyXG5cdFx0YXR0cmlidXRlcyxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiogc3VibWl0UGFyc2VyKCBpbnB1dCApIHtcclxuXHR5aWVsZCB7XHJcblx0XHRuYW1lOiAnamV0LWZvcm1zL3N1Ym1pdC1maWVsZCcsXHJcblx0XHRhdHRyaWJ1dGVzOiB7XHJcblx0XHRcdGxhYmVsOiBpbnB1dC52YWx1ZSB8fCAnU3VibWl0JyxcclxuXHRcdFx0Y2xhc3NfbmFtZTogaW5wdXQuY2xhc3NOYW1lLFxyXG5cdFx0fSxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpbnB1dFBhcnNlcjsiLCJpbXBvcnQgcmVzb2x2ZUxhYmVsIGZyb20gJy4uL3Jlc29sdmVMYWJlbCc7XHJcblxyXG5mdW5jdGlvbiogc2VsZWN0UGFyc2VyKCBzZWxlY3QgKSB7XHJcblx0Y29uc3QgYXR0cmlidXRlcyA9IHtcclxuXHRcdG5hbWU6IHNlbGVjdC5uYW1lLFxyXG5cdFx0Y2xhc3NfbmFtZTogc2VsZWN0LmNsYXNzTmFtZSxcclxuXHRcdGxhYmVsOiByZXNvbHZlTGFiZWwoIHNlbGVjdCApLFxyXG5cdFx0cmVxdWlyZWQ6IHNlbGVjdC5yZXF1aXJlZCxcclxuXHRcdGZpZWxkX29wdGlvbnM6IFtdLFxyXG5cdH07XHJcblxyXG5cdGNvbnN0IG9wdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyggc2VsZWN0Lm9wdGlvbnMgKTtcclxuXHJcblx0Zm9yICggY29uc3QgWyBpbmRleCwgb3B0aW9uIF0gb2Ygb3B0aW9uRW50cmllcyApIHtcclxuXHRcdGlmICggMCA9PT0gK2luZGV4ICYmICFvcHRpb24udmFsdWUgKSB7XHJcblx0XHRcdGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSBvcHRpb24ubGFiZWw7XHJcblxyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHJcblx0XHRhdHRyaWJ1dGVzLmZpZWxkX29wdGlvbnMucHVzaCgge1xyXG5cdFx0XHR2YWx1ZTogb3B0aW9uLnZhbHVlLFxyXG5cdFx0XHRsYWJlbDogb3B0aW9uLmxhYmVsLFxyXG5cdFx0fSApO1xyXG5cclxuXHRcdGlmICggIW9wdGlvbi5zZWxlY3RlZCApIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblxyXG5cdFx0YXR0cmlidXRlcy5kZWZhdWx0ID0gb3B0aW9uLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy9zZWxlY3QtZmllbGQnLFxyXG5cdFx0YXR0cmlidXRlcyxcclxuXHRcdGlubmVyQmxvY2tzOiBbXSxcclxuXHR9O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBzZWxlY3RQYXJzZXI7IiwiaW1wb3J0IHJlc29sdmVMYWJlbCBmcm9tICcuLi9yZXNvbHZlTGFiZWwnO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB0ZXh0YXJlYSB7SFRNTFRleHRBcmVhRWxlbWVudH1cclxuICovXHJcbmZ1bmN0aW9uKiB0ZXh0QXJlYVBhcnNlciggdGV4dGFyZWEgKSB7XHJcblx0Y29uc3QgYXR0cmlidXRlcyA9IHtcclxuXHRcdG5hbWU6IHRleHRhcmVhLm5hbWUsXHJcblx0XHRjbGFzc19uYW1lOiB0ZXh0YXJlYS5jbGFzc05hbWUsXHJcblx0XHRsYWJlbDogcmVzb2x2ZUxhYmVsKCB0ZXh0YXJlYSApLFxyXG5cdFx0cmVxdWlyZWQ6IHRleHRhcmVhLnJlcXVpcmVkLFxyXG5cdFx0cGxhY2Vob2xkZXI6IHRleHRhcmVhLnBsYWNlaG9sZGVyLFxyXG5cdH07XHJcblxyXG5cdGlmICggdGV4dGFyZWEuaGFzQXR0cmlidXRlKCAnbWF4bGVuZ3RoJyApICkge1xyXG5cdFx0YXR0cmlidXRlcy5tYXhsZW5ndGggPSB0ZXh0YXJlYS5tYXhMZW5ndGg7XHJcblx0fVxyXG5cclxuXHRpZiAoIHRleHRhcmVhLmhhc0F0dHJpYnV0ZSggJ21pbmxlbmd0aCcgKSApIHtcclxuXHRcdGF0dHJpYnV0ZXMubWlubGVuZ3RoID0gdGV4dGFyZWEubWluTGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0eWllbGQge1xyXG5cdFx0bmFtZTogJ2pldC1mb3Jtcy90ZXh0YXJlYS1maWVsZCcsXHJcblx0XHRhdHRyaWJ1dGVzLFxyXG5cdFx0aW5uZXJCbG9ja3M6IFtdLFxyXG5cdH07XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHRleHRBcmVhUGFyc2VyOyIsImltcG9ydCBpbnB1dFBhcnNlciBmcm9tICcuL25vZGUtcGFyc2Vycy9pbnB1dFBhcnNlcic7XHJcbmltcG9ydCBzZWxlY3RQYXJzZXIgZnJvbSAnLi9ub2RlLXBhcnNlcnMvc2VsZWN0UGFyc2VyJztcclxuaW1wb3J0IHRleHRBcmVhUGFyc2VyIGZyb20gJy4vbm9kZS1wYXJzZXJzL3RleHRBcmVhUGFyc2VyJztcclxuaW1wb3J0IGJ1dHRvblBhcnNlciBmcm9tICcuL25vZGUtcGFyc2Vycy9idXR0b25QYXJzZXInO1xyXG5cclxuY29uc3Qge1xyXG5cdCAgICAgIGFwcGx5RmlsdGVycyxcclxuICAgICAgfSA9IEpldFBsdWdpbnMuaG9va3M7XHJcblxyXG5jb25zdCBub2RlUGFyc2VycyA9IHtcclxuXHRJTlBVVDogaW5wdXRQYXJzZXIsXHJcblx0U0VMRUNUOiBzZWxlY3RQYXJzZXIsXHJcblx0VEVYVEFSRUE6IHRleHRBcmVhUGFyc2VyLFxyXG5cdEJVVFRPTjogYnV0dG9uUGFyc2VyLFxyXG59O1xyXG5cclxuZnVuY3Rpb24gcGFyc2VIVE1MdG9CbG9ja3MoIGNvbnRlbnQgKSB7XHJcblx0Y29uc3QgZWxlbWVudCAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdGVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudDtcclxuXHJcblx0Y29uc3QgYmxvY2tzID0gW107XHJcblxyXG5cdC8vIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IC0gZm9yIGZpZWxkcywgYW5kIG1heWJlIHN1Ym1pdCBidXR0b25cclxuXHQvLyBidXR0b24gLSBmb3Igc3VibWl0IGJ1dHRvblxyXG5cdC8qKlxyXG5cdCAqIEB0eXBlIHtOb2RlW119XHJcblx0ICovXHJcblx0Y29uc3QgZmllbGRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0J2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBidXR0b24nLFxyXG5cdCk7XHJcblxyXG5cdGZvciAoIGNvbnN0IGZpZWxkIG9mIGZpZWxkcyApIHtcclxuXHRcdC8vIGZvciB0aGlyZC1wYXJ0eSBwYXJzZXJzXHJcblx0XHRjb25zdCBwcmVCbG9ja3MgPSBhcHBseUZpbHRlcnMoICdqZXQuZmIucGFyc2Uubm9kZScsIGZhbHNlLCBmaWVsZCApO1xyXG5cclxuXHRcdC8vIHNob3VsZCBiZSBhcnJheSBvZiBibG9ja3NcclxuXHRcdGlmICggQXJyYXkuaXNBcnJheSggcHJlQmxvY2tzICkgKSB7XHJcblx0XHRcdGJsb2Nrcy5wdXNoKCAuLi5wcmVCbG9ja3MgKTtcclxuXHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGdlbmVyYXRvciA9IG5vZGVQYXJzZXJzWyBmaWVsZC5ub2RlTmFtZSBdO1xyXG5cclxuXHRcdGJsb2Nrcy5wdXNoKCAuLi5BcnJheS5mcm9tKCBnZW5lcmF0b3IoIGZpZWxkICkgKSApO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGJsb2NrcztcclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBwYXJzZUhUTUx0b0Jsb2NrczsiLCIvKipcclxuICogQHBhcmFtIG5vZGUge05vZGV8RWxlbWVudH1cclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVMYWJlbCggbm9kZSApIHtcclxuXHRsZXQgbGFiZWwgPSBub2RlLmNsb3Nlc3QoICdsYWJlbCcgKTtcclxuXHJcblx0Ly8gdHJ5IHRvIGZpbmQgbGFiZWxcclxuXHRpZiAoIG5vZGUuaWQgJiYgIWxhYmVsICkge1xyXG5cdFx0Y29uc3Qgcm9vdCA9IG5vZGUuZ2V0Um9vdE5vZGUoKTtcclxuXHJcblx0XHRsYWJlbCA9IHJvb3QucXVlcnlTZWxlY3RvciggYGxhYmVsW2Zvcj1cIiR7IG5vZGUuaWQgfVwiXWAgKTtcclxuXHR9XHJcblxyXG5cdGlmICggIWxhYmVsICkge1xyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxuXHJcblx0bGFiZWwucXVlcnlTZWxlY3RvckFsbCggJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyApLmZvckVhY2goXHJcblx0XHRpdGVtID0+IGl0ZW0ucmVtb3ZlKCksXHJcblx0KTtcclxuXHJcblx0cmV0dXJuIGxhYmVsLmlubmVySFRNTDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZUxhYmVsOyIsIi8qKlxyXG4gKiBAcGFyYW0gbm9kZSB7Tm9kZXxFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gcmVzb2x2ZUxlZ2VuZCggbm9kZSApIHtcclxuXHRjb25zdCBsZWdlbmQgPSBub2RlLmNsb3Nlc3QoICdmaWVsZHNldCcgKT8ucXVlcnlTZWxlY3Rvcj8uKCAnbGVnZW5kJyApO1xyXG5cclxuXHRpZiAoICEgbGVnZW5kICkge1xyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxuXHJcblx0bGVnZW5kLnF1ZXJ5U2VsZWN0b3JBbGwoICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScgKS5mb3JFYWNoKFxyXG5cdFx0aXRlbSA9PiBpdGVtLnJlbW92ZSgpLFxyXG5cdCk7XHJcblxyXG5cdHJldHVybiBsZWdlbmQuaW5uZXJIVE1MO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCByZXNvbHZlTGVnZW5kOyIsIi8qKlxyXG4gKiBAcGFyYW0gbm9kZSB7Tm9kZXxFbGVtZW50fVxyXG4gKi9cclxuaW1wb3J0IHJlc29sdmVMYWJlbCBmcm9tICcuL3Jlc29sdmVMYWJlbCc7XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlT3B0aW9uTGFiZWwoIG9wdGlvbiApIHtcclxuXHRpZiAoICcjdGV4dCcgPT09IG9wdGlvbj8ubmV4dFNpYmxpbmc/Lm5vZGVOYW1lICkge1xyXG5cdFx0cmV0dXJuIG9wdGlvbi5uZXh0U2libGluZy5ub2RlVmFsdWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzb2x2ZUxhYmVsKCBvcHRpb24gKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZU9wdGlvbkxhYmVsOyIsIi8qIChpZ25vcmVkKSAqLyIsIi8qIChpZ25vcmVkKSAqLyIsIi8qIChpZ25vcmVkKSAqLyIsIi8qIChpZ25vcmVkKSAqLyIsIi8qIChpZ25vcmVkKSAqLyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgcGFyc2VIVE1MdG9CbG9ja3MgZnJvbSAnLi9wYXJzZUhUTUx0b0Jsb2Nrcyc7XHJcbmltcG9ydCByZXNvbHZlTGFiZWwgZnJvbSAnLi9yZXNvbHZlTGFiZWwnO1xyXG5pbXBvcnQgZ2V0Rm9ybUlubmVyRmllbGRzIGZyb20gJy4vZ2V0Rm9ybUlubmVyRmllbGRzJztcclxuXHJcbndpbmRvdy5KZXRGb3JtQnVpbGRlclBhcnNlciA9IHtcclxuXHRwYXJzZUhUTUx0b0Jsb2NrcyxcclxuXHRyZXNvbHZlTGFiZWwsXHJcblx0Z2V0Rm9ybUlubmVyRmllbGRzLFxyXG59O1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/modules/macros-inserter/.babelrc b/modules/macros-inserter/.babelrc new file mode 100644 index 000000000..bedc22b83 --- /dev/null +++ b/modules/macros-inserter/.babelrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.babelrc" +} \ No newline at end of file diff --git a/modules/macros-inserter/assets/build/editor.js b/modules/macros-inserter/assets/build/editor.js new file mode 100644 index 000000000..91926df74 --- /dev/null +++ b/modules/macros-inserter/assets/build/editor.js @@ -0,0 +1,2918 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "../../../../node_modules/react/cjs/react.development.js": +/*!***************************************************************!*\ + !*** ../../../../node_modules/react/cjs/react.development.js ***! + \***************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +/* module decorator */ module = __webpack_require__.nmd(module); +/** + * @license React + * react.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +if (true) { + (function() { + + 'use strict'; + +/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ +if ( + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === + 'function' +) { + __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error()); +} + var ReactVersion = '18.3.1'; + +// ATTENTION +// When adding new symbols to this file, +// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' +// The Symbol used to tag the ReactElement-like types. +var REACT_ELEMENT_TYPE = Symbol.for('react.element'); +var REACT_PORTAL_TYPE = Symbol.for('react.portal'); +var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); +var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode'); +var REACT_PROFILER_TYPE = Symbol.for('react.profiler'); +var REACT_PROVIDER_TYPE = Symbol.for('react.provider'); +var REACT_CONTEXT_TYPE = Symbol.for('react.context'); +var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref'); +var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense'); +var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list'); +var REACT_MEMO_TYPE = Symbol.for('react.memo'); +var REACT_LAZY_TYPE = Symbol.for('react.lazy'); +var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen'); +var MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +var FAUX_ITERATOR_SYMBOL = '@@iterator'; +function getIteratorFn(maybeIterable) { + if (maybeIterable === null || typeof maybeIterable !== 'object') { + return null; + } + + var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; + + if (typeof maybeIterator === 'function') { + return maybeIterator; + } + + return null; +} + +/** + * Keeps track of the current dispatcher. + */ +var ReactCurrentDispatcher = { + /** + * @internal + * @type {ReactComponent} + */ + current: null +}; + +/** + * Keeps track of the current batch's configuration such as how long an update + * should suspend for if it needs to. + */ +var ReactCurrentBatchConfig = { + transition: null +}; + +var ReactCurrentActQueue = { + current: null, + // Used to reproduce behavior of `batchedUpdates` in legacy mode. + isBatchingLegacy: false, + didScheduleLegacyUpdate: false +}; + +/** + * Keeps track of the current owner. + * + * The current owner is the component who should own any components that are + * currently being constructed. + */ +var ReactCurrentOwner = { + /** + * @internal + * @type {ReactComponent} + */ + current: null +}; + +var ReactDebugCurrentFrame = {}; +var currentExtraStackFrame = null; +function setExtraStackFrame(stack) { + { + currentExtraStackFrame = stack; + } +} + +{ + ReactDebugCurrentFrame.setExtraStackFrame = function (stack) { + { + currentExtraStackFrame = stack; + } + }; // Stack implementation injected by the current renderer. + + + ReactDebugCurrentFrame.getCurrentStack = null; + + ReactDebugCurrentFrame.getStackAddendum = function () { + var stack = ''; // Add an extra top frame while an element is being validated + + if (currentExtraStackFrame) { + stack += currentExtraStackFrame; + } // Delegate to the injected renderer-specific implementation + + + var impl = ReactDebugCurrentFrame.getCurrentStack; + + if (impl) { + stack += impl() || ''; + } + + return stack; + }; +} + +// ----------------------------------------------------------------------------- + +var enableScopeAPI = false; // Experimental Create Event Handle API. +var enableCacheElement = false; +var enableTransitionTracing = false; // No known bugs, but needs performance testing + +var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber +// stuff. Intended to enable React core members to more easily debug scheduling +// issues in DEV builds. + +var enableDebugTracing = false; // Track which Fiber(s) schedule render work. + +var ReactSharedInternals = { + ReactCurrentDispatcher: ReactCurrentDispatcher, + ReactCurrentBatchConfig: ReactCurrentBatchConfig, + ReactCurrentOwner: ReactCurrentOwner +}; + +{ + ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame; + ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue; +} + +// by calls to these methods by a Babel plugin. +// +// In PROD (or in packages without access to React internals), +// they are left as they are instead. + +function warn(format) { + { + { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + printWarning('warn', format, args); + } + } +} +function error(format) { + { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } + } +} + +function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } // eslint-disable-next-line react-internal/safe-string-coercion + + + var argsWithFormat = args.map(function (item) { + return String(item); + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } +} + +var didWarnStateUpdateForUnmountedComponent = {}; + +function warnNoop(publicInstance, callerName) { + { + var _constructor = publicInstance.constructor; + var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass'; + var warningKey = componentName + "." + callerName; + + if (didWarnStateUpdateForUnmountedComponent[warningKey]) { + return; + } + + error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName); + + didWarnStateUpdateForUnmountedComponent[warningKey] = true; + } +} +/** + * This is the abstract API for an update queue. + */ + + +var ReactNoopUpdateQueue = { + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + return false; + }, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueForceUpdate: function (publicInstance, callback, callerName) { + warnNoop(publicInstance, 'forceUpdate'); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { + warnNoop(publicInstance, 'replaceState'); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @param {?function} callback Called after component is updated. + * @param {?string} Name of the calling function in the public API. + * @internal + */ + enqueueSetState: function (publicInstance, partialState, callback, callerName) { + warnNoop(publicInstance, 'setState'); + } +}; + +var assign = Object.assign; + +var emptyObject = {}; + +{ + Object.freeze(emptyObject); +} +/** + * Base class helpers for the updating state of a component. + */ + + +function Component(props, context, updater) { + this.props = props; + this.context = context; // If a component has string refs, we will assign a different object later. + + this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the + // renderer. + + this.updater = updater || ReactNoopUpdateQueue; +} + +Component.prototype.isReactComponent = {}; +/** + * Sets a subset of the state. Always use this to mutate + * state. You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * There is no guarantee that calls to `setState` will run synchronously, + * as they may eventually be batched together. You can provide an optional + * callback that will be executed when the call to setState is actually + * completed. + * + * When a function is provided to setState, it will be called at some point in + * the future (not synchronously). It will be called with the up to date + * component arguments (state, props, context). These values can be different + * from this.* because your function may be called after receiveProps but before + * shouldComponentUpdate, and this new state, props, and context will not yet be + * assigned to this. + * + * @param {object|function} partialState Next partial state or function to + * produce next partial state to be merged with current state. + * @param {?function} callback Called after state is updated. + * @final + * @protected + */ + +Component.prototype.setState = function (partialState, callback) { + if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) { + throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.'); + } + + this.updater.enqueueSetState(this, partialState, callback, 'setState'); +}; +/** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {?function} callback Called after update is complete. + * @final + * @protected + */ + + +Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); +}; +/** + * Deprecated APIs. These APIs used to exist on classic React classes but since + * we would like to deprecate them, we're not going to move them over to this + * modern base class. Instead, we define a getter that warns if it's accessed. + */ + + +{ + var deprecatedAPIs = { + isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], + replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] + }; + + var defineDeprecationWarning = function (methodName, info) { + Object.defineProperty(Component.prototype, methodName, { + get: function () { + warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); + + return undefined; + } + }); + }; + + for (var fnName in deprecatedAPIs) { + if (deprecatedAPIs.hasOwnProperty(fnName)) { + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + } + } +} + +function ComponentDummy() {} + +ComponentDummy.prototype = Component.prototype; +/** + * Convenience component with default shallow equality check for sCU. + */ + +function PureComponent(props, context, updater) { + this.props = props; + this.context = context; // If a component has string refs, we will assign a different object later. + + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; +} + +var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); +pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. + +assign(pureComponentPrototype, Component.prototype); +pureComponentPrototype.isPureReactComponent = true; + +// an immutable object with a single mutable value +function createRef() { + var refObject = { + current: null + }; + + { + Object.seal(refObject); + } + + return refObject; +} + +var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare + +function isArray(a) { + return isArrayImpl(a); +} + +/* + * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol + * and Temporal.* types. See https://github.com/facebook/react/pull/22064. + * + * The functions in this module will throw an easier-to-understand, + * easier-to-debug exception with a clear errors message message explaining the + * problem. (Instead of a confusing exception thrown inside the implementation + * of the `value` object). + */ +// $FlowFixMe only called in DEV, so void return is not possible. +function typeName(value) { + { + // toStringTag is needed for namespaced types like Temporal.Instant + var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; + var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; + return type; + } +} // $FlowFixMe only called in DEV, so void return is not possible. + + +function willCoercionThrow(value) { + { + try { + testStringCoercion(value); + return false; + } catch (e) { + return true; + } + } +} + +function testStringCoercion(value) { + // If you ended up here by following an exception call stack, here's what's + // happened: you supplied an object or symbol value to React (as a prop, key, + // DOM attribute, CSS property, string ref, etc.) and when React tried to + // coerce it to a string using `'' + value`, an exception was thrown. + // + // The most common types that will cause this exception are `Symbol` instances + // and Temporal objects like `Temporal.Instant`. But any object that has a + // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this + // exception. (Library authors do this to prevent users from using built-in + // numeric operators like `+` or comparison operators like `>=` because custom + // methods are needed to perform accurate arithmetic or comparison.) + // + // To fix the problem, coerce this object or symbol value to a string before + // passing it to React. The most reliable way is usually `String(value)`. + // + // To find which value is throwing, check the browser or debugger console. + // Before this exception was thrown, there should be `console.error` output + // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the + // problem and how that type was used: key, atrribute, input value prop, etc. + // In most cases, this console output also shows the component and its + // ancestor components where the exception happened. + // + // eslint-disable-next-line react-internal/safe-string-coercion + return '' + value; +} +function checkKeyStringCoercion(value) { + { + if (willCoercionThrow(value)) { + error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); + + return testStringCoercion(value); // throw (to help callers find troubleshooting comments) + } + } +} + +function getWrappedName(outerType, innerType, wrapperName) { + var displayName = outerType.displayName; + + if (displayName) { + return displayName; + } + + var functionName = innerType.displayName || innerType.name || ''; + return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; +} // Keep in sync with react-reconciler/getComponentNameFromFiber + + +function getContextName(type) { + return type.displayName || 'Context'; +} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. + + +function getComponentNameFromType(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case REACT_FRAGMENT_TYPE: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + var outerName = type.displayName || null; + + if (outerName !== null) { + return outerName; + } + + return getComponentNameFromType(type.type) || 'Memo'; + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentNameFromType(init(payload)); + } catch (x) { + return null; + } + } + + // eslint-disable-next-line no-fallthrough + } + } + + return null; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true +}; +var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs; + +{ + didWarnAboutStringRefs = {}; +} + +function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.ref !== undefined; +} + +function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.key !== undefined; +} + +function defineKeyPropWarningGetter(props, displayName) { + var warnAboutAccessingKey = function () { + { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + + error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + } + }; + + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); +} + +function defineRefPropWarningGetter(props, displayName) { + var warnAboutAccessingRef = function () { + { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + + error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + } + }; + + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); +} + +function warnIfStringRefCannotBeAutoConverted(config) { + { + if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) { + var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); + + if (!didWarnAboutStringRefs[componentName]) { + error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref); + + didWarnAboutStringRefs[componentName] = true; + } + } + } +} +/** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, instanceof check + * will not work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} props + * @param {*} key + * @param {string|object} ref + * @param {*} owner + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @internal + */ + + +var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); // self and source are DEV only properties. + + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; +}; +/** + * Create and return a new ReactElement of the given type. + * See https://reactjs.org/docs/react-api.html#createelement + */ + +function createElement(type, config, children) { + var propName; // Reserved names are extracted + + var props = {}; + var key = null; + var ref = null; + var self = null; + var source = null; + + if (config != null) { + if (hasValidRef(config)) { + ref = config.ref; + + { + warnIfStringRefCannotBeAutoConverted(config); + } + } + + if (hasValidKey(config)) { + { + checkKeyStringCoercion(config.key); + } + + key = '' + config.key; + } + + self = config.__self === undefined ? null : config.__self; + source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + + + var childrenLength = arguments.length - 2; + + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + + { + if (Object.freeze) { + Object.freeze(childArray); + } + } + + props.children = childArray; + } // Resolve default props + + + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + + { + if (key || ref) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); +} +function cloneAndReplaceKey(oldElement, newKey) { + var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); + return newElement; +} +/** + * Clone and return a new ReactElement using element as the starting point. + * See https://reactjs.org/docs/react-api.html#cloneelement + */ + +function cloneElement(element, config, children) { + if (element === null || element === undefined) { + throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + "."); + } + + var propName; // Original props are copied + + var props = assign({}, element.props); // Reserved names are extracted + + var key = element.key; + var ref = element.ref; // Self is preserved since the owner is preserved. + + var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a + // transpiler, and the original source is probably a better indicator of the + // true owner. + + var source = element._source; // Owner will be preserved, unless ref is overridden + + var owner = element._owner; + + if (config != null) { + if (hasValidRef(config)) { + // Silently steal the ref from the parent. + ref = config.ref; + owner = ReactCurrentOwner.current; + } + + if (hasValidKey(config)) { + { + checkKeyStringCoercion(config.key); + } + + key = '' + config.key; + } // Remaining properties override existing props + + + var defaultProps; + + if (element.type && element.type.defaultProps) { + defaultProps = element.type.defaultProps; + } + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + if (config[propName] === undefined && defaultProps !== undefined) { + // Resolve default props + props[propName] = defaultProps[propName]; + } else { + props[propName] = config[propName]; + } + } + } + } // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + + + var childrenLength = arguments.length - 2; + + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + + props.children = childArray; + } + + return ReactElement(element.type, key, ref, self, source, owner, props); +} +/** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a ReactElement. + * @final + */ + +function isValidElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; +} + +var SEPARATOR = '.'; +var SUBSEPARATOR = ':'; +/** + * Escape and wrap key so it is safe to use as a reactid + * + * @param {string} key to be escaped. + * @return {string} the escaped key. + */ + +function escape(key) { + var escapeRegex = /[=:]/g; + var escaperLookup = { + '=': '=0', + ':': '=2' + }; + var escapedString = key.replace(escapeRegex, function (match) { + return escaperLookup[match]; + }); + return '$' + escapedString; +} +/** + * TODO: Test that a single child and an array with one item have the same key + * pattern. + */ + + +var didWarnAboutMaps = false; +var userProvidedKeyEscapeRegex = /\/+/g; + +function escapeUserProvidedKey(text) { + return text.replace(userProvidedKeyEscapeRegex, '$&/'); +} +/** + * Generate a key string that identifies a element within a set. + * + * @param {*} element A element that could contain a manual key. + * @param {number} index Index that is used if a manual key is not provided. + * @return {string} + */ + + +function getElementKey(element, index) { + // Do some typechecking here since we call this blindly. We want to ensure + // that we don't block potential future ES APIs. + if (typeof element === 'object' && element !== null && element.key != null) { + // Explicit key + { + checkKeyStringCoercion(element.key); + } + + return escape('' + element.key); + } // Implicit key determined by the index in the set + + + return index.toString(36); +} + +function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + + if (type === 'undefined' || type === 'boolean') { + // All of the above are perceived as null. + children = null; + } + + var invokeCallback = false; + + if (children === null) { + invokeCallback = true; + } else { + switch (type) { + case 'string': + case 'number': + invokeCallback = true; + break; + + case 'object': + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = true; + } + + } + } + + if (invokeCallback) { + var _child = children; + var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array + // so that it's consistent if the number of children grows: + + var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar; + + if (isArray(mappedChild)) { + var escapedChildKey = ''; + + if (childKey != null) { + escapedChildKey = escapeUserProvidedKey(childKey) + '/'; + } + + mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) { + return c; + }); + } else if (mappedChild != null) { + if (isValidElement(mappedChild)) { + { + // The `if` statement here prevents auto-disabling of the safe + // coercion ESLint rule, so we must manually disable it below. + // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key + if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) { + checkKeyStringCoercion(mappedChild.key); + } + } + + mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as + // traverseAllChildren used to do for objects as children + escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key + mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number + // eslint-disable-next-line react-internal/safe-string-coercion + escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey); + } + + array.push(mappedChild); + } + + return 1; + } + + var child; + var nextName; + var subtreeCount = 0; // Count of children found in the current subtree. + + var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; + + if (isArray(children)) { + for (var i = 0; i < children.length; i++) { + child = children[i]; + nextName = nextNamePrefix + getElementKey(child, i); + subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); + } + } else { + var iteratorFn = getIteratorFn(children); + + if (typeof iteratorFn === 'function') { + var iterableChildren = children; + + { + // Warn about using Maps as children + if (iteratorFn === iterableChildren.entries) { + if (!didWarnAboutMaps) { + warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); + } + + didWarnAboutMaps = true; + } + } + + var iterator = iteratorFn.call(iterableChildren); + var step; + var ii = 0; + + while (!(step = iterator.next()).done) { + child = step.value; + nextName = nextNamePrefix + getElementKey(child, ii++); + subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); + } + } else if (type === 'object') { + // eslint-disable-next-line react-internal/safe-string-coercion + var childrenString = String(children); + throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.'); + } + } + + return subtreeCount; +} + +/** + * Maps children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenmap + * + * The provided mapFunction(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} func The map function. + * @param {*} context Context for mapFunction. + * @return {object} Object containing the ordered map of results. + */ +function mapChildren(children, func, context) { + if (children == null) { + return children; + } + + var result = []; + var count = 0; + mapIntoArray(children, result, '', '', function (child) { + return func.call(context, child, count++); + }); + return result; +} +/** + * Count the number of children that are typically specified as + * `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrencount + * + * @param {?*} children Children tree container. + * @return {number} The number of children. + */ + + +function countChildren(children) { + var n = 0; + mapChildren(children, function () { + n++; // Don't return anything + }); + return n; +} + +/** + * Iterates through children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenforeach + * + * The provided forEachFunc(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} forEachFunc + * @param {*} forEachContext Context for forEachContext. + */ +function forEachChildren(children, forEachFunc, forEachContext) { + mapChildren(children, function () { + forEachFunc.apply(this, arguments); // Don't return anything. + }, forEachContext); +} +/** + * Flatten a children object (typically specified as `props.children`) and + * return an array with appropriately re-keyed children. + * + * See https://reactjs.org/docs/react-api.html#reactchildrentoarray + */ + + +function toArray(children) { + return mapChildren(children, function (child) { + return child; + }) || []; +} +/** + * Returns the first child in a collection of children and verifies that there + * is only one child in the collection. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenonly + * + * The current implementation of this function assumes that a single child gets + * passed without a wrapper, but the purpose of this helper function is to + * abstract away the particular structure of children. + * + * @param {?object} children Child collection structure. + * @return {ReactElement} The first and only `ReactElement` contained in the + * structure. + */ + + +function onlyChild(children) { + if (!isValidElement(children)) { + throw new Error('React.Children.only expected to receive a single React element child.'); + } + + return children; +} + +function createContext(defaultValue) { + // TODO: Second argument used to be an optional `calculateChangedBits` + // function. Warn to reserve for future use? + var context = { + $$typeof: REACT_CONTEXT_TYPE, + // As a workaround to support multiple concurrent renderers, we categorize + // some renderers as primary and others as secondary. We only expect + // there to be two concurrent renderers at most: React Native (primary) and + // Fabric (secondary); React DOM (primary) and React ART (secondary). + // Secondary renderers store their context values on separate fields. + _currentValue: defaultValue, + _currentValue2: defaultValue, + // Used to track how many concurrent renderers this context currently + // supports within in a single renderer. Such as parallel server rendering. + _threadCount: 0, + // These are circular + Provider: null, + Consumer: null, + // Add these to use same hidden class in VM as ServerContext + _defaultValue: null, + _globalName: null + }; + context.Provider = { + $$typeof: REACT_PROVIDER_TYPE, + _context: context + }; + var hasWarnedAboutUsingNestedContextConsumers = false; + var hasWarnedAboutUsingConsumerProvider = false; + var hasWarnedAboutDisplayNameOnConsumer = false; + + { + // A separate object, but proxies back to the original context object for + // backwards compatibility. It has a different $$typeof, so we can properly + // warn for the incorrect usage of Context as a Consumer. + var Consumer = { + $$typeof: REACT_CONTEXT_TYPE, + _context: context + }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here + + Object.defineProperties(Consumer, { + Provider: { + get: function () { + if (!hasWarnedAboutUsingConsumerProvider) { + hasWarnedAboutUsingConsumerProvider = true; + + error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); + } + + return context.Provider; + }, + set: function (_Provider) { + context.Provider = _Provider; + } + }, + _currentValue: { + get: function () { + return context._currentValue; + }, + set: function (_currentValue) { + context._currentValue = _currentValue; + } + }, + _currentValue2: { + get: function () { + return context._currentValue2; + }, + set: function (_currentValue2) { + context._currentValue2 = _currentValue2; + } + }, + _threadCount: { + get: function () { + return context._threadCount; + }, + set: function (_threadCount) { + context._threadCount = _threadCount; + } + }, + Consumer: { + get: function () { + if (!hasWarnedAboutUsingNestedContextConsumers) { + hasWarnedAboutUsingNestedContextConsumers = true; + + error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); + } + + return context.Consumer; + } + }, + displayName: { + get: function () { + return context.displayName; + }, + set: function (displayName) { + if (!hasWarnedAboutDisplayNameOnConsumer) { + warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName); + + hasWarnedAboutDisplayNameOnConsumer = true; + } + } + } + }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty + + context.Consumer = Consumer; + } + + { + context._currentRenderer = null; + context._currentRenderer2 = null; + } + + return context; +} + +var Uninitialized = -1; +var Pending = 0; +var Resolved = 1; +var Rejected = 2; + +function lazyInitializer(payload) { + if (payload._status === Uninitialized) { + var ctor = payload._result; + var thenable = ctor(); // Transition to the next state. + // This might throw either because it's missing or throws. If so, we treat it + // as still uninitialized and try again next time. Which is the same as what + // happens if the ctor or any wrappers processing the ctor throws. This might + // end up fixing it if the resolution was a concurrency bug. + + thenable.then(function (moduleObject) { + if (payload._status === Pending || payload._status === Uninitialized) { + // Transition to the next state. + var resolved = payload; + resolved._status = Resolved; + resolved._result = moduleObject; + } + }, function (error) { + if (payload._status === Pending || payload._status === Uninitialized) { + // Transition to the next state. + var rejected = payload; + rejected._status = Rejected; + rejected._result = error; + } + }); + + if (payload._status === Uninitialized) { + // In case, we're still uninitialized, then we're waiting for the thenable + // to resolve. Set it as pending in the meantime. + var pending = payload; + pending._status = Pending; + pending._result = thenable; + } + } + + if (payload._status === Resolved) { + var moduleObject = payload._result; + + { + if (moduleObject === undefined) { + error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. + 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject); + } + } + + { + if (!('default' in moduleObject)) { + error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. + 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject); + } + } + + return moduleObject.default; + } else { + throw payload._result; + } +} + +function lazy(ctor) { + var payload = { + // We use these fields to store the result. + _status: Uninitialized, + _result: ctor + }; + var lazyType = { + $$typeof: REACT_LAZY_TYPE, + _payload: payload, + _init: lazyInitializer + }; + + { + // In production, this would just set it on the object. + var defaultProps; + var propTypes; // $FlowFixMe + + Object.defineProperties(lazyType, { + defaultProps: { + configurable: true, + get: function () { + return defaultProps; + }, + set: function (newDefaultProps) { + error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); + + defaultProps = newDefaultProps; // Match production behavior more closely: + // $FlowFixMe + + Object.defineProperty(lazyType, 'defaultProps', { + enumerable: true + }); + } + }, + propTypes: { + configurable: true, + get: function () { + return propTypes; + }, + set: function (newPropTypes) { + error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); + + propTypes = newPropTypes; // Match production behavior more closely: + // $FlowFixMe + + Object.defineProperty(lazyType, 'propTypes', { + enumerable: true + }); + } + } + }); + } + + return lazyType; +} + +function forwardRef(render) { + { + if (render != null && render.$$typeof === REACT_MEMO_TYPE) { + error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).'); + } else if (typeof render !== 'function') { + error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render); + } else { + if (render.length !== 0 && render.length !== 2) { + error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.'); + } + } + + if (render != null) { + if (render.defaultProps != null || render.propTypes != null) { + error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?'); + } + } + } + + var elementType = { + $$typeof: REACT_FORWARD_REF_TYPE, + render: render + }; + + { + var ownName; + Object.defineProperty(elementType, 'displayName', { + enumerable: false, + configurable: true, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; // The inner component shouldn't inherit this display name in most cases, + // because the component may be used elsewhere. + // But it's nice for anonymous functions to inherit the name, + // so that our component-stack generation logic will display their frames. + // An anonymous function generally suggests a pattern like: + // React.forwardRef((props, ref) => {...}); + // This kind of inner function is not used elsewhere so the side effect is okay. + + if (!render.name && !render.displayName) { + render.displayName = name; + } + } + }); + } + + return elementType; +} + +var REACT_MODULE_REFERENCE; + +{ + REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); +} + +function isValidElementType(type) { + if (typeof type === 'string' || typeof type === 'function') { + return true; + } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). + + + if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { + return true; + } + + if (typeof type === 'object' && type !== null) { + if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object + // types supported by any Flight configuration anywhere since + // we don't know which Flight build this will end up being used + // with. + type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { + return true; + } + } + + return false; +} + +function memo(type, compare) { + { + if (!isValidElementType(type)) { + error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type); + } + } + + var elementType = { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: compare === undefined ? null : compare + }; + + { + var ownName; + Object.defineProperty(elementType, 'displayName', { + enumerable: false, + configurable: true, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; // The inner component shouldn't inherit this display name in most cases, + // because the component may be used elsewhere. + // But it's nice for anonymous functions to inherit the name, + // so that our component-stack generation logic will display their frames. + // An anonymous function generally suggests a pattern like: + // React.memo((props) => {...}); + // This kind of inner function is not used elsewhere so the side effect is okay. + + if (!type.name && !type.displayName) { + type.displayName = name; + } + } + }); + } + + return elementType; +} + +function resolveDispatcher() { + var dispatcher = ReactCurrentDispatcher.current; + + { + if (dispatcher === null) { + error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.'); + } + } // Will result in a null access error if accessed outside render phase. We + // intentionally don't throw our own error because this is in a hot path. + // Also helps ensure this is inlined. + + + return dispatcher; +} +function useContext(Context) { + var dispatcher = resolveDispatcher(); + + { + // TODO: add a more generic warning for invalid values. + if (Context._context !== undefined) { + var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs + // and nobody should be using this in existing code. + + if (realContext.Consumer === Context) { + error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?'); + } else if (realContext.Provider === Context) { + error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?'); + } + } + } + + return dispatcher.useContext(Context); +} +function useState(initialState) { + var dispatcher = resolveDispatcher(); + return dispatcher.useState(initialState); +} +function useReducer(reducer, initialArg, init) { + var dispatcher = resolveDispatcher(); + return dispatcher.useReducer(reducer, initialArg, init); +} +function useRef(initialValue) { + var dispatcher = resolveDispatcher(); + return dispatcher.useRef(initialValue); +} +function useEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useEffect(create, deps); +} +function useInsertionEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useInsertionEffect(create, deps); +} +function useLayoutEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useLayoutEffect(create, deps); +} +function useCallback(callback, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useCallback(callback, deps); +} +function useMemo(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useMemo(create, deps); +} +function useImperativeHandle(ref, create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useImperativeHandle(ref, create, deps); +} +function useDebugValue(value, formatterFn) { + { + var dispatcher = resolveDispatcher(); + return dispatcher.useDebugValue(value, formatterFn); + } +} +function useTransition() { + var dispatcher = resolveDispatcher(); + return dispatcher.useTransition(); +} +function useDeferredValue(value) { + var dispatcher = resolveDispatcher(); + return dispatcher.useDeferredValue(value); +} +function useId() { + var dispatcher = resolveDispatcher(); + return dispatcher.useId(); +} +function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { + var dispatcher = resolveDispatcher(); + return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); +} + +// Helpers to patch console.logs to avoid logging during side-effect free +// replaying on render function. This currently only patches the object +// lazily which won't cover if the log function was extracted eagerly. +// We could also eagerly patch the method. +var disabledDepth = 0; +var prevLog; +var prevInfo; +var prevWarn; +var prevError; +var prevGroup; +var prevGroupCollapsed; +var prevGroupEnd; + +function disabledLog() {} + +disabledLog.__reactDisabledLog = true; +function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } +} +function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: assign({}, props, { + value: prevLog + }), + info: assign({}, props, { + value: prevInfo + }), + warn: assign({}, props, { + value: prevWarn + }), + error: assign({}, props, { + value: prevError + }), + group: assign({}, props, { + value: prevGroup + }), + groupCollapsed: assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } +} + +var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; +var prefix; +function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } +} +var reentry = false; +var componentFrameCache; + +{ + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); +} + +function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if ( !fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher$1.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" + // but we have a user-provided "displayName" + // splice it in to make the stack more readable. + + + if (fn.displayName && _frame.includes('')) { + _frame = _frame.replace('', fn.displayName); + } + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher$1.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; +} +function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } +} + +function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); +} + +function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; +} + +var loggedTypeFailures = {}; +var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame$1.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame$1.setExtraStackFrame(null); + } + } +} + +function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + // eslint-disable-next-line react-internal/prod-error-codes + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } +} + +function setCurrentlyValidatingElement$1(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + setExtraStackFrame(stack); + } else { + setExtraStackFrame(null); + } + } +} + +var propTypesMisspellWarningShown; + +{ + propTypesMisspellWarningShown = false; +} + +function getDeclarationErrorAddendum() { + if (ReactCurrentOwner.current) { + var name = getComponentNameFromType(ReactCurrentOwner.current.type); + + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + + return ''; +} + +function getSourceInfoErrorAddendum(source) { + if (source !== undefined) { + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + + return ''; +} + +function getSourceInfoErrorAddendumForProps(elementProps) { + if (elementProps !== null && elementProps !== undefined) { + return getSourceInfoErrorAddendum(elementProps.__source); + } + + return ''; +} +/** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + + +var ownerHasKeyUseWarning = {}; + +function getCurrentComponentErrorInfo(parentType) { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + + if (parentName) { + info = "\n\nCheck the top-level render call using <" + parentName + ">."; + } + } + + return info; +} +/** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + + +function validateExplicitKey(element, parentType) { + if (!element._store || element._store.validated || element.key != null) { + return; + } + + element._store.validated = true; + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + + var childOwner = ''; + + if (element && element._owner && element._owner !== ReactCurrentOwner.current) { + // Give the component that originally created this child. + childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; + } + + { + setCurrentlyValidatingElement$1(element); + + error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); + + setCurrentlyValidatingElement$1(null); + } +} +/** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + + +function validateChildKeys(node, parentType) { + if (typeof node !== 'object') { + return; + } + + if (isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } +} +/** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + + +function validatePropTypes(element) { + { + var type = element.type; + + if (type === null || type === undefined || typeof type === 'string') { + return; + } + + var propTypes; + + if (typeof type === 'function') { + propTypes = type.propTypes; + } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + type.$$typeof === REACT_MEMO_TYPE)) { + propTypes = type.propTypes; + } else { + return; + } + + if (propTypes) { + // Intentionally inside to avoid triggering lazy initializers: + var name = getComponentNameFromType(type); + checkPropTypes(propTypes, element.props, 'prop', name, element); + } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: + + var _name = getComponentNameFromType(type); + + error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); + } + + if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { + error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } + } +} +/** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ + + +function validateFragmentProps(fragment) { + { + var keys = Object.keys(fragment.props); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (key !== 'children' && key !== 'key') { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); + + setCurrentlyValidatingElement$1(null); + break; + } + } + + if (fragment.ref !== null) { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid attribute `ref` supplied to `React.Fragment`.'); + + setCurrentlyValidatingElement$1(null); + } + } +} +function createElementWithValidation(type, props, children) { + var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + + if (!validType) { + var info = ''; + + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendumForProps(props); + + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + var typeString; + + if (type === null) { + typeString = 'null'; + } else if (isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; + info = ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + { + error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); + } + } + + var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + + if (element == null) { + return element; + } // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + + + if (validType) { + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], type); + } + } + + if (type === REACT_FRAGMENT_TYPE) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; +} +var didWarnAboutDeprecatedCreateFactory = false; +function createFactoryWithValidation(type) { + var validatedFactory = createElementWithValidation.bind(null, type); + validatedFactory.type = type; + + { + if (!didWarnAboutDeprecatedCreateFactory) { + didWarnAboutDeprecatedCreateFactory = true; + + warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.'); + } // Legacy hook: remove it + + + Object.defineProperty(validatedFactory, 'type', { + enumerable: false, + get: function () { + warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); + + Object.defineProperty(this, 'type', { + value: type + }); + return type; + } + }); + } + + return validatedFactory; +} +function cloneElementWithValidation(element, props, children) { + var newElement = cloneElement.apply(this, arguments); + + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], newElement.type); + } + + validatePropTypes(newElement); + return newElement; +} + +function startTransition(scope, options) { + var prevTransition = ReactCurrentBatchConfig.transition; + ReactCurrentBatchConfig.transition = {}; + var currentTransition = ReactCurrentBatchConfig.transition; + + { + ReactCurrentBatchConfig.transition._updatedFibers = new Set(); + } + + try { + scope(); + } finally { + ReactCurrentBatchConfig.transition = prevTransition; + + { + if (prevTransition === null && currentTransition._updatedFibers) { + var updatedFibersCount = currentTransition._updatedFibers.size; + + if (updatedFibersCount > 10) { + warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.'); + } + + currentTransition._updatedFibers.clear(); + } + } + } +} + +var didWarnAboutMessageChannel = false; +var enqueueTaskImpl = null; +function enqueueTask(task) { + if (enqueueTaskImpl === null) { + try { + // read require off the module object to get around the bundlers. + // we don't want them to detect a require and bundle a Node polyfill. + var requireString = ('require' + Math.random()).slice(0, 7); + var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's + // version of setImmediate, bypassing fake timers if any. + + enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate; + } catch (_err) { + // we're in a browser + // we can't use regular timers because they may still be faked + // so we try MessageChannel+postMessage instead + enqueueTaskImpl = function (callback) { + { + if (didWarnAboutMessageChannel === false) { + didWarnAboutMessageChannel = true; + + if (typeof MessageChannel === 'undefined') { + error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.'); + } + } + } + + var channel = new MessageChannel(); + channel.port1.onmessage = callback; + channel.port2.postMessage(undefined); + }; + } + } + + return enqueueTaskImpl(task); +} + +var actScopeDepth = 0; +var didWarnNoAwaitAct = false; +function act(callback) { + { + // `act` calls can be nested, so we track the depth. This represents the + // number of `act` scopes on the stack. + var prevActScopeDepth = actScopeDepth; + actScopeDepth++; + + if (ReactCurrentActQueue.current === null) { + // This is the outermost `act` scope. Initialize the queue. The reconciler + // will detect the queue and use it instead of Scheduler. + ReactCurrentActQueue.current = []; + } + + var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy; + var result; + + try { + // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only + // set to `true` while the given callback is executed, not for updates + // triggered during an async event, because this is how the legacy + // implementation of `act` behaved. + ReactCurrentActQueue.isBatchingLegacy = true; + result = callback(); // Replicate behavior of original `act` implementation in legacy mode, + // which flushed updates immediately after the scope function exits, even + // if it's an async function. + + if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) { + var queue = ReactCurrentActQueue.current; + + if (queue !== null) { + ReactCurrentActQueue.didScheduleLegacyUpdate = false; + flushActQueue(queue); + } + } + } catch (error) { + popActScope(prevActScopeDepth); + throw error; + } finally { + ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy; + } + + if (result !== null && typeof result === 'object' && typeof result.then === 'function') { + var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait + // for it to resolve before exiting the current scope. + + var wasAwaited = false; + var thenable = { + then: function (resolve, reject) { + wasAwaited = true; + thenableResult.then(function (returnValue) { + popActScope(prevActScopeDepth); + + if (actScopeDepth === 0) { + // We've exited the outermost act scope. Recursively flush the + // queue until there's no remaining work. + recursivelyFlushAsyncActWork(returnValue, resolve, reject); + } else { + resolve(returnValue); + } + }, function (error) { + // The callback threw an error. + popActScope(prevActScopeDepth); + reject(error); + }); + } + }; + + { + if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') { + // eslint-disable-next-line no-undef + Promise.resolve().then(function () {}).then(function () { + if (!wasAwaited) { + didWarnNoAwaitAct = true; + + error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);'); + } + }); + } + } + + return thenable; + } else { + var returnValue = result; // The callback is not an async function. Exit the current scope + // immediately, without awaiting. + + popActScope(prevActScopeDepth); + + if (actScopeDepth === 0) { + // Exiting the outermost act scope. Flush the queue. + var _queue = ReactCurrentActQueue.current; + + if (_queue !== null) { + flushActQueue(_queue); + ReactCurrentActQueue.current = null; + } // Return a thenable. If the user awaits it, we'll flush again in + // case additional work was scheduled by a microtask. + + + var _thenable = { + then: function (resolve, reject) { + // Confirm we haven't re-entered another `act` scope, in case + // the user does something weird like await the thenable + // multiple times. + if (ReactCurrentActQueue.current === null) { + // Recursively flush the queue until there's no remaining work. + ReactCurrentActQueue.current = []; + recursivelyFlushAsyncActWork(returnValue, resolve, reject); + } else { + resolve(returnValue); + } + } + }; + return _thenable; + } else { + // Since we're inside a nested `act` scope, the returned thenable + // immediately resolves. The outer scope will flush the queue. + var _thenable2 = { + then: function (resolve, reject) { + resolve(returnValue); + } + }; + return _thenable2; + } + } + } +} + +function popActScope(prevActScopeDepth) { + { + if (prevActScopeDepth !== actScopeDepth - 1) { + error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. '); + } + + actScopeDepth = prevActScopeDepth; + } +} + +function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { + { + var queue = ReactCurrentActQueue.current; + + if (queue !== null) { + try { + flushActQueue(queue); + enqueueTask(function () { + if (queue.length === 0) { + // No additional work was scheduled. Finish. + ReactCurrentActQueue.current = null; + resolve(returnValue); + } else { + // Keep flushing work until there's none left. + recursivelyFlushAsyncActWork(returnValue, resolve, reject); + } + }); + } catch (error) { + reject(error); + } + } else { + resolve(returnValue); + } + } +} + +var isFlushing = false; + +function flushActQueue(queue) { + { + if (!isFlushing) { + // Prevent re-entrance. + isFlushing = true; + var i = 0; + + try { + for (; i < queue.length; i++) { + var callback = queue[i]; + + do { + callback = callback(true); + } while (callback !== null); + } + + queue.length = 0; + } catch (error) { + // If something throws, leave the remaining callbacks on the queue. + queue = queue.slice(i + 1); + throw error; + } finally { + isFlushing = false; + } + } + } +} + +var createElement$1 = createElementWithValidation ; +var cloneElement$1 = cloneElementWithValidation ; +var createFactory = createFactoryWithValidation ; +var Children = { + map: mapChildren, + forEach: forEachChildren, + count: countChildren, + toArray: toArray, + only: onlyChild +}; + +exports.Children = Children; +exports.Component = Component; +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.Profiler = REACT_PROFILER_TYPE; +exports.PureComponent = PureComponent; +exports.StrictMode = REACT_STRICT_MODE_TYPE; +exports.Suspense = REACT_SUSPENSE_TYPE; +exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals; +exports.act = act; +exports.cloneElement = cloneElement$1; +exports.createContext = createContext; +exports.createElement = createElement$1; +exports.createFactory = createFactory; +exports.createRef = createRef; +exports.forwardRef = forwardRef; +exports.isValidElement = isValidElement; +exports.lazy = lazy; +exports.memo = memo; +exports.startTransition = startTransition; +exports.unstable_act = act; +exports.useCallback = useCallback; +exports.useContext = useContext; +exports.useDebugValue = useDebugValue; +exports.useDeferredValue = useDeferredValue; +exports.useEffect = useEffect; +exports.useId = useId; +exports.useImperativeHandle = useImperativeHandle; +exports.useInsertionEffect = useInsertionEffect; +exports.useLayoutEffect = useLayoutEffect; +exports.useMemo = useMemo; +exports.useReducer = useReducer; +exports.useRef = useRef; +exports.useState = useState; +exports.useSyncExternalStore = useSyncExternalStore; +exports.useTransition = useTransition; +exports.version = ReactVersion; + /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ +if ( + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === + 'function' +) { + __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); +} + + })(); +} + + +/***/ }), + +/***/ "../../../../node_modules/react/index.js": +/*!***********************************************!*\ + !*** ../../../../node_modules/react/index.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + + + +if (false) {} else { + module.exports = __webpack_require__(/*! ./cjs/react.development.js */ "../../../../node_modules/react/cjs/react.development.js"); +} + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ loaded: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/node module decorator */ +/******/ (() => { +/******/ __webpack_require__.nmd = (module) => { +/******/ module.paths = []; +/******/ if (!module.children) module.children = []; +/******/ return module; +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!*******************!*\ + !*** ./editor.js ***! + \*******************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../../node_modules/react/index.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); + +const { + addFilter +} = wp.hooks; +const { + createHigherOrderComponent +} = wp.compose; +const { + Fragment +} = wp.element; +const { + BlockControls +} = wp.blockEditor; +const { + MacrosFields +} = JetFBComponents; +const { + ToolbarGroup +} = wp.components; +function toHtmlMacro(name, field) { + const macro = String(name).replace(/^%|%$/g, '').trim(); + let repeaterNote = ''; + let data = ''; + if (field.is_repeater) { + repeaterNote = 'repeater tooltip'; + } else if (field.is_repeater_child) { + repeaterNote = 'this field can be used only inside repeater - ' + field.repeater_name; + } + return `
${repeaterNote}
`; +} +const withMacrosInserter = createHigherOrderComponent(BlockEdit => props => { + if (props.name !== 'core/html') { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(BlockEdit, { + ...props + }); + } + const { + attributes, + setAttributes + } = props; + return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(BlockControls, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(ToolbarGroup, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(MacrosFields, { + withCurrent: true, + onClick: (name, field) => { + var _attributes$content; + const htmlMacro = toHtmlMacro(name, field); + setAttributes({ + content: ((_attributes$content = attributes.content) !== null && _attributes$content !== void 0 ? _attributes$content : '') + htmlMacro + }); + } + }))), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(BlockEdit, { + ...props + })); +}, 'withMacrosInserter'); +addFilter('editor.BlockEdit', 'jet-form-builder/macros-inserter', withMacrosInserter); +})(); + +/******/ })() +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FDbnJGQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOzs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNQQTs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQ0pBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBS0E7QUFBQTtBQUdBO0FBSUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qZmItbWFjcm9zLWluc2VydGVyLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMiLCJ3ZWJwYWNrOi8vamZiLW1hY3Jvcy1pbnNlcnRlci8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamZiLW1hY3Jvcy1pbnNlcnRlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9qZmItbWFjcm9zLWluc2VydGVyL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2pmYi1tYWNyb3MtaW5zZXJ0ZXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2pmYi1tYWNyb3MtaW5zZXJ0ZXIvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9qZmItbWFjcm9zLWluc2VydGVyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vamZiLW1hY3Jvcy1pbnNlcnRlci93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL2pmYi1tYWNyb3MtaW5zZXJ0ZXIvLi9lZGl0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KG5ldyBFcnJvcigpKTtcbn1cbiAgICAgICAgICB2YXIgUmVhY3RWZXJzaW9uID0gJzE4LjMuMSc7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJyk7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiBudWxsXG59O1xuXG52YXIgUmVhY3RDdXJyZW50QWN0UXVldWUgPSB7XG4gIGN1cnJlbnQ6IG51bGwsXG4gIC8vIFVzZWQgdG8gcmVwcm9kdWNlIGJlaGF2aW9yIG9mIGBiYXRjaGVkVXBkYXRlc2AgaW4gbGVnYWN5IG1vZGUuXG4gIGlzQmF0Y2hpbmdMZWdhY3k6IGZhbHNlLFxuICBkaWRTY2hlZHVsZUxlZ2FjeVVwZGF0ZTogZmFsc2Vcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgb3duZXIuXG4gKlxuICogVGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8gc2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0aGF0IGFyZVxuICogY3VycmVudGx5IGJlaW5nIGNvbnN0cnVjdGVkLlxuICovXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSB7fTtcbnZhciBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gbnVsbDtcbmZ1bmN0aW9uIHNldEV4dHJhU3RhY2tGcmFtZShzdGFjaykge1xuICB7XG4gICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICB9XG59XG5cbntcbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUgPSBmdW5jdGlvbiAoc3RhY2spIHtcbiAgICB7XG4gICAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gICAgfVxuICB9OyAvLyBTdGFjayBpbXBsZW1lbnRhdGlvbiBpbmplY3RlZCBieSB0aGUgY3VycmVudCByZW5kZXJlci5cblxuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YWNrID0gJyc7IC8vIEFkZCBhbiBleHRyYSB0b3AgZnJhbWUgd2hpbGUgYW4gZWxlbWVudCBpcyBiZWluZyB2YWxpZGF0ZWRcblxuICAgIGlmIChjdXJyZW50RXh0cmFTdGFja0ZyYW1lKSB7XG4gICAgICBzdGFjayArPSBjdXJyZW50RXh0cmFTdGFja0ZyYW1lO1xuICAgIH0gLy8gRGVsZWdhdGUgdG8gdGhlIGluamVjdGVkIHJlbmRlcmVyLXNwZWNpZmljIGltcGxlbWVudGF0aW9uXG5cblxuICAgIHZhciBpbXBsID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2s7XG5cbiAgICBpZiAoaW1wbCkge1xuICAgICAgc3RhY2sgKz0gaW1wbCgpIHx8ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcbnZhciBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyA9IGZhbHNlOyAvLyBObyBrbm93biBidWdzLCBidXQgbmVlZHMgcGVyZm9ybWFuY2UgdGVzdGluZ1xuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXG5cbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTsgLy8gVHJhY2sgd2hpY2ggRmliZXIocykgc2NoZWR1bGUgcmVuZGVyIHdvcmsuXG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXJcbn07XG5cbntcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEFjdFF1ZXVlID0gUmVhY3RDdXJyZW50QWN0UXVldWU7XG59XG5cbi8vIGJ5IGNhbGxzIHRvIHRoZXNlIG1ldGhvZHMgYnkgYSBCYWJlbCBwbHVnaW4uXG4vL1xuLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbi8vIHRoZXkgYXJlIGxlZnQgYXMgdGhleSBhcmUgaW5zdGVhZC5cblxuZnVuY3Rpb24gd2Fybihmb3JtYXQpIHtcbiAge1xuICAgIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuXG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVycm9yKFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gXCIgKyAnVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gJyArICdJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgJyArICdjbGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNpcmVkIHN0YXRlIGluIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG4vKipcbiAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG5cblxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAvLyBJZiBhIGNvbXBvbmVudCBoYXMgc3RyaW5nIHJlZnMsIHdlIHdpbGwgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCBsYXRlci5cblxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8gcmVuZGVyZXIuXG5cbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG4vKipcbiAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgdG8gbXV0YXRlXG4gKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSxcbiAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hlZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbFxuICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHlcbiAqIGNvbXBsZXRlZC5cbiAqXG4gKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW5cbiAqIHRoZSBmdXR1cmUgKG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0ZVxuICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2UgdmFsdWVzIGNhbiBiZSBkaWZmZXJlbnRcbiAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlXG4gKiBzaG91bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHdpbGwgbm90IHlldCBiZVxuICogYXNzaWduZWQgdG8gdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlvbiB0b1xuICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5Db21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBwYXJ0aWFsU3RhdGUgIT09ICdvYmplY3QnICYmIHR5cGVvZiBwYXJ0aWFsU3RhdGUgIT09ICdmdW5jdGlvbicgJiYgcGFydGlhbFN0YXRlICE9IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgJyArICdmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuJyk7XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuYXNzaWduKHB1cmVDb21wb25lbnRQcm90b3R5cGUsIENvbXBvbmVudC5wcm90b3R5cGUpO1xucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vKlxuICogVGhlIGAnJyArIHZhbHVlYCBwYXR0ZXJuICh1c2VkIGluIGluIHBlcmYtc2Vuc2l0aXZlIGNvZGUpIHRocm93cyBmb3IgU3ltYm9sXG4gKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgd2lsbCB0aHJvdyBhbiBlYXNpZXItdG8tdW5kZXJzdGFuZCxcbiAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcbiAqIHByb2JsZW0uIChJbnN0ZWFkIG9mIGEgY29uZnVzaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvblxuICogb2YgdGhlIGB2YWx1ZWAgb2JqZWN0KS5cbiAqL1xuLy8gJEZsb3dGaXhNZSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cbmZ1bmN0aW9uIHR5cGVOYW1lKHZhbHVlKSB7XG4gIHtcbiAgICAvLyB0b1N0cmluZ1RhZyBpcyBuZWVkZWQgZm9yIG5hbWVzcGFjZWQgdHlwZXMgbGlrZSBUZW1wb3JhbC5JbnN0YW50XG4gICAgdmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wudG9TdHJpbmdUYWc7XG4gICAgdmFyIHR5cGUgPSBoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddIHx8IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCc7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0gLy8gJEZsb3dGaXhNZSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cblxuXG5mdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICB7XG4gICAgdHJ5IHtcbiAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAvLyBJZiB5b3UgZW5kZWQgdXAgaGVyZSBieSBmb2xsb3dpbmcgYW4gZXhjZXB0aW9uIGNhbGwgc3RhY2ssIGhlcmUncyB3aGF0J3NcbiAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcbiAgLy8gRE9NIGF0dHJpYnV0ZSwgQ1NTIHByb3BlcnR5LCBzdHJpbmcgcmVmLCBldGMuKSBhbmQgd2hlbiBSZWFjdCB0cmllZCB0b1xuICAvLyBjb2VyY2UgaXQgdG8gYSBzdHJpbmcgdXNpbmcgYCcnICsgdmFsdWVgLCBhbiBleGNlcHRpb24gd2FzIHRocm93bi5cbiAgLy9cbiAgLy8gVGhlIG1vc3QgY29tbW9uIHR5cGVzIHRoYXQgd2lsbCBjYXVzZSB0aGlzIGV4Y2VwdGlvbiBhcmUgYFN5bWJvbGAgaW5zdGFuY2VzXG4gIC8vIGFuZCBUZW1wb3JhbCBvYmplY3RzIGxpa2UgYFRlbXBvcmFsLkluc3RhbnRgLiBCdXQgYW55IG9iamVjdCB0aGF0IGhhcyBhXG4gIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xuICAvLyBleGNlcHRpb24uIChMaWJyYXJ5IGF1dGhvcnMgZG8gdGhpcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gdXNpbmcgYnVpbHQtaW5cbiAgLy8gbnVtZXJpYyBvcGVyYXRvcnMgbGlrZSBgK2Agb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgbGlrZSBgPj1gIGJlY2F1c2UgY3VzdG9tXG4gIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXG4gIC8vXG4gIC8vIFRvIGZpeCB0aGUgcHJvYmxlbSwgY29lcmNlIHRoaXMgb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbiAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxuICAvL1xuICAvLyBUbyBmaW5kIHdoaWNoIHZhbHVlIGlzIHRocm93aW5nLCBjaGVjayB0aGUgYnJvd3NlciBvciBkZWJ1Z2dlciBjb25zb2xlLlxuICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcbiAgLy8gdGhhdCBzaG93cyB0aGUgdHlwZSAoU3ltYm9sLCBUZW1wb3JhbC5QbGFpbkRhdGUsIGV0Yy4pIHRoYXQgY2F1c2VkIHRoZVxuICAvLyBwcm9ibGVtIGFuZCBob3cgdGhhdCB0eXBlIHdhcyB1c2VkOiBrZXksIGF0cnJpYnV0ZSwgaW5wdXQgdmFsdWUgcHJvcCwgZXRjLlxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXG4gIC8vIGFuY2VzdG9yIGNvbXBvbmVudHMgd2hlcmUgdGhlIGV4Y2VwdGlvbiBoYXBwZW5lZC5cbiAgLy9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24sIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duLCBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBjb25maWcuX19zZWxmICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBjb25maWcuX19zZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgY29tcG9uZW50TmFtZSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcblxuICAgICAge1xuICAgICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiICsgZWxlbWVudCArIFwiLlwiKTtcbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0aW5nIHByb3BzXG5cblxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlICYmIGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGRlZmF1bHRQcm9wcyA9IGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHM7XG4gICAgfVxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZ1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuXG5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6Jztcbi8qKlxuICogRXNjYXBlIGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGtleS5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSBrZXkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuXG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LCAnJCYvJyk7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBlbGVtZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGVsZW1lbnQgQSBlbGVtZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gIC8vIERvIHNvbWUgdHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlXG4gIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElzLlxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnICYmIGVsZW1lbnQgIT09IG51bGwgJiYgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHtcbiAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oZWxlbWVudC5rZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBlc2NhcGUoJycgKyBlbGVtZW50LmtleSk7XG4gIH0gLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXRcblxuXG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnZva2VDYWxsYmFjayA9IGZhbHNlO1xuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgaWYgKGludm9rZUNhbGxiYWNrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuO1xuICAgIHZhciBtYXBwZWRDaGlsZCA9IGNhbGxiYWNrKF9jaGlsZCk7IC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93czpcblxuICAgIHZhciBjaGlsZEtleSA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRFbGVtZW50S2V5KF9jaGlsZCwgMCkgOiBuYW1lU29GYXI7XG5cbiAgICBpZiAoaXNBcnJheShtYXBwZWRDaGlsZCkpIHtcbiAgICAgIHZhciBlc2NhcGVkQ2hpbGRLZXkgPSAnJztcblxuICAgICAgaWYgKGNoaWxkS2V5ICE9IG51bGwpIHtcbiAgICAgICAgZXNjYXBlZENoaWxkS2V5ID0gZXNjYXBlVXNlclByb3ZpZGVkS2V5KGNoaWxkS2V5KSArICcvJztcbiAgICAgIH1cblxuICAgICAgbWFwSW50b0FycmF5KG1hcHBlZENoaWxkLCBhcnJheSwgZXNjYXBlZENoaWxkS2V5LCAnJywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG1hcHBlZENoaWxkICE9IG51bGwpIHtcbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChtYXBwZWRDaGlsZCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBgaWZgIHN0YXRlbWVudCBoZXJlIHByZXZlbnRzIGF1dG8tZGlzYWJsaW5nIG9mIHRoZSBzYWZlXG4gICAgICAgICAgLy8gY29lcmNpb24gRVNMaW50IHJ1bGUsIHNvIHdlIG11c3QgbWFudWFsbHkgZGlzYWJsZSBpdCBiZWxvdy5cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFJlYWN0LlBvcnRhbCBkb2Vzbid0IGhhdmUgYSBrZXlcbiAgICAgICAgICBpZiAobWFwcGVkQ2hpbGQua2V5ICYmICghX2NoaWxkIHx8IF9jaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkpIHtcbiAgICAgICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWFwcGVkQ2hpbGQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCwgLy8gS2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xkIGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3QgYXNcbiAgICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuXG4gICAgICAgIGVzY2FwZWRQcmVmaXggKyAoIC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgUmVhY3QuUG9ydGFsIGRvZXNuJ3QgaGF2ZSBhIGtleVxuICAgICAgICBtYXBwZWRDaGlsZC5rZXkgJiYgKCFfY2hpbGQgfHwgX2NoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSA/IC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgZXhpc3RpbmcgZWxlbWVudCdzIGtleSBjYW4gYmUgYSBudW1iZXJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gICAgICAgIGVzY2FwZVVzZXJQcm92aWRlZEtleSgnJyArIG1hcHBlZENoaWxkLmtleSkgKyAnLycgOiAnJykgKyBjaGlsZEtleSk7XG4gICAgICB9XG5cbiAgICAgIGFycmF5LnB1c2gobWFwcGVkQ2hpbGQpO1xuICAgIH1cblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGNoaWxkO1xuICB2YXIgbmV4dE5hbWU7XG4gIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLlxuXG4gIHZhciBuZXh0TmFtZVByZWZpeCA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1I7XG5cbiAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpKTtcbiAgICAgIHN1YnRyZWVDb3VudCArPSBtYXBJbnRvQXJyYXkoY2hpbGQsIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuZXh0TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgaXRlcmFibGVDaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuICAgICAgICBpZiAoaXRlcmF0b3JGbiA9PT0gaXRlcmFibGVDaGlsZHJlbi5lbnRyaWVzKSB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgICB3YXJuKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoaXRlcmFibGVDaGlsZHJlbik7XG4gICAgICB2YXIgc3RlcDtcbiAgICAgIHZhciBpaSA9IDA7XG5cbiAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVlO1xuICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaWkrKyk7XG4gICAgICAgIHN1YnRyZWVDb3VudCArPSBtYXBJbnRvQXJyYXkoY2hpbGQsIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuZXh0TmFtZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gU3RyaW5nKGNoaWxkcmVuKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nKSArIFwiKS4gXCIgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSAnICsgJ2luc3RlYWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4nKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUpIHtcbiAgLy8gVE9ETzogU2Vjb25kIGFyZ3VtZW50IHVzZWQgdG8gYmUgYW4gb3B0aW9uYWwgYGNhbGN1bGF0ZUNoYW5nZWRCaXRzYFxuICAvLyBmdW5jdGlvbi4gV2FybiB0byByZXNlcnZlIGZvciBmdXR1cmUgdXNlP1xuICB2YXIgY29udGV4dCA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGwsXG4gICAgLy8gQWRkIHRoZXNlIHRvIHVzZSBzYW1lIGhpZGRlbiBjbGFzcyBpbiBWTSBhcyBTZXJ2ZXJDb250ZXh0XG4gICAgX2RlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBfZ2xvYmFsTmFtZTogbnVsbFxuICB9O1xuICBjb250ZXh0LlByb3ZpZGVyID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9QUk9WSURFUl9UWVBFLFxuICAgIF9jb250ZXh0OiBjb250ZXh0XG4gIH07XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gZmFsc2U7XG5cbiAge1xuICAgIC8vIEEgc2VwYXJhdGUgb2JqZWN0LCBidXQgcHJveGllcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9iamVjdCBmb3JcbiAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gSXQgaGFzIGEgZGlmZmVyZW50ICQkdHlwZW9mLCBzbyB3ZSBjYW4gcHJvcGVybHlcbiAgICAvLyB3YXJuIGZvciB0aGUgaW5jb3JyZWN0IHVzYWdlIG9mIENvbnRleHQgYXMgYSBDb25zdW1lci5cbiAgICB2YXIgQ29uc3VtZXIgPSB7XG4gICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgICB9OyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBub3Qgc2V0dGluZyBhIHZhbHVlLCB3aGljaCBpcyBpbnRlbnRpb25hbCBoZXJlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LlByb3ZpZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfUHJvdmlkZXIpIHtcbiAgICAgICAgICBjb250ZXh0LlByb3ZpZGVyID0gX1Byb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWUyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlMikge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBfY3VycmVudFZhbHVlMjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF90aHJlYWRDb3VudDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fdGhyZWFkQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF90aHJlYWRDb3VudCkge1xuICAgICAgICAgIGNvbnRleHQuX3RocmVhZENvdW50ID0gX3RocmVhZENvdW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ29uc3VtZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycykge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLkNvbnN1bWVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LkNvbnN1bWVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlzcGxheU5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lcikge1xuICAgICAgICAgICAgd2FybignU2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIENvbnRleHQuQ29uc3VtZXIgaGFzIG5vIGVmZmVjdC4gJyArIFwiWW91IHNob3VsZCBzZXQgaXQgZGlyZWN0bHkgb24gdGhlIGNvbnRleHQgd2l0aCBDb250ZXh0LmRpc3BsYXlOYW1lID0gJyVzJy5cIiwgZGlzcGxheU5hbWUpO1xuXG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcHJvcGVydGllcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBkZWZpbmVQcm9wZXJ0eVxuXG4gICAgY29udGV4dC5Db25zdW1lciA9IENvbnN1bWVyO1xuICB9XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxudmFyIFVuaW5pdGlhbGl6ZWQgPSAtMTtcbnZhciBQZW5kaW5nID0gMDtcbnZhciBSZXNvbHZlZCA9IDE7XG52YXIgUmVqZWN0ZWQgPSAyO1xuXG5mdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgdmFyIHRoZW5hYmxlID0gY3RvcigpOyAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgIC8vIFRoaXMgbWlnaHQgdGhyb3cgZWl0aGVyIGJlY2F1c2UgaXQncyBtaXNzaW5nIG9yIHRocm93cy4gSWYgc28sIHdlIHRyZWF0IGl0XG4gICAgLy8gYXMgc3RpbGwgdW5pbml0aWFsaXplZCBhbmQgdHJ5IGFnYWluIG5leHQgdGltZS4gV2hpY2ggaXMgdGhlIHNhbWUgYXMgd2hhdFxuICAgIC8vIGhhcHBlbnMgaWYgdGhlIGN0b3Igb3IgYW55IHdyYXBwZXJzIHByb2Nlc3NpbmcgdGhlIGN0b3IgdGhyb3dzLiBUaGlzIG1pZ2h0XG4gICAgLy8gZW5kIHVwIGZpeGluZyBpdCBpZiB0aGUgcmVzb2x1dGlvbiB3YXMgYSBjb25jdXJyZW5jeSBidWcuXG5cbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcgfHwgcGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgICAgIC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG4gICAgICAgIHZhciByZXNvbHZlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlc29sdmVkLl9zdGF0dXMgPSBSZXNvbHZlZDtcbiAgICAgICAgcmVzb2x2ZWQuX3Jlc3VsdCA9IG1vZHVsZU9iamVjdDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcgfHwgcGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgICAgIC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG4gICAgICAgIHZhciByZWplY3RlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlamVjdGVkLl9zdGF0dXMgPSBSZWplY3RlZDtcbiAgICAgICAgcmVqZWN0ZWQuX3Jlc3VsdCA9IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgICAgLy8gSW4gY2FzZSwgd2UncmUgc3RpbGwgdW5pbml0aWFsaXplZCwgdGhlbiB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgdGhlbmFibGVcbiAgICAgIC8vIHRvIHJlc29sdmUuIFNldCBpdCBhcyBwZW5kaW5nIGluIHRoZSBtZWFudGltZS5cbiAgICAgIHZhciBwZW5kaW5nID0gcGF5bG9hZDtcbiAgICAgIHBlbmRpbmcuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB9XG4gIH1cblxuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBSZXNvbHZlZCkge1xuICAgIHZhciBtb2R1bGVPYmplY3QgPSBwYXlsb2FkLl9yZXN1bHQ7XG5cbiAgICB7XG4gICAgICBpZiAobW9kdWxlT2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcCcgKyAnb3J0KCkgY2FsbC4gJyArICdJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gICcgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVxcblxcblwiICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHB1dCBjdXJseSBicmFjZXMgYXJvdW5kIHRoZSBpbXBvcnQ/JywgbW9kdWxlT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoISgnZGVmYXVsdCcgaW4gbW9kdWxlT2JqZWN0KSkge1xuICAgICAgICBlcnJvcignbGF6eTogRXhwZWN0ZWQgdGhlIHJlc3VsdCBvZiBhIGR5bmFtaWMgaW1wJyArICdvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZU9iamVjdC5kZWZhdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYXp5KGN0b3IpIHtcbiAgdmFyIHBheWxvYWQgPSB7XG4gICAgLy8gV2UgdXNlIHRoZXNlIGZpZWxkcyB0byBzdG9yZSB0aGUgcmVzdWx0LlxuICAgIF9zdGF0dXM6IFVuaW5pdGlhbGl6ZWQsXG4gICAgX3Jlc3VsdDogY3RvclxuICB9O1xuICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICBfcGF5bG9hZDogcGF5bG9hZCxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7IC8vICRGbG93Rml4TWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxhenlUeXBlLCB7XG4gICAgICBkZWZhdWx0UHJvcHM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdEZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgZGVmYXVsdFByb3BzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgZGVmYXVsdFByb3BzID0gbmV3RGVmYXVsdFByb3BzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdkZWZhdWx0UHJvcHMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wVHlwZXM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFR5cGVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgcHJvcFR5cGVzID0gbmV3UHJvcFR5cGVzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gICcgKyAnY29tcG9uZW50LiBJbnN0ZWFkIG9mIGZvcndhcmRSZWYobWVtbyguLi4pKSwgdXNlICcgKyAnbWVtbyhmb3J3YXJkUmVmKC4uLikpLicpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy4nLCByZW5kZXIgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgcmVuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlbmRlci5sZW5ndGggIT09IDAgJiYgcmVuZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGFjY2VwdCBleGFjdGx5IHR3byBwYXJhbWV0ZXJzOiBwcm9wcyBhbmQgcmVmLiAlcycsIHJlbmRlci5sZW5ndGggPT09IDEgPyAnRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyPycgOiAnQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlci5kZWZhdWx0UHJvcHMgIT0gbnVsbCB8fCByZW5kZXIucHJvcFR5cGVzICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBkbyBub3Qgc3VwcG9ydCBwcm9wVHlwZXMgb3IgZGVmYXVsdFByb3BzLiAnICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgYSBSZWFjdCBjb21wb25lbnQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgIHJlbmRlcjogcmVuZGVyXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTsgLy8gVGhlIGlubmVyIGNvbXBvbmVudCBzaG91bGRuJ3QgaW5oZXJpdCB0aGlzIGRpc3BsYXkgbmFtZSBpbiBtb3N0IGNhc2VzLFxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb21wb25lbnQgbWF5IGJlIHVzZWQgZWxzZXdoZXJlLlxuICAgICAgICAvLyBCdXQgaXQncyBuaWNlIGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zIHRvIGluaGVyaXQgdGhlIG5hbWUsXG4gICAgICAgIC8vIHNvIHRoYXQgb3VyIGNvbXBvbmVudC1zdGFjayBnZW5lcmF0aW9uIGxvZ2ljIHdpbGwgZGlzcGxheSB0aGVpciBmcmFtZXMuXG4gICAgICAgIC8vIEFuIGFub255bW91cyBmdW5jdGlvbiBnZW5lcmFsbHkgc3VnZ2VzdHMgYSBwYXR0ZXJuIGxpa2U6XG4gICAgICAgIC8vICAgUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4gey4uLn0pO1xuICAgICAgICAvLyBUaGlzIGtpbmQgb2YgaW5uZXIgZnVuY3Rpb24gaXMgbm90IHVzZWQgZWxzZXdoZXJlIHNvIHRoZSBzaWRlIGVmZmVjdCBpcyBva2F5LlxuXG4gICAgICAgIGlmICghcmVuZGVyLm5hbWUgJiYgIXJlbmRlci5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxudmFyIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0U7XG5cbntcbiAgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1vZHVsZS5yZWZlcmVuY2UnKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTsgLy8gVGhlIGlubmVyIGNvbXBvbmVudCBzaG91bGRuJ3QgaW5oZXJpdCB0aGlzIGRpc3BsYXkgbmFtZSBpbiBtb3N0IGNhc2VzLFxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb21wb25lbnQgbWF5IGJlIHVzZWQgZWxzZXdoZXJlLlxuICAgICAgICAvLyBCdXQgaXQncyBuaWNlIGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zIHRvIGluaGVyaXQgdGhlIG5hbWUsXG4gICAgICAgIC8vIHNvIHRoYXQgb3VyIGNvbXBvbmVudC1zdGFjayBnZW5lcmF0aW9uIGxvZ2ljIHdpbGwgZGlzcGxheSB0aGVpciBmcmFtZXMuXG4gICAgICAgIC8vIEFuIGFub255bW91cyBmdW5jdGlvbiBnZW5lcmFsbHkgc3VnZ2VzdHMgYSBwYXR0ZXJuIGxpa2U6XG4gICAgICAgIC8vICAgUmVhY3QubWVtbygocHJvcHMpID0+IHsuLi59KTtcbiAgICAgICAgLy8gVGhpcyBraW5kIG9mIGlubmVyIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGVsc2V3aGVyZSBzbyB0aGUgc2lkZSBlZmZlY3QgaXMgb2theS5cblxuICAgICAgICBpZiAoIXR5cGUubmFtZSAmJiAhdHlwZS5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcblxuICB7XG4gICAgaWYgKGRpc3BhdGNoZXIgPT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yJyArICcgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4nICsgJzEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbicgKyAnMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbicgKyAnMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcbicgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uJyk7XG4gICAgfVxuICB9IC8vIFdpbGwgcmVzdWx0IGluIGEgbnVsbCBhY2Nlc3MgZXJyb3IgaWYgYWNjZXNzZWQgb3V0c2lkZSByZW5kZXIgcGhhc2UuIFdlXG4gIC8vIGludGVudGlvbmFsbHkgZG9uJ3QgdGhyb3cgb3VyIG93biBlcnJvciBiZWNhdXNlIHRoaXMgaXMgaW4gYSBob3QgcGF0aC5cbiAgLy8gQWxzbyBoZWxwcyBlbnN1cmUgdGhpcyBpcyBpbmxpbmVkLlxuXG5cbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5mdW5jdGlvbiB1c2VDb250ZXh0KENvbnRleHQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBhZGQgYSBtb3JlIGdlbmVyaWMgd2FybmluZyBmb3IgaW52YWxpZCB2YWx1ZXMuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDsgLy8gRG9uJ3QgZGVkdXBsaWNhdGUgYmVjYXVzZSB0aGlzIGxlZ2l0aW1hdGVseSBjYXVzZXMgYnVnc1xuICAgICAgLy8gYW5kIG5vYm9keSBzaG91bGQgYmUgdXNpbmcgdGhpcyBpbiBleGlzdGluZyBjb2RlLlxuXG4gICAgICBpZiAocmVhbENvbnRleHQuQ29uc3VtZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LkNvbnN1bWVyKSBpcyBub3Qgc3VwcG9ydGVkLCBtYXkgY2F1c2UgYnVncywgYW5kIHdpbGwgYmUgJyArICdyZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH0gZWxzZSBpZiAocmVhbENvbnRleHQuUHJvdmlkZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQpO1xufVxuZnVuY3Rpb24gdXNlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbn1cbmZ1bmN0aW9uIHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG59XG5mdW5jdGlvbiB1c2VSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVmKGluaXRpYWxWYWx1ZSk7XG59XG5mdW5jdGlvbiB1c2VFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZU1lbW8oY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlTWVtbyhjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAge1xuICAgIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbik7XG4gIH1cbn1cbmZ1bmN0aW9uIHVzZVRyYW5zaXRpb24oKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlVHJhbnNpdGlvbigpO1xufVxuZnVuY3Rpb24gdXNlRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZURlZmVycmVkVmFsdWUodmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlSWQoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSWQoKTtcbn1cbmZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoICFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIHNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhlbGVtZW50UHJvcHMpIHtcbiAgaWYgKGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMuX19zb3VyY2UpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5mbztcbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcblxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICBpZiAoIXZhbGlkVHlwZSkge1xuICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZVN0cmluZztcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oc2NvcGUsIG9wdGlvbnMpIHtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHt9O1xuICB2YXIgY3VycmVudFRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzY29wZSgpO1xuICB9IGZpbmFsbHkge1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcblxuICAgIHtcbiAgICAgIGlmIChwcmV2VHJhbnNpdGlvbiA9PT0gbnVsbCAmJiBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycykge1xuICAgICAgICB2YXIgdXBkYXRlZEZpYmVyc0NvdW50ID0gY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuc2l6ZTtcblxuICAgICAgICBpZiAodXBkYXRlZEZpYmVyc0NvdW50ID4gMTApIHtcbiAgICAgICAgICB3YXJuKCdEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uICcgKyAnSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gJyArICdPdGhlcndpc2UgY29uY3VycmVudCBtb2RlIGd1YXJhbnRlZXMgYXJlIG9mZiB0aGUgdGFibGUuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgPSBmYWxzZTtcbnZhciBlbnF1ZXVlVGFza0ltcGwgPSBudWxsO1xuZnVuY3Rpb24gZW5xdWV1ZVRhc2sodGFzaykge1xuICBpZiAoZW5xdWV1ZVRhc2tJbXBsID09PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJlYWQgcmVxdWlyZSBvZmYgdGhlIG1vZHVsZSBvYmplY3QgdG8gZ2V0IGFyb3VuZCB0aGUgYnVuZGxlcnMuXG4gICAgICAvLyB3ZSBkb24ndCB3YW50IHRoZW0gdG8gZGV0ZWN0IGEgcmVxdWlyZSBhbmQgYnVuZGxlIGEgTm9kZSBwb2x5ZmlsbC5cbiAgICAgIHZhciByZXF1aXJlU3RyaW5nID0gKCdyZXF1aXJlJyArIE1hdGgucmFuZG9tKCkpLnNsaWNlKDAsIDcpO1xuICAgICAgdmFyIG5vZGVSZXF1aXJlID0gbW9kdWxlICYmIG1vZHVsZVtyZXF1aXJlU3RyaW5nXTsgLy8gYXNzdW1pbmcgd2UncmUgaW4gbm9kZSwgbGV0J3MgdHJ5IHRvIGdldCBub2RlJ3NcbiAgICAgIC8vIHZlcnNpb24gb2Ygc2V0SW1tZWRpYXRlLCBieXBhc3NpbmcgZmFrZSB0aW1lcnMgaWYgYW55LlxuXG4gICAgICBlbnF1ZXVlVGFza0ltcGwgPSBub2RlUmVxdWlyZS5jYWxsKG1vZHVsZSwgJ3RpbWVycycpLnNldEltbWVkaWF0ZTtcbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAvLyB3ZSdyZSBpbiBhIGJyb3dzZXJcbiAgICAgIC8vIHdlIGNhbid0IHVzZSByZWd1bGFyIHRpbWVycyBiZWNhdXNlIHRoZXkgbWF5IHN0aWxsIGJlIGZha2VkXG4gICAgICAvLyBzbyB3ZSB0cnkgTWVzc2FnZUNoYW5uZWwrcG9zdE1lc3NhZ2UgaW5zdGVhZFxuICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgTWVzc2FnZUNoYW5uZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIE1lc3NhZ2VDaGFubmVsIGltcGxlbWVudGF0aW9uLCAnICsgJ3NvIGVucXVldWluZyB0YXNrcyB2aWEgYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLikgd2lsbCBmYWlsLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMgJyArICdpZiB5b3UgZW5jb3VudGVyIHRoaXMgd2FybmluZy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNhbGxiYWNrO1xuICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKHVuZGVmaW5lZCk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbnF1ZXVlVGFza0ltcGwodGFzayk7XG59XG5cbnZhciBhY3RTY29wZURlcHRoID0gMDtcbnZhciBkaWRXYXJuTm9Bd2FpdEFjdCA9IGZhbHNlO1xuZnVuY3Rpb24gYWN0KGNhbGxiYWNrKSB7XG4gIHtcbiAgICAvLyBgYWN0YCBjYWxscyBjYW4gYmUgbmVzdGVkLCBzbyB3ZSB0cmFjayB0aGUgZGVwdGguIFRoaXMgcmVwcmVzZW50cyB0aGVcbiAgICAvLyBudW1iZXIgb2YgYGFjdGAgc2NvcGVzIG9uIHRoZSBzdGFjay5cbiAgICB2YXIgcHJldkFjdFNjb3BlRGVwdGggPSBhY3RTY29wZURlcHRoO1xuICAgIGFjdFNjb3BlRGVwdGgrKztcblxuICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBvdXRlcm1vc3QgYGFjdGAgc2NvcGUuIEluaXRpYWxpemUgdGhlIHF1ZXVlLiBUaGUgcmVjb25jaWxlclxuICAgICAgLy8gd2lsbCBkZXRlY3QgdGhlIHF1ZXVlIGFuZCB1c2UgaXQgaW5zdGVhZCBvZiBTY2hlZHVsZXIuXG4gICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID0gW107XG4gICAgfVxuXG4gICAgdmFyIHByZXZJc0JhdGNoaW5nTGVnYWN5ID0gUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeTtcbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZWQgdG8gcmVwcm9kdWNlIGJlaGF2aW9yIG9mIGBiYXRjaGVkVXBkYXRlc2AgaW4gbGVnYWN5IG1vZGUuIE9ubHlcbiAgICAgIC8vIHNldCB0byBgdHJ1ZWAgd2hpbGUgdGhlIGdpdmVuIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLCBub3QgZm9yIHVwZGF0ZXNcbiAgICAgIC8vIHRyaWdnZXJlZCBkdXJpbmcgYW4gYXN5bmMgZXZlbnQsIGJlY2F1c2UgdGhpcyBpcyBob3cgdGhlIGxlZ2FjeVxuICAgICAgLy8gaW1wbGVtZW50YXRpb24gb2YgYGFjdGAgYmVoYXZlZC5cbiAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmlzQmF0Y2hpbmdMZWdhY3kgPSB0cnVlO1xuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTsgLy8gUmVwbGljYXRlIGJlaGF2aW9yIG9mIG9yaWdpbmFsIGBhY3RgIGltcGxlbWVudGF0aW9uIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgLy8gd2hpY2ggZmx1c2hlZCB1cGRhdGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzY29wZSBmdW5jdGlvbiBleGl0cywgZXZlblxuICAgICAgLy8gaWYgaXQncyBhbiBhc3luYyBmdW5jdGlvbi5cblxuICAgICAgaWYgKCFwcmV2SXNCYXRjaGluZ0xlZ2FjeSAmJiBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5kaWRTY2hlZHVsZUxlZ2FjeVVwZGF0ZSkge1xuICAgICAgICB2YXIgcXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50O1xuXG4gICAgICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmlzQmF0Y2hpbmdMZWdhY3kgPSBwcmV2SXNCYXRjaGluZ0xlZ2FjeTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHRoZW5hYmxlUmVzdWx0ID0gcmVzdWx0OyAvLyBUaGUgY2FsbGJhY2sgaXMgYW4gYXN5bmMgZnVuY3Rpb24gKGkuZS4gcmV0dXJuZWQgYSBwcm9taXNlKS4gV2FpdFxuICAgICAgLy8gZm9yIGl0IHRvIHJlc29sdmUgYmVmb3JlIGV4aXRpbmcgdGhlIGN1cnJlbnQgc2NvcGUuXG5cbiAgICAgIHZhciB3YXNBd2FpdGVkID0gZmFsc2U7XG4gICAgICB2YXIgdGhlbmFibGUgPSB7XG4gICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICB3YXNBd2FpdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGVuYWJsZVJlc3VsdC50aGVuKGZ1bmN0aW9uIChyZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFNjb3BlRGVwdGgpO1xuXG4gICAgICAgICAgICBpZiAoYWN0U2NvcGVEZXB0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAvLyBXZSd2ZSBleGl0ZWQgdGhlIG91dGVybW9zdCBhY3Qgc2NvcGUuIFJlY3Vyc2l2ZWx5IGZsdXNoIHRoZVxuICAgICAgICAgICAgICAvLyBxdWV1ZSB1bnRpbCB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrLlxuICAgICAgICAgICAgICByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3IuXG4gICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0U2NvcGVEZXB0aCk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB7XG4gICAgICAgIGlmICghZGlkV2Fybk5vQXdhaXRBY3QgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7fSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXdhc0F3YWl0ZWQpIHtcbiAgICAgICAgICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdZb3UgY2FsbGVkIGFjdChhc3luYyAoKSA9PiAuLi4pIHdpdGhvdXQgYXdhaXQuICcgKyAnVGhpcyBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgdGVzdGluZyBiZWhhdmlvdXIsICcgKyAnaW50ZXJsZWF2aW5nIG11bHRpcGxlIGFjdCBjYWxscyBhbmQgbWl4aW5nIHRoZWlyICcgKyAnc2NvcGVzLiAnICsgJ1lvdSBzaG91bGQgLSBhd2FpdCBhY3QoYXN5bmMgKCkgPT4gLi4uKTsnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhlbmFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHJlc3VsdDsgLy8gVGhlIGNhbGxiYWNrIGlzIG5vdCBhbiBhc3luYyBmdW5jdGlvbi4gRXhpdCB0aGUgY3VycmVudCBzY29wZVxuICAgICAgLy8gaW1tZWRpYXRlbHksIHdpdGhvdXQgYXdhaXRpbmcuXG5cbiAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RTY29wZURlcHRoKTtcblxuICAgICAgaWYgKGFjdFNjb3BlRGVwdGggPT09IDApIHtcbiAgICAgICAgLy8gRXhpdGluZyB0aGUgb3V0ZXJtb3N0IGFjdCBzY29wZS4gRmx1c2ggdGhlIHF1ZXVlLlxuICAgICAgICB2YXIgX3F1ZXVlID0gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudDtcblxuICAgICAgICBpZiAoX3F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmx1c2hBY3RRdWV1ZShfcXVldWUpO1xuICAgICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9IC8vIFJldHVybiBhIHRoZW5hYmxlLiBJZiB0aGUgdXNlciBhd2FpdHMgaXQsIHdlJ2xsIGZsdXNoIGFnYWluIGluXG4gICAgICAgIC8vIGNhc2UgYWRkaXRpb25hbCB3b3JrIHdhcyBzY2hlZHVsZWQgYnkgYSBtaWNyb3Rhc2suXG5cblxuICAgICAgICB2YXIgX3RoZW5hYmxlID0ge1xuICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIC8vIENvbmZpcm0gd2UgaGF2ZW4ndCByZS1lbnRlcmVkIGFub3RoZXIgYGFjdGAgc2NvcGUsIGluIGNhc2VcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyIGRvZXMgc29tZXRoaW5nIHdlaXJkIGxpa2UgYXdhaXQgdGhlIHRoZW5hYmxlXG4gICAgICAgICAgICAvLyBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAgIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsdXNoIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrLlxuICAgICAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID0gW107XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhlbmFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW5jZSB3ZSdyZSBpbnNpZGUgYSBuZXN0ZWQgYGFjdGAgc2NvcGUsIHRoZSByZXR1cm5lZCB0aGVuYWJsZVxuICAgICAgICAvLyBpbW1lZGlhdGVseSByZXNvbHZlcy4gVGhlIG91dGVyIHNjb3BlIHdpbGwgZmx1c2ggdGhlIHF1ZXVlLlxuICAgICAgICB2YXIgX3RoZW5hYmxlMiA9IHtcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhlbmFibGUyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BBY3RTY29wZShwcmV2QWN0U2NvcGVEZXB0aCkge1xuICB7XG4gICAgaWYgKHByZXZBY3RTY29wZURlcHRoICE9PSBhY3RTY29wZURlcHRoIC0gMSkge1xuICAgICAgZXJyb3IoJ1lvdSBzZWVtIHRvIGhhdmUgb3ZlcmxhcHBpbmcgYWN0KCkgY2FsbHMsIHRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdCZSBzdXJlIHRvIGF3YWl0IHByZXZpb3VzIGFjdCgpIGNhbGxzIGJlZm9yZSBtYWtpbmcgYSBuZXcgb25lLiAnKTtcbiAgICB9XG5cbiAgICBhY3RTY29wZURlcHRoID0gcHJldkFjdFNjb3BlRGVwdGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHtcbiAgICB2YXIgcXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50O1xuXG4gICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIE5vIGFkZGl0aW9uYWwgd29yayB3YXMgc2NoZWR1bGVkLiBGaW5pc2guXG4gICAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBLZWVwIGZsdXNoaW5nIHdvcmsgdW50aWwgdGhlcmUncyBub25lIGxlZnQuXG4gICAgICAgICAgICByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGlzRmx1c2hpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmx1c2hBY3RRdWV1ZShxdWV1ZSkge1xuICB7XG4gICAgaWYgKCFpc0ZsdXNoaW5nKSB7XG4gICAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmNlLlxuICAgICAgaXNGbHVzaGluZyA9IHRydWU7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcblxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgfSB3aGlsZSAoY2FsbGJhY2sgIT09IG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVldWUubGVuZ3RoID0gMDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHNvbWV0aGluZyB0aHJvd3MsIGxlYXZlIHRoZSByZW1haW5pbmcgY2FsbGJhY2tzIG9uIHRoZSBxdWV1ZS5cbiAgICAgICAgcXVldWUgPSBxdWV1ZS5zbGljZShpICsgMSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNGbHVzaGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuZXhwb3J0cy5hY3QgPSBhY3Q7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMuc3RhcnRUcmFuc2l0aW9uID0gc3RhcnRUcmFuc2l0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9hY3QgPSBhY3Q7XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gdXNlQ2FsbGJhY2s7XG5leHBvcnRzLnVzZUNvbnRleHQgPSB1c2VDb250ZXh0O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gdXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlRGVmZXJyZWRWYWx1ZSA9IHVzZURlZmVycmVkVmFsdWU7XG5leHBvcnRzLnVzZUVmZmVjdCA9IHVzZUVmZmVjdDtcbmV4cG9ydHMudXNlSWQgPSB1c2VJZDtcbmV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IHVzZUltcGVyYXRpdmVIYW5kbGU7XG5leHBvcnRzLnVzZUluc2VydGlvbkVmZmVjdCA9IHVzZUluc2VydGlvbkVmZmVjdDtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gdXNlTGF5b3V0RWZmZWN0O1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlUmVkdWNlciA9IHVzZVJlZHVjZXI7XG5leHBvcnRzLnVzZVJlZiA9IHVzZVJlZjtcbmV4cG9ydHMudXNlU3RhdGUgPSB1c2VTdGF0ZTtcbmV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmUgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZTtcbmV4cG9ydHMudXNlVHJhbnNpdGlvbiA9IHVzZVRyYW5zaXRpb247XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gICAgICAgICAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AobmV3IEVycm9yKCkpO1xufVxuICAgICAgICBcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsImNvbnN0IHsgYWRkRmlsdGVyIH0gPSB3cC5ob29rcztcbmNvbnN0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSA9IHdwLmNvbXBvc2U7XG5jb25zdCB7IEZyYWdtZW50IH0gPSB3cC5lbGVtZW50O1xuY29uc3QgeyBCbG9ja0NvbnRyb2xzIH0gPSB3cC5ibG9ja0VkaXRvcjtcblxuY29uc3QgeyBNYWNyb3NGaWVsZHMgfSA9IEpldEZCQ29tcG9uZW50cztcbmNvbnN0IHtcdFRvb2xiYXJHcm91cCB9ID0gd3AuY29tcG9uZW50cztcblxuZnVuY3Rpb24gdG9IdG1sTWFjcm8oIG5hbWUsIGZpZWxkICkge1xuXHRjb25zdCBtYWNybyA9IFN0cmluZyggbmFtZSApLnJlcGxhY2UoIC9eJXwlJC9nLCAnJyApLnRyaW0oKTtcblxuXHRsZXQgcmVwZWF0ZXJOb3RlID0gJyc7XG5cdGxldCBkYXRhID0gJyc7XG5cdGlmIChmaWVsZC5pc19yZXBlYXRlcikge1xuXHRcdHJlcGVhdGVyTm90ZSA9ICdyZXBlYXRlciB0b29sdGlwJztcblx0fSBlbHNlIGlmIChmaWVsZC5pc19yZXBlYXRlcl9jaGlsZCkge1xuXHRcdHJlcGVhdGVyTm90ZSA9ICd0aGlzIGZpZWxkIGNhbiBiZSB1c2VkIG9ubHkgaW5zaWRlIHJlcGVhdGVyIC0gJyArIGZpZWxkLnJlcGVhdGVyX25hbWU7XG5cdH1cblxuXHRyZXR1cm4gYDxkaXYgZGF0YS1qZmItbWFjcm89XCIkeyBtYWNybyB9XCIgPiR7cmVwZWF0ZXJOb3RlfTwvZGl2PmA7XG59XG5cbmNvbnN0IHdpdGhNYWNyb3NJbnNlcnRlciA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHQoIEJsb2NrRWRpdCApID0+ICggcHJvcHMgKSA9PiB7XG5cdFx0aWYgKCBwcm9wcy5uYW1lICE9PSAnY29yZS9odG1sJyApIHtcblx0XHRcdHJldHVybiA8QmxvY2tFZGl0IHsgLi4ucHJvcHMgfSAvPjtcblx0XHR9XG5cblx0XHRjb25zdCB7IGF0dHJpYnV0ZXMsIHNldEF0dHJpYnV0ZXMgfSA9IHByb3BzO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PEJsb2NrQ29udHJvbHM+XG5cdFx0XHRcdFx0PFRvb2xiYXJHcm91cD5cblx0XHRcdFx0XHRcdDxNYWNyb3NGaWVsZHNcblx0XHRcdFx0XHRcdFx0d2l0aEN1cnJlbnRcblx0XHRcdFx0XHRcdFx0b25DbGljaz17ICggbmFtZSwgZmllbGQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaHRtbE1hY3JvID0gdG9IdG1sTWFjcm8oIG5hbWUsIGZpZWxkICk7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogKCBhdHRyaWJ1dGVzLmNvbnRlbnQgPz8gJycgKSArIGh0bWxNYWNybyxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvVG9vbGJhckdyb3VwPlxuXHRcdFx0XHQ8L0Jsb2NrQ29udHJvbHM+XG5cblx0XHRcdFx0PEJsb2NrRWRpdCB7IC4uLnByb3BzIH0gLz5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblx0J3dpdGhNYWNyb3NJbnNlcnRlcidcbik7XG5cbmFkZEZpbHRlcihcblx0J2VkaXRvci5CbG9ja0VkaXQnLFxuXHQnamV0LWZvcm0tYnVpbGRlci9tYWNyb3MtaW5zZXJ0ZXInLFxuXHR3aXRoTWFjcm9zSW5zZXJ0ZXJcbik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/modules/macros-inserter/assets/src/editor.js b/modules/macros-inserter/assets/src/editor.js new file mode 100644 index 000000000..e9f3e4af2 --- /dev/null +++ b/modules/macros-inserter/assets/src/editor.js @@ -0,0 +1,58 @@ +const { addFilter } = wp.hooks; +const { createHigherOrderComponent } = wp.compose; +const { Fragment } = wp.element; +const { BlockControls } = wp.blockEditor; + +const { MacrosFields } = JetFBComponents; +const { ToolbarGroup } = wp.components; + +function toHtmlMacro( name, field ) { + const macro = String( name ).replace( /^%|%$/g, '' ).trim(); + + let repeaterNote = ''; + let data = ''; + if (field.is_repeater) { + repeaterNote = 'repeater tooltip'; + } else if (field.is_repeater_child) { + repeaterNote = 'this field can be used only inside repeater - ' + field.repeater_name; + } + + return `
${repeaterNote}
`; +} + +const withMacrosInserter = createHigherOrderComponent( + ( BlockEdit ) => ( props ) => { + if ( props.name !== 'core/html' ) { + return ; + } + + const { attributes, setAttributes } = props; + + return ( + + + + { + const htmlMacro = toHtmlMacro( name, field ); + setAttributes( { + content: ( attributes.content ?? '' ) + htmlMacro, + } ); + } } + /> + + + + + + ); + }, + 'withMacrosInserter' +); + +addFilter( + 'editor.BlockEdit', + 'jet-form-builder/macros-inserter', + withMacrosInserter +); diff --git a/modules/macros-inserter/module.php b/modules/macros-inserter/module.php new file mode 100644 index 000000000..fecfd535a --- /dev/null +++ b/modules/macros-inserter/module.php @@ -0,0 +1,58 @@ +get_handle( 'editor' ), + $this->get_url( 'assets/build/editor.js' ), + array(), + jet_form_builder()->get_version(), + true + ); + } +} \ No newline at end of file diff --git a/modules/macros-inserter/package.json b/modules/macros-inserter/package.json new file mode 100644 index 000000000..f68e0d9ea --- /dev/null +++ b/modules/macros-inserter/package.json @@ -0,0 +1,9 @@ +{ + "name": "macros-inserter", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "npx webpack build --mode production", + "dev": "npx webpack build --mode development -w" + } +} diff --git a/modules/macros-inserter/webpack.config.js b/modules/macros-inserter/webpack.config.js new file mode 100644 index 000000000..0b85add15 --- /dev/null +++ b/modules/macros-inserter/webpack.config.js @@ -0,0 +1,29 @@ +const path = require( 'path' ); +const devMode = !process.argv.join( ':' ). +includes( '--mode:production' ); + +module.exports = { + context: path.resolve( __dirname, 'assets/src' ), + entry: { + 'editor': './editor.js', + }, + output: { + path: path.resolve( __dirname, 'assets/build' ), + devtoolNamespace: 'jfb-macros-inserter', + }, + devtool: devMode ? 'inline-cheap-module-source-map' : false, + resolve: { + extensions: [ '.js' ], + }, + module: { + rules: [ + { + test: /\.js(x)?$/, + use: [ + 'babel-loader', + ], + exclude: /node_modules/, + }, + ], + } +}; diff --git a/modules/modules-controller.php b/modules/modules-controller.php index 705633c63..d664a16bd 100644 --- a/modules/modules-controller.php +++ b/modules/modules-controller.php @@ -62,6 +62,7 @@ public function rep_instances(): array { new Promo_Banner\Module(), new Fields_Render_Validator\Module(), new User_Journey\Module(), + new Macros_Inserter\Module(), ); }