UNPKG

br-utils

Version:

Utility resources to deal with Brazilian-related data.

8 lines 80.1 kB
/** * br-utils v2.0.4 * * @author Julio L. Muller. * @license MIT - 2025 */ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).brUtils=n()}(this,(function(){"use strict";const{replace:e}="",n=/[&<>'"]/g,t={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"},r=e=>t[e],i=t=>e.call(t,n,r);function o(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,d;var c,s,u=o(d?a:(d=1,a=function(e){return String(e).replace(/\D/g,"")}));var f=o(function(){if(s)return c;s=1;var e=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===n}(e)}(e)},n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function t(e,n){return!1!==n.clone&&n.isMergeableObject(e)?d((t=e,Array.isArray(t)?[]:{}),e,n):e;var t}function r(e,n,r){return e.concat(n).map((function(e){return t(e,r)}))}function i(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(n){return Object.propertyIsEnumerable.call(e,n)})):[]}(e))}function o(e,n){try{return n in e}catch(e){return!1}}function a(e,n,r){var a={};return r.isMergeableObject(e)&&i(e).forEach((function(n){a[n]=t(e[n],r)})),i(n).forEach((function(i){(function(e,n){return o(e,n)&&!(Object.hasOwnProperty.call(e,n)&&Object.propertyIsEnumerable.call(e,n))})(e,i)||(o(e,i)&&r.isMergeableObject(n[i])?a[i]=function(e,n){if(!n.customMerge)return d;var t=n.customMerge(e);return"function"==typeof t?t:d}(i,r)(e[i],n[i],r):a[i]=t(n[i],r))})),a}function d(n,i,o){(o=o||{}).arrayMerge=o.arrayMerge||r,o.isMergeableObject=o.isMergeableObject||e,o.cloneUnlessOtherwiseSpecified=t;var d=Array.isArray(i);return d===Array.isArray(n)?d?o.arrayMerge(n,i,o):a(n,i,o):t(i,o)}return d.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,t){return d(e,t,n)}),{})},c=d}());const l={delimiters:{dot:".",slash:"/",dash:"-"},hiddenRange:{start:5,end:13},onFail:e=>e,hiddenKey:"*",hidden:!1,escape:!1};function h(e,n){const t=u(e).split(""),r=function(e={}){const n=f(l,e);if(n.hidden){if(isNaN(n.hiddenRange.start)||n.hiddenRange.start<0||n.hiddenRange.start>13)throw new TypeError('Option "hiddenRange.start" must be a number between 0 and 13.');if(isNaN(n.hiddenRange.end)||n.hiddenRange.end<0||n.hiddenRange.end>13)throw new TypeError('Option "hiddenRange.end" must be a number between 0 and 13.');if(n.hiddenRange.start>n.hiddenRange.end){const e=n.hiddenRange.start;n.hiddenRange.start=n.hiddenRange.end,n.hiddenRange.end=e}}if("function"!=typeof n.onFail)throw new TypeError('The option "onFail" must be a callback function.');return n}(n);if(14!==t.length){const n=new Error(`Parameter "${e}" does not contain 14 digits.`);return r.onFail(e,n)}if(r.hidden)for(let e=r.hiddenRange.start;e<=r.hiddenRange.end;e++)t[e]=r.hiddenKey;t.splice(12,0,r.delimiters.dash),t.splice(8,0,r.delimiters.slash),t.splice(5,0,r.delimiters.dot),t.splice(2,0,r.delimiters.dot);const o=t.join("");return r.escape?i(o):o}function p(e){let n=2;const t=[...e].reduceRight(((e,t)=>{const r=e+t*n;return n=9===n?2:n+1,r}),0)%11;return t<2?0:11-t}const g={format:!1,prefix:""};function b(e){const n=function(e={}){return f(g,e)}(e),t=u(n.prefix),r=t.length;if(r<0||r>12)throw new Error('Option "prefix" must be a string containing between 1 and 12 digits.');if(r>8&&"0000"===t.slice(8))throw new Error('The branch ID (characters 8 to 11) cannot be "0000".');const i=[0,0,0,Math.ceil(9*Math.random())],o=t.split("").map(Number).concat(function(e){const n=[];for(;n.length<e;){const e=10*Math.random(),t=Math.floor(e);n.push(t)}return n}(8-r)).concat(i.slice(0,12-r));return o.push(p(o)),o.push(p(o)),n.format?h(o.join("")):o.join("")}const m={delimiters:{dot:".",dash:"-"},hiddenRange:{start:3,end:10},onFail:e=>e,hiddenKey:"*",hidden:!1,escape:!1};function y(e,n){const t=u(e).split(""),r=function(e={}){const n=f(m,e);if(n.hidden){if(isNaN(n.hiddenRange.start)||n.hiddenRange.start<0||n.hiddenRange.start>10)throw new TypeError('Option "hiddenRange.start" must be a number between 0 and 10.');if(isNaN(n.hiddenRange.end)||n.hiddenRange.end<0||n.hiddenRange.end>10)throw new TypeError('Option "hiddenRange.end" must be a number between 0 and 10.');if(n.hiddenRange.start>n.hiddenRange.end){const e=n.hiddenRange.start;n.hiddenRange.start=n.hiddenRange.end,n.hiddenRange.end=e}}if("function"!=typeof n.onFail)throw new TypeError('The option "onFail" must be a callback function.');return n}(n);if(11!==t.length){const n=new Error(`Parameter "${e}" does not contain 11 digits.`);return r.onFail(e,n)}if(r.hidden)for(let e=r.hiddenRange.start;e<=r.hiddenRange.end;e++)t[e]=r.hiddenKey;t.splice(9,0,r.delimiters.dash),t.splice(6,0,r.delimiters.dot),t.splice(3,0,r.delimiters.dot);const o=t.join("");return r.escape?i(o):o}const R={format:!1,prefix:""};function w(e){const n=function(e={}){return f(R,e)}(e),t=u(n.prefix),r=t.length;if(r<0||r>9)throw new Error('Option "prefix" must be a string containing between 1 and 9 digits.');const i=t.split("").map(Number).concat(function(e){const n=[];for(;n.length<e;){const e=10*Math.random(),t=Math.floor(e);n.push(t)}return n}(9-r));return[9,10].forEach((e=>{let n=e+1,t=0;for(let r=0;r<e;r++,n--)t+=i[r]*n;const r=11-t%11;i.push(r>9?0:r)})),n.format?y(i.join("")):i.join("")}return{cnpj:{format:h,generate:b,isValid:function(e){const n=u(e);return 14===n.length&&n===b({prefix:n.slice(0,12)})}},cpf:{format:y,generate:w,isValid:function(e){const n=u(e);return 11===n.length&&n===w({prefix:n.substring(0,9)})}}}})); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnItdXRpbHMubWluLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvaHRtbC1lc2NhcGVyL2VzbS9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9udW0tb25seS9idWlsZC9pbmRleC5janMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGVlcG1lcmdlL2Rpc3QvY2pzLmpzIiwiLi4vLi4vY25wai1mbXQvYnVpbGQvaW5kZXgubWpzIiwiLi4vLi4vY25wai1nZW4vYnVpbGQvaW5kZXgubWpzIiwiLi4vLi4vY3BmLWZtdC9idWlsZC9pbmRleC5tanMiLCIuLi8uLi9jcGYtZ2VuL2J1aWxkL2luZGV4Lm1qcyIsIi4uL3NyYy9tb2R1bGUudHMiLCIuLi8uLi9jbnBqLXV0aWxzL2J1aWxkL2luZGV4Lm1qcyIsIi4uLy4uL2NucGotdmFsL2J1aWxkL2luZGV4Lm1qcyIsIi4uLy4uL2NwZi11dGlscy9idWlsZC9pbmRleC5tanMiLCIuLi8uLi9jcGYtdmFsL2J1aWxkL2luZGV4Lm1qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoQykgMjAxNy1wcmVzZW50IGJ5IEFuZHJlYSBHaWFtbWFyY2hpIC0gQFdlYlJlZmxlY3Rpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbmNvbnN0IHtyZXBsYWNlfSA9ICcnO1xuXG4vLyBlc2NhcGVcbmNvbnN0IGVzID0gLyYoPzphbXB8IzM4fGx0fCM2MHxndHwjNjJ8YXBvc3wjMzl8cXVvdHwjMzQpOy9nO1xuY29uc3QgY2EgPSAvWyY8PidcIl0vZztcblxuY29uc3QgZXNjYSA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICAnXCInOiAnJnF1b3Q7J1xufTtcbmNvbnN0IHBlID0gbSA9PiBlc2NhW21dO1xuXG4vKipcbiAqIFNhZmVseSBlc2NhcGUgSFRNTCBlbnRpdGllcyBzdWNoIGFzIGAmYCwgYDxgLCBgPmAsIGBcImAsIGFuZCBgJ2AuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXMgdGhlIGlucHV0IHRvIHNhZmVseSBlc2NhcGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGlucHV0LCBhbmQgaXQgKip0aHJvd3MqKiBhbiBlcnJvciBpZlxuICogIHRoZSBpbnB1dCB0eXBlIGlzIHVuZXhwZWN0ZWQsIGV4Y2VwdCBmb3IgYm9vbGVhbiBhbmQgbnVtYmVycyxcbiAqICBjb252ZXJ0ZWQgYXMgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXNjYXBlID0gZXMgPT4gcmVwbGFjZS5jYWxsKGVzLCBjYSwgcGUpO1xuXG5cbi8vIHVuZXNjYXBlXG5jb25zdCB1bmVzID0ge1xuICAnJmFtcDsnOiAnJicsXG4gICcmIzM4Oyc6ICcmJyxcbiAgJyZsdDsnOiAnPCcsXG4gICcmIzYwOyc6ICc8JyxcbiAgJyZndDsnOiAnPicsXG4gICcmIzYyOyc6ICc+JyxcbiAgJyZhcG9zOyc6IFwiJ1wiLFxuICAnJiMzOTsnOiBcIidcIixcbiAgJyZxdW90Oyc6ICdcIicsXG4gICcmIzM0Oyc6ICdcIidcbn07XG5jb25zdCBjYXBlID0gbSA9PiB1bmVzW21dO1xuXG4vKipcbiAqIFNhZmVseSB1bmVzY2FwZSBwcmV2aW91c2x5IGVzY2FwZWQgZW50aXRpZXMgc3VjaCBhcyBgJmAsIGA8YCwgYD5gLCBgXCJgLFxuICogYW5kIGAnYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB1biBhIHByZXZpb3VzbHkgZXNjYXBlZCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSB1bmVzY2FwZWQgaW5wdXQsIGFuZCBpdCAqKnRocm93cyoqIGFuIGVycm9yIGlmXG4gKiAgdGhlIGlucHV0IHR5cGUgaXMgdW5leHBlY3RlZCwgZXhjZXB0IGZvciBib29sZWFuIGFuZCBudW1iZXJzLFxuICogIGNvbnZlcnRlZCBhcyBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmVzY2FwZSA9IHVuID0+IHJlcGxhY2UuY2FsbCh1biwgZXMsIGNhcGUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBudW1Pbmx5KHRhcmdldCkge1xuICByZXR1cm4gU3RyaW5nKHRhcmdldCkucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG51bU9ubHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1WTJweklpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZiblZ0TFc5dWJIa3VkSE1pWFN3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2JuVnRUMjVzZVNoMFlYSm5aWFE2SUhWdWEyNXZkMjRwT2lCemRISnBibWNnZTF4dUlDQnlaWFIxY200Z1UzUnlhVzVuS0hSaGNtZGxkQ2t1Y21Wd2JHRmpaU2d2WEZ4RUwyY3NJQ2NuS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdiblZ0VDI1c2VUdGNiaUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxGTkJRVk1zVVVGQlVTeE5RVUY1UWl4RlFVRkJPMEZCUTNoRExFVkJRVUVzVDBGQlR5eE5RVUZQTEVOQlFVRXNUVUZCVFN4RFFVRkZMRU5CUVVFc1QwRkJRU3hEUVVGUkxFOUJRVThzUlVGQlJTeERRVUZCTzBGQlEzcERPenM3T3lKOVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNNZXJnZWFibGVPYmplY3QgPSBmdW5jdGlvbiBpc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb25OdWxsT2JqZWN0KHZhbHVlKVxuXHRcdCYmICFpc1NwZWNpYWwodmFsdWUpXG59O1xuXG5mdW5jdGlvbiBpc05vbk51bGxPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1NwZWNpYWwodmFsdWUpIHtcblx0dmFyIHN0cmluZ1ZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuXHRyZXR1cm4gc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG5cdFx0fHwgc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IERhdGVdJ1xuXHRcdHx8IGlzUmVhY3RFbGVtZW50KHZhbHVlKVxufVxuXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYjVhYzk2M2ZiNzkxZDEyOThlN2YzOTYyMzYzODNiYzk1NWY5MTZjMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL2VsZW1lbnQvUmVhY3RFbGVtZW50LmpzI0wyMS1MMjVcbnZhciBjYW5Vc2VTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gY2FuVXNlU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xuXG5mdW5jdGlvbiBpc1JlYWN0RWxlbWVudCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxufVxuXG5mdW5jdGlvbiBlbXB0eVRhcmdldCh2YWwpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IFtdIDoge31cbn1cblxuZnVuY3Rpb24gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodmFsdWUsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChvcHRpb25zLmNsb25lICE9PSBmYWxzZSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSlcblx0XHQ/IGRlZXBtZXJnZShlbXB0eVRhcmdldCh2YWx1ZSksIHZhbHVlLCBvcHRpb25zKVxuXHRcdDogdmFsdWVcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRhcmdldC5jb25jYXQoc291cmNlKS5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChlbGVtZW50LCBvcHRpb25zKVxuXHR9KVxufVxuXG5mdW5jdGlvbiBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykge1xuXHRpZiAoIW9wdGlvbnMuY3VzdG9tTWVyZ2UpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlXG5cdH1cblx0dmFyIGN1c3RvbU1lcmdlID0gb3B0aW9ucy5jdXN0b21NZXJnZShrZXkpO1xuXHRyZXR1cm4gdHlwZW9mIGN1c3RvbU1lcmdlID09PSAnZnVuY3Rpb24nID8gY3VzdG9tTWVyZ2UgOiBkZWVwbWVyZ2Vcbn1cblxuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcblx0XHQ/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24oc3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGFyZ2V0LCBzeW1ib2wpXG5cdFx0fSlcblx0XHQ6IFtdXG59XG5cbmZ1bmN0aW9uIGdldEtleXModGFyZ2V0KSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh0YXJnZXQpLmNvbmNhdChnZXRFbnVtZXJhYmxlT3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpXG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5SXNPbk9iamVjdChvYmplY3QsIHByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5IGluIG9iamVjdFxuXHR9IGNhdGNoKF8pIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxufVxuXG4vLyBQcm90ZWN0cyBmcm9tIHByb3RvdHlwZSBwb2lzb25pbmcgYW5kIHVuZXhwZWN0ZWQgbWVyZ2luZyB1cCB0aGUgcHJvdG90eXBlIGNoYWluLlxuZnVuY3Rpb24gcHJvcGVydHlJc1Vuc2FmZSh0YXJnZXQsIGtleSkge1xuXHRyZXR1cm4gcHJvcGVydHlJc09uT2JqZWN0KHRhcmdldCwga2V5KSAvLyBQcm9wZXJ0aWVzIGFyZSBzYWZlIHRvIG1lcmdlIGlmIHRoZXkgZG9uJ3QgZXhpc3QgaW4gdGhlIHRhcmdldCB5ZXQsXG5cdFx0JiYgIShPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSkgLy8gdW5zYWZlIGlmIHRoZXkgZXhpc3QgdXAgdGhlIHByb3RvdHlwZSBjaGFpbixcblx0XHRcdCYmIE9iamVjdC5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldCwga2V5KSkgLy8gYW5kIGFsc28gdW5zYWZlIGlmIHRoZXkncmUgbm9uZW51bWVyYWJsZS5cbn1cblxuZnVuY3Rpb24gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0dmFyIGRlc3RpbmF0aW9uID0ge307XG5cdGlmIChvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHRhcmdldCkpIHtcblx0XHRnZXRLZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCh0YXJnZXRba2V5XSwgb3B0aW9ucyk7XG5cdFx0fSk7XG5cdH1cblx0Z2V0S2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0aWYgKHByb3BlcnR5SXNVbnNhZmUodGFyZ2V0LCBrZXkpKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAocHJvcGVydHlJc09uT2JqZWN0KHRhcmdldCwga2V5KSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGdldE1lcmdlRnVuY3Rpb24oa2V5LCBvcHRpb25zKSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIG9wdGlvbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoc291cmNlW2tleV0sIG9wdGlvbnMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBkZXN0aW5hdGlvblxufVxuXG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdG9wdGlvbnMuYXJyYXlNZXJnZSA9IG9wdGlvbnMuYXJyYXlNZXJnZSB8fCBkZWZhdWx0QXJyYXlNZXJnZTtcblx0b3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCA9IG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QgfHwgaXNNZXJnZWFibGVPYmplY3Q7XG5cdC8vIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkIGlzIGFkZGVkIHRvIGBvcHRpb25zYCBzbyB0aGF0IGN1c3RvbSBhcnJheU1lcmdlKClcblx0Ly8gaW1wbGVtZW50YXRpb25zIGNhbiB1c2UgaXQuIFRoZSBjYWxsZXIgbWF5IG5vdCByZXBsYWNlIGl0LlxuXHRvcHRpb25zLmNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQ7XG5cblx0dmFyIHNvdXJjZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNvdXJjZSk7XG5cdHZhciB0YXJnZXRJc0FycmF5ID0gQXJyYXkuaXNBcnJheSh0YXJnZXQpO1xuXHR2YXIgc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCA9IHNvdXJjZUlzQXJyYXkgPT09IHRhcmdldElzQXJyYXk7XG5cblx0aWYgKCFzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoKSB7XG5cdFx0cmV0dXJuIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHNvdXJjZSwgb3B0aW9ucylcblx0fSBlbHNlIGlmIChzb3VyY2VJc0FycmF5KSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMuYXJyYXlNZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucylcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpXG5cdH1cbn1cblxuZGVlcG1lcmdlLmFsbCA9IGZ1bmN0aW9uIGRlZXBtZXJnZUFsbChhcnJheSwgb3B0aW9ucykge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXknKVxuXHR9XG5cblx0cmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihwcmV2LCBuZXh0KSB7XG5cdFx0cmV0dXJuIGRlZXBtZXJnZShwcmV2LCBuZXh0LCBvcHRpb25zKVxuXHR9LCB7fSlcbn07XG5cbnZhciBkZWVwbWVyZ2VfMSA9IGRlZXBtZXJnZTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWVwbWVyZ2VfMTtcbiIsImltcG9ydCB7IGVzY2FwZSB9IGZyb20gJ2h0bWwtZXNjYXBlcic7XG5pbXBvcnQgbnVtT25seSBmcm9tICdudW0tb25seSc7XG5pbXBvcnQgbWVyZ2VEZWVwIGZyb20gJ2RlZXBtZXJnZSc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBkZWxpbWl0ZXJzOiB7XG4gICAgZG90OiBcIi5cIixcbiAgICBzbGFzaDogXCIvXCIsXG4gICAgZGFzaDogXCItXCJcbiAgfSxcbiAgaGlkZGVuUmFuZ2U6IHtcbiAgICBzdGFydDogNSxcbiAgICBlbmQ6IDEzXG4gIH0sXG4gIG9uRmFpbDogKHZhbHVlKSA9PiB2YWx1ZSxcbiAgaGlkZGVuS2V5OiBcIipcIixcbiAgaGlkZGVuOiBmYWxzZSxcbiAgZXNjYXBlOiBmYWxzZVxufTtcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhjdXN0b21PcHRpb25zID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG1lcmdlRGVlcChcbiAgICBkZWZhdWx0T3B0aW9ucyxcbiAgICBjdXN0b21PcHRpb25zXG4gICk7XG4gIGlmIChvcHRpb25zLmhpZGRlbikge1xuICAgIGlmIChpc05hTihvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0KSB8fCBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0IDwgMCB8fCBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID4gMTMpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBcImhpZGRlblJhbmdlLnN0YXJ0XCIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEzLicpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4ob3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQpIHx8IG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kIDwgMCB8fCBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA+IDEzKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gXCJoaWRkZW5SYW5nZS5lbmRcIiBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTMuJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID4gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQpIHtcbiAgICAgIGNvbnN0IGF1eCA9IG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID0gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA9IGF1eDtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm9uRmFpbCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG9wdGlvbiBcIm9uRmFpbFwiIG11c3QgYmUgYSBjYWxsYmFjayBmdW5jdGlvbi4nKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gY25wakZtdChjbnBqU3RyaW5nLCBvcHRpb25zKSB7XG4gIGNvbnN0IENOUEpfTEVOR1RIID0gMTQ7XG4gIGNvbnN0IGNucGpBcnJheSA9IG51bU9ubHkoY25walN0cmluZykuc3BsaXQoXCJcIik7XG4gIGNvbnN0IGN1c3RvbU9wdGlvbnMgPSBtZXJnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGlmIChjbnBqQXJyYXkubGVuZ3RoICE9PSBDTlBKX0xFTkdUSCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBQYXJhbWV0ZXIgXCIke2NucGpTdHJpbmd9XCIgZG9lcyBub3QgY29udGFpbiAke0NOUEpfTEVOR1RIfSBkaWdpdHMuYCk7XG4gICAgcmV0dXJuIGN1c3RvbU9wdGlvbnMub25GYWlsKGNucGpTdHJpbmcsIGVycm9yKTtcbiAgfVxuICBpZiAoY3VzdG9tT3B0aW9ucy5oaWRkZW4pIHtcbiAgICBmb3IgKGxldCBpID0gY3VzdG9tT3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydDsgaSA8PSBjdXN0b21PcHRpb25zLmhpZGRlblJhbmdlLmVuZDsgaSsrKSB7XG4gICAgICBjbnBqQXJyYXlbaV0gPSBjdXN0b21PcHRpb25zLmhpZGRlbktleTtcbiAgICB9XG4gIH1cbiAgY25wakFycmF5LnNwbGljZSgxMiwgMCwgY3VzdG9tT3B0aW9ucy5kZWxpbWl0ZXJzLmRhc2gpO1xuICBjbnBqQXJyYXkuc3BsaWNlKDgsIDAsIGN1c3RvbU9wdGlvbnMuZGVsaW1pdGVycy5zbGFzaCk7XG4gIGNucGpBcnJheS5zcGxpY2UoNSwgMCwgY3VzdG9tT3B0aW9ucy5kZWxpbWl0ZXJzLmRvdCk7XG4gIGNucGpBcnJheS5zcGxpY2UoMiwgMCwgY3VzdG9tT3B0aW9ucy5kZWxpbWl0ZXJzLmRvdCk7XG4gIGNvbnN0IGNucGpQcmV0dHkgPSBjbnBqQXJyYXkuam9pbihcIlwiKTtcbiAgaWYgKGN1c3RvbU9wdGlvbnMuZXNjYXBlKSB7XG4gICAgcmV0dXJuIGVzY2FwZShjbnBqUHJldHR5KTtcbiAgfVxuICByZXR1cm4gY25walByZXR0eTtcbn1cblxuZXhwb3J0IHsgY25wakZtdCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1Yldweklpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZiV1Z5WjJVdGIzQjBhVzl1Y3k1MGN5SXNJaTR1TDNOeVl5OWpibkJxTFdadGRDNTBjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnYldWeVoyVkVaV1Z3SUdaeWIyMGdKMlJsWlhCdFpYSm5aU2M3WEc1Y2JuUjVjR1VnUkdWbGNGQmhjblJwWVd3OFZENGdQU0I3WEc0Z0lGdFFJR2x1SUd0bGVXOW1JRlJkUHpvZ1JHVmxjRkJoY25ScFlXdzhWRnRRWFQ0N1hHNTlPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVGamRIVmhiRU51Y0dwR2IzSnRZWFIwYVc1blQzQjBhVzl1Y3p4UGJrVnlja1poYkd4aVlXTnJQaUI3WEc0Z0lHUmxiR2x0YVhSbGNuTTZJSHRjYmlBZ0lDQmtZWE5vT2lCemRISnBibWM3WEc0Z0lDQWdaRzkwT2lCemRISnBibWM3WEc0Z0lDQWdjMnhoYzJnNklITjBjbWx1Wnp0Y2JpQWdmVHRjYmlBZ1pYTmpZWEJsT2lCaWIyOXNaV0Z1TzF4dUlDQm9hV1JrWlc0NklHSnZiMnhsWVc0N1hHNGdJR2hwWkdSbGJrdGxlVG9nYzNSeWFXNW5PMXh1SUNCb2FXUmtaVzVTWVc1blpUb2dlMXh1SUNBZ0lHVnVaRG9nYm5WdFltVnlPMXh1SUNBZ0lITjBZWEowT2lCdWRXMWlaWEk3WEc0Z0lIMDdYRzRnSUc5dVJtRnBiRG9nS0haaGJIVmxPaUJ6ZEhKcGJtY3NJR1Z5Y205eU9pQkZjbkp2Y2lrZ1BUNGdUMjVGY25KR1lXeHNZbUZqYXp0Y2JuMWNibHh1Wlhod2IzSjBJSFI1Y0dVZ1EyNXdha1p2Y20xaGRIUnBibWRQY0hScGIyNXpQRTl1UlhKeVJtRnNiR0poWTJzK0lEMGdSR1ZsY0ZCaGNuUnBZV3c4WEc0Z0lFRmpkSFZoYkVOdWNHcEdiM0p0WVhSMGFXNW5UM0IwYVc5dWN6eFBia1Z5Y2taaGJHeGlZV05yUGx4dVBqdGNibHh1WTI5dWMzUWdaR1ZtWVhWc2RFOXdkR2x2Ym5NNklFRmpkSFZoYkVOdWNHcEdiM0p0WVhSMGFXNW5UM0IwYVc5dWN6eHpkSEpwYm1jK0lEMGdlMXh1SUNCa1pXeHBiV2wwWlhKek9pQjdYRzRnSUNBZ1pHOTBPaUFuTGljc1hHNGdJQ0FnYzJ4aGMyZzZJQ2N2Snl4Y2JpQWdJQ0JrWVhOb09pQW5MU2NzWEc0Z0lIMHNYRzRnSUdocFpHUmxibEpoYm1kbE9pQjdYRzRnSUNBZ2MzUmhjblE2SURVc1hHNGdJQ0FnWlc1a09pQXhNeXhjYmlBZ2ZTeGNiaUFnYjI1R1lXbHNPaUFvZG1Gc2RXVXBJRDArSUhaaGJIVmxMRnh1SUNCb2FXUmtaVzVMWlhrNklDY3FKeXhjYmlBZ2FHbGtaR1Z1T2lCbVlXeHpaU3hjYmlBZ1pYTmpZWEJsT2lCbVlXeHpaU3hjYm4wN1hHNWNiaThxS2x4dUlDb2dUV1Z5WjJVZ1kzVnpkRzl0SUc5d2RHbHZibk1nZEc4Z2RHaGxJR1JsWm1GMWJIUWdiMjVsY3k1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYldWeVoyVlBjSFJwYjI1elBFOXVSWEp5Um1Gc2JHSmhZMnMrS0Z4dUlDQmpkWE4wYjIxUGNIUnBiMjV6T2lCRGJuQnFSbTl5YldGMGRHbHVaMDl3ZEdsdmJuTThUMjVGY25KR1lXeHNZbUZqYXo0Z1BTQjdmU3hjYmlrNklFRmpkSFZoYkVOdWNHcEdiM0p0WVhSMGFXNW5UM0IwYVc5dWN6eFBia1Z5Y2taaGJHeGlZV05yUGlCN1hHNGdJR052Ym5OMElHOXdkR2x2Ym5NZ1BTQnRaWEpuWlVSbFpYQW9YRzRnSUNBZ1pHVm1ZWFZzZEU5d2RHbHZibk1zWEc0Z0lDQWdZM1Z6ZEc5dFQzQjBhVzl1Y3l4Y2JpQWdLU0JoY3lCQlkzUjFZV3hEYm5CcVJtOXliV0YwZEdsdVowOXdkR2x2Ym5NOFQyNUZjbkpHWVd4c1ltRmphejQ3WEc1Y2JpQWdhV1lnS0c5d2RHbHZibk11YUdsa1pHVnVLU0I3WEc0Z0lDQWdhV1lnS0Z4dUlDQWdJQ0FnYVhOT1lVNG9iM0IwYVc5dWN5NW9hV1JrWlc1U1lXNW5aUzV6ZEdGeWRDa2dmSHhjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1YzNSaGNuUWdQQ0F3SUh4OFhHNGdJQ0FnSUNCdmNIUnBiMjV6TG1ocFpHUmxibEpoYm1kbExuTjBZWEowSUQ0Z01UTmNiaUFnSUNBcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMDl3ZEdsdmJpQmNJbWhwWkdSbGJsSmhibWRsTG5OMFlYSjBYQ0lnYlhWemRDQmlaU0JoSUc1MWJXSmxjaUJpWlhSM1pXVnVJREFnWVc1a0lERXpMaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoY2JpQWdJQ0FnSUdselRtRk9LRzl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1Wlc1a0tTQjhmRnh1SUNBZ0lDQWdiM0IwYVc5dWN5NW9hV1JrWlc1U1lXNW5aUzVsYm1RZ1BDQXdJSHg4WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbWhwWkdSbGJsSmhibWRsTG1WdVpDQStJREV6WEc0Z0lDQWdLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkUGNIUnBiMjRnWENKb2FXUmtaVzVTWVc1blpTNWxibVJjSWlCdGRYTjBJR0psSUdFZ2JuVnRZbVZ5SUdKbGRIZGxaVzRnTUNCaGJtUWdNVE11SnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWFHbGtaR1Z1VW1GdVoyVXVjM1JoY25RZ1BpQnZjSFJwYjI1ekxtaHBaR1JsYmxKaGJtZGxMbVZ1WkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWVhWNElEMGdiM0IwYVc5dWN5NW9hV1JrWlc1U1lXNW5aUzV6ZEdGeWREdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWFHbGtaR1Z1VW1GdVoyVXVjM1JoY25RZ1BTQnZjSFJwYjI1ekxtaHBaR1JsYmxKaGJtZGxMbVZ1WkR0Y2JpQWdJQ0FnSUc5d2RHbHZibk11YUdsa1pHVnVVbUZ1WjJVdVpXNWtJRDBnWVhWNE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHbG1JQ2gwZVhCbGIyWWdiM0IwYVc5dWN5NXZia1poYVd3Z0lUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkVWFHVWdiM0IwYVc5dUlGd2liMjVHWVdsc1hDSWdiWFZ6ZENCaVpTQmhJR05oYkd4aVlXTnJJR1oxYm1OMGFXOXVMaWNwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUc5d2RHbHZibk03WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHMWxjbWRsVDNCMGFXOXVjenRjYmlJc0ltbHRjRzl5ZENCN0lHVnpZMkZ3WlNCaGN5QmxjMk5oY0dWSVZFMU1JSDBnWm5KdmJTQW5hSFJ0YkMxbGMyTmhjR1Z5Snp0Y2JtbHRjRzl5ZENCdWRXMVBibXg1SUdaeWIyMGdKMjUxYlMxdmJteDVKenRjYmx4dWFXMXdiM0owSUcxbGNtZGxUM0IwYVc5dWN5Qm1jbTl0SUNjdUwyMWxjbWRsTFc5d2RHbHZibk1uTzF4dWFXMXdiM0owSUhSNWNHVWdleUJEYm5CcVJtOXliV0YwZEdsdVowOXdkR2x2Ym5NZ2ZTQm1jbTl0SUNjdUwyMWxjbWRsTFc5d2RHbHZibk1uTzF4dVhHNHZLaXBjYmlBcUlFWnZjbTFoZENCaElHZHBkbVZ1SUVOT1VFb2dZMmhoY2lCelpYRjFaVzVqWlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTI1d2FrWnRkRHhQYmtWeWNrWmhiR3hpWVdOcklEMGdjM1J5YVc1blBpaGNiaUFnWTI1d2FsTjBjbWx1WnpvZ2MzUnlhVzVuTEZ4dUlDQnZjSFJwYjI1elB6b2dRMjV3YWtadmNtMWhkSFJwYm1kUGNIUnBiMjV6UEU5dVJYSnlSbUZzYkdKaFkycytMRnh1S1RvZ2MzUnlhVzVuSUh0Y2JpQWdZMjl1YzNRZ1EwNVFTbDlNUlU1SFZFZ2dQU0F4TkR0Y2JpQWdZMjl1YzNRZ1kyNXdha0Z5Y21GNUlEMGdiblZ0VDI1c2VTaGpibkJxVTNSeWFXNW5LUzV6Y0d4cGRDZ25KeWs3WEc0Z0lHTnZibk4wSUdOMWMzUnZiVTl3ZEdsdmJuTWdQU0J0WlhKblpVOXdkR2x2Ym5Nb2IzQjBhVzl1Y3lrN1hHNWNiaUFnYVdZZ0tHTnVjR3BCY25KaGVTNXNaVzVuZEdnZ0lUMDlJRU5PVUVwZlRFVk9SMVJJS1NCN1hHNGdJQ0FnWTI5dWMzUWdaWEp5YjNJZ1BTQnVaWGNnUlhKeWIzSW9ZRkJoY21GdFpYUmxjaUJjSWlSN1kyNXdhbE4wY21sdVozMWNJaUJrYjJWeklHNXZkQ0JqYjI1MFlXbHVJQ1I3UTA1UVNsOU1SVTVIVkVoOUlHUnBaMmwwY3k1Z0tUdGNibHh1SUNBZ0lISmxkSFZ5YmlCamRYTjBiMjFQY0hScGIyNXpMbTl1Um1GcGJDaGpibkJxVTNSeWFXNW5MQ0JsY25KdmNpa2dZWE1nYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnYVdZZ0tHTjFjM1J2YlU5d2RHbHZibk11YUdsa1pHVnVLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SUdOMWMzUnZiVTl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1YzNSaGNuUTdJR2tnUEQwZ1kzVnpkRzl0VDNCMGFXOXVjeTVvYVdSa1pXNVNZVzVuWlM1bGJtUTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyNXdha0Z5Y21GNVcybGRJRDBnWTNWemRHOXRUM0IwYVc5dWN5NW9hV1JrWlc1TFpYazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdZMjV3YWtGeWNtRjVMbk53YkdsalpTZ3hNaXdnTUN3Z1kzVnpkRzl0VDNCMGFXOXVjeTVrWld4cGJXbDBaWEp6TG1SaGMyZ3BPMXh1SUNCamJuQnFRWEp5WVhrdWMzQnNhV05sS0Rnc0lEQXNJR04xYzNSdmJVOXdkR2x2Ym5NdVpHVnNhVzFwZEdWeWN5NXpiR0Z6YUNrN1hHNGdJR051Y0dwQmNuSmhlUzV6Y0d4cFkyVW9OU3dnTUN3Z1kzVnpkRzl0VDNCMGFXOXVjeTVrWld4cGJXbDBaWEp6TG1SdmRDazdYRzRnSUdOdWNHcEJjbkpoZVM1emNHeHBZMlVvTWl3Z01Dd2dZM1Z6ZEc5dFQzQjBhVzl1Y3k1a1pXeHBiV2wwWlhKekxtUnZkQ2s3WEc0Z0lHTnZibk4wSUdOdWNHcFFjbVYwZEhrZ1BTQmpibkJxUVhKeVlYa3VhbTlwYmlnbkp5azdYRzVjYmlBZ2FXWWdLR04xYzNSdmJVOXdkR2x2Ym5NdVpYTmpZWEJsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1Z6WTJGd1pVaFVUVXdvWTI1d2FsQnlaWFIwZVNrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z1kyNXdhbEJ5WlhSMGVUdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTI1d2FrWnRkRHRjYmlKZExDSnVZVzFsY3lJNld5SmxjMk5oY0dWSVZFMU1JbDBzSW0xaGNIQnBibWR6SWpvaU96czdPMEZCTUVKQkxFMUJRVTBzWTBGQlFTeEhRVUZ6UkR0QlFVRkJMRVZCUXpGRUxGVkJRVUVzUlVGQldUdEJRVUZCTEVsQlExWXNSMEZCUVN4RlFVRkxMRWRCUVVFN1FVRkJRU3hKUVVOTUxFdEJRVUVzUlVGQlR5eEhRVUZCTzBGQlFVRXNTVUZEVUN4SlFVRkJMRVZCUVUwN1FVRkJRU3hIUVVOU08wRkJRVUVzUlVGRFFTeFhRVUZCTEVWQlFXRTdRVUZCUVN4SlFVTllMRXRCUVVFc1JVRkJUeXhEUVVGQk8wRkJRVUVzU1VGRFVDeEhRVUZCTEVWQlFVczdRVUZCUVN4SFFVTlFPMEZCUVVFc1JVRkRRU3hOUVVGQkxFVkJRVkVzUTBGQlF5eExRVUZCTEV0QlFWVXNTMEZCUVR0QlFVRkJMRVZCUTI1Q0xGTkJRVUVzUlVGQlZ5eEhRVUZCTzBGQlFVRXNSVUZEV0N4TlFVRkJMRVZCUVZFc1MwRkJRVHRCUVVGQkxFVkJRMUlzVFVGQlFTeEZRVUZSTzBGQlExWXNRMEZCUVR0QlFVdEJMRk5CUVZNc1dVRkJRU3hEUVVOUUxHRkJRVUVzUjBGQmMwUXNSVUZCUXl4RlFVTllPMEZCUXpWRExFVkJRVUVzVFVGQlRTeFBRVUZCTEVkQlFWVXNVMEZCUVR0QlFVRkJMRWxCUTJRc1kwRkJRVHRCUVVGQkxFbEJRMEU3UVVGQlFTeEhRVU5HTzBGQlJVRXNSVUZCUVN4SlFVRkpMRkZCUVZFc1RVRkJRU3hGUVVGUk8wRkJRMnhDTEVsQlFVRXNTVUZEUlN4TFFVRkJMRU5CUVUwc1QwRkJRU3hEUVVGUkxGZEJRVUVzUTBGQldTeExRVUZMTEVOQlFVRXNTVUZETDBJc1QwRkJRU3hEUVVGUkxGZEJRVUVzUTBGQldTeExRVUZCTEVkQlFWRXNRMEZCUVN4SlFVTTFRaXhQUVVGQkxFTkJRVkVzVjBGQlFTeERRVUZaTEV0QlFVRXNSMEZCVVN4RlFVRkJMRVZCUXpWQ08wRkJRMEVzVFVGQlFTeE5RVUZOTEVsQlFVa3NWVUZCVlN3clJFRkJLMFFzUTBGQlFUdEJRVUZCTEVsQlEzSkdPMEZCUlVFc1NVRkJRU3hKUVVORkxFdEJRVUVzUTBGQlRTeFBRVUZCTEVOQlFWRXNWMEZCUVN4RFFVRlpMRWRCUVVjc1EwRkJRU3hKUVVNM1FpeFBRVUZCTEVOQlFWRXNWMEZCUVN4RFFVRlpMRWRCUVVFc1IwRkJUU3hEUVVGQkxFbEJRekZDTEU5QlFVRXNRMEZCVVN4WFFVRkJMRU5CUVZrc1IwRkJRU3hIUVVGTkxFVkJRVUVzUlVGRE1VSTdRVUZEUVN4TlFVRkJMRTFCUVUwc1NVRkJTU3hWUVVGVkxEWkVRVUUyUkN4RFFVRkJPMEZCUVVFc1NVRkRia1k3UVVGRlFTeEpRVUZCTEVsQlFVa3NUMEZCUVN4RFFVRlJMRmRCUVVFc1EwRkJXU3hMUVVGQkxFZEJRVkVzVDBGQlFTeERRVUZSTEZsQlFWa3NSMEZCUVN4RlFVRkxPMEZCUTNaRUxFMUJRVUVzVFVGQlRTeEhRVUZCTEVkQlFVMHNVVUZCVVN4WFFVRkJMRU5CUVZrc1MwRkJRVHRCUVVOb1F5eE5RVUZCTEU5QlFVRXNRMEZCVVN4WFFVRkJMRU5CUVZrc1MwRkJRU3hIUVVGUkxFOUJRVUVzUTBGQlVTeFhRVUZCTEVOQlFWa3NSMEZCUVR0QlFVTm9SQ3hOUVVGQkxFOUJRVUVzUTBGQlVTeFpRVUZaTEVkQlFVRXNSMEZCVFN4SFFVRkJPMEZCUVVFc1NVRkROVUk3UVVGQlFTeEZRVU5HTzBGQlJVRXNSVUZCUVN4SlFVRkpMRTlCUVU4c1QwRkJRU3hEUVVGUkxFMUJRVUVzUzBGQlZ5eFZRVUZCTEVWQlFWazdRVUZEZUVNc1NVRkJRU3hOUVVGTkxFbEJRVWtzVlVGQlZTeHJSRUZCYTBRc1EwRkJRVHRCUVVGQkxFVkJRM2hGTzBGQlJVRXNSVUZCUVN4UFFVRlBMRTlCUVVFN1FVRkRWRHM3UVVONlJVRXNVMEZCVXl4UFFVRkJMRU5CUTFBc1dVRkRRU3hQUVVGQkxFVkJRMUU3UVVGRFVpeEZRVUZCTEUxQlFVMHNWMEZCUVN4SFFVRmpMRVZCUVVFN1FVRkRjRUlzUlVGQlFTeE5RVUZOTEZOQlFVRXNSMEZCV1N4UFFVRkJMRU5CUVZFc1ZVRkJWU3hEUVVGQkxFTkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVRTdRVUZET1VNc1JVRkJRU3hOUVVGTkxHRkJRVUVzUjBGQlowSXNZVUZCWVN4UFFVRlBMRU5CUVVFN1FVRkZNVU1zUlVGQlFTeEpRVUZKTEZOQlFVRXNRMEZCVlN4WFFVRlhMRmRCUVVFc1JVRkJZVHRCUVVOd1F5eEpRVUZCTEUxQlFVMHNVVUZCVVN4SlFVRkpMRXRCUVVFc1EwRkJUU3hqUVVGakxGVkJRVlVzUTBGQlFTeHRRa0ZCUVN4RlFVRnpRaXhYUVVGWExFTkJRVUVzVVVGQlFTeERRVUZWTEVOQlFVRTdRVUZGTTBZc1NVRkJRU3hQUVVGUExHRkJRVUVzUTBGQll5eE5RVUZCTEVOQlFVOHNWVUZCUVN4RlFVRlpMRXRCUVVzc1EwRkJRVHRCUVVGQkxFVkJReTlETzBGQlJVRXNSVUZCUVN4SlFVRkpMR05CUVdNc1RVRkJRU3hGUVVGUk8wRkJRM2hDTEVsQlFVRXNTMEZCUVN4SlFVRlRMRU5CUVVFc1IwRkJTU3hqUVVGakxGZEJRVUVzUTBGQldTeExRVUZCTEVWQlFVOHNTMEZCU3l4aFFVRkJMRU5CUVdNc1YwRkJRU3hEUVVGWkxFdEJRVXNzUTBGQlFTeEZRVUZCTEVWQlFVczdRVUZEY2tZc1RVRkJRU3hUUVVGQkxFTkJRVlVzUTBGQlF5eEpRVUZKTEdGQlFVRXNRMEZCWXl4VFFVRkJPMEZCUVVFc1NVRkRMMEk3UVVGQlFTeEZRVU5HTzBGQlJVRXNSVUZCUVN4VFFVRkJMRU5CUVZVc1RVRkJRU3hEUVVGUExFVkJRVUVzUlVGQlNTeERRVUZCTEVWQlFVY3NZVUZCUVN4RFFVRmpMRmRCUVZjc1NVRkJTU3hEUVVGQk8wRkJRM0pFTEVWQlFVRXNVMEZCUVN4RFFVRlZMRTFCUVVFc1EwRkJUeXhEUVVGQkxFVkJRVWNzUTBGQlFTeEZRVUZITEdGQlFVRXNRMEZCWXl4WFFVRlhMRXRCUVVzc1EwRkJRVHRCUVVOeVJDeEZRVUZCTEZOQlFVRXNRMEZCVlN4TlFVRkJMRU5CUVU4c1EwRkJRU3hGUVVGSExFTkJRVUVzUlVGQlJ5eGhRVUZCTEVOQlFXTXNWMEZCVnl4SFFVRkhMRU5CUVVFN1FVRkRia1FzUlVGQlFTeFRRVUZCTEVOQlFWVXNUVUZCUVN4RFFVRlBMRU5CUVVFc1JVRkJSeXhEUVVGQkxFVkJRVWNzWVVGQlFTeERRVUZqTEZkQlFWY3NSMEZCUnl4RFFVRkJPMEZCUTI1RUxFVkJRVUVzVFVGQlRTeFZRVUZCTEVkQlFXRXNVMEZCUVN4RFFVRlZMRWxCUVVFc1EwRkJTeXhGUVVGRkxFTkJRVUU3UVVGRmNFTXNSVUZCUVN4SlFVRkpMR05CUVdNc1RVRkJRU3hGUVVGUk8wRkJRM2hDTEVsQlFVRXNUMEZCVDBFc1QwRkJWeXhWUVVGVkxFTkJRVUU3UVVGQlFTeEZRVU01UWp0QlFVVkJMRVZCUVVFc1QwRkJUeXhWUVVGQk8wRkJRMVE3T3pzN0luMD1cbiIsImltcG9ydCBjbnBqRm10IGZyb20gJ0BsYWN1c3NvZnQvY25wai1mbXQnO1xuaW1wb3J0IG51bU9ubHkgZnJvbSAnbnVtLW9ubHknO1xuaW1wb3J0IG1lcmdlRGVlcCBmcm9tICdkZWVwbWVyZ2UnO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVEaWdpdChjbnBqU2VxdWVuY2UpIHtcbiAgbGV0IGluZGV4ID0gMjtcbiAgY29uc3Qgc3VtID0gWy4uLmNucGpTZXF1ZW5jZV0ucmVkdWNlUmlnaHQoKHByZXZpb3VzUmVzdWx0LCBudW1iZXIpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBwcmV2aW91c1Jlc3VsdCArIG51bWJlciAqIGluZGV4O1xuICAgIGluZGV4ID0gaW5kZXggPT09IDkgPyAyIDogaW5kZXggKyAxO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIDApO1xuICBjb25zdCByZW1haW5kZXIgPSBzdW0gJSAxMTtcbiAgcmV0dXJuIHJlbWFpbmRlciA8IDIgPyAwIDogMTEgLSByZW1haW5kZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBmb3JtYXQ6IGZhbHNlLFxuICBwcmVmaXg6IFwiXCJcbn07XG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMoY3VzdG9tT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBtZXJnZURlZXAoZGVmYXVsdE9wdGlvbnMsIGN1c3RvbU9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJHZW5lcmF0b3IobGVuZ3RoKSB7XG4gIGNvbnN0IG51bWVyaWNTZXF1ZW5jZSA9IFtdO1xuICB3aGlsZSAobnVtZXJpY1NlcXVlbmNlLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiAxMDtcbiAgICBjb25zdCBpbnRlZ2VyID0gTWF0aC5mbG9vcihyYW5kb20pO1xuICAgIG51bWVyaWNTZXF1ZW5jZS5wdXNoKGludGVnZXIpO1xuICB9XG4gIHJldHVybiBudW1lcmljU2VxdWVuY2U7XG59XG5cbmZ1bmN0aW9uIGNucGpHZW4ob3B0aW9ucykge1xuICBjb25zdCB1c2VyT3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgYmFzZVNlcXVlbmNlID0gbnVtT25seSh1c2VyT3B0aW9ucy5wcmVmaXgpO1xuICBjb25zdCBwcmVmaXhMZW5ndGggPSBiYXNlU2VxdWVuY2UubGVuZ3RoO1xuICBpZiAocHJlZml4TGVuZ3RoIDwgMCB8fCBwcmVmaXhMZW5ndGggPiAxMikge1xuICAgIHRocm93IG5ldyBFcnJvcignT3B0aW9uIFwicHJlZml4XCIgbXVzdCBiZSBhIHN0cmluZyBjb250YWluaW5nIGJldHdlZW4gMSBhbmQgMTIgZGlnaXRzLicpO1xuICB9XG4gIGlmIChwcmVmaXhMZW5ndGggPiA4ICYmIGJhc2VTZXF1ZW5jZS5zbGljZSg4KSA9PT0gXCIwMDAwXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBicmFuY2ggSUQgKGNoYXJhY3RlcnMgOCB0byAxMSkgY2Fubm90IGJlIFwiMDAwMFwiLicpO1xuICB9XG4gIGNvbnN0IGJyYW5jaElEID0gWzAsIDAsIDAsIE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOSldO1xuICBjb25zdCBjbnBqU2VxdWVuY2UgPSBiYXNlU2VxdWVuY2Uuc3BsaXQoXCJcIikubWFwKE51bWJlcikuY29uY2F0KG51bWJlckdlbmVyYXRvcig4IC0gcHJlZml4TGVuZ3RoKSkuY29uY2F0KGJyYW5jaElELnNsaWNlKDAsIDEyIC0gcHJlZml4TGVuZ3RoKSk7XG4gIGNucGpTZXF1ZW5jZS5wdXNoKGNhbGN1bGF0ZURpZ2l0KGNucGpTZXF1ZW5jZSkpO1xuICBjbnBqU2VxdWVuY2UucHVzaChjYWxjdWxhdGVEaWdpdChjbnBqU2VxdWVuY2UpKTtcbiAgcmV0dXJuIHVzZXJPcHRpb25zLmZvcm1hdCA/IGNucGpGbXQoY25walNlcXVlbmNlLmpvaW4oXCJcIikpIDogY25walNlcXVlbmNlLmpvaW4oXCJcIik7XG59XG5cbmV4cG9ydCB7IGNucGpHZW4gYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWJXcHpJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12WTJGc1kzVnNZWFJsTFdScFoybDBMblJ6SWl3aUxpNHZjM0pqTDIxbGNtZGxMVzl3ZEdsdmJuTXVkSE1pTENJdUxpOXpjbU12Ym5WdFltVnlMV2RsYm1WeVlYUnZjaTUwY3lJc0lpNHVMM055WXk5amJuQnFMV2RsYmk1MGN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU5oYkdOMWJHRjBaU0IwYUdVZ2RtVnlhV1pwWlhJZ1pHbG5hWFFnWW1GelpXUWdiMjRnUTA1UVNpQmlZWE5sSUc1MWJXVnlhV01nYzJWeGRXVnVZMlV1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR05oYkdOMWJHRjBaVVJwWjJsMEtHTnVjR3BUWlhGMVpXNWpaVG9nYm5WdFltVnlXMTBwT2lCdWRXMWlaWElnZTF4dUlDQnNaWFFnYVc1a1pYZ2dQU0F5TzF4dUlDQmpiMjV6ZENCemRXMGdQU0JiTGk0dVkyNXdhbE5sY1hWbGJtTmxYUzV5WldSMVkyVlNhV2RvZENnb2NISmxkbWx2ZFhOU1pYTjFiSFFzSUc1MWJXSmxjaWtnUFQ0Z2UxeHVJQ0FnSUdOdmJuTjBJSEpsYzNWc2RDQTlJSEJ5WlhacGIzVnpVbVZ6ZFd4MElDc2diblZ0WW1WeUlDb2dhVzVrWlhnN1hHNGdJQ0FnYVc1a1pYZ2dQU0JwYm1SbGVDQTlQVDBnT1NBL0lESWdPaUJwYm1SbGVDQXJJREU3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVJQ0I5TENBd0tUdGNibHh1SUNCamIyNXpkQ0J5WlcxaGFXNWtaWElnUFNCemRXMGdKU0F4TVR0Y2JseHVJQ0J5WlhSMWNtNGdjbVZ0WVdsdVpHVnlJRHdnTWlBL0lEQWdPaUF4TVNBdElISmxiV0ZwYm1SbGNqdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJGc1kzVnNZWFJsUkdsbmFYUTdYRzRpTENKcGJYQnZjblFnYldWeVoyVkVaV1Z3SUdaeWIyMGdKMlJsWlhCdFpYSm5aU2M3WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1FXTjBkV0ZzUTI1d2FrZGxibVZ5WVhSdmNrOXdkR2x2Ym5NZ2UxeHVJQ0JtYjNKdFlYUTZJR0p2YjJ4bFlXNDdYRzRnSUhCeVpXWnBlRG9nYzNSeWFXNW5PMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JEYm5CcVIyVnVaWEpoZEc5eVQzQjBhVzl1Y3lBOUlGQmhjblJwWVd3OFFXTjBkV0ZzUTI1d2FrZGxibVZ5WVhSdmNrOXdkR2x2Ym5NK08xeHVYRzVqYjI1emRDQmtaV1poZFd4MFQzQjBhVzl1Y3lBOUlIdGNiaUFnWm05eWJXRjBPaUJtWVd4elpTeGNiaUFnY0hKbFptbDRPaUFuSnl4Y2JuMDdYRzVjYmk4cUtseHVJQ29nVFdWeVoyVWdZM1Z6ZEc5dElHOXdkR2x2Ym5NZ2RHOGdkR2hsSUdSbFptRjFiSFFnYjI1bGN5NWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2JXVnlaMlZQY0hScGIyNXpLR04xYzNSdmJVOXdkR2x2Ym5NNklFTnVjR3BIWlc1bGNtRjBiM0pQY0hScGIyNXpJRDBnZTMwcE9pQkJZM1IxWVd4RGJuQnFSMlZ1WlhKaGRHOXlUM0IwYVc5dWN5QjdYRzRnSUhKbGRIVnliaUJ0WlhKblpVUmxaWEFvWkdWbVlYVnNkRTl3ZEdsdmJuTXNJR04xYzNSdmJVOXdkR2x2Ym5NcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0J0WlhKblpVOXdkR2x2Ym5NN1hHNGlMQ0l2S2lwY2JpQXFJRWRsYm1WeVlYUmxJR0Z1SUdGeWNtRjVJRzltSUhKaGJtUnZiU0J6ZEhKcGJtZHBabWxsWkNCdWRXMWlaWEp6SUdKbGRIZGxaVzRnTUNCaGJtUWdJRGt1WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzUxYldKbGNrZGxibVZ5WVhSdmNpaHNaVzVuZEdnNklHNTFiV0psY2lrNklHNTFiV0psY2x0ZElIdGNiaUFnWTI5dWMzUWdiblZ0WlhKcFkxTmxjWFZsYm1ObE9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dVhHNGdJSGRvYVd4bElDaHVkVzFsY21salUyVnhkV1Z1WTJVdWJHVnVaM1JvSUR3Z2JHVnVaM1JvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjbUZ1Wkc5dElEMGdUV0YwYUM1eVlXNWtiMjBvS1NBcUlERXdPMXh1SUNBZ0lHTnZibk4wSUdsdWRHVm5aWElnUFNCTllYUm9MbVpzYjI5eUtISmhibVJ2YlNrN1hHNWNiaUFnSUNCdWRXMWxjbWxqVTJWeGRXVnVZMlV1Y0hWemFDaHBiblJsWjJWeUtUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnVkVzFsY21salUyVnhkV1Z1WTJVN1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRzUxYldKbGNrZGxibVZ5WVhSdmNqdGNiaUlzSW1sdGNHOXlkQ0JqYm5CcVJtMTBJR1p5YjIwZ0owQnNZV04xYzNOdlpuUXZZMjV3YWkxbWJYUW5PMXh1YVcxd2IzSjBJRzUxYlU5dWJIa2dabkp2YlNBbmJuVnRMVzl1Ykhrbk8xeHVYRzVwYlhCdmNuUWdZMkZzWTNWc1lYUmxSR2xuYVhRZ1puSnZiU0FuTGk5allXeGpkV3hoZEdVdFpHbG5hWFFuTzF4dWFXMXdiM0owSUcxbGNtZGxUM0IwYVc5dWN5Qm1jbTl0SUNjdUwyMWxjbWRsTFc5d2RHbHZibk1uTzF4dWFXMXdiM0owSUhSNWNHVWdleUJEYm5CcVIyVnVaWEpoZEc5eVQzQjBhVzl1Y3lCOUlHWnliMjBnSnk0dmJXVnlaMlV0YjNCMGFXOXVjeWM3WEc1cGJYQnZjblFnYm5WdFltVnlSMlZ1WlhKaGRHOXlJR1p5YjIwZ0p5NHZiblZ0WW1WeUxXZGxibVZ5WVhSdmNpYzdYRzVjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1VnWVNCMllXeHBaQ0JEVGxCS0lDaENjbUY2YVd4cFlXNGdZMjl0Y0dGdWVTQkpSQ2tnYm5WdFpYSnBZeUJ6WlhGMVpXNWpaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdZMjV3YWtkbGJpaHZjSFJwYjI1elB6b2dRMjV3YWtkbGJtVnlZWFJ2Y2s5d2RHbHZibk1wT2lCemRISnBibWNnZTF4dUlDQmpiMjV6ZENCMWMyVnlUM0IwYVc5dWN5QTlJRzFsY21kbFQzQjBhVzl1Y3lodmNIUnBiMjV6S1R0Y2JpQWdZMjl1YzNRZ1ltRnpaVk5sY1hWbGJtTmxJRDBnYm5WdFQyNXNlU2gxYzJWeVQzQjBhVzl1Y3k1d2NtVm1hWGdwTzF4dUlDQmpiMjV6ZENCd2NtVm1hWGhNWlc1bmRHZ2dQU0JpWVhObFUyVnhkV1Z1WTJVdWJHVnVaM1JvTzF4dVhHNGdJR2xtSUNod2NtVm1hWGhNWlc1bmRHZ2dQQ0F3SUh4OElIQnlaV1pwZUV4bGJtZDBhQ0ErSURFeUtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkUGNIUnBiMjRnWENKd2NtVm1hWGhjSWlCdGRYTjBJR0psSUdFZ2MzUnlhVzVuSUdOdmJuUmhhVzVwYm1jZ1ltVjBkMlZsYmlBeElHRnVaQ0F4TWlCa2FXZHBkSE11SnlrN1hHNGdJSDFjYmlBZ2FXWWdLSEJ5WldacGVFeGxibWQwYUNBK0lEZ2dKaVlnWW1GelpWTmxjWFZsYm1ObExuTnNhV05sS0RncElEMDlQU0FuTURBd01DY3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUm9aU0JpY21GdVkyZ2dTVVFnS0dOb1lYSmhZM1JsY25NZ09DQjBieUF4TVNrZ1kyRnVibTkwSUdKbElGd2lNREF3TUZ3aUxpY3BPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdZbkpoYm1Ob1NVUWdQU0JiTUN3Z01Dd2dNQ3dnVFdGMGFDNWpaV2xzS0UxaGRHZ3VjbUZ1Wkc5dEtDa2dLaUE1S1YwN1hHNGdJR052Ym5OMElHTnVjR3BUWlhGMVpXNWpaU0E5SUdKaGMyVlRaWEYxWlc1alpWeHVJQ0FnSUM1emNHeHBkQ2duSnlsY2JpQWdJQ0F1YldGd0tFNTFiV0psY2lsY2JpQWdJQ0F1WTI5dVkyRjBLRzUxYldKbGNrZGxibVZ5WVhSdmNpZzRJQzBnY0hKbFptbDRUR1Z1WjNSb0tTbGNiaUFnSUNBdVkyOXVZMkYwS0dKeVlXNWphRWxFTG5Oc2FXTmxLREFzSURFeUlDMGdjSEpsWm1sNFRHVnVaM1JvS1NrN1hHNWNiaUFnWTI1d2FsTmxjWFZsYm1ObExuQjFjMmdvWTJGc1kzVnNZWFJsUkdsbmFYUW9ZMjV3YWxObGNYVmxibU5sS1NrN1hHNGdJR051Y0dwVFpYRjFaVzVqWlM1d2RYTm9LR05oYkdOMWJHRjBaVVJwWjJsMEtHTnVjR3BUWlhGMVpXNWpaU2twTzF4dVhHNGdJSEpsZEhWeWJpQjFjMlZ5VDNCMGFXOXVjeTVtYjNKdFlYUWdQeUJqYm5CcVJtMTBLR051Y0dwVFpYRjFaVzVqWlM1cWIybHVLQ2NuS1NrZ09pQmpibkJxVTJWeGRXVnVZMlV1YW05cGJpZ25KeWs3WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnVjR3BIWlc0N1hHNGlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenRCUVVkQkxGTkJRVk1zWlVGQlpTeFpRVUZCTEVWQlFXZERPMEZCUTNSRUxFVkJRVUVzU1VGQlNTeExRVUZCTEVkQlFWRXNRMEZCUVR0QlFVTmFMRVZCUVVFc1RVRkJUU3hIUVVGQkxFZEJRVTBzUTBGQlF5eEhRVUZITEZsQlFWa3NSVUZCUlN4WFFVRkJMRU5CUVZrc1EwRkJReXhuUWtGQlowSXNUVUZCUVN4TFFVRlhPMEZCUTNCRkxFbEJRVUVzVFVGQlRTeE5RVUZCTEVkQlFWTXNhVUpCUVdsQ0xFMUJRVUVzUjBGQlV5eExRVUZCTzBGQlEzcERMRWxCUVVFc1MwRkJRU3hIUVVGUkxFdEJRVUVzUzBGQlZTeERRVUZCTEVkQlFVa3NRMEZCUVN4SFFVRkpMRXRCUVVFc1IwRkJVU3hEUVVGQk8wRkJSV3hETEVsQlFVRXNUMEZCVHl4TlFVRkJPMEZCUVVFc1JVRkRWQ3hIUVVGSExFTkJRVU1zUTBGQlFUdEJRVVZLTEVWQlFVRXNUVUZCVFN4WlFVRlpMRWRCUVVFc1IwRkJUU3hGUVVGQk8wRkJSWGhDTEVWQlFVRXNUMEZCVHl4VFFVRkJMRWRCUVZrc1EwRkJRU3hIUVVGSkxFTkJRVUVzUjBGQlNTeEZRVUZCTEVkQlFVc3NVMEZCUVR0QlFVTnNRenM3UVVOT1FTeE5RVUZOTEdOQlFVRXNSMEZCYVVJN1FVRkJRU3hGUVVOeVFpeE5RVUZCTEVWQlFWRXNTMEZCUVR0QlFVRkJMRVZCUTFJc1RVRkJRU3hGUVVGUk8wRkJRMVlzUTBGQlFUdEJRVXRCTEZOQlFWTXNXVUZCUVN4RFFVRmhMR0ZCUVVFc1IwRkJjME1zUlVGQlF5eEZRVUVyUWp0QlFVTXhSaXhGUVVGQkxFOUJRVThzVTBGQlFTeERRVUZWTEdkQ1FVRm5RaXhoUVVGaExFTkJRVUU3UVVGRGFFUTdPMEZEYUVKQkxGTkJRVk1zWjBKQlFXZENMRTFCUVVFc1JVRkJNRUk3UVVGRGFrUXNSVUZCUVN4TlFVRk5MR3RDUVVFMFFpeEZRVUZETzBGQlJXNURMRVZCUVVFc1QwRkJUeXhsUVVGQkxFTkJRV2RDTEZOQlFWTXNUVUZCUVN4RlFVRlJPMEZCUTNSRExFbEJRVUVzVFVGQlRTeE5RVUZCTEVkQlFWTXNTVUZCUVN4RFFVRkxMRTFCUVVFc1JVRkJUeXhIUVVGSkxFVkJRVUU3UVVGREwwSXNTVUZCUVN4TlFVRk5MRTlCUVVFc1IwRkJWU3hKUVVGQkxFTkJRVXNzUzBGQlFTeERRVUZOTEUxQlFVMHNRMEZCUVR0QlFVVnFReXhKUVVGQkxHVkJRVUVzUTBGQlowSXNTMEZCU3l4UFFVRlBMRU5CUVVFN1FVRkJRU3hGUVVNNVFqdEJRVVZCTEVWQlFVRXNUMEZCVHl4bFFVRkJPMEZCUTFRN08wRkRTRUVzVTBGQlV5eFJRVUZSTEU5QlFVRXNSVUZCZDBNN1FVRkRka1FzUlVGQlFTeE5RVUZOTEZkQlFVRXNSMEZCWXl4aFFVRmhMRTlCUVU4c1EwRkJRVHRCUVVONFF5eEZRVUZCTEUxQlFVMHNXVUZCUVN4SFFVRmxMRTlCUVVFc1EwRkJVU3hYUVVGQkxFTkJRVmtzVFVGQlRTeERRVUZCTzBGQlF5OURMRVZCUVVFc1RVRkJUU3hsUVVGbExGbEJRVUVzUTBGQllTeE5RVUZCTzBGQlJXeERMRVZCUVVFc1NVRkJTU3haUVVGQkxFZEJRV1VzUTBGQlFTeEpRVUZMTEZsQlFVRXNSMEZCWlN4RlFVRkJMRVZCUVVrN1FVRkRla01zU1VGQlFTeE5RVUZOTEVsQlFVa3NUVUZCVFN4elJVRkJjMFVzUTBGQlFUdEJRVUZCTEVWQlEzaEdPMEZCUTBFc1JVRkJRU3hKUVVGSkxHVkJRV1VzUTBGQlFTeEpRVUZMTEZsQlFVRXNRMEZCWVN4TFFVRkJMRU5CUVUwc1EwRkJReXhOUVVGTkxFMUJRVUVzUlVGQlVUdEJRVU40UkN4SlFVRkJMRTFCUVUwc1NVRkJTU3hOUVVGTkxITkVRVUZ6UkN4RFFVRkJPMEZCUVVFc1JVRkRlRVU3UVVGRlFTeEZRVUZCTEUxQlFVMHNVVUZCUVN4SFFVRlhMRU5CUVVNc1EwRkJRU3hGUVVGSExFTkJRVUVzUlVGQlJ5eERRVUZCTEVWQlFVY3NTVUZCUVN4RFFVRkxMRWxCUVVFc1EwRkJTeXhKUVVGQkxFTkJRVXNzVFVGQlFTeEZRVUZQTEVkQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRka1FzUlVGQlFTeE5RVUZOTEZsQlFVRXNSMEZCWlN4aFFVTnNRaXhMUVVGQkxFTkJRVTBzUlVGQlJTeEZRVU5TTEVkQlFVRXNRMEZCU1N4TlFVRk5MRVZCUTFZc1RVRkJRU3hEUVVGUExHVkJRVUVzUTBGQlowSXNTVUZCU1N4WlFVRlpMRU5CUVVNc1JVRkRlRU1zVFVGQlFTeERRVUZQTEZGQlFVRXNRMEZCVXl4TlFVRk5MRU5CUVVFc1JVRkJSeXhGUVVGQkxFZEJRVXNzV1VGQldTeERRVUZETEVOQlFVRTdRVUZGT1VNc1JVRkJRU3haUVVGQkxFTkJRV0VzU1VGQlFTeERRVUZMTEdOQlFVRXNRMEZCWlN4WlFVRlpMRU5CUVVNc1EwRkJRVHRCUVVNNVF5eEZRVUZCTEZsQlFVRXNRMEZCWVN4SlFVRkJMRU5CUVVzc1kwRkJRU3hEUVVGbExGbEJRVmtzUTBGQlF5eERRVUZCTzBGQlJUbERMRVZCUVVFc1QwRkJUeXhYUVVGQkxFTkJRVmtzVFVGQlFTeEhRVUZUTEU5QlFVRXNRMEZCVVN4WlFVRkJMRU5CUVdFc1NVRkJRU3hEUVVGTExFVkJRVVVzUTBGQlF5eERRVUZCTEVkQlFVa3NXVUZCUVN4RFFVRmhMRWxCUVVFc1EwRkJTeXhGUVVGRkxFTkJRVUU3UVVGRGJrWTdPenM3SW4wPVxuIiwiaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSAnaHRtbC1lc2NhcGVyJztcbmltcG9ydCBudW1Pbmx5IGZyb20gJ251bS1vbmx5JztcbmltcG9ydCBtZXJnZURlZXAgZnJvbSAnZGVlcG1lcmdlJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGRlbGltaXRlcnM6IHtcbiAgICBkb3Q6IFwiLlwiLFxuICAgIGRhc2g6IFwiLVwiXG4gIH0sXG4gIGhpZGRlblJhbmdlOiB7XG4gICAgc3RhcnQ6IDMsXG4gICAgZW5kOiAxMFxuICB9LFxuICBvbkZhaWw6ICh2YWx1ZSkgPT4gdmFsdWUsXG4gIGhpZGRlbktleTogXCIqXCIsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGVzY2FwZTogZmFsc2Vcbn07XG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMoY3VzdG9tT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBtZXJnZURlZXAoXG4gICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgY3VzdG9tT3B0aW9uc1xuICApO1xuICBpZiAob3B0aW9ucy5oaWRkZW4pIHtcbiAgICBpZiAoaXNOYU4ob3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCkgfHwgb3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCA8IDAgfHwgb3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCA+IDEwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gXCJoaWRkZW5SYW5nZS5zdGFydFwiIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMC4nKTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kKSB8fCBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA8IDAgfHwgb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQgPiAxMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIFwiaGlkZGVuUmFuZ2UuZW5kXCIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwLicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCA+IG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kKSB7XG4gICAgICBjb25zdCBhdXggPSBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0O1xuICAgICAgb3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCA9IG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kO1xuICAgICAgb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQgPSBhdXg7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5vbkZhaWwgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBvcHRpb24gXCJvbkZhaWxcIiBtdXN0IGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24uJyk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGNwZkZtdChjcGZTdHJpbmcsIG9wdGlvbnMpIHtcbiAgY29uc3QgQ1BGX0xFTkdUSCA9IDExO1xuICBjb25zdCBjcGZBcnJheSA9IG51bU9ubHkoY3BmU3RyaW5nKS5zcGxpdChcIlwiKTtcbiAgY29uc3QgY3VzdG9tT3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhvcHRpb25zKTtcbiAgaWYgKGNwZkFycmF5Lmxlbmd0aCAhPT0gQ1BGX0xFTkdUSCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBQYXJhbWV0ZXIgXCIke2NwZlN0cmluZ31cIiBkb2VzIG5vdCBjb250YWluICR7Q1BGX0xFTkdUSH0gZGlnaXRzLmApO1xuICAgIHJldHVybiBjdXN0b21PcHRpb25zLm9uRmFpbChjcGZTdHJpbmcsIGVycm9yKTtcbiAgfVxuICBpZiAoY3VzdG9tT3B0aW9ucy5oaWRkZW4pIHtcbiAgICBmb3IgKGxldCBpID0gY3VzdG9tT3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydDsgaSA8PSBjdXN0b21PcHRpb25zLmhpZGRlblJhbmdlLmVuZDsgaSsrKSB7XG4gICAgICBjcGZBcnJheVtpXSA9IGN1c3RvbU9wdGlvbnMuaGlkZGVuS2V5O1xuICAgIH1cbiAgfVxuICBjcGZBcnJheS5zcGxpY2UoOSwgMCwgY3VzdG9tT3B0aW9ucy5kZWxpbWl0ZXJzLmRhc2gpO1xuICBjcGZBcnJheS5zcGxpY2UoNiwgMCwgY3VzdG9tT3B0aW9ucy5kZWxpbWl0ZXJzLmRvdCk7XG4gIGNwZkFycmF5LnNwbGljZSgzLCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZG90KTtcbiAgY29uc3QgY3BmUHJldHR5ID0gY3BmQXJyYXkuam9pbihcIlwiKTtcbiAgaWYgKGN1c3RvbU9wdGlvbnMuZXNjYXBlKSB7XG4gICAgcmV0dXJuIGVzY2FwZShjcGZQcmV0dHkpO1xuICB9XG4gIHJldHVybiBjcGZQcmV0dHk7XG59XG5cbmV4cG9ydCB7IGNwZkZtdCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1Yldweklpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZiV1Z5WjJVdGIzQjBhVzl1Y3k1MGN5SXNJaTR1TDNOeVl5OWpjR1l0Wm0xMExuUnpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J0WlhKblpVUmxaWEFnWm5KdmJTQW5aR1ZsY0cxbGNtZGxKenRjYmx4dWRIbHdaU0JFWldWd1VHRnlkR2xoYkR4VVBpQTlJSHRjYmlBZ1cxQWdhVzRnYTJWNWIyWWdWRjAvT2lCRVpXVndVR0Z5ZEdsaGJEeFVXMUJkUGp0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUVdOMGRXRnNRM0JtUm05eWJXRjBkR2x1WjA5d2RHbHZibk04VDI1RmNuSkdZV3hzWW1GamF6NGdlMXh1SUNCa1pXeHBiV2wwWlhKek9pQjdYRzRnSUNBZ1pHRnphRG9nYzNSeWFXNW5PMXh1SUNBZ0lHUnZkRG9nYzNSeWFXNW5PMXh1SUNCOU8xeHVJQ0JsYzJOaGNHVTZJR0p2YjJ4bFlXNDdYRzRnSUdocFpHUmxiam9nWW05dmJHVmhianRjYmlBZ2FHbGtaR1Z1UzJWNU9pQnpkSEpwYm1jN1hHNGdJR2hwWkdSbGJsSmhibWRsT2lCN1hHNGdJQ0FnWlc1a09pQnVkVzFpWlhJN1hHNGdJQ0FnYzNSaGNuUTZJRzUxYldKbGNqdGNiaUFnZlR0Y2JpQWdiMjVHWVdsc09pQW9kbUZzZFdVNklITjBjbWx1Wnl3Z1pYSnliM0k2SUVWeWNtOXlLU0E5UGlCUGJrVnlja1poYkd4aVlXTnJPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JEY0daR2IzSnRZWFIwYVc1blQzQjBhVzl1Y3p4UGJrVnlja1poYkd4aVlXTnJQaUE5SUVSbFpYQlFZWEowYVdGc1BGeHVJQ0JCWTNSMVlXeERjR1pHYjNKdFlYUjBhVzVuVDNCMGFXOXVjenhQYmtWeWNrWmhiR3hpWVdOclBseHVQanRjYmx4dVkyOXVjM1FnWkdWbVlYVnNkRTl3ZEdsdmJuTTZJRUZqZEhWaGJFTndaa1p2Y20xaGRIUnBibWRQY0hScGIyNXpQSE4wY21sdVp6NGdQU0I3WEc0Z0lHUmxiR2x0YVhSbGNuTTZJSHRjYmlBZ0lDQmtiM1E2SUNjdUp5eGNiaUFnSUNCa1lYTm9PaUFuTFNjc1hHNGdJSDBzWEc0Z0lHaHBaR1JsYmxKaGJtZGxPaUI3WEc0Z0lDQWdjM1JoY25RNklETXNYRzRnSUNBZ1pXNWtPaUF4TUN4Y2JpQWdmU3hjYmlBZ2IyNUdZV2xzT2lBb2RtRnNkV1VwSUQwK0lIWmhiSFZsTEZ4dUlDQm9hV1JrWlc1TFpYazZJQ2NxSnl4Y2JpQWdhR2xrWkdWdU9pQm1ZV3h6WlN4Y2JpQWdaWE5qWVhCbE9pQm1ZV3h6WlN4Y2JuMDdYRzVjYmk4cUtseHVJQ29nVFdWeVoyVWdZM1Z6ZEc5dElHOXdkR2x2Ym5NZ2RHOGdkR2hsSUdSbFptRjFiSFFnYjI1bGN5NWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2JXVnlaMlZQY0hScGIyNXpQRTl1UlhKeVJtRnNiR0poWTJzK0tGeHVJQ0JqZFhOMGIyMVBjSFJwYjI1ek9pQkRjR1pHYjNKdFlYUjBhVzVuVDNCMGFXOXVjenhQYmtWeWNrWmhiR3hpWVdOclBpQTlJSHQ5TEZ4dUtUb2dRV04wZFdGc1EzQm1SbTl5YldGMGRHbHVaMDl3ZEdsdmJuTThUMjVGY25KR1lXeHNZbUZqYXo0Z2UxeHVJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdiV1Z5WjJWRVpXVndLRnh1SUNBZ0lHUmxabUYxYkhSUGNIUnBiMjV6TEZ4dUlDQWdJR04xYzNSdmJVOXdkR2x2Ym5Nc1hHNGdJQ2tnWVhNZ1FXTjBkV0ZzUTNCbVJtOXliV0YwZEdsdVowOXdkR2x2Ym5NOFQyNUZjbkpHWVd4c1ltRmphejQ3WEc1Y2JpQWdhV1lnS0c5d2RHbHZibk11YUdsa1pHVnVLU0I3WEc0Z0lDQWdhV1lnS0Z4dUlDQWdJQ0FnYVhOT1lVNG9iM0IwYVc5dWN5NW9hV1JrWlc1U1lXNW5aUzV6ZEdGeWRDa2dmSHhjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1YzNSaGNuUWdQQ0F3SUh4OFhHNGdJQ0FnSUNCdmNIUnBiMjV6TG1ocFpHUmxibEpoYm1kbExuTjBZWEowSUQ0Z01UQmNiaUFnSUNBcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMDl3ZEdsdmJpQmNJbWhwWkdSbGJsSmhibWRsTG5OMFlYSjBYQ0lnYlhWemRDQmlaU0JoSUc1MWJXSmxjaUJpWlhSM1pXVnVJREFnWVc1a0lERXdMaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoY2JpQWdJQ0FnSUdselRtRk9LRzl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1Wlc1a0tTQjhmRnh1SUNBZ0lDQWdiM0IwYVc5dWN5NW9hV1JrWlc1U1lXNW5aUzVsYm1RZ1BDQXdJSHg4WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbWhwWkdSbGJsSmhibWRsTG1WdVpDQStJREV3WEc0Z0lDQWdLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkUGNIUnBiMjRnWENKb2FXUmtaVzVTWVc1blpTNWxibVJjSWlCdGRYTjBJR0psSUdFZ2JuVnRZbVZ5SUdKbGRIZGxaVzRnTUNCaGJtUWdNVEF1SnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWFHbGtaR1Z1VW1GdVoyVXVjM1JoY25RZ1BpQnZjSFJwYjI1ekxtaHBaR1JsYmxKaGJtZGxMbVZ1WkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWVhWNElEMGdiM0IwYVc5dWN5NW9hV1JrWlc1U1lXNW5aUzV6ZEdGeWREdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWFHbGtaR1Z1VW1GdVoyVXVjM1JoY25RZ1BTQnZjSFJwYjI1ekxtaHBaR1JsYmxKaGJtZGxMbVZ1WkR0Y2JpQWdJQ0FnSUc5d2RHbHZibk11YUdsa1pHVnVVbUZ1WjJVdVpXNWtJRDBnWVhWNE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHbG1JQ2gwZVhCbGIyWWdiM0IwYVc5dWN5NXZia1poYVd3Z0lUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkVWFHVWdiM0IwYVc5dUlGd2liMjVHWVdsc1hDSWdiWFZ6ZENCaVpTQmhJR05oYkd4aVlXTnJJR1oxYm1OMGFXOXVMaWNwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUc5d2RHbHZibk03WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHMWxjbWRsVDNCMGFXOXVjenRjYmlJc0ltbHRjRzl5ZENCN0lHVnpZMkZ3WlNCaGN5QmxjMk5oY0dWSVZFMU1JSDBnWm5KdmJTQW5hSFJ0YkMxbGMyTmhjR1Z5Snp0Y2JtbHRjRzl5ZENCdWRXMVBibXg1SUdaeWIyMGdKMjUxYlMxdmJteDVKenRjYmx4dWFXMXdiM0owSUcxbGNtZGxUM0IwYVc5dWN5Qm1jbTl0SUNjdUwyMWxjbWRsTFc5d2RHbHZibk1uTzF4dWFXMXdiM0owSUhSNWNHVWdleUJEY0daR2IzSnRZWFIwYVc1blQzQjBhVzl1Y3lCOUlHWnliMjBnSnk0dmJXVnlaMlV0YjNCMGFXOXVjeWM3WEc1Y2JpOHFLbHh1SUNvZ1JtOXliV0YwSUdFZ1oybDJaVzRnUTFCR0lHTm9ZWElnYzJWeGRXVnVZMlV1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR053WmtadGREeFBia1Z5Y2taaGJHeGlZV05ySUQwZ2MzUnlhVzVuUGloY2JpQWdZM0JtVTNSeWFXNW5PaUJ6ZEhKcGJtY3NYRzRnSUc5d2RHbHZibk0vT2lCRGNHWkdiM0p0WVhSMGFXNW5UM0IwYVc5dWN6eFBia1Z5Y2taaGJHeGlZV05yUGl4Y2JpazZJSE4wY21sdVp5QjdYRzRnSUdOdmJuTjBJRU5RUmw5TVJVNUhWRWdnUFNBeE1UdGNiaUFnWTI5dWMzUWdZM0JtUVhKeVlYa2dQU0J1ZFcxUGJteDVLR053WmxOMGNtbHVaeWt1YzNCc2FYUW9KeWNwTzF4dUlDQmpiMjV6ZENCamRYTjBiMjFQY0hScGIyNXpJRDBnYldWeVoyVlBjSFJwYjI1ektHOXdkR2x2Ym5NcE8xeHVYRzRnSUdsbUlDaGpjR1pCY25KaGVTNXNaVzVuZEdnZ0lUMDlJRU5RUmw5TVJVNUhWRWdwSUh0Y2JpQWdJQ0JqYjI1emRDQmxjbkp2Y2lBOUlHNWxkeUJGY25KdmNpaGdVR0Z5WVcxbGRHVnlJRndpSkh0amNHWlRkSEpwYm1kOVhDSWdaRzlsY3lCdWIzUWdZMjl1ZEdGcGJpQWtlME5RUmw5TVJVNUhWRWg5SUdScFoybDBjeTVnS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJqZFhOMGIyMVBjSFJwYjI1ekxtOXVSbUZwYkNoamNHWlRkSEpwYm1jc0lHVnljbTl5S1NCaGN5QnpkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQnBaaUFvWTNWemRHOXRUM0IwYVc5dWN5NW9hV1JrWlc0cElIdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdZM1Z6ZEc5dFQzQjBhVzl1Y3k1b2FXUmtaVzVTWVc1blpTNXpkR0Z5ZERzZ2FTQThQU0JqZFhOMGIyMVBjSFJwYjI1ekxtaHBaR1JsYmxKaGJtZGxMbVZ1WkRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqY0daQmNuSmhlVnRwWFNBOUlHTjFjM1J2YlU5d2RHbHZibk11YUdsa1pHVnVTMlY1TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdOd1prRnljbUY1TG5Od2JHbGpaU2c1TENBd0xDQmpkWE4wYjIxUGNIUnBiMjV6TG1SbGJHbHRhWFJsY25NdVpHRnphQ2s3WEc0Z0lHTndaa0Z5Y21GNUxuTndiR2xqWlNnMkxDQXdMQ0JqZFhOMGIyMVBjSFJwYjI1ekxtUmxiR2x0YVhSbGNuTXVaRzkwS1R0Y2JpQWdZM0JtUVhKeVlYa3VjM0JzYVdObEtETXNJREFzSUdOMWMzUnZiVTl3ZEdsdmJuTXVaR1ZzYVcxcGRHVnljeTVrYjNRcE8xeHVJQ0JqYjI1emRDQmpjR1pRY21WMGRIa2dQU0JqY0daQmNuSmhlUzVxYjJsdUtDY25LVHRjYmx4dUlDQnBaaUFvWTNWemRHOXRUM0IwYVc5dWN5NWxjMk5oY0dVcElIdGNiaUFnSUNCeVpYUjFjbTRnWlhOallYQmxTRlJOVENoamNHWlFjbVYwZEhrcE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHTndabEJ5WlhSMGVUdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTNCbVJtMTBPMXh1SWwwc0ltNWhiV1Z6SWpwYkltVnpZMkZ3WlVoVVRVd2lYU3dpYldGd2NHbHVaM01pT2lJN096czdRVUY1UWtFc1RVRkJUU3hqUVVGQkxFZEJRWEZFTzBGQlFVRXNSVUZEZWtRc1ZVRkJRU3hGUVVGWk8wRkJRVUVzU1VGRFZpeEhRVUZCTEVWQlFVc3NSMEZCUVR0QlFVRkJMRWxCUTB3c1NVRkJRU3hGUVVGTk8wRkJRVUVzUjBGRFVqdEJRVUZCTEVWQlEwRXNWMEZCUVN4RlFVRmhPMEZCUVVFc1NVRkRXQ3hMUVVGQkxFVkJRVThzUTBGQlFUdEJRVUZCTEVsQlExQXNSMEZCUVN4RlFVRkxPMEZCUVVFc1IwRkRVRHRCUVVGQkxFVkJRMEVzVFVGQlFTeEZRVUZSTEVOQlFVTXNTMEZCUVN4TFFVRlZMRXRCUVVFN1F