mindstream-react-gravity-form
Version:
A component for including Gravity Forms on React apps via the Wordpress API
2 lines • 35.6 kB
JavaScript
;function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"FormConfirmation",{enumerable:!0,get:function get(){return _FormElements.FormConfirmation}}),Object.defineProperty(exports,"FormError",{enumerable:!0,get:function get(){return _FormElements.FormError}}),Object.defineProperty(exports,"RenderFields",{enumerable:!0,get:function get(){return _FormElements.RenderFields}}),Object.defineProperty(exports,"Submit",{enumerable:!0,get:function get(){return _FormElements.Submit}}),Object.defineProperty(exports,"validateField",{enumerable:!0,get:function get(){return _validation.validateField}}),exports["default"]=void 0;var _react=_interopRequireWildcard(require("react")),_isomorphicUnfetch=_interopRequireDefault(require("isomorphic-unfetch")),_FormElements=require("./FormElements"),_form=require("./Helpers/form"),_validation=require("./Helpers/validation");function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var a=new WeakMap;return _getRequireWildcardCache=function(){return a},a}function _interopRequireWildcard(a){if(a&&a.__esModule)return a;if(null===a||"object"!==_typeof(a)&&"function"!=typeof a)return{default:a};var b=_getRequireWildcardCache();if(b&&b.has(a))return b.get(a);var c={},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var e in a)if(Object.prototype.hasOwnProperty.call(a,e)){var f=d?Object.getOwnPropertyDescriptor(a,e):null;f&&(f.get||f.set)?Object.defineProperty(c,e,f):c[e]=a[e]}return c["default"]=a,b&&b.set(a,c),c}function asyncGeneratorStep(a,b,c,d,e,f,g){try{var h=a[f](g),i=h.value}catch(a){return void c(a)}h.done?b(i):Promise.resolve(i).then(d,e)}function _asyncToGenerator(a){return function(){var b=this,c=arguments;return new Promise(function(d,e){function f(a){asyncGeneratorStep(h,d,e,f,g,"next",a)}function g(a){asyncGeneratorStep(h,d,e,f,g,"throw",a)}var h=a.apply(b,c);f(void 0)})}}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _iterableToArrayLimit(a,b){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(a)){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!(b&&c.length===b));d=!0);}catch(a){e=!0,f=a}finally{try{d||null==h["return"]||h["return"]()}finally{if(e)throw f}}return c}}function _arrayWithHoles(a){if(Array.isArray(a))return a}var GravityForm=function(a){var b,c=a.initialPage,d=a.populatedEntry,e=a.onChange,f=(0,_react.useState)(!1),g=_slicedToArray(f,2),h=g[0],i=g[1],j=(0,_react.useState)(!1),k=_slicedToArray(j,2),l=k[0],m=k[1],n=(0,_react.useState)({}),o=_slicedToArray(n,2),p=o[0],q=o[1],r=(0,_react.useState)(!1),s=_slicedToArray(r,2),t=s[0],u=s[1],v=(0,_react.useState)(!1),w=_slicedToArray(v,2),x=w[0],y=w[1],z=(0,_react.useState)(!1),A=_slicedToArray(z,2),B=A[0],C=A[1],D=(0,_react.useState)({}),E=_slicedToArray(D,2),F=E[0],G=E[1],H=(0,_react.useState)({}),I=_slicedToArray(H,2),J=I[0],K=I[1],L=(0,_react.useState)(c||1),M=_slicedToArray(L,2),N=M[0],O=M[1],P=(0,_react.useState)({}),Q=_slicedToArray(P,2),R=Q[0],S=Q[1],T=(0,_react.useState)({}),U=_slicedToArray(T,2),V=U[0],W=U[1],X=(0,_react.useState)(!1),Y=_slicedToArray(X,2),Z=Y[0],$=Y[1],_=(0,_react.useState)(!1),aa=_slicedToArray(_,2),ba=aa[0],ca=aa[1],da=(0,_react.useState)(!1),ea=_slicedToArray(da,2),fa=ea[0],ga=ea[1],ha=(0,_react.useState)({}),ia=_slicedToArray(ha,2),ja=ia[0],ka=ia[1],la=(0,_react.useRef)(null),ma=(0,_react.useCallback)(function(a){(0,_form.updateFieldsValuesBasedOnEntry)(a)},[]);(0,_react.useEffect)(function(){(0,_form.fetchForm)(_objectSpread({setFormData:G,setFormValues:q,setActivePage:O,setConditionFields:S,setConditionalIds:W,setPages:ka,setIsMultiPart:$},a))},[]),(0,_react.useEffect)(function(){e&&e(p)},[p]),(0,_react.useEffect)(function(){d&&ma(d)},[d]);var na=function(){if(la){var a=la.current.querySelector(".form-field.error");a&&a.scrollIntoView()}},oa=a.title,pa=a.formID,qa=a.submitIcon,ra=a.saveStateToHtmlField,sa=a.styledComponents,ta=a.customComponents,ua=a.errorMessage,va=a.dropzoneText,wa=a.loadingSpinner,xa=a.onError,ya=a.submissionUrl,za=a.language,Aa=a.apiKeys,Ba=sa||!1,Ca=Ba.Button,Da=Ba.Loading,Ea=Ba.FormError,Fa=Ba.FormConfirmation,Ga=Ba.GFWrapper,Ha=void 0===Ga?"div":Ga,Ia=F.cssClass,Ja=function(a){a.preventDefault(),(0,_form.prevStep)(p,ja,N,O,ca)},Ka=function(){var b=_asyncToGenerator(regeneratorRuntime.mark(function b(c){var d,e,f,g,h,j,k,l,n,o;return regeneratorRuntime.wrap(function(b){for(;;)switch(b.prev=b.next){case 0:if(d=a.onSubmit,e=new FormData(c.target),c.preventDefault(),f=(0,_form.forceValidation)(N,p,ga,K),f){b.next=7;break}return na(),b.abrupt("return",!1);case 7:d?d(e):(u(!0),y(!1),i(!1),C(!1),m(!1),g=a.formID,h=a.backendUrl,j=a.submissionUrl,k=a.jumpToConfirmation,l=a.onSubmitSuccess,n=a.onError,o=j,(0,_isomorphicUnfetch["default"])("".concat(o,"/wp-json/gf/v2/forms/").concat(g,"/submissions"),{method:"POST",body:e}).then(function(a){return a.json()}).then(function(b){if(b&&b.is_valid){if(l){var g=l(b);if(!g)return!1}var c=b.confirmation_message,d=c||!1,e=d.type,f=d.link;if(e&&f&&"redirect"===e&&"undefined"!=typeof window)return window.location.replace(f),!1;u(!1),y(!0),C(c),k&&(0,_form.scrollToConfirmation)(a,la)}else throw{response:b}})["catch"](function(b){var c=b&&b.response&&b.response.validation_messages?b.response.validation_messages:"Something went wrong";n?(n(c),u(!1),i(!0)):(u(!1),i(!0),m(c)),k&&(0,_form.scrollToConfirmation)(a,la)}));case 8:case"end":return b.stop();}},b)}));return function onSubmit(){return b.apply(this,arguments)}}();return _react["default"].createElement(Ha,{ref:la,className:"form-wrapper",id:"gravity_form_".concat(pa)},F.title?null:Da&&_react["default"].createElement(Da,{isLoading:!0}),h&&!x&&!xa&&_react["default"].createElement(_FormElements.FormError,{SFormError:Ea||!1,errorMessage:ua||"There was a problem with your submission"}),x&&B&&_react["default"].createElement(_FormElements.FormConfirmation,{confirmation:B,SFormConfirmation:Fa}),!x&&F.fields?_react["default"].createElement("form",{onSubmit:function onSubmit(a){return Ka(a)},className:Ia,encType:Z?"multipart/form-data":void 0,noValidate:!0},(F.title||F.description)&&_react["default"].createElement("div",null,F.title&&oa?_react["default"].createElement("h3",{className:"form-title"},F.title):null,F.description?_react["default"].createElement("p",{className:"form-description"},F.description):null),_react["default"].createElement("div",{className:"form-wrapper"},(null===F||void 0===F||null===(b=F.pagination)||void 0===b?void 0:b.pages)&&_react["default"].createElement(_FormElements.ProgressBar,{pagination:F.pagination,activePage:N,firstPageCssClass:F.firstPageCssClass}),_react["default"].createElement(_FormElements.RenderFields,{styledComponents:sa,customComponents:ta,fields:F.fields,formValues:p,submitFailed:h,submitSuccess:x,updateForm:function updateForm(a,b,c){return(0,_form.updateFormHandler)(b,a,c,p,q,V,R)},touched:J,setTouched:function setTouched(a){return(0,_form.setTouchedHandler)(a,J,K)},setErrorMessages:m,pagination:F.pagination,activePage:N,prevStep:function prevStep(a){return Ja(a)},nextStep:function nextStep(b){return(0,_form.nextStep)(b,a,ja,p,N,O,ca,K,ga)},checkConditionalLogic:function checkConditionalLogic(a,b){return(0,_form.checkConditionalLogic)(a,b=!1)},saveStateToHtmlField:ra,enableHoneypot:F.enableHoneypot,errors:l,unsetError:function unsetError(a){return(0,_form.unsetError)(a,l)},dropzoneText:va,pageClicked:ba,language:za,apiKeys:Aa}),(!F.pagination||F.pagination&&F.pagination.pages.length===N)&&_react["default"].createElement(_FormElements.Submit,{Button:Ca,Loading:Da,formData:F,submitIcon:qa,submitting:t,prevStep:function prevStep(a){return Ja(a)},loadingSpinner:wa}))):"")};GravityForm.defaultProps={title:!0,submitIcon:!1,saveStateToHtmlField:!1,jumpToConfirmation:!0};var _default=GravityForm;exports["default"]=_default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJHcmF2aXR5Rm9ybSIsInByb3BzIiwiaW5pdGlhbFBhZ2UiLCJwb3B1bGF0ZWRFbnRyeSIsIm9uQ2hhbmdlIiwic3VibWl0RmFpbGVkIiwic2V0U3VibWl0RmFpbGVkIiwiZXJyb3JNZXNzYWdlcyIsInNldEVycm9yTWVzc2FnZXMiLCJmb3JtVmFsdWVzIiwic2V0Rm9ybVZhbHVlcyIsInN1Ym1pdHRpbmciLCJzZXRTdWJtaXR0aW5nIiwic3VibWl0U3VjY2VzcyIsInNldFN1Ym1pdFN1Y2Nlc3MiLCJjb25maXJtYXRpb25NZXNzYWdlIiwic2V0Q29uZmlybWF0aW9uTWVzc2FnZSIsImZvcm1EYXRhIiwic2V0Rm9ybURhdGEiLCJ0b3VjaGVkIiwic2V0VG91Y2hlZCIsImFjdGl2ZVBhZ2UiLCJzZXRBY3RpdmVQYWdlIiwiY29uZGl0aW9uRmllbGRzIiwic2V0Q29uZGl0aW9uRmllbGRzIiwiY29uZGl0aW9uYWxJZHMiLCJzZXRDb25kaXRpb25hbElkcyIsImlzTXVsdGlwYXJ0Iiwic2V0SXNNdWx0aVBhcnQiLCJwYWdlQ2xpY2tlZCIsInNldFBhZ2VDbGlja2VkIiwic2hvd1BhZ2VWYWxpZGF0aW9uTXNnIiwic2V0U2hvd1BhZ2VWYWxpZGF0aW9uTXNnIiwicGFnZXMiLCJzZXRQYWdlcyIsIndyYXBwZXJSZWYiLCJ1cGRhdGVFbnRyeUZpZWxkcyIsInNjcm9sbFRvRmlyc3RJbnZhbGlkRmllbGQiLCJmaXJzdEVyckVsIiwiY3VycmVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzY3JvbGxJbnRvVmlldyIsInRpdGxlIiwiZm9ybUlEIiwic3VibWl0SWNvbiIsInNhdmVTdGF0ZVRvSHRtbEZpZWxkIiwic3R5bGVkQ29tcG9uZW50cyIsImN1c3RvbUNvbXBvbmVudHMiLCJlcnJvck1lc3NhZ2UiLCJkcm9wem9uZVRleHQiLCJsb2FkaW5nU3Bpbm5lciIsIm9uRXJyb3IiLCJzdWJtaXNzaW9uVXJsIiwibGFuZ3VhZ2UiLCJhcGlLZXlzIiwiQnV0dG9uIiwiTG9hZGluZyIsIlNGb3JtRXJyb3IiLCJGb3JtRXJyb3IiLCJTRm9ybUNvbmZpcm1hdGlvbiIsIkZvcm1Db25maXJtYXRpb24iLCJHRldyYXBwZXIiLCJjc3NDbGFzcyIsImhhbmRsZVByZXZTdGVwIiwiZSIsInByZXZlbnREZWZhdWx0Iiwib25TdWJtaXQiLCJldmVudCIsImN1c3RvbU9uU3VibWl0IiwiRm9ybURhdGEiLCJ0YXJnZXQiLCJpc0Zvcm1WYWxpZCIsImJhY2tlbmRVcmwiLCJqdW1wVG9Db25maXJtYXRpb24iLCJvblN1Ym1pdFN1Y2Nlc3MiLCJnZlN1Ym1pc3Npb25VcmwiLCJtZXRob2QiLCJib2R5IiwidGhlbiIsInJlc3AiLCJqc29uIiwicmVzcG9uc2UiLCJpc192YWxpZCIsInJlcyIsImNvbmZpcm1hdGlvbl9tZXNzYWdlIiwidHlwZSIsImxpbmsiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInJlcGxhY2UiLCJlcnJvciIsInZhbGlkYXRpb25fbWVzc2FnZXMiLCJmaWVsZHMiLCJkZXNjcmlwdGlvbiIsInBhZ2luYXRpb24iLCJmaXJzdFBhZ2VDc3NDbGFzcyIsImZpZWxkIiwiaW5wdXRJRCIsImlkIiwiY29uZGl0aW9uIiwiZW5hYmxlSG9uZXlwb3QiLCJsZW5ndGgiLCJkZWZhdWx0UHJvcHMiXSwibWFwcGluZ3MiOiJnbElBeUJBLEdBQU1BLENBQUFBLFdBQVcsQ0FBRyxTQUFDQyxDQUFELENBQVcsT0FDckJDLENBRHFCLENBQ3FCRCxDQURyQixDQUNyQkMsV0FEcUIsQ0FDUkMsQ0FEUSxDQUNxQkYsQ0FEckIsQ0FDUkUsY0FEUSxDQUNRQyxDQURSLENBQ3FCSCxDQURyQixDQUNRRyxRQURSLEdBR1csdUJBSFgsdUJBR3RCQyxDQUhzQixNQUdSQyxDQUhRLFFBSWEsdUJBSmIsdUJBSXRCQyxDQUpzQixNQUlQQyxDQUpPLFFBS08sb0JBQVMsRUFBVCxDQUxQLHVCQUt0QkMsQ0FMc0IsTUFLVkMsQ0FMVSxRQU1PLHVCQU5QLHVCQU10QkMsQ0FOc0Is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MEJvRSxNQUExQixHQUFxQ2hGLENBRnhDLEdBR0MsZ0NBQUMsb0JBQUQsRUFDRSxNQUFNLENBQUVrQyxFQURWLENBRUUsT0FBTyxDQUFFQyxFQUZYLENBR0UsUUFBUSxDQUFFdkMsQ0FIWixDQUlFLFVBQVUsQ0FBRTJCLEVBSmQsQ0FLRSxVQUFVLENBQUVqQyxDQUxkLENBTUUsUUFBUSxDQUFFLGtCQUFDcUQsQ0FBRCxRQUFPRCxDQUFBQSxFQUFjLENBQUNDLENBQUQsQ0FBckIsQ0FOWixDQU9FLGNBQWMsQ0FBRWQsRUFQbEIsRUE1REosQ0FoQkYsQ0FERCxDQTBGQyxFQWpISixDQXFISCxDQTNURCxDQTZUQWxELFdBQVcsQ0FBQ3NHLFlBQVosQ0FBMkIsQ0FDekI1RCxLQUFLLEdBRG9CLENBRXpCRSxVQUFVLEdBRmUsQ0FHekJDLG9CQUFvQixHQUhLLENBSXpCNEIsa0JBQWtCLEdBSk8sQyxjQVNaekUsVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBmZXRjaCBmcm9tIFwiaXNvbW9ycGhpYy11bmZldGNoXCI7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUNvbmZpcm1hdGlvbixcclxuICBGb3JtRXJyb3IsXHJcbiAgUmVuZGVyRmllbGRzLFxyXG4gIFN1Ym1pdCxcclxuICBQcm9ncmVzc0JhcixcclxufSBmcm9tIFwiLi9Gb3JtRWxlbWVudHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgY2hlY2tDb25kaXRpb25hbExvZ2ljLFxyXG4gIGZldGNoRm9ybSxcclxuICBmb3JjZVZhbGlkYXRpb24sXHJcbiAgbmV4dFN0ZXAsXHJcbiAgcHJldlN0ZXAsXHJcbiAgc2Nyb2xsVG9Db25maXJtYXRpb24sXHJcbiAgc2V0VG91Y2hlZEhhbmRsZXIsXHJcbiAgdW5zZXRFcnJvcixcclxuICB1cGRhdGVGaWVsZHNWYWx1ZXNCYXNlZE9uRW50cnksXHJcbiAgdXBkYXRlRm9ybUhhbmRsZXIsXHJcbn0gZnJvbSBcIi4vSGVscGVycy9mb3JtXCI7XHJcblxyXG5pbXBvcnQgeyB2YWxpZGF0ZUZpZWxkIH0gZnJvbSBcIi4vSGVscGVycy92YWxpZGF0aW9uXCI7XHJcblxyXG5jb25zdCBHcmF2aXR5Rm9ybSA9IChwcm9wcykgPT4ge1xyXG4gIGNvbnN0IHsgaW5pdGlhbFBhZ2UsIHBvcHVsYXRlZEVudHJ5LCBvbkNoYW5nZSB9ID0gcHJvcHM7XHJcblxyXG4gIGNvbnN0IFtzdWJtaXRGYWlsZWQsIHNldFN1Ym1pdEZhaWxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2Vycm9yTWVzc2FnZXMsIHNldEVycm9yTWVzc2FnZXNdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHt9KTtcclxuICBjb25zdCBbc3VibWl0dGluZywgc2V0U3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW3N1Ym1pdFN1Y2Nlc3MsIHNldFN1Ym1pdFN1Y2Nlc3NdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtjb25maXJtYXRpb25NZXNzYWdlLCBzZXRDb25maXJtYXRpb25NZXNzYWdlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbZm9ybURhdGEsIHNldEZvcm1EYXRhXSA9IHVzZVN0YXRlKHt9KTtcclxuICBjb25zdCBbdG91Y2hlZCwgc2V0VG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgY29uc3QgW2FjdGl2ZVBhZ2UsIHNldEFjdGl2ZVBhZ2VdID0gdXNlU3RhdGUoaW5pdGlhbFBhZ2UgfHwgMSk7XHJcbiAgY29uc3QgW2NvbmRpdGlvbkZpZWxkcywgc2V0Q29uZGl0aW9uRmllbGRzXSA9IHVzZVN0YXRlKHt9KTtcclxuICBjb25zdCBbY29uZGl0aW9uYWxJZHMsIHNldENvbmRpdGlvbmFsSWRzXSA9IHVzZVN0YXRlKHt9KTtcclxuICBjb25zdCBbaXNNdWx0aXBhcnQsIHNldElzTXVsdGlQYXJ0XSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbcGFnZUNsaWNrZWQsIHNldFBhZ2VDbGlja2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbc2hvd1BhZ2VWYWxpZGF0aW9uTXNnLCBzZXRTaG93UGFnZVZhbGlkYXRpb25Nc2ddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtwYWdlcywgc2V0UGFnZXNdID0gdXNlU3RhdGUoe30pO1xyXG5cclxuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmKG51bGwpO1xyXG5cclxuICBjb25zdCB1cGRhdGVFbnRyeUZpZWxkcyA9IHVzZUNhbGxiYWNrKChwb3B1bGF0ZWRFbnRyeSkgPT4ge1xyXG4gICAgdXBkYXRlRmllbGRzVmFsdWVzQmFzZWRPbkVudHJ5KHBvcHVsYXRlZEVudHJ5KTtcclxuICB9LCBbXSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoIGZvcm0gZGF0YVxyXG4gICAqL1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBmZXRjaEZvcm0oe1xyXG4gICAgICBzZXRGb3JtRGF0YSxcclxuICAgICAgc2V0Rm9ybVZhbHVlcyxcclxuICAgICAgc2V0QWN0aXZlUGFnZSxcclxuICAgICAgc2V0Q29uZGl0aW9uRmllbGRzLFxyXG4gICAgICBzZXRDb25kaXRpb25hbElkcyxcclxuICAgICAgc2V0UGFnZXMsXHJcbiAgICAgIHNldElzTXVsdGlQYXJ0LFxyXG4gICAgICAuLi5wcm9wcyxcclxuICAgIH0pO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbCBjdXN0b20gb25DaGFuZ2UgaGFuZGxlciB3aXRoIHBhc3NlZCB2YWx1ZXMgZnJvbSBmb3JtXHJcbiAgICovXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChvbkNoYW5nZSkge1xyXG4gICAgICBvbkNoYW5nZShmb3JtVmFsdWVzKTtcclxuICAgIH1cclxuICB9LCBbZm9ybVZhbHVlc10pO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgZW50cnkgdG8gdGhlIGZvcm1cclxuICAgKi9cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKHBvcHVsYXRlZEVudHJ5KSB7XHJcbiAgICAgIHVwZGF0ZUVudHJ5RmllbGRzKHBvcHVsYXRlZEVudHJ5KTtcclxuICAgIH1cclxuICB9LCBbcG9wdWxhdGVkRW50cnldKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsIHBhZ2UgdG8gdGhlIGZpcnN0IG5vdCB2YWxpZCBmaWVsZFxyXG4gICAqL1xyXG4gIGNvbnN0IHNjcm9sbFRvRmlyc3RJbnZhbGlkRmllbGQgPSAoKSA9PiB7XHJcbiAgICBpZiAoIXdyYXBwZXJSZWYpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmaXJzdEVyckVsID0gd3JhcHBlclJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZm9ybS1maWVsZC5lcnJvclwiKTtcclxuICAgIGlmIChmaXJzdEVyckVsKSB7XHJcbiAgICAgIGZpcnN0RXJyRWwuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCB7XHJcbiAgICB0aXRsZSxcclxuICAgIGZvcm1JRCxcclxuICAgIHN1Ym1pdEljb24sXHJcbiAgICBzYXZlU3RhdGVUb0h0bWxGaWVsZCxcclxuICAgIHN0eWxlZENvbXBvbmVudHMsXHJcbiAgICBjdXN0b21Db21wb25lbnRzLFxyXG4gICAgZXJyb3JNZXNzYWdlLFxyXG4gICAgZHJvcHpvbmVUZXh0LFxyXG4gICAgbG9hZGluZ1NwaW5uZXIsXHJcbiAgICBvbkVycm9yLFxyXG4gICAgc3VibWlzc2lvblVybCxcclxuICAgIGxhbmd1YWdlLFxyXG4gICAgYXBpS2V5cyxcclxuICB9ID0gcHJvcHM7XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIEJ1dHRvbixcclxuICAgIExvYWRpbmcsXHJcbiAgICBGb3JtRXJyb3I6IFNGb3JtRXJyb3IsXHJcbiAgICBGb3JtQ29uZmlybWF0aW9uOiBTRm9ybUNvbmZpcm1hdGlvbixcclxuICAgIEdGV3JhcHBlciA9IFwiZGl2XCIsXHJcbiAgfSA9IHN0eWxlZENvbXBvbmVudHMgfHwgZmFsc2U7XHJcblxyXG4gIGNvbnN0IHsgY3NzQ2xhc3MgfSA9IGZvcm1EYXRhO1xyXG5cclxuICBjb25zdCBoYW5kbGVQcmV2U3RlcCA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBwcmV2U3RlcChmb3JtVmFsdWVzLCBwYWdlcywgYWN0aXZlUGFnZSwgc2V0QWN0aXZlUGFnZSwgc2V0UGFnZUNsaWNrZWQpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IG9uU3VibWl0ID0gYXN5bmMgKGV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCB7IG9uU3VibWl0OiBjdXN0b21PblN1Ym1pdCB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShldmVudC50YXJnZXQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgY29uc3QgaXNGb3JtVmFsaWQgPSBmb3JjZVZhbGlkYXRpb24oXHJcbiAgICAgIGFjdGl2ZVBhZ2UsXHJcbiAgICAgIGZvcm1WYWx1ZXMsXHJcbiAgICAgIHNldFNob3dQYWdlVmFsaWRhdGlvbk1zZyxcclxuICAgICAgc2V0VG91Y2hlZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWlzRm9ybVZhbGlkKSB7XHJcbiAgICAgIHNjcm9sbFRvRmlyc3RJbnZhbGlkRmllbGQoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXN0b21PblN1Ym1pdCkge1xyXG4gICAgICBjdXN0b21PblN1Ym1pdChmb3JtRGF0YSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRTdWJtaXR0aW5nKHRydWUpO1xyXG4gICAgICBzZXRTdWJtaXRTdWNjZXNzKGZhbHNlKTtcclxuICAgICAgc2V0U3VibWl0RmFpbGVkKGZhbHNlKTtcclxuICAgICAgc2V0Q29uZmlybWF0aW9uTWVzc2FnZShmYWxzZSk7XHJcbiAgICAgIHNldEVycm9yTWVzc2FnZXMoZmFsc2UpO1xyXG5cclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGZvcm1JRCxcclxuICAgICAgICBiYWNrZW5kVXJsLFxyXG4gICAgICAgIHN1Ym1pc3Npb25VcmwsXHJcbiAgICAgICAganVtcFRvQ29uZmlybWF0aW9uLFxyXG4gICAgICAgIG9uU3VibWl0U3VjY2VzcyxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICB9ID0gcHJvcHM7XHJcblxyXG4gICAgICBjb25zdCBnZlN1Ym1pc3Npb25VcmwgPSBzdWJtaXNzaW9uVXJsO1xyXG5cclxuICAgICAgZmV0Y2goYCR7Z2ZTdWJtaXNzaW9uVXJsfS93cC1qc29uL2dmL3YyL2Zvcm1zLyR7Zm9ybUlEfS9zdWJtaXNzaW9uc2AsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGJvZHk6IGZvcm1EYXRhLFxyXG4gICAgICB9KVxyXG4gICAgICAgIC50aGVuKChyZXNwKSA9PiByZXNwLmpzb24oKSlcclxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5pc192YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gb25TdWJtaXRTdWNjZXNzKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICBpZiAoIXJlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBjb25maXJtYXRpb25NZXNzYWdlID0gcmVzcG9uc2UuY29uZmlybWF0aW9uX21lc3NhZ2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgbGluayB9ID0gY29uZmlybWF0aW9uTWVzc2FnZSB8fCBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHR5cGUgJiYgbGluayAmJiB0eXBlID09PSBcInJlZGlyZWN0XCIpIHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGluayk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFN1Ym1pdHRpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICBzZXRTdWJtaXRTdWNjZXNzKHRydWUpO1xyXG4gICAgICAgICAgICBzZXRDb25maXJtYXRpb25NZXNzYWdlKGNvbmZpcm1hdGlvbk1lc3NhZ2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGp1bXBUb0NvbmZpcm1hdGlvbikge1xyXG4gICAgICAgICAgICAgIHNjcm9sbFRvQ29uZmlybWF0aW9uKHByb3BzLCB3cmFwcGVyUmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cge1xyXG4gICAgICAgICAgICAgIHJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9XHJcbiAgICAgICAgICAgIGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLnZhbGlkYXRpb25fbWVzc2FnZXNcclxuICAgICAgICAgICAgICA/IGVycm9yLnJlc3BvbnNlLnZhbGlkYXRpb25fbWVzc2FnZXNcclxuICAgICAgICAgICAgICA6IFwiU29tZXRoaW5nIHdlbnQgd3JvbmdcIjtcclxuXHJcbiAgICAgICAgICBpZiAob25FcnJvcikge1xyXG4gICAgICAgICAgICBvbkVycm9yKGVycm9yTWVzc2FnZXMpO1xyXG4gICAgICAgICAgICBzZXRTdWJtaXR0aW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgc2V0U3VibWl0RmFpbGVkKHRydWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2V0U3VibWl0dGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHNldFN1Ym1pdEZhaWxlZCh0cnVlKTtcclxuICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlcyhlcnJvck1lc3NhZ2VzKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoanVtcFRvQ29uZmlybWF0aW9uKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbFRvQ29uZmlybWF0aW9uKHByb3BzLCB3cmFwcGVyUmVmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPEdGV3JhcHBlclxyXG4gICAgICByZWY9e3dyYXBwZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT1cImZvcm0td3JhcHBlclwiXHJcbiAgICAgIGlkPXtgZ3Jhdml0eV9mb3JtXyR7Zm9ybUlEfWB9XHJcbiAgICA+XHJcbiAgICAgIHtmb3JtRGF0YS50aXRsZSA/IG51bGwgOiBMb2FkaW5nICYmIDxMb2FkaW5nIGlzTG9hZGluZyAvPn1cclxuXHJcbiAgICAgIHtzdWJtaXRGYWlsZWQgJiYgIXN1Ym1pdFN1Y2Nlc3MgJiYgIW9uRXJyb3IgJiYgKFxyXG4gICAgICAgIDxGb3JtRXJyb3JcclxuICAgICAgICAgIFNGb3JtRXJyb3I9e1NGb3JtRXJyb3IgfHwgZmFsc2V9XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2U9e1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgfHwgXCJUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggeW91ciBzdWJtaXNzaW9uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICAvPlxyXG4gICAgICApfVxyXG5cclxuICAgICAge3N1Ym1pdFN1Y2Nlc3MgJiYgY29uZmlybWF0aW9uTWVzc2FnZSAmJiAoXHJcbiAgICAgICAgPEZvcm1Db25maXJtYXRpb25cclxuICAgICAgICAgIGNvbmZpcm1hdGlvbj17Y29uZmlybWF0aW9uTWVzc2FnZX1cclxuICAgICAgICAgIFNGb3JtQ29uZmlybWF0aW9uPXtTRm9ybUNvbmZpcm1hdGlvbn1cclxuICAgICAgICAvPlxyXG4gICAgICApfVxyXG5cclxuICAgICAgeyFzdWJtaXRTdWNjZXNzICYmIGZvcm1EYXRhLmZpZWxkcyA/IChcclxuICAgICAgICA8Zm9ybVxyXG4gICAgICAgICAgb25TdWJtaXQ9eyhldmVudCkgPT4gb25TdWJtaXQoZXZlbnQpfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc31cclxuICAgICAgICAgIGVuY1R5cGU9e2lzTXVsdGlwYXJ0ID8gXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgOiB1bmRlZmluZWR9XHJcbiAgICAgICAgICBub1ZhbGlkYXRlXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgeyhmb3JtRGF0YS50aXRsZSB8fCBmb3JtRGF0YS5kZXNjcmlwdGlvbikgJiYgKFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIHtmb3JtRGF0YS50aXRsZSAmJiB0aXRsZSA/IChcclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJmb3JtLXRpdGxlXCI+e2Zvcm1EYXRhLnRpdGxlfTwvaDM+XHJcbiAgICAgICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICAgICAge2Zvcm1EYXRhLmRlc2NyaXB0aW9uID8gKFxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9ybS1kZXNjcmlwdGlvblwiPntmb3JtRGF0YS5kZXNjcmlwdGlvbn08L3A+XHJcbiAgICAgICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIHtmb3JtRGF0YT8ucGFnaW5hdGlvbj8ucGFnZXMgJiYgKFxyXG4gICAgICAgICAgICAgIDxQcm9ncmVzc0JhclxyXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbj17Zm9ybURhdGEucGFnaW5hdGlvbn1cclxuICAgICAgICAgICAgICAgIGFjdGl2ZVBhZ2U9e2FjdGl2ZVBhZ2V9XHJcbiAgICAgICAgICAgICAgICBmaXJzdFBhZ2VDc3NDbGFzcz17Zm9ybURhdGEuZmlyc3RQYWdlQ3NzQ2xhc3N9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPFJlbmRlckZpZWxkc1xyXG4gICAgICAgICAgICAgIHN0eWxlZENvbXBvbmVudHM9e3N0eWxlZENvbXBvbmVudHN9XHJcbiAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50cz17Y3VzdG9tQ29tcG9uZW50c31cclxuICAgICAgICAgICAgICBmaWVsZHM9e2Zvcm1EYXRhLmZpZWxkc31cclxuICAgICAgICAgICAgICBmb3JtVmFsdWVzPXtmb3JtVmFsdWVzfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZD17c3VibWl0RmFpbGVkfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFN1Y2Nlc3M9e3N1Ym1pdFN1Y2Nlc3N9XHJcbiAgICAgICAgICAgICAgdXBkYXRlRm9ybT17KGV2ZW50LCBmaWVsZCwgaW5wdXRJRCkgPT5cclxuICAgICAgICAgICAgICAgIHVwZGF0ZUZvcm1IYW5kbGVyKFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGlucHV0SUQsXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIHNldEZvcm1WYWx1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsSWRzLFxyXG4gICAgICAgICAgICAgICAgICBjb25kaXRpb25GaWVsZHNcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdG91Y2hlZD17dG91Y2hlZH1cclxuICAgICAgICAgICAgICBzZXRUb3VjaGVkPXsoaWQpID0+IHNldFRvdWNoZWRIYW5kbGVyKGlkLCB0b3VjaGVkLCBzZXRUb3VjaGVkKX1cclxuICAgICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2VzPXtzZXRFcnJvck1lc3NhZ2VzfVxyXG4gICAgICAgICAgICAgIHBhZ2luYXRpb249e2Zvcm1EYXRhLnBhZ2luYXRpb259XHJcbiAgICAgICAgICAgICAgYWN0aXZlUGFnZT17YWN0aXZlUGFnZX1cclxuICAgICAgICAgICAgICBwcmV2U3RlcD17KGUpID0+IGhhbmRsZVByZXZTdGVwKGUpfVxyXG4gICAgICAgICAgICAgIG5leHRTdGVwPXsoZSkgPT5cclxuICAgICAgICAgICAgICAgIG5leHRTdGVwKFxyXG4gICAgICAgICAgICAgICAgICBlLFxyXG4gICAgICAgICAgICAgICAgICBwcm9wcyxcclxuICAgICAgICAgICAgICAgICAgcGFnZXMsXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgIHNldFBhZ2VDbGlja2VkLFxyXG4gICAgICAgICAgICAgICAgICBzZXRUb3VjaGVkLFxyXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UGFnZVZhbGlkYXRpb25Nc2dcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY2hlY2tDb25kaXRpb25hbExvZ2ljPXsoY29uZGl0aW9uLCBmaWVsZHMpID0+XHJcbiAgICAgICAgICAgICAgICBjaGVja0NvbmRpdGlvbmFsTG9naWMoY29uZGl0aW9uLCAoZmllbGRzID0gZmFsc2UpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBzYXZlU3RhdGVUb0h0bWxGaWVsZD17c2F2ZVN0YXRlVG9IdG1sRmllbGR9XHJcbiAgICAgICAgICAgICAgZW5hYmxlSG9uZXlwb3Q9e2Zvcm1EYXRhLmVuYWJsZUhvbmV5cG90fVxyXG4gICAgICAgICAgICAgIGVycm9ycz17ZXJyb3JNZXNzYWdlc31cclxuICAgICAgICAgICAgICB1bnNldEVycm9yPXsoaWQpID0+IHVuc2V0RXJyb3IoaWQsIGVycm9yTWVzc2FnZXMpfVxyXG4gICAgICAgICAgICAgIGRyb3B6b25lVGV4dD17ZHJvcHpvbmVUZXh0fVxyXG4gICAgICAgICAgICAgIHBhZ2VDbGlja2VkPXtwYWdlQ2xpY2tlZH1cclxuICAgICAgICAgICAgICBsYW5ndWFnZT17bGFuZ3VhZ2V9XHJcbiAgICAgICAgICAgICAgYXBpS2V5cz17YXBpS2V5c31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgeyghZm9ybURhdGEucGFnaW5hdGlvbiB8fFxyXG4gICAgICAgICAgICAgIChmb3JtRGF0YS5wYWdpbmF0aW9uICYmXHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5wYWdpbmF0aW9uLnBhZ2VzLmxlbmd0aCA9PT0gYWN0aXZlUGFnZSkpICYmIChcclxuICAgICAgICAgICAgICA8U3VibWl0XHJcbiAgICAgICAgICAgICAgICBCdXR0b249e0J1dHRvbn1cclxuICAgICAgICAgICAgICAgIExvYWRpbmc9e0xvYWRpbmd9XHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YT17Zm9ybURhdGF9XHJcbiAgICAgICAgICAgICAgICBzdWJtaXRJY29uPXtzdWJtaXRJY29ufVxyXG4gICAgICAgICAgICAgICAgc3VibWl0dGluZz17c3VibWl0dGluZ31cclxuICAgICAgICAgICAgICAgIHByZXZTdGVwPXsoZSkgPT4gaGFuZGxlUHJldlN0ZXAoZSl9XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3Bpbm5lcj17bG9hZGluZ1NwaW5uZXJ9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgKSA6IChcclxuICAgICAgICBcIlwiXHJcbiAgICAgICl9XHJcbiAgICA8L0dGV3JhcHBlcj5cclxuICApO1xyXG59O1xyXG5cclxuR3Jhdml0eUZvcm0uZGVmYXVsdFByb3BzID0ge1xyXG4gIHRpdGxlOiB0cnVlLFxyXG4gIHN1Ym1pdEljb246IGZhbHNlLFxyXG4gIHNhdmVTdGF0ZVRvSHRtbEZpZWxkOiBmYWxzZSxcclxuICBqdW1wVG9Db25maXJtYXRpb246IHRydWUsXHJcbn07XHJcblxyXG5leHBvcnQgeyB2YWxpZGF0ZUZpZWxkLCBGb3JtQ29uZmlybWF0aW9uLCBGb3JtRXJyb3IsIFJlbmRlckZpZWxkcywgU3VibWl0IH07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHcmF2aXR5Rm9ybTtcclxuIl19