UNPKG

jalali-date

Version:

A Jalali to Gregorian converter with support of formatting output

2 lines 37.2 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("JDate",[],t):"object"==typeof exports?exports.JDate=t():e.JDate=t()}(this,(()=>(()=>{var e={51:e=>{e.exports={MONTH_NAMES:["فروردین","اردیبهشت","خرداد","تیر","امرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"],ABBR_DAYS:["۱ش","۲ش","۳ش","۴ش","۵ش","ج","ش"],DAYS_NAMES:["یکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه"],GREGORIAN_EPOCH:1,GREGORIAN_TO_FIXED_OFFSET:719528,PERSIAN_EPOCH:226896,PERSIAN_CYCLE_DAYS:12053,NON_LEAP_CORRECTION:[1502,1601,1634,1667,1700,1733,1766,1799,1832,1865,1898,1931,1964,1997,2030,2059,2063,2096,2129,2158,2162,2191,2195,2224,2228,2257,2261,2290,2294,2323,2327,2356,2360,2389,2393,2422,2426,2455,2459,2488,2492,2521,2525,2554,2558,2587,2591,2620,2624,2653,2657,2686,2690,2719,2723,2748,2752,2756,2781,2785,2789,2818,2822,2847,2851,2855,2880,2884,2888,2913,2917,2921,2946,2950,2954,2979,2983,2987]}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};return(()=>{"use strict";r.d(n,{default:()=>d});var e=r(51);function t(e,t){return Math.floor((e+t-1)/t)}function o(e){return e&&1===e.length?"0".concat(e):e}function a(e,t){var r=e.match(/[yY]+/);if(!r)return e;switch(r[0]){case"YYYY":case"YYY":return a(e.replace(r,t.getFullYear()),t);case"YY":return a(e.replace(r,String(t.getFullYear()).slice(2)),t);default:return e}}function i(t,r){var n=t.match(/[mM]+/);if(!n)return t;switch(n[0]){case"M":return i(t.replace(n,r.getMonth()),r);case"MM":var a=o(r.getMonth().toString());return i(t.replace(n,a),r);case"MMM":case"MMMM":return i(t.replace(n,e.MONTH_NAMES[r.getMonth()-1]),r);default:return t}}function u(t,r){var n=t.match(/[dD]+/);if(!n)return t;switch(n[0]){case"D":return u(t.replace(n,r.getDate()),r);case"DD":var a=o(r.getDate().toString());return u(t.replace(n,a),r);case"d":case"dd":return u(t.replace(n,e.ABBR_DAYS[r.getDay()]),r);case"ddd":case"dddd":return u(t.replace(n,e.DAYS_NAMES[r.getDay()]),r);default:return t}}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function f(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=l(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=l(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}var s=function(){function r(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r)}return n=r,o=[{key:"gregorianToFixed",value:function(t,n,o){return e.GREGORIAN_EPOCH-1+365*(t-1)+Math.floor((t-1)/4)-Math.floor((t-1)/100)+Math.floor((t-1)/400)+Math.floor((367*n-362)/12)+(n<=2?0:r.leapGregorian(t)?-1:-2)+o}},{key:"gregorianYearFromFixed",value:function(t){var r=t-e.GREGORIAN_EPOCH,n=Math.floor(r/146097),o=r%146097,a=Math.floor(o/36524),i=o%36524,u=Math.floor(i/1461),l=i%1461,f=Math.floor(l/365),c=400*n+100*a+4*u+f;return 4===a||4===f?c:c+1}},{key:"gregorianNewYear",value:function(e){return r.gregorianToFixed(e,1,1)}},{key:"fixedToGregorian",value:function(e){var t,n=r.gregorianYearFromFixed(e),o=e-r.gregorianNewYear(n);t=e<r.gregorianToFixed([n,3,1])?0:r.leapGregorian(n)?1:2;var a=Math.floor((12*(o+t)+373)/367);return[n,a,e-r.gregorianToFixed(n,a,1)+1]}},{key:"jalaliToFixed",value:function(t,r,n){var o=e.PERSIAN_EPOCH-1+365*(t-1)+Math.floor((8*t+21)/33);return e.NON_LEAP_CORRECTION.includes(t-1)&&(o-=1),o-1+(r<=7?31*(r-1):30*(r-1)+6)+n}},{key:"fixedToJalali",value:function(n){var o=n-r.jalaliToFixed(1,1,1),a=1+Math.floor((33*o+3)/e.PERSIAN_CYCLE_DAYS),i=n-r.jalaliToFixed(a,1,1)+1;366===i&&e.NON_LEAP_CORRECTION.includes(a)&&(a+=1,i=1);var u=i<=186?t(i,31):t(i-6,30);return[a,u,n-r.jalaliToFixed(a,u,1)+1]}},{key:"leapPersian",value:function(t){return!e.NON_LEAP_CORRECTION.includes(t)&&(!!e.NON_LEAP_CORRECTION.includes(t-1)||(25*t+11)%33<8)}},{key:"leapGregorian",value:function(e){return e%4==0&&![100,200,300].includes(e%400)}}],null&&f(n.prototype,null),o&&f(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o}();function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,v(n.key),n)}}function v(e){var t=function(e,t){if("object"!=y(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=y(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==y(t)?t:t+""}var d=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];if(Array.isArray(r[0])||r[0]instanceof Date)this.input=r[0];else if(3===r.length)this.input=r;else{if(r.length)throw new Error("Unexpected input");this.input=new Date}Array.isArray(this.input)?(this.date=this.input.map((function(e){return parseInt(e,10)})),this._d=this.toGregorian()):this.input instanceof Date&&(this._d=this.input,this.date=e.toJalali(this.input))}return t=e,n=[{key:"toJalali",value:function(e){var t=s.gregorianToFixed(e.getFullYear(),e.getMonth()+1,e.getDate());return s.fixedToJalali(t)}},{key:"to_jalali",value:function(t){return e.toJalali(t)}},{key:"toGregorian",value:function(e,t,r){var n=s.fixedToGregorian(s.jalaliToFixed(e,t,r));return new Date(+n[0],+n[1]-1,+n[2])}},{key:"to_gregorian",value:function(t,r,n){return e.toGregorian(t,r,n)}},{key:"isLeapYear",value:function(e){return s.leapPersian(e)}},{key:"daysInMonth",value:function(t,r){var n=t-Math.floor(r/12),o=r-12*Math.floor(r/12);return o<0?(o+=12,n-=1):0===o&&(o=12),o<6?31:o<11||e.isLeapYear(n)?30:29}}],(r=[{key:"toGregorian",value:function(){return e.toGregorian(this.date[0],this.date[1],this.date[2])}},{key:"getFullYear",value:function(){return this.date[0]}},{key:"setFullYear",value:function(e){return this.date[0]=parseInt(e,10),this.input=this.toGregorian(),this}},{key:"getMonth",value:function(){return this.date[1]}},{key:"setMonth",value:function(e){var t=function(e,t){if(t>12||t<=0){var r=Math.floor((t-1)/12);return[e-r,t-12*r]}return[e,t]}(this.getFullYear(),parseInt(e,10)),r=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,u=[],l=!0,f=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(u.push(n.value),u.length!==t);l=!0);}catch(e){f=!0,o=e}finally{try{if(!l&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(f)throw o}}return u}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(t,2);return this.date[0]=r[0],this.date[1]=r[1],this.input=this.toGregorian(),this}},{key:"getDate",value:function(){return this.date[2]}},{key:"setDate",value:function(e){return this.date[2]=parseInt(e,10),this.input=this.toGregorian(),this}},{key:"getDay",value:function(){return this._d.getDay()}},{key:"format",value:function(e){var t=a(e,this);return u(t=i(t,this),this)}}])&&h(t.prototype,r),n&&h(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,n}()})(),n.default})())); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFxQyxNQU1BLFNBQVNFLEdBQ1AsSUFBTThDLEVGMUlILFNBQWtCL0MsRUFBTUMsR0FDN0IsR0FBSUEsRUFBUSxJQUFNQSxHQUFTLEVBQUcsQ0FDNUIsSUFBTStDLEVBQVd4RSxLQUFLQyxPQUFPd0IsRUFBUSxHQUFLLElBSTFDLE1BQU8sQ0FIU0QsRUFBT2dELEVBQ04vQyxFQUFvQixHQUFYK0MsRUFHNUIsQ0FFQSxNQUFPLENBQUNoRCxFQUFNQyxFQUNoQixDRWdJa0JnRCxDQUFpQnhHLEtBQUt5QyxjQUFla0QsU0FBU25DLEVBQU8sS0FBS2lELEUsdzVCQUFBQyxDQUN6Q0osRUFBSyxHQUdwQyxPQUhDdEcsS0FBS3NDLEtBQUssR0FBRW1FLEVBQUEsR0FBRXpHLEtBQUtzQyxLQUFLLEdBQUVtRSxFQUFBLEdBQzNCekcsS0FBS3VGLE1BQVF2RixLQUFLNkYsY0FFWDdGLElBQ1QsR0FFQSxDQUFBaUIsSUFBQSxVQUFBcUMsTUFLQSxXQUNFLE9BQU90RCxLQUFLc0MsS0FBSyxFQUNuQixHQUVBLENBQUFyQixJQUFBLFVBQUFxQyxNQU1BLFNBQVFoQixHQUlOLE9BSEF0QyxLQUFLc0MsS0FBSyxHQUFLcUQsU0FBU3JELEVBQU0sSUFDOUJ0QyxLQUFLdUYsTUFBUXZGLEtBQUs2RixjQUVYN0YsSUFDVCxHQUVBLENBQUFpQixJQUFBLFNBQUFxQyxNQUtBLFdBQ0UsT0FBT3RELEtBQUs0RixHQUFHekMsUUFDakIsR0FFQSxDQUFBbEMsSUFBQSxTQUFBcUMsTUFNQSxTQUFPcUQsR0FDTCxJQUFJQyxFQUFTSixFQUFvQkcsRUFBUTNHLE1BSXpDLE9BRlN3RyxFQURUSSxFQUFTSixFQUFxQkksRUFBUTVHLE1BQ0ZBLEtBR3RDLE0seUZBaEdDLENBaEd1QixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vSkRhdGUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0pEYXRlLy4vc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9KRGF0ZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9KRGF0ZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vSkRhdGUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9KRGF0ZS8uL3NyYy9oZWxwZXJzLmpzIiwid2VicGFjazovL0pEYXRlLy4vc3JjL2NvbnZlcnRlci5qcyIsIndlYnBhY2s6Ly9KRGF0ZS8uL3NyYy9qZGF0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIkpEYXRlXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkpEYXRlXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkpEYXRlXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBNT05USF9OQU1FUzogWyfZgdix2YjYsdiv24zZhicsICfYp9ix2K/bjNio2YfYtNiqJywgJ9iu2LHYr9in2K8nLCAn2KrbjNixJywgJ9in2YXYsdiv2KfYrycsICfYtNmH2LHbjNmI2LEnLCAn2YXZh9ixJywgJ9ii2KjYp9mGJywgJ9ii2LDYsScsICfYr9uMJywgJ9io2YfZhdmGJywgJ9in2LPZgdmG2K8nXSxcbiAgQUJCUl9EQVlTOiBbJ9ux2LQnLCAn27LYtCcsICfbs9i0JywgJ9u02LQnLCAn27XYtCcsICfYrCcsICfYtCddLFxuICBEQVlTX05BTUVTOiBbJ9uM2qnYtNmG2KjZhycsICfYr9mI2LTZhtio2YcnLCAn2LPZh+KAjNi02YbYqNmHJywgJ9qG2YfYp9ix2LTZhtio2YcnLCAn2b7Zhtis4oCM2LTZhtio2YcnLCAn2KzZhdi52YcnLCAn2LTZhtio2YcnXSxcbiAgR1JFR09SSUFOX0VQT0NIOiAxLFxuICBHUkVHT1JJQU5fVE9fRklYRURfT0ZGU0VUOiA3MTk1MjgsXG4gIFBFUlNJQU5fRVBPQ0g6IDIyNjg5NixcbiAgUEVSU0lBTl9DWUNMRV9EQVlTOiAxMjA1MyxcbiAgTk9OX0xFQVBfQ09SUkVDVElPTjogW1xuICAgIDE1MDIsXG4gICAgMTYwMSwgMTYzNCwgMTY2NyxcbiAgICAxNzAwLCAxNzMzLCAxNzY2LCAxNzk5LFxuICAgIDE4MzIsIDE4NjUsIDE4OTgsXG4gICAgMTkzMSwgMTk2NCwgMTk5NyxcbiAgICAyMDMwLCAyMDU5LCAyMDYzLCAyMDk2LFxuICAgIDIxMjksIDIxNTgsIDIxNjIsIDIxOTEsIDIxOTUsXG4gICAgMjIyNCwgMjIyOCwgMjI1NywgMjI2MSwgMjI5MCwgMjI5NCxcbiAgICAyMzIzLCAyMzI3LCAyMzU2LCAyMzYwLCAyMzg5LCAyMzkzLFxuICAgIDI0MjIsIDI0MjYsIDI0NTUsIDI0NTksIDI0ODgsIDI0OTIsXG4gICAgMjUyMSwgMjUyNSwgMjU1NCwgMjU1OCwgMjU4NywgMjU5MSxcbiAgICAyNjIwLCAyNjI0LCAyNjUzLCAyNjU3LCAyNjg2LCAyNjkwLFxuICAgIDI3MTksIDI3MjMsIDI3NDgsIDI3NTIsIDI3NTYsIDI3ODEsIDI3ODUsIDI3ODksXG4gICAgMjgxOCwgMjgyMiwgMjg0NywgMjg1MSwgMjg1NSwgMjg4MCwgMjg4NCwgMjg4OCxcbiAgICAyOTEzLCAyOTE3LCAyOTIxLCAyOTQ2LCAyOTUwLCAyOTU0LCAyOTc5LCAyOTgzLCAyOTg3XG4gIF1cbn07XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmltcG9ydCB7XG4gIE1PTlRIX05BTUVTLFxuICBBQkJSX0RBWVMsXG4gIERBWVNfTkFNRVNcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2Q2VpbChhLCBiKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKChhICsgYiAtIDEpIC8gYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXhNb250aCh5ZWFyLCBtb250aCkge1xuICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8PSAwKSB7XG4gICAgY29uc3QgeWVhckRpZmYgPSBNYXRoLmZsb29yKChtb250aCAtIDEpIC8gMTIpO1xuICAgIGNvbnN0IG5ld1llYXIgPSB5ZWFyIC0geWVhckRpZmY7XG4gICAgY29uc3QgbmV3TW9udGggPSBtb250aCAtICh5ZWFyRGlmZiAqIDEyKTtcblxuICAgIHJldHVybiBbbmV3WWVhciwgbmV3TW9udGhdO1xuICB9XG5cbiAgcmV0dXJuIFt5ZWFyLCBtb250aF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvTGVhZGluZyhzdHIpIHtcbiAgaWYgKHN0ciAmJiBzdHIubGVuZ3RoID09PSAxKSB7IHJldHVybiBgMCR7c3RyfWA7IH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VZZWFyKHN0ciwgZGF0ZSkge1xuICBjb25zdCBtYXRjaCA9IHN0ci5tYXRjaCgvW3lZXSsvKTtcbiAgaWYgKCFtYXRjaCkgeyByZXR1cm4gc3RyOyB9XG4gIHN3aXRjaCAobWF0Y2hbMF0pIHtcbiAgICBjYXNlICdZWVlZJzpcbiAgICBjYXNlICdZWVknOiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlcGxhY2VZZWFyKHN0ci5yZXBsYWNlKG1hdGNoLCBkYXRlLmdldEZ1bGxZZWFyKCkpLCBkYXRlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgY2FzZSAnWVknOiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlcGxhY2VZZWFyKFxuICAgICAgICBzdHIucmVwbGFjZShtYXRjaCwgU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSkuc2xpY2UoMikpLCBkYXRlXG4gICAgICApO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU1vbnRoKHN0ciwgZGF0ZSkge1xuICBjb25zdCBtYXRjaCA9IHN0ci5tYXRjaCgvW21NXSsvKTtcbiAgaWYgKCFtYXRjaCkgeyByZXR1cm4gc3RyOyB9XG4gIHN3aXRjaCAobWF0Y2hbMF0pIHtcbiAgICBjYXNlICdNJzoge1xuICAgICAgY29uc3QgdmFsdWUgPSByZXBsYWNlTW9udGgoc3RyLnJlcGxhY2UobWF0Y2gsIGRhdGUuZ2V0TW9udGgoKSksIGRhdGUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjYXNlICdNTSc6IHtcbiAgICAgIGNvbnN0IHplcm9MZWFkaW5nTW9udGggPSB6ZXJvTGVhZGluZyhkYXRlLmdldE1vbnRoKCkudG9TdHJpbmcoKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlcGxhY2VNb250aChzdHIucmVwbGFjZShtYXRjaCwgemVyb0xlYWRpbmdNb250aCksIGRhdGUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjYXNlICdNTU0nOlxuICAgIGNhc2UgJ01NTU0nOiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlcGxhY2VNb250aChcbiAgICAgICAgc3RyLnJlcGxhY2UobWF0Y2gsIE1PTlRIX05BTUVTW2RhdGUuZ2V0TW9udGgoKSAtIDFdKSwgZGF0ZVxuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXkoc3RyLCBkYXRlKSB7XG4gIGNvbnN0IG1hdGNoID0gc3RyLm1hdGNoKC9bZERdKy8pO1xuICBpZiAoIW1hdGNoKSB7IHJldHVybiBzdHI7IH1cbiAgc3dpdGNoIChtYXRjaFswXSkge1xuICAgIGNhc2UgJ0QnOiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlcGxhY2VEYXkoc3RyLnJlcGxhY2UobWF0Y2gsIGRhdGUuZ2V0RGF0ZSgpKSwgZGF0ZSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNhc2UgJ0REJzoge1xuICAgICAgY29uc3QgemVyb0xlYWRpbmdEYXRlID0gemVyb0xlYWRpbmcoZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlcGxhY2VEYXkoc3RyLnJlcGxhY2UobWF0Y2gsIHplcm9MZWFkaW5nRGF0ZSksIGRhdGUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjYXNlICdkJzpcbiAgICBjYXNlICdkZCc6IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmVwbGFjZURheShzdHIucmVwbGFjZShtYXRjaCwgQUJCUl9EQVlTW2RhdGUuZ2V0RGF5KCldKSwgZGF0ZSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNhc2UgJ2RkZCc6XG4gICAgY2FzZSAnZGRkZCc6IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmVwbGFjZURheShzdHIucmVwbGFjZShtYXRjaCwgREFZU19OQU1FU1tkYXRlLmdldERheSgpXSksIGRhdGUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgZGl2Q2VpbCB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge1xuICBHUkVHT1JJQU5fRVBPQ0gsIFBFUlNJQU5fRVBPQ0gsIE5PTl9MRUFQX0NPUlJFQ1RJT04sIFBFUlNJQU5fQ1lDTEVfREFZU1xufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnZlcnRlciB7XG4gIHN0YXRpYyBncmVnb3JpYW5Ub0ZpeGVkKHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBHUkVHT1JJQU5fRVBPQ0ggLSAxXG4gICAgICAgICsgMzY1ICogKHllYXIgLSAxKVxuICAgICAgICArIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDQpXG4gICAgICAgIC0gTWF0aC5mbG9vcigoeWVhciAtIDEpIC8gMTAwKVxuICAgICAgICArIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDQwMClcbiAgICAgICAgKyBNYXRoLmZsb29yKCgzNjcgKiBtb250aCAtIDM2MikgLyAxMilcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICsgKG1vbnRoIDw9IDIgPyAwIDogQ29udmVydGVyLmxlYXBHcmVnb3JpYW4oeWVhcikgPyAtMSA6IC0yKVxuICAgICAgICArIGRheTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGdyZWdvcmlhblllYXJGcm9tRml4ZWQoZGF0ZSkge1xuICAgIGNvbnN0IGQwID0gZGF0ZSAtIEdSRUdPUklBTl9FUE9DSDtcbiAgICBjb25zdCBuNDAwID0gTWF0aC5mbG9vcihkMCAvIDE0NjA5Nyk7XG4gICAgY29uc3QgZDEgPSBkMCAlIDE0NjA5NztcbiAgICBjb25zdCBuMTAwID0gTWF0aC5mbG9vcihkMSAvIDM2NTI0KTtcbiAgICBjb25zdCBkMiA9IGQxICUgMzY1MjQ7XG4gICAgY29uc3QgbjQgPSBNYXRoLmZsb29yKGQyIC8gMTQ2MSk7XG4gICAgY29uc3QgZDMgPSBkMiAlIDE0NjE7XG4gICAgY29uc3QgbjEgPSBNYXRoLmZsb29yKGQzIC8gMzY1KTtcbiAgICBjb25zdCB5ZWFyID0gNDAwICogbjQwMCArIDEwMCAqIG4xMDAgKyA0ICogbjQgKyBuMTtcbiAgICBpZiAobjEwMCA9PT0gNCB8fCBuMSA9PT0gNCkge1xuICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfVxuXG4gIHN0YXRpYyBncmVnb3JpYW5OZXdZZWFyKHllYXIpIHtcbiAgICByZXR1cm4gQ29udmVydGVyLmdyZWdvcmlhblRvRml4ZWQoeWVhciwgMSwgMSk7XG4gIH1cblxuICBzdGF0aWMgZml4ZWRUb0dyZWdvcmlhbihkYXRlKSB7XG4gICAgY29uc3QgeWVhciA9IENvbnZlcnRlci5ncmVnb3JpYW5ZZWFyRnJvbUZpeGVkKGRhdGUpO1xuICAgIGNvbnN0IHByaW9yRGF5cyA9IGRhdGUgLSBDb252ZXJ0ZXIuZ3JlZ29yaWFuTmV3WWVhcih5ZWFyKTtcbiAgICBsZXQgY29ycmVjdGlvbjtcbiAgICBpZiAoZGF0ZSA8IENvbnZlcnRlci5ncmVnb3JpYW5Ub0ZpeGVkKFt5ZWFyLCAzLCAxXSkpIHtcbiAgICAgIGNvcnJlY3Rpb24gPSAwO1xuICAgIH0gZWxzZSBpZiAoQ29udmVydGVyLmxlYXBHcmVnb3JpYW4oeWVhcikpIHtcbiAgICAgIGNvcnJlY3Rpb24gPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3JyZWN0aW9uID0gMjtcbiAgICB9XG4gICAgY29uc3QgbW9udGggPSBNYXRoLmZsb29yKCgxMiAqIChwcmlvckRheXMgKyBjb3JyZWN0aW9uKSArIDM3MykgLyAzNjcpO1xuICAgIGNvbnN0IGRheSA9IGRhdGUgLSBDb252ZXJ0ZXIuZ3JlZ29yaWFuVG9GaXhlZCh5ZWFyLCBtb250aCwgMSkgKyAxO1xuICAgIHJldHVybiBbeWVhciwgbW9udGgsIGRheV07XG4gIH1cblxuICBzdGF0aWMgamFsYWxpVG9GaXhlZCh5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgbGV0IG5ld1llYXIgPSBQRVJTSUFOX0VQT0NIIC0gMSArIDM2NSAqICh5ZWFyIC0gMSkgKyBNYXRoLmZsb29yKCg4ICogeWVhciArIDIxKSAvIDMzKTtcbiAgICBpZiAoTk9OX0xFQVBfQ09SUkVDVElPTi5pbmNsdWRlcyh5ZWFyIC0gMSkpIHtcbiAgICAgIG5ld1llYXIgLT0gMTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIG5ld1llYXIgLSAxXG4gICAgICAgICsgKChtb250aCA8PSA3KSA/IDMxICogKG1vbnRoIC0gMSkgOiAzMCAqIChtb250aCAtIDEpICsgNilcbiAgICAgICAgKyBkYXlcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGZpeGVkVG9KYWxhbGkoZml4ZWREYXRlKSB7XG4gICAgY29uc3QgZGF5c1NpbmNlRXBvY2ggPSBmaXhlZERhdGUgLSBDb252ZXJ0ZXIuamFsYWxpVG9GaXhlZCgxLCAxLCAxKTtcbiAgICBsZXQgeWVhciA9IDEgKyBNYXRoLmZsb29yKCgzMyAqIGRheXNTaW5jZUVwb2NoICsgMykgLyBQRVJTSUFOX0NZQ0xFX0RBWVMpO1xuICAgIGxldCBkYXlPZlllYXIgPSBmaXhlZERhdGUgLSBDb252ZXJ0ZXIuamFsYWxpVG9GaXhlZCh5ZWFyLCAxLCAxKSArIDE7XG5cbiAgICBpZiAoZGF5T2ZZZWFyID09PSAzNjYgJiYgTk9OX0xFQVBfQ09SUkVDVElPTi5pbmNsdWRlcyh5ZWFyKSkge1xuICAgICAgeWVhciArPSAxO1xuICAgICAgZGF5T2ZZZWFyID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBtb250aCA9IChkYXlPZlllYXIgPD0gMTg2KSA/IGRpdkNlaWwoZGF5T2ZZZWFyLCAzMSkgOiBkaXZDZWlsKGRheU9mWWVhciAtIDYsIDMwKTtcbiAgICBjb25zdCBkYXkgPSBmaXhlZERhdGUgLSBDb252ZXJ0ZXIuamFsYWxpVG9GaXhlZCh5ZWFyLCBtb250aCwgMSkgKyAxO1xuXG4gICAgcmV0dXJuIFt5ZWFyLCBtb250aCwgZGF5XTtcbiAgfVxuXG4gIHN0YXRpYyBsZWFwUGVyc2lhbihqZGF0ZSkge1xuICAgIGlmIChOT05fTEVBUF9DT1JSRUNUSU9OLmluY2x1ZGVzKGpkYXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gaWYgKE5PTl9MRUFQX0NPUlJFQ1RJT04uaW5jbHVkZXMoamRhdGUgLSAxKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAoMjUgKiBqZGF0ZSArIDExKSAlIDMzIDwgODtcbiAgfVxuXG4gIHN0YXRpYyBsZWFwR3JlZ29yaWFuKHllYXIpIHtcbiAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmICFbMTAwLCAyMDAsIDMwMF0uaW5jbHVkZXMoeWVhciAlIDQwMCkpO1xuICB9XG59XG4iLCIvKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyYXNobS9KRGF0ZVxuICogQGF1dGhvcjogQXJhc2ggTW91c2F2aVxuICovXG5cbmltcG9ydCBDb252ZXJ0ZXIgZnJvbSAnLi9jb252ZXJ0ZXInO1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKRGF0ZSB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSB8fCBhcmdzWzBdIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgW3RoaXMuaW5wdXRdID0gYXJncztcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICB0aGlzLmlucHV0ID0gYXJncztcbiAgICB9IGVsc2UgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgICAgdGhpcy5pbnB1dCA9IG5ldyBEYXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBpbnB1dCcpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuaW5wdXQpKSB7XG4gICAgICB0aGlzLmRhdGUgPSB0aGlzLmlucHV0Lm1hcCgobnVtKSA9PiBwYXJzZUludChudW0sIDEwKSk7XG4gICAgICB0aGlzLl9kID0gdGhpcy50b0dyZWdvcmlhbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHRoaXMuX2QgPSB0aGlzLmlucHV0O1xuICAgICAgdGhpcy5kYXRlID0gSkRhdGUudG9KYWxhbGkodGhpcy5pbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogQ292ZXJ0cyBhIEdyZWdvcmlhbiBkYXRlIHRvIEphbGFsaSBkYXRlXG4gICAqXG4gICAqIEBwYXJhbXMge0RhdGV9IGRhdGVcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgdG9KYWxhbGkoZGF0ZSkge1xuICAgIGNvbnN0IGZpeGVkRGF0ZSA9IENvbnZlcnRlci5ncmVnb3JpYW5Ub0ZpeGVkKFxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgICBjb25zdCBqZGF0ZSA9IENvbnZlcnRlci5maXhlZFRvSmFsYWxpKGZpeGVkRGF0ZSk7XG5cbiAgICByZXR1cm4gamRhdGU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gIHN0YXRpYyB0b19qYWxhbGkoZGF0ZSkgeyByZXR1cm4gSkRhdGUudG9KYWxhbGkoZGF0ZSk7IH1cblxuICAvKlxuICAgKiBjb252ZXJ0cyBhIEphbGFsaSBkYXRlIHRvIEdyZWdvcmlhblxuICAgKlxuICAgKiBAcGFyYW1zIHtOdW1iZXJ9IHllYXJcbiAgICogQHBhcmFtcyB7TnVtYmVyfSBtb250aFxuICAgKiBAcGFyYW1zIHtOdW1iZXJ9IGRheVxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgc3RhdGljIHRvR3JlZ29yaWFuKHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICBjb25zdCBnZGF0ZSA9IENvbnZlcnRlci5maXhlZFRvR3JlZ29yaWFuKFxuICAgICAgQ29udmVydGVyLmphbGFsaVRvRml4ZWQoeWVhciwgbW9udGgsIGRheSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBEYXRlKCtnZGF0ZVswXSwgK2dkYXRlWzFdIC0gMSwgK2dkYXRlWzJdKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgc3RhdGljIHRvX2dyZWdvcmlhbih5ZWFyLCBtb250aCwgZGF5KSB7IHJldHVybiBKRGF0ZS50b0dyZWdvcmlhbih5ZWFyLCBtb250aCwgZGF5KTsgfVxuXG4gIC8qXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIHllYXIgaXMgYSBsZWFwIHllYXIgb3Igbm90XG4gICAqXG4gICAqIEBwYXJhbXMge051bWJlcn0geWVhclxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzTGVhcFllYXIoeWVhcikge1xuICAgIHJldHVybiBDb252ZXJ0ZXIubGVhcFBlcnNpYW4oeWVhcik7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIG1vbnRoIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtcyB7TnVtYmVyfSB5ZWFyXG4gICAqIEBwYXJhbXMge051bWJlcn0gbW9udGggemVybyBiYXNlZFxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICBsZXQgY2FsY2VkWWVhciA9IHllYXIgLSBNYXRoLmZsb29yKG1vbnRoIC8gMTIpO1xuICAgIGxldCBjYWxjZWRNb250aCA9IG1vbnRoIC0gKE1hdGguZmxvb3IobW9udGggLyAxMikgKiAxMik7XG5cbiAgICBpZiAoY2FsY2VkTW9udGggPCAwKSB7XG4gICAgICBjYWxjZWRNb250aCArPSAxMjtcbiAgICAgIGNhbGNlZFllYXIgLT0gMTtcbiAgICB9IGVsc2UgaWYgKGNhbGNlZE1vbnRoID09PSAwKSB7XG4gICAgICBjYWxjZWRNb250aCA9IDEyO1xuICAgIH1cblxuICAgIGlmIChjYWxjZWRNb250aCA8IDYpIHtcbiAgICAgIHJldHVybiAzMTtcbiAgICB9IGlmIChjYWxjZWRNb250aCA8IDExKSB7XG4gICAgICByZXR1cm4gMzA7XG4gICAgfSBpZiAoSkRhdGUuaXNMZWFwWWVhcihjYWxjZWRZZWFyKSkge1xuICAgICAgcmV0dXJuIDMwO1xuICAgIH1cbiAgICByZXR1cm4gMjk7XG4gIH1cblxuICAvKlxuICAgKiBDb252ZXJ0cyBKRGF0ZSBkYXRlIHRvIEdyZWdvcmlhblxuICAgKi9cbiAgdG9HcmVnb3JpYW4oKSB7XG4gICAgcmV0dXJuIEpEYXRlLnRvR3JlZ29yaWFuKHRoaXMuZGF0ZVswXSwgdGhpcy5kYXRlWzFdLCB0aGlzLmRhdGVbMl0pO1xuICB9XG5cbiAgLypcbiAgICogU2hvd3MgSmFsYWxpJ3MgZnVsbCB5ZWFyLCBleDogMTM5M1xuICAgKlxuICAgKiBAcmV0dXJuIHtJbnRlZ2VyfVxuICAgKi9cbiAgZ2V0RnVsbFllYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVswXTtcbiAgfVxuXG4gIC8qXG4gICAqIFNldHMgdGhlIEphbGFsaSBmdWxsIHllYXJcbiAgICpcbiAgICogQHBhcmFtcyB7TnVtYmVyfSB5ZWFyXG4gICAqIEByZXR1cm4ge0pEYXRlfVxuICAgKi9cbiAgc2V0RnVsbFllYXIoeWVhcikge1xuICAgIHRoaXMuZGF0ZVswXSA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICB0aGlzLmlucHV0ID0gdGhpcy50b0dyZWdvcmlhbigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLypcbiAgICogU2hvd3MgSmFsYWxpIG1vbnRoIG51bWJlci5cbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBKYWxhbGkgbW9udGggbnVtYmVyXG4gICAqL1xuICBnZXRNb250aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlWzFdO1xuICB9XG5cbiAgLypcbiAgICogU2V0cyB0aGUgSmFsYWxpIG1vbnRoIG51bWJlci4gQW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDExXG4gICAqXG4gICAqIEBwYXJhbXMge051bWJlcn0gbW9udGhcbiAgICogQHJldHVybnMge0pEYXRlfVxuICAgKi9cbiAgc2V0TW9udGgobW9udGgpIHtcbiAgICBjb25zdCBmaXhlZCA9IGhlbHBlcnMuZml4TW9udGgodGhpcy5nZXRGdWxsWWVhcigpLCBwYXJzZUludChtb250aCwgMTApKTtcbiAgICBbdGhpcy5kYXRlWzBdLCB0aGlzLmRhdGVbMV1dID0gZml4ZWQ7XG4gICAgdGhpcy5pbnB1dCA9IHRoaXMudG9HcmVnb3JpYW4oKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLypcbiAgICogU2hvd3MgSmFsYWxpIGRheSBudW1iZXIuIEEgbnVtYmVyIGJldHdlZW4gMCB0byAzMVxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEphbGFsaSBkYXkgbnVtYmVyXG4gICAqL1xuICBnZXREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVbMl07XG4gIH1cblxuICAvKlxuICAgKiBTZXRzIEphbGFsaSBkYXkgbnVtYmVyLiBBIG51bWJlciBiZXR3ZWVuIDAgdG8gMzFcbiAgICpcbiAgICogQHBhcmFtcyB7TnVtYmVyfSBkYXRlXG4gICAqIEByZXR1cm4ge0pEYXRlfVxuICAgKi9cbiAgc2V0RGF0ZShkYXRlKSB7XG4gICAgdGhpcy5kYXRlWzJdID0gcGFyc2VJbnQoZGF0ZSwgMTApO1xuICAgIHRoaXMuaW5wdXQgPSB0aGlzLnRvR3JlZ29yaWFuKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IgdGhlIHNwZWNpZmllZCBkYXRlLiBBIG51bWJlciBiZXR3ZWVuIDAgdG8gNlxuICAgKlxuICAgKiBAcmV0dXJucyB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0RGF5KCkge1xuICAgIHJldHVybiB0aGlzLl9kLmdldERheSgpO1xuICB9XG5cbiAgLypcbiAgICogUmV0dXJucyBhIGZvcm1hdGVkIG91dHB1dCBvZiBjdXJyZW50IGRhdGVcbiAgICpcbiAgICogQHBhcmFtcyB7U3RyaW5nfSBmb3JtYXRcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKi9cbiAgZm9ybWF0KGZvcm1hdCkge1xuICAgIGxldCByZXN1bHQgPSBoZWxwZXJzLnJlcGxhY2VZZWFyKGZvcm1hdCwgdGhpcyk7XG4gICAgcmVzdWx0ID0gaGVscGVycy5yZXBsYWNlTW9udGgocmVzdWx0LCB0aGlzKTtcbiAgICByZXN1bHQgPSBoZWxwZXJzLnJlcGxhY2VEYXkocmVzdWx0LCB0aGlzKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJ0aGlzIiwiTU9OVEhfTkFNRVMiLCJBQkJSX0RBWVMiLCJEQVlTX05BTUVTIiwiR1JFR09SSUFOX0VQT0NIIiwiR1JFR09SSUFOX1RPX0ZJWEVEX09GRlNFVCIsIlBFUlNJQU5fRVBPQ0giLCJQRVJTSUFOX0NZQ0xFX0RBWVMiLCJOT05fTEVBUF9DT1JSRUNUSU9OIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImQiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkaXZDZWlsIiwiYSIsImIiLCJNYXRoIiwiZmxvb3IiLCJ6ZXJvTGVhZGluZyIsInN0ciIsImxlbmd0aCIsImNvbmNhdCIsInJlcGxhY2VZZWFyIiwiZGF0ZSIsIm1hdGNoIiwicmVwbGFjZSIsImdldEZ1bGxZZWFyIiwiU3RyaW5nIiwic2xpY2UiLCJyZXBsYWNlTW9udGgiLCJnZXRNb250aCIsInplcm9MZWFkaW5nTW9udGgiLCJ0b1N0cmluZyIsInJlcGxhY2VEYXkiLCJnZXREYXRlIiwiemVyb0xlYWRpbmdEYXRlIiwiZ2V0RGF5IiwiQ29udmVydGVyIiwiX2NsYXNzQ2FsbENoZWNrIiwidmFsdWUiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJsZWFwR3JlZ29yaWFuIiwiZDAiLCJuNDAwIiwiZDEiLCJuMTAwIiwiZDIiLCJuNCIsImQzIiwibjEiLCJncmVnb3JpYW5Ub0ZpeGVkIiwiY29ycmVjdGlvbiIsImdyZWdvcmlhblllYXJGcm9tRml4ZWQiLCJwcmlvckRheXMiLCJncmVnb3JpYW5OZXdZZWFyIiwibmV3WWVhciIsImluY2x1ZGVzIiwiZml4ZWREYXRlIiwiZGF5c1NpbmNlRXBvY2giLCJqYWxhbGlUb0ZpeGVkIiwiZGF5T2ZZZWFyIiwiamRhdGUiLCJKRGF0ZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiaXNBcnJheSIsIkRhdGUiLCJpbnB1dCIsIkVycm9yIiwibWFwIiwibnVtIiwicGFyc2VJbnQiLCJfZCIsInRvR3JlZ29yaWFuIiwidG9KYWxhbGkiLCJmaXhlZFRvSmFsYWxpIiwiZ2RhdGUiLCJmaXhlZFRvR3JlZ29yaWFuIiwibGVhcFBlcnNpYW4iLCJjYWxjZWRZZWFyIiwiY2FsY2VkTW9udGgiLCJpc0xlYXBZZWFyIiwiZml4ZWQiLCJ5ZWFyRGlmZiIsImhlbHBlcnMiLCJfZml4ZWQiLCJfc2xpY2VkVG9BcnJheSIsImZvcm1hdCIsInJlc3VsdCJdLCJzb3VyY2VSb290IjoiIn0=