UNPKG

kennitalajs

Version:

Validation for an Icelandic kennitala (social security number)

445 lines (365 loc) 181 kB
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Kennitala = function () { function Kennitala(kennitala) { _classCallCheck(this, Kennitala); var kt = void 0; if ((kennitala.toString() || '').toLowerCase() === 'fake') { kt = this.createFakeKennitala(); } else { kt = kennitala ? kennitala.toString() : ''; } kt = kt.replace(/-/g, ''); if (kt.length === 9) kt = '0' + kt; var validate = this.isValid(kt); if (validate.valid) { this.type = this.getType(kt); var age = this.getAge(kt); return { valid: validate.valid, type: this.type, age: age.years, msAge: age.msAge, birthdayToday: age.birthdayToday, kt: kt, formattedKt: kt.substr(0, 6) + '-' + kt.substr(6, 10) }; } else { return { valid: validate.valid, reason: validate.reason, errorCode: validate.errorCode }; } } _createClass(Kennitala, [{ key: 'randomInt', value: function randomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } }, { key: 'createFakeKennitala', value: function createFakeKennitala() { // Should be gte 1 and lte 72 // But can not be between 31 and 41 var person_or_company = Math.round(Math.random()) ? 'person' : 'company'; var _1_2 = person_or_company === 'person' ? this.randomInt(1, 31).toString() : this.randomInt(41, 71).toString(); _1_2 = _1_2.length === 1 ? '0' + _1_2 : _1_2; var _3_4 = this.randomInt(1, 12).toString(); _3_4 = _3_4.length === 1 ? '0' + _3_4 : _3_4; var _5_6 = this.randomInt(0, 99).toString(); _5_6 = _5_6.length === 1 ? '0' + _5_6 : _5_6; var _7_8 = this.randomInt(0, 99).toString(); _7_8 = _7_8.length === 1 ? '0' + _7_8 : _7_8; var list = _1_2 + _3_4 + _5_6 + _7_8; list = list.split('').map(function (value) { return parseInt(value, 10); }); this.currentRadtala = parseInt(_7_8, 10); var vartala = this.calculateVartala(list); if (vartala === 10) { var v = 10; while (v === 10) { var calcAgain = this.calculateVartala(list, true); if (calcAgain !== 10) vartala = calcAgain; v = calcAgain; } } var _9 = vartala.toString(); var _10 = ['0', '8', '9'][this.randomInt(0, 2)]; return _1_2 + _3_4 + _5_6 + _7_8 + _9 + _10; } }, { key: 'existanceInYears', value: function existanceInYears(birthday) { var today = new Date(); var age = today.getUTCFullYear() - birthday.getUTCFullYear(); var m = today.getUTCMonth() - birthday.getUTCMonth(); if (m < 0 || m === 0 && today.getUTCDate() < birthday.getUTCDate()) { age--; } return age; } }, { key: 'getAge', value: function getAge(kt) { // This function returns persons age in years and in millisecond along with a boolean // stating if the kennitala owner has a birthday today var list = kt.split(''); var century = void 0; if (list[9] === '0') { century = 20; } else if (list[9] === '9') { century = 19; } else if (list[9] === '8') { century = 18; } var now = new Date(); var nowMonth = now.getUTCMonth(); //Javascript month (actual month - 1) var nowDay = now.getUTCDate(); var month = parseInt(list[2] + list[3], 10) - 1; //Javascript month (actual month - 1) var day = this.type === 'person' ? parseInt(list[0] + list[1], 10) : parseInt(list[0] - 4 + list[1], 10); var birthday = new Date(parseInt(century + list[4] + list[5], 10), month, day); var birthdayToday = nowMonth === month && nowDay === day ? true : false; return { years: this.existanceInYears(birthday), msAge: now - birthday, birthdayToday: birthdayToday }; } }, { key: 'getType', value: function getType(kt) { var list = kt.split(''); // Checking if first two digits are between 41 and 71 // if so then this kennitala is a compnay kennitala var dd = parseInt(list[0] + list[1], 10); if (dd > 40 && dd < 72) return 'company'; return 'person'; } }, { key: 'isValid', value: function isValid(kt) { /* Note that kt is a string */ if (kt.length !== 10) return { valid: false, reason: 'Kennitala is too short', errorCode: 1 }; var list = kt.split(''); // Validating digits 1 and 2 // Should be gte 1 and lte 72 // But can not be between 31 and 41 var dd = parseInt(list[0] + list[1], 10); if (!(dd > 0 && dd < 72) || dd > 31 && dd < 41) return { valid: false, reason: 'Birthdate is out of range (digits 1 and 2)', errorCode: 2 }; // Validating digits 3 and 4 // Must be gt 0 lt 13 var mm = parseInt(list[2] + list[3], 10); if (!(mm > 0 && mm < 13)) return { valid: false, reason: 'Month digits are out of range (digits 3 and 4)', errorCode: 3 }; //Digits 5,6(years range from 0-99), 7 and 8 can be anything so we cant validate them // We are storing this in a variable because we need to increement this // if the calculated "vartala" is 10 and then recalculate with the incremented value this.currentRadtala = parseInt(list[6] + list[7], 10); // Turning list of numbers to int (from string) // since we will be working with ints from now on list.map(function (value) { return parseInt(value, 10); }); //Validating digit 9 if (this.validateNine(list) === false) return { valid: false, reason: 'Digit 9 is not valid. Read about "Níundi stafurinn" here: https://is.wikipedia.org/wiki/Kennitala', errorCode: 4 }; //Validating digit 10 var lastDigit = parseInt(list[9], 10); if (!(lastDigit === 0 || lastDigit === 8 || lastDigit === 9)) return { valid: false, reason: 'Century digit out of range (digit 10)', errorCode: 5 }; return { valid: true }; } }, { key: 'calculateVartala', value: function calculateVartala(list, incrementRadtala) { // Vartala is digit number 9 // This url explains how its calculated: https://is.wikipedia.org/wiki/Kennitala' if (incrementRadtala) { this.currentRadtala++; } var radtala = ('0' + this.currentRadtala.toString()).slice(-2).split(''); var radtalaOne = parseInt(radtala[0], 10); var radtalaTwo = parseInt(radtala[1], 10); var sum = list[0] * 3 + list[1] * 2 + list[2] * 7 + list[3] * 6 + list[4] * 5 + list[5] * 4 + radtalaOne * 3 + radtalaTwo * 2; var mod = sum % 11; var vartala = mod === 0 ? 0 : 11 - mod; return vartala; } }, { key: 'validateNine', value: function validateNine(list) { var vartala = this.calculateVartala(list); if (vartala === 10) { var v = 10; while (v === 10) { var calcAgain = this.calculateVartala(list, true); if (calcAgain !== 10) vartala = calcAgain; v = calcAgain; } } if (vartala === parseInt(list[8], 10)) { return true; } return false; } }]); return Kennitala; }(); global.Kennitala = Kennitala; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZha2VfOGMwNTVkODEuanMiXSwibmFtZXMiOlsiS2Vubml0YWxhIiwia2Vubml0YWxhIiwia3QiLCJ0b1N0cmluZyIsInRvTG93ZXJDYXNlIiwiY3JlYXRlRmFrZUtlbm5pdGFsYSIsInJlcGxhY2UiLCJsZW5ndGgiLCJ2YWxpZGF0ZSIsImlzVmFsaWQiLCJ2YWxpZCIsInR5cGUiLCJnZXRUeXBlIiwiYWdlIiwiZ2V0QWdlIiwieWVhcnMiLCJtc0FnZSIsImJpcnRoZGF5VG9kYXkiLCJmb3JtYXR0ZWRLdCIsInN1YnN0ciIsInJlYXNvbiIsImVycm9yQ29kZSIsIm1pbiIsIm1heCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInBlcnNvbl9vcl9jb21wYW55Iiwicm91bmQiLCJfMV8yIiwicmFuZG9tSW50IiwiXzNfNCIsIl81XzYiLCJfN184IiwibGlzdCIsInNwbGl0IiwibWFwIiwidmFsdWUiLCJwYXJzZUludCIsImN1cnJlbnRSYWR0YWxhIiwidmFydGFsYSIsImNhbGN1bGF0ZVZhcnRhbGEiLCJ2IiwiY2FsY0FnYWluIiwiXzkiLCJfMTAiLCJiaXJ0aGRheSIsInRvZGF5IiwiRGF0ZSIsImdldFVUQ0Z1bGxZZWFyIiwibSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImNlbnR1cnkiLCJub3ciLCJub3dNb250aCIsIm5vd0RheSIsIm1vbnRoIiwiZGF5IiwiZXhpc3RhbmNlSW5ZZWFycyIsImRkIiwibW0iLCJ2YWxpZGF0ZU5pbmUiLCJsYXN0RGlnaXQiLCJpbmNyZW1lbnRSYWR0YWxhIiwicmFkdGFsYSIsInNsaWNlIiwicmFkdGFsYU9uZSIsInJhZHRhbGFUd28iLCJzdW0iLCJtb2QiLCJnbG9iYWwiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFNQSxTO0FBQ0YsdUJBQVlDLFNBQVosRUFBdUI7QUFBQTs7QUFDbkIsWUFBSUMsV0FBSjtBQUNBLFlBQUksQ0FBQ0QsVUFBVUUsUUFBVixNQUF3QixFQUF6QixFQUE2QkMsV0FBN0IsT0FBK0MsTUFB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S0FBSyxDQUFMLElBQVUsQ0FGVixHQUdBQSxLQUFLLENBQUwsSUFBVSxDQUhWLEdBSUFBLEtBQUssQ0FBTCxJQUFVLENBSlYsR0FLQUEsS0FBSyxDQUFMLElBQVUsQ0FMVixHQU1BaUMsYUFBYSxDQU5iLEdBT0FDLGFBQWEsQ0FSakI7O0FBVUEsZ0JBQUlFLE1BQU1ELE1BQU0sRUFBaEI7O0FBRUEsZ0JBQU03QixVQUFVOEIsUUFBUSxDQUFSLEdBQVksQ0FBWixHQUFnQixLQUFLQSxHQUFyQztBQUNBLG1CQUFPOUIsT0FBUDtBQUNIOzs7cUNBRVlOLEksRUFBTTtBQUNmLGdCQUFJTSxVQUFVLEtBQUtDLGdCQUFMLENBQXNCUCxJQUF0QixDQUFkOztBQUVBLGdCQUFJTSxZQUFZLEVBQWhCLEVBQW9CO0FBQ2hCLG9CQUFJRSxJQUFJLEVBQVI7QUFDQSx1QkFBT0EsTUFBTSxFQUFiLEVBQWlCO0FBQ2Isd0JBQU1DLFlBQVksS0FBS0YsZ0JBQUwsQ0FBc0JQLElBQXRCLEVBQTRCLElBQTVCLENBQWxCO0FBQ0Esd0JBQUlTLGNBQWMsRUFBbEIsRUFBc0JILFVBQVVHLFNBQVY7QUFDdEJELHdCQUFJQyxTQUFKO0FBQ0g7QUFDSjs7QUFFRCxnQkFBSUgsWUFBWUYsU0FBU0osS0FBSyxDQUFMLENBQVQsRUFBa0IsRUFBbEIsQ0FBaEIsRUFBdUM7QUFDbkMsdUJBQU8sSUFBUDtBQUNIOztBQUVELG1CQUFPLEtBQVA7QUFDSDs7Ozs7O0FBR0xxQyxPQUFPdkUsU0FBUCxHQUFtQkEsU0FBbkIiLCJmaWxlIjoiZmFrZV84YzA1NWQ4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEtlbm5pdGFsYSB7XHJcbiAgICBjb25zdHJ1Y3RvcihrZW5uaXRhbGEpIHtcclxuICAgICAgICBsZXQga3Q7XHJcbiAgICAgICAgaWYgKChrZW5uaXRhbGEudG9TdHJpbmcoKSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2Zha2UnKSB7XHJcbiAgICAgICAgICAgIGt0ID0gdGhpcy5jcmVhdGVGYWtlS2Vubml0YWxhKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAga3QgPSBrZW5uaXRhbGEgPyBrZW5uaXRhbGEudG9TdHJpbmcoKSA6ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAga3QgPSBrdC5yZXBsYWNlKC8tL2csICcnKTtcclxuICAgICAgICBpZiAoa3QubGVuZ3RoID09PSA5KSBrdCA9ICcwJyArIGt0O1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gdGhpcy5pc1ZhbGlkKGt0KTtcclxuXHJcbiAgICAgICAgaWYgKHZhbGlkYXRlLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHRoaXMuZ2V0VHlwZShrdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFnZSA9IHRoaXMuZ2V0QWdlKGt0KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZDogdmFsaWRhdGUudmFsaWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBhZ2U6IGFnZS55ZWFycyxcclxuICAgICAgICAgICAgICAgIG1zQWdlOiBhZ2UubXNBZ2UsXHJcbiAgICAgICAgICAgICAgICBiaXJ0aGRheVRvZGF5OiBhZ2UuYmlydGhkYXlUb2RheSxcclxuICAgICAgICAgICAgICAgIGt0OiBrdCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZEt0OiBrdC5zdWJzdHIoMCwgNikgKyAnLScgKyBrdC5zdWJzdHIoNiwgMTApLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZDogdmFsaWRhdGUudmFsaWQsXHJcbiAgICAgICAgICAgICAgICByZWFzb246IHZhbGlkYXRlLnJlYXNvbixcclxuICAgICAgICAgICAgICAgIGVycm9yQ29kZTogdmFsaWRhdGUuZXJyb3JDb2RlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByYW5kb21JbnQobWluLCBtYXgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGYWtlS2Vubml0YWxhKCkge1xyXG4gICAgICAgIC8vIFNob3VsZCBiZSBndGUgMSBhbmQgbHRlIDcyXHJcbiAgICAgICAgLy8gQnV0IGNhbiBub3QgYmUgYmV0d2VlbiAzMSBhbmQgNDFcclxuICAgICAgICBjb25zdCBwZXJzb25fb3JfY29tcGFueSA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSkgPyAncGVyc29uJyA6ICdjb21wYW55JztcclxuXHJcbiAgICAgICAgbGV0IF8xXzIgPVxyXG4gICAgICAgICAgICBwZXJzb25fb3JfY29tcGFueSA9PT0gJ3BlcnNvbicgPyB0aGlzLnJhbmRvbUludCgxLCAzMSkudG9TdHJpbmcoKSA6IHRoaXMucmFuZG9tSW50KDQxLCA3MSkudG9TdHJpbmcoKTtcclxuICAgICAgICBfMV8yID0gXzFfMi5sZW5ndGggPT09IDEgPyAnMCcgKyBfMV8yIDogXzFfMjtcclxuXHJcbiAgICAgICAgbGV0IF8zXzQgPSB0aGlzLnJhbmRvbUludCgxLCAxMikudG9TdHJpbmcoKTtcclxuICAgICAgICBfM180ID0gXzNfNC5sZW5ndGggPT09IDEgPyAnMCcgKyBfM180IDogXzNfNDtcclxuXHJcbiAgICAgICAgbGV0IF81XzYgPSB0aGlzLnJhbmRvbUludCgwLCA5OSkudG9TdHJpbmcoKTtcclxuICAgICAgICBfNV82ID0gXzVfNi5sZW5ndGggPT09IDEgPyAnMCcgKyBfNV82IDogXzVfNjtcclxuXHJcbiAgICAgICAgbGV0IF83XzggPSB0aGlzLnJhbmRvbUludCgwLCA5OSkudG9TdHJpbmcoKTtcclxuICAgICAgICBfN184ID0gXzdfOC5sZW5ndGggPT09IDEgPyAnMCcgKyBfN184IDogXzdfODtcclxuXHJcbiAgICAgICAgbGV0IGxpc3QgPSBfMV8yICsgXzNfNCArIF81XzYgKyBfN184O1xyXG4gICAgICAgIGxpc3QgPSBsaXN0LnNwbGl0KCcnKS5tYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRSYWR0YWxhID0gcGFyc2VJbnQoXzdfOCwgMTApO1xyXG4gICAgICAgIGxldCB2YXJ0YWxhID0gdGhpcy5jYWxjdWxhdGVWYXJ0YWxhKGxpc3QpO1xyXG5cclxuICAgICAgICBpZiAodmFydGFsYSA9PT0gMTApIHtcclxuICAgICAgICAgICAgbGV0IHYgPSAxMDtcclxuICAgICAgICAgICAgd2hpbGUgKHYgPT09IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxjQWdhaW4gPSB0aGlzLmNhbGN1bGF0ZVZhcnRhbGEobGlzdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsY0FnYWluICE9PSAxMCkgdmFydGFsYSA9IGNhbGNBZ2FpbjtcclxuICAgICAgICAgICAgICAgIHYgPSBjYWxjQWdhaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBfOSA9IHZhcnRhbGEudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgbGV0IF8xMCA9IFsnMCcsICc4JywgJzknXVt0aGlzLnJhbmRvbUludCgwLCAyKV07XHJcblxyXG4gICAgICAgIHJldHVybiBfMV8yICsgXzNfNCArIF81XzYgKyBfN184ICsgXzkgKyBfMTA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhpc3RhbmNlSW5ZZWFycyhiaXJ0aGRheSkge1xyXG4gICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdmFyIGFnZSA9IHRvZGF5LmdldFVUQ0Z1bGxZZWFyKCkgLSBiaXJ0aGRheS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgIHZhciBtID0gdG9kYXkuZ2V0VVRDTW9udGgoKSAtIGJpcnRoZGF5LmdldFVUQ01vbnRoKCk7XHJcbiAgICAgICAgaWYgKG0gPCAwIHx8IChtID09PSAwICYmIHRvZGF5LmdldFVUQ0RhdGUoKSA8IGJpcnRoZGF5LmdldFVUQ0RhdGUoKSkpIHtcclxuICAgICAgICAgICAgYWdlLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWdlKGt0KSB7XHJcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBlcnNvbnMgYWdlIGluIHllYXJzIGFuZCBpbiBtaWxsaXNlY29uZCBhbG9uZyB3aXRoIGEgYm9vbGVhblxyXG4gICAgICAgIC8vIHN0YXRpbmcgaWYgdGhlIGtlbm5pdGFsYSBvd25lciBoYXMgYSBiaXJ0aGRheSB0b2RheVxyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBrdC5zcGxpdCgnJyk7XHJcblxyXG4gICAgICAgIGxldCBjZW50dXJ5O1xyXG5cclxuICAgICAgICBpZiAobGlzdFs5XSA9PT0gJzAnKSB7XHJcbiAgICAgICAgICAgIGNlbnR1cnkgPSAyMDtcclxuICAgICAgICB9IGVsc2UgaWYgKGxpc3RbOV0gPT09ICc5Jykge1xyXG4gICAgICAgICAgICBjZW50dXJ5ID0gMTk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsaXN0WzldID09PSAnOCcpIHtcclxuICAgICAgICAgICAgY2VudHVyeSA9IDE4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBub3dNb250aCA9IG5vdy5nZXRVVENNb250aCgpOyAvL0phdmFzY3JpcHQgbW9udGggKGFjdHVhbCBtb250aCAtIDEpXHJcbiAgICAgICAgY29uc3Qgbm93RGF5ID0gbm93LmdldFVUQ0RhdGUoKTtcclxuXHJcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChsaXN0WzJdICsgbGlzdFszXSwgMTApIC0gMTsgLy9KYXZhc2NyaXB0IG1vbnRoIChhY3R1YWwgbW9udGggLSAxKVxyXG4gICAgICAgIGNvbnN0IGRheSA9IHRoaXMudHlwZSA9PT0gJ3BlcnNvbicgPyBwYXJzZUludChsaXN0WzBdICsgbGlzdFsxXSwgMTApIDogcGFyc2VJbnQobGlzdFswXSAtIDQgKyBsaXN0WzFdLCAxMCk7XHJcbiAgICAgICAgY29uc3QgYmlydGhkYXkgPSBuZXcgRGF0ZShwYXJzZUludChjZW50dXJ5ICsgbGlzdFs0XSArIGxpc3RbNV0sIDEwKSwgbW9udGgsIGRheSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJpcnRoZGF5VG9kYXkgPSBub3dNb250aCA9PT0gbW9udGggJiYgbm93RGF5ID09PSBkYXkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHllYXJzOiB0aGlzLmV4aXN0YW5jZUluWWVhcnMoYmlydGhkYXkpLFxyXG4gICAgICAgICAgICBtc0FnZTogbm93IC0gYmlydGhkYXksXHJcbiAgICAgICAgICAgIGJpcnRoZGF5VG9kYXksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUeXBlKGt0KSB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGt0LnNwbGl0KCcnKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2tpbmcgaWYgZmlyc3QgdHdvIGRpZ2l0cyBhcmUgYmV0d2VlbiA0MSBhbmQgNzFcclxuICAgICAgICAvLyBpZiBzbyB0aGVuIHRoaXMga2Vubml0YWxhIGlzIGEgY29tcG5heSBrZW5uaXRhbGFcclxuICAgICAgICBjb25zdCBkZCA9IHBhcnNlSW50KGxpc3RbMF0gKyBsaXN0WzFdLCAxMCk7XHJcbiAgICAgICAgaWYgKGRkID4gNDAgJiYgZGQgPCA3MikgcmV0dXJuICdjb21wYW55JztcclxuXHJcbiAgICAgICAgcmV0dXJuICdwZXJzb24nO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVmFsaWQoa3QpIHtcclxuICAgICAgICAvKiBOb3RlIHRoYXQga3QgaXMgYSBzdHJpbmcgKi9cclxuICAgICAgICBpZiAoa3QubGVuZ3RoICE9PSAxMCkgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb246ICdLZW5uaXRhbGEgaXMgdG9vIHNob3J0JywgZXJyb3JDb2RlOiAxIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBrdC5zcGxpdCgnJyk7XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRpbmcgZGlnaXRzIDEgYW5kIDJcclxuICAgICAgICAvLyBTaG91bGQgYmUgZ3RlIDEgYW5kIGx0ZSA3MlxyXG4gICAgICAgIC8vIEJ1dCBjYW4gbm90IGJlIGJldHdlZW4gMzEgYW5kIDQxXHJcbiAgICAgICAgY29uc3QgZGQgPSBwYXJzZUludChsaXN0WzBdICsgbGlzdFsxXSwgMTApO1xyXG4gICAgICAgIGlmICghKGRkID4gMCAmJiBkZCA8IDcyKSB8fCAoZGQgPiAzMSAmJiBkZCA8IDQxKSlcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlYXNvbjogJ0JpcnRoZGF0ZSBpcyBvdXQgb2YgcmFuZ2UgKGRpZ2l0cyAxIGFuZCAyKScsXHJcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IDIsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRpbmcgZGlnaXRzIDMgYW5kIDRcclxuICAgICAgICAvLyBNdXN0IGJlIGd0IDAgbHQgMTNcclxuICAgICAgICBjb25zdCBtbSA9IHBhcnNlSW50KGxpc3RbMl0gKyBsaXN0WzNdLCAxMCk7XHJcbiAgICAgICAgaWYgKCEobW0gPiAwICYmIG1tIDwgMTMpKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVhc29uOiAnTW9udGggZGlnaXRzIGFyZSBvdXQgb2YgcmFuZ2UgKGRpZ2l0cyAzIGFuZCA0KScsXHJcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IDMsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vRGlnaXRzIDUsNih5ZWFycyByYW5nZSBmcm9tIDAtOTkpLCA3IGFuZCA4IGNhbiBiZSBhbnl0aGluZyBzbyB3ZSBjYW50IHZhbGlkYXRlIHRoZW1cclxuXHJcbiAgICAgICAgLy8gV2UgYXJlIHN0b3JpbmcgdGhpcyBpbiBhIHZhcmlhYmxlIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmNyZWVtZW50IHRoaXNcclxuICAgICAgICAvLyBpZiB0aGUgY2FsY3VsYXRlZCBcInZhcnRhbGFcIiBpcyAxMCBhbmQgdGhlbiByZWNhbGN1bGF0ZSB3aXRoIHRoZSBpbmNyZW1lbnRlZCB2YWx1ZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFJhZHRhbGEgPSBwYXJzZUludChsaXN0WzZdICsgbGlzdFs3XSwgMTApO1xyXG5cclxuICAgICAgICAvLyBUdXJuaW5nIGxpc3Qgb2YgbnVtYmVycyB0byBpbnQgKGZyb20gc3RyaW5nKVxyXG4gICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgYmUgd29ya2luZyB3aXRoIGludHMgZnJvbSBub3cgb25cclxuICAgICAgICBsaXN0Lm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vVmFsaWRhdGluZyBkaWdpdCA5XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVOaW5lKGxpc3QpID09PSBmYWxzZSlcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlYXNvbjpcclxuICAgICAgICAgICAgICAgICAgICAnRGlnaXQgOSBpcyBub3QgdmFsaWQuIFJlYWQgYWJvdXQgXCJOw611bmRpIHN0YWZ1cmlublwiIGhlcmU6IGh0dHBzOi8vaXMud2lraXBlZGlhLm9yZy93aWtpL0tlbm5pdGFsYScsXHJcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IDQsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vVmFsaWRhdGluZyBkaWdpdCAxMFxyXG4gICAgICAgIGNvbnN0IGxhc3REaWdpdCA9IHBhcnNlSW50KGxpc3RbOV0sIDEwKTtcclxuICAgICAgICBpZiAoIShsYXN0RGlnaXQgPT09IDAgfHwgbGFzdERpZ2l0ID09PSA4IHx8IGxhc3REaWdpdCA9PT0gOSkpXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWFzb246ICdDZW50dXJ5IGRpZ2l0IG91dCBvZiByYW5nZSAoZGlnaXQgMTApJyxcclxuICAgICAgICAgICAgICAgIGVycm9yQ29kZTogNSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVWYXJ0YWxhKGxpc3QsIGluY3JlbWVudFJhZHRhbGEpIHtcclxuICAgICAgICAvLyBWYXJ0YWxhIGlzIGRpZ2l0IG51bWJlciA5XHJcbiAgICAgICAgLy8gVGhpcyB1cmwgZXhwbGFpbnMgaG93IGl0cyBjYWxjdWxhdGVkOiBodHRwczovL2lzLndpa2lwZWRpYS5vcmcvd2lraS9LZW5uaXRhbGEnXHJcblxyXG4gICAgICAgIGlmIChpbmNyZW1lbnRSYWR0YWxhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJhZHRhbGErKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJhZHRhbGEgPSAoJzAnICsgdGhpcy5jdXJyZW50UmFkdGFsYS50b1N0cmluZygpKS5zbGljZSgtMikuc3BsaXQoJycpO1xyXG5cclxuICAgICAgICBjb25zdCByYWR0YWxhT25lID0gcGFyc2VJbnQocmFkdGFsYVswXSwgMTApO1xyXG4gICAgICAgIGNvbnN0IHJhZHRhbGFUd28gPSBwYXJzZUludChyYWR0YWxhWzFdLCAxMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1bSA9XHJcbiAgICAgICAgICAgIGxpc3RbMF0gKiAzICtcclxuICAgICAgICAgICAgbGlzdFsxXSAqIDIgK1xyXG4gICAgICAgICAgICBsaXN0WzJdICogNyArXHJcbiAgICAgICAgICAgIGxpc3RbM10gKiA2ICtcclxuICAgICAgICAgICAgbGlzdFs0XSAqIDUgK1xyXG4gICAgICAgICAgICBsaXN0WzVdICogNCArXHJcbiAgICAgICAgICAgIHJhZHRhbGFPbmUgKiAzICtcclxuICAgICAgICAgICAgcmFkdGFsYVR3byAqIDI7XHJcblxyXG4gICAgICAgIGxldCBtb2QgPSBzdW0gJSAxMTtcclxuXHJcbiAgICAgICAgY29uc3QgdmFydGFsYSA9IG1vZCA9PT0gMCA/IDAgOiAxMSAtIG1vZDtcclxuICAgICAgICByZXR1cm4gdmFydGFsYTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZU5pbmUobGlzdCkge1xyXG4gICAgICAgIGxldCB2YXJ0YWxhID0gdGhpcy5jYWxjdWxhdGVWYXJ0YWxhKGxpc3QpO1xyXG5cclxuICAgICAgICBpZiAodmFydGFsYSA9PT0gMTApIHtcclxuICAgICAgICAgICAgbGV0IHYgPSAxMDtcclxuICAgICAgICAgICAgd2hpbGUgKHYgPT09IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxjQWdhaW4gPSB0aGlzLmNhbGN1bGF0ZVZhcnRhbGEobGlzdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsY0FnYWluICE9PSAxMCkgdmFydGFsYSA9IGNhbGNBZ2FpbjtcclxuICAgICAgICAgICAgICAgIHYgPSBjYWxjQWdhaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YXJ0YWxhID09PSBwYXJzZUludChsaXN0WzhdLCAxMCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmdsb2JhbC5LZW5uaXRhbGEgPSBLZW5uaXRhbGE7XHJcbiJdfQ== }).call(this,require("U9cQDF"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_8c055d81.js","/") },{"U9cQDF":3,"buffer":4}],2:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; ;(function (exports) { 'use strict'; var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; var PLUS = '+'.charCodeAt(0); var SLASH = '/'.charCodeAt(0); var NUMBER = '0'.charCodeAt(0); var LOWER = 'a'.charCodeAt(0); var UPPER = 'A'.charCodeAt(0); var PLUS_URL_SAFE = '-'.charCodeAt(0); var SLASH_URL_SAFE = '_'.charCodeAt(0); function decode(elt) { var code = elt.charCodeAt(0); if (code === PLUS || code === PLUS_URL_SAFE) return 62; // '+' if (code === SLASH || code === SLASH_URL_SAFE) return 63; // '/' if (code < NUMBER) return -1; //no match if (code < NUMBER + 10) return code - NUMBER + 26 + 26; if (code < UPPER + 26) return code - UPPER; if (code < LOWER + 26) return code - LOWER + 26; } function b64ToByteArray(b64) { var i, j, l, tmp, placeHolders, arr; if (b64.length % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4'); } // the number of equal signs (place holders) // if there are two placeholders, than the two characters before it // represent one byte // if there is only one, then the three characters before it represent 2 bytes // this is just a cheap hack to not do indexOf twice var len = b64.length; placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0; // base64 is 4/3 + up to two characters of the original data arr = new Arr(b64.length * 3 / 4 - placeHolders); // if there are placeholders, only get up to the last complete 4 chars l = placeHolders > 0 ? b64.length - 4 : b64.length; var L = 0; function push(v) { arr[L++] = v; } for (i = 0, j = 0; i < l; i += 4, j += 3) { tmp = decode(b64.charAt(i)) << 18 | decode(b64.charAt(i + 1)) << 12 | decode(b64.charAt(i + 2)) << 6 | decode(b64.charAt(i + 3)); push((tmp & 0xFF0000) >> 16); push((tmp & 0xFF00) >> 8); push(tmp & 0xFF); } if (placeHolders === 2) { tmp = decode(b64.charAt(i)) << 2 | decode(b64.charAt(i + 1)) >> 4; push(tmp & 0xFF); } else if (placeHolders === 1) { tmp = decode(b64.charAt(i)) << 10 | decode(b64.charAt(i + 1)) << 4 | decode(b64.charAt(i + 2)) >> 2; push(tmp >> 8 & 0xFF); push(tmp & 0xFF); } return arr; } function uint8ToBase64(uint8) { var i, extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes output = "", temp, length; function encode(num) { return lookup.charAt(num); } function tripletToBase64(num) { return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F); } // go through the array every three bytes, we'll deal with trailing stuff later for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2]; output += tripletToBase64(temp); } // pad the end with zeros, but make sure to not forget the extra bytes switch (extraBytes) { case 1: temp = uint8[uint8.length - 1]; output += encode(temp >> 2); output += encode(temp << 4 & 0x3F); output += '=='; break; case 2: temp = (uint8[uint8.length - 2] << 8) + uint8[uint8.length - 1]; output += encode(temp >> 10); output += encode(temp >> 4 & 0x3F); output += encode(temp << 2 & 0x3F); output += '='; break; } return output; } exports.toByteArray = b64ToByteArray; exports.fromByteArray = uint8ToBase64; })(typeof exports === 'undefined' ? undefined.base64js = {} : exports); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImI2NC5qcyJdLCJuYW1lcyI6WyJsb29rdXAiLCJleHBvcnRzIiwiQXJyIiwiVWludDhBcnJheSIsIkFycmF5IiwiUExVUyIsImNoYXJDb2RlQXQiLCJTTEFTSCIsIk5VTUJFUiIsIkxPV0VSIiwiVVBQRVIiLCJQTFVTX1VSTF9TQUZFIiwiU0xBU0hfVVJMX1NBRkUiLCJkZWNvZGUiLCJlbHQiLCJjb2RlIiwiYjY0VG9CeXRlQXJyYXkiLCJiNjQiLCJpIiwiaiIsImwiLCJ0bXAiLCJwbGFjZUhvbGRlcnMiLCJhcnIiLCJsZW5ndGgiLCJFcnJvciIsImxlbiIsImNoYXJBdCIsIkwiLCJwdXNoIiwidiIsInVpbnQ4VG9CYXNlNjQiLCJ1aW50OCIsImV4dHJhQnl0ZXMiLCJvdXRwdXQiLCJ0ZW1wIiwiZW5jb2RlIiwibnVtIiwidHJpcGxldFRvQmFzZTY0IiwidG9CeXRlQXJyYXkiLCJmcm9tQnl0ZUFycmF5IiwiYmFzZTY0anMiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBSUEsU0FBUyxrRUFBYjs7QUFFQSxDQUFFLFdBQVVDLE9BQVYsRUFBbUI7QUFDcEI7O0FBRUMsS0FBSUMsTUFBTyxPQUFPQyxVQUFQLEtBQXNCLFdBQXZCLEdBQ05BLFVBRE0sR0FFTkMsS0FGSjs7QUFJRCxLQUFJQyxPQUFTLElBQUlDLFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJQyxRQUFTLElBQUlELFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJRSxTQUFTLElBQUlGLFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJRyxRQUFTLElBQUlILFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJSSxRQUFTLElBQUlKLFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJSyxnQkFBZ0IsSUFBSUwsVUFBSixDQUFlLENBQWYsQ0FBcEI7QUFDQSxLQUFJTSxpQkFBaUIsSUFBSU4sVUFBSixDQUFlLENBQWYsQ0FBckI7O0FBRUEsVUFBU08sTUFBVCxDQUFpQkMsR0FBakIsRUFBc0I7QUFDckIsTUFBSUMsT0FBT0QsSUFBSVIsVUFBSixDQUFlLENBQWYsQ0FBWDtBQUNBLE1BQUlTLFNBQVNWLElBQVQsSUFDQVUsU0FBU0osYUFEYixFQUVDLE9BQU8sRUFBUCxDQUpvQixDQUlWO0FBQ1gsTUFBSUksU0FBU1IsS0FBVCxJQUNBUSxTQUFTSCxjQURiLEVBRUMsT0FBTyxFQUFQLENBUG9CLENBT1Y7QUFDWCxNQUFJRyxPQUFPUCxNQUFYLEVBQ0MsT0FBTyxDQUFDLENBQVIsQ0FUb0IsQ0FTVjtBQUNYLE1BQUlPLE9BQU9QLFNBQVMsRUFBcEIsRUFDQyxPQUFPTyxPQUFPUCxNQUFQLEdBQWdCLEVBQWhCLEdBQXFCLEVBQTVCO0FBQ0QsTUFBSU8sT0FBT0wsUUFBUSxFQUFuQixFQUNDLE9BQU9LLE9BQU9MLEtBQWQ7QUFDRCxNQUFJSyxPQUFPTixRQUFRLEVBQW5CLEVBQ0MsT0FBT00sT0FBT04sS0FBUCxHQUFlLEVBQXRCO0FBQ0Q7O0FBRUQsVUFBU08sY0FBVCxDQUF5QkMsR0FBekIsRUFBOEI7QUFDN0IsTUFBSUMsQ0FBSixFQUFPQyxDQUFQLEVBQVVDLENBQVYsRUFBYUMsR0FBYixFQUFrQkMsWUFBbEIsRUFBZ0NDLEdBQWhDOztBQUVBLE1BQUlOLElBQUlPLE1BQUosR0FBYSxDQUFiLEdBQWlCLENBQXJCLEVBQXdCO0FBQ3ZCLFNBQU0sSUFBSUMsS0FBSixDQUFVLGdEQUFWLENBQU47QUFDQTs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSUMsTUFBTVQsSUFBSU8sTUFBZDtBQUNBRixpQkFBZSxRQUFRTCxJQUFJVSxNQUFKLENBQVdELE1BQU0sQ0FBakIsQ0FBUixHQUE4QixDQUE5QixHQUFrQyxRQUFRVCxJQUFJVSxNQUFKLENBQVdELE1BQU0sQ0FBakIsQ0FBUixHQUE4QixDQUE5QixHQUFrQyxDQUFuRjs7QUFFQTtBQUNBSCxRQUFNLElBQUlyQixHQUFKLENBQVFlLElBQUlPLE1BQUosR0FBYSxDQUFiLEdBQWlCLENBQWpCLEdBQXFCRixZQUE3QixDQUFOOztBQUVBO0FBQ0FGLE1BQUlFLGVBQWUsQ0FBZixHQUFtQkwsSUFBSU8sTUFBSixHQUFhLENBQWhDLEdBQW9DUCxJQUFJTyxNQUE1Qzs7QUFFQSxNQUFJSSxJQUFJLENBQVI7O0FBRUEsV0FBU0MsSUFBVCxDQUFlQyxDQUFmLEVBQWtCO0FBQ2pCUCxPQUFJSyxHQUFKLElBQVdFLENBQVg7QUFDQTs7QUFFRCxPQUFLWixJQUFJLENBQUosRUFBT0MsSUFBSSxDQUFoQixFQUFtQkQsSUFBSUUsQ0FBdkIsRUFBMEJGLEtBQUssQ0FBTCxFQUFRQyxLQUFLLENBQXZDLEVBQTBDO0FBQ3pDRSxTQUFPUixPQUFPSSxJQUFJVSxNQUFKLENBQVdULENBQVgsQ0FBUCxLQUF5QixFQUExQixHQUFpQ0wsT0FBT0ksSUFBSVUsTUFBSixDQUFXVCxJQUFJLENBQWYsQ0FBUCxLQUE2QixFQUE5RCxHQUFxRUwsT0FBT0ksSUFBSVUsTUFBSixDQUFXVCxJQUFJLENBQWYsQ0FBUCxLQUE2QixDQUFsRyxHQUF1R0wsT0FBT0ksSUFBSVUsTUFBSixDQUFXVCxJQUFJLENBQWYsQ0FBUCxDQUE3RztBQUNBVyxRQUFLLENBQUNSLE1BQU0sUUFBUCxLQUFvQixFQUF6QjtBQUNBUSxRQUFLLENBQUNSLE1BQU0sTUFBUCxLQUFrQixDQUF2QjtBQUNBUSxRQUFLUixNQUFNLElBQVg7QUFDQTs7QUFFRCxNQUFJQyxpQkFBaUIsQ0FBckIsRUFBd0I7QUFDdkJELFNBQU9SLE9BQU9JLElBQUlVLE1BQUosQ0FBV1QsQ0FBWCxDQUFQLEtBQXlCLENBQTFCLEdBQWdDTCxPQUFPSSxJQUFJVSxNQUFKLENBQVdULElBQUksQ0FBZixDQUFQLEtBQTZCLENBQW5FO0FBQ0FXLFFBQUtSLE1BQU0sSUFBWDtBQUNBLEdBSEQsTUFHTyxJQUFJQyxpQkFBaUIsQ0FBckIsRUFBd0I7QUFDOUJELFNBQU9SLE9BQU9JLElBQUlVLE1BQUosQ0FBV1QsQ0FBWCxDQUFQLEtBQXlCLEVBQTFCLEdBQWlDTCxPQUFPSSxJQUFJVSxNQUFKLENBQVdULElBQUksQ0FBZixDQUFQLEtBQTZCLENBQTlELEdBQW9FTCxPQUFPSSxJQUFJVSxNQUFKLENBQVdULElBQUksQ0FBZixDQUFQLEtBQTZCLENBQXZHO0FBQ0FXLFFBQU1SLE9BQU8sQ0FBUixHQUFhLElBQWxCO0FBQ0FRLFFBQUtSLE1BQU0sSUFBWDtBQUNBOztBQUVELFNBQU9FLEdBQVA7QUFDQTs7QUFFRCxVQUFTUSxhQUFULENBQXdCQyxLQUF4QixFQUErQjtBQUM5QixNQUFJZCxDQUFKO0FBQUEsTUFDQ2UsYUFBYUQsTUFBTVIsTUFBTixHQUFlLENBRDdCO0FBQUEsTUFDZ0M7QUFDL0JVLFdBQVMsRUFGVjtBQUFBLE1BR0NDLElBSEQ7QUFBQSxNQUdPWCxNQUhQOztBQUtBLFdBQVNZLE1BQVQsQ0FBaUJDLEdBQWpCLEVBQXNCO0FBQ3JCLFVBQU9yQyxPQUFPMkIsTUFBUCxDQUFjVSxHQUFkLENBQVA7QUFDQTs7QUFFRCxXQUFTQyxlQUFULENBQTBCRCxHQUExQixFQUErQjtBQUM5QixVQUFPRCxPQUFPQyxPQUFPLEVBQVAsR0FBWSxJQUFuQixJQUEyQkQsT0FBT0MsT0FBTyxFQUFQLEdBQVksSUFBbkIsQ0FBM0IsR0FBc0RELE9BQU9DLE9BQU8sQ0FBUCxHQUFXLElBQWxCLENBQXRELEdBQWdGRCxPQUFPQyxNQUFNLElBQWIsQ0FBdkY7QUFDQTs7QUFFRDtBQUNBLE9BQUtuQixJQUFJLENBQUosRUFBT00sU0FBU1EsTUFBTVIsTUFBTixHQUFlUyxVQUFwQyxFQUFnRGYsSUFBSU0sTUFBcEQsRUFBNEROLEtBQUssQ0FBakUsRUFBb0U7QUFDbkVpQixVQUFPLENBQUNILE1BQU1kLENBQU4sS0FBWSxFQUFiLEtBQW9CYyxNQUFNZCxJQUFJLENBQVYsS0FBZ0IsQ0FBcEMsSUFBMENjLE1BQU1kLElBQUksQ0FBVixDQUFqRDtBQUNBZ0IsYUFBVUksZ0JBQWdCSCxJQUFoQixDQUFWO0FBQ0E7O0FBRUQ7QUFDQSxVQUFRRixVQUFSO0FBQ0MsUUFBSyxDQUFMO0FBQ0NFLFdBQU9ILE1BQU1BLE1BQU1SLE1BQU4sR0FBZSxDQUFyQixDQUFQO0FBQ0FVLGNBQVVFLE9BQU9ELFFBQVEsQ0FBZixDQUFWO0FBQ0FELGNBQVVFLE9BQVFELFFBQVEsQ0FBVCxHQUFjLElBQXJCLENBQVY7QUFDQUQsY0FBVSxJQUFWO0FBQ0E7QUFDRCxRQUFLLENBQUw7QUFDQ0MsV0FBTyxDQUFDSCxNQUFNQSxNQUFNUixNQUFOLEdBQWUsQ0FBckIsS0FBMkIsQ0FBNUIsSUFBa0NRLE1BQU1BLE1BQU1SLE1BQU4sR0FBZSxDQUFyQixDQUF6QztBQUNBVSxjQUFVRSxPQUFPRCxRQUFRLEVBQWYsQ0FBVjtBQUNBRCxjQUFVRSxPQUFRRCxRQUFRLENBQVQsR0FBYyxJQUFyQixDQUFWO0FBQ0FELGNBQVVFLE9BQVFELFFBQVEsQ0FBVCxHQUFjLElBQXJCLENBQVY7QUFDQUQsY0FBVSxHQUFWO0FBQ0E7QUFiRjs7QUFnQkEsU0FBT0EsTUFBUDtBQUNBOztBQUVEakMsU0FBUXNDLFdBQVIsR0FBc0J2QixjQUF0QjtBQUNBZixTQUFRdUMsYUFBUixHQUF3QlQsYUFBeEI7QUFDQSxDQXpIQyxFQXlIQSxPQUFPOUIsT0FBUCxLQUFtQixXQUFuQixHQUFrQyxVQUFLd0MsUUFBTCxHQUFnQixFQUFsRCxHQUF3RHhDLE9Bekh4RCxDQUFEIiwiZmlsZSI6ImI2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBsb29rdXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbjsoZnVuY3Rpb24gKGV4cG9ydHMpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG4gIHZhciBBcnIgPSAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKVxuICAgID8gVWludDhBcnJheVxuICAgIDogQXJyYXlcblxuXHR2YXIgUExVUyAgID0gJysnLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIICA9ICcvJy5jaGFyQ29kZUF0KDApXG5cdHZhciBOVU1CRVIgPSAnMCcuY2hhckNvZGVBdCgwKVxuXHR2YXIgTE9XRVIgID0gJ2EnLmNoYXJDb2RlQXQoMClcblx0dmFyIFVQUEVSICA9ICdBJy5jaGFyQ29kZUF0KDApXG5cdHZhciBQTFVTX1VSTF9TQUZFID0gJy0nLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIX1VSTF9TQUZFID0gJ18nLmNoYXJDb2RlQXQoMClcblxuXHRmdW5jdGlvbiBkZWNvZGUgKGVsdCkge1xuXHRcdHZhciBjb2RlID0gZWx0LmNoYXJDb2RlQXQoMClcblx0XHRpZiAoY29kZSA9PT0gUExVUyB8fFxuXHRcdCAgICBjb2RlID09PSBQTFVTX1VSTF9TQUZFKVxuXHRcdFx0cmV0dXJuIDYyIC8vICcrJ1xuXHRcdGlmIChjb2RlID09PSBTTEFTSCB8fFxuXHRcdCAgICBjb2RlID09PSBTTEFTSF9VUkxfU0FGRSlcblx0XHRcdHJldHVybiA2MyAvLyAnLydcblx0XHRpZiAoY29kZSA8IE5VTUJFUilcblx0XHRcdHJldHVybiAtMSAvL25vIG1hdGNoXG5cdFx0aWYgKGNvZGUgPCBOVU1CRVIgKyAxMClcblx0XHRcdHJldHVybiBjb2RlIC0gTlVNQkVSICsgMjYgKyAyNlxuXHRcdGlmIChjb2RlIDwgVVBQRVIgKyAyNilcblx0XHRcdHJldHVybiBjb2RlIC0gVVBQRVJcblx0XHRpZiAoY29kZSA8IExPV0VSICsgMjYpXG5cdFx0XHRyZXR1cm4gY29kZSAtIExPV0VSICsgMjZcblx0fVxuXG5cdGZ1bmN0aW9uIGI2NFRvQnl0ZUFycmF5IChiNjQpIHtcblx0XHR2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuXG5cdFx0aWYgKGI2NC5sZW5ndGggJSA0ID4gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Jylcblx0XHR9XG5cblx0XHQvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuXHRcdC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcblx0XHQvLyByZXByZXNlbnQgb25lIGJ5dGVcblx0XHQvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcblx0XHQvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG5cdFx0dmFyIGxlbiA9IGI2NC5sZW5ndGhcblx0XHRwbGFjZUhvbGRlcnMgPSAnPScgPT09IGI2NC5jaGFyQXQobGVuIC0gMikgPyAyIDogJz0nID09PSBiNjQuY2hhckF0KGxlbiAtIDEpID8gMSA6IDBcblxuXHRcdC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuXHRcdGFyciA9IG5ldyBBcnIoYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG5cdFx0Ly8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuXHRcdGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gYjY0Lmxlbmd0aCAtIDQgOiBiNjQubGVuZ3RoXG5cblx0XHR2YXIgTCA9IDBcblxuXHRcdGZ1bmN0aW9uIHB1c2ggKHYpIHtcblx0XHRcdGFycltMKytdID0gdlxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTgpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgMTIpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPDwgNikgfCBkZWNvZGUoYjY0LmNoYXJBdChpICsgMykpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDAwMCkgPj4gMTYpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDApID4+IDgpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fVxuXG5cdFx0aWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpID4+IDQpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fSBlbHNlIGlmIChwbGFjZUhvbGRlcnMgPT09IDEpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTApIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgNCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDIpKSA+PiAyKVxuXHRcdFx0cHVzaCgodG1wID4+IDgpICYgMHhGRilcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJyXG5cdH1cblxuXHRmdW5jdGlvbiB1aW50OFRvQmFzZTY0ICh1aW50OCkge1xuXHRcdHZhciBpLFxuXHRcdFx0ZXh0cmFCeXRlcyA9IHVpbnQ4Lmxlbmd0aCAlIDMsIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG5cdFx0XHRvdXRwdXQgPSBcIlwiLFxuXHRcdFx0dGVtcCwgbGVuZ3RoXG5cblx0XHRmdW5jdGlvbiBlbmNvZGUgKG51bSkge1xuXHRcdFx0cmV0dXJuIGxvb2t1cC5jaGFyQXQobnVtKVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKG51bSA+PiAxOCAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiAxMiAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiA2ICYgMHgzRikgKyBlbmNvZGUobnVtICYgMHgzRilcblx0XHR9XG5cblx0XHQvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gdWludDgubGVuZ3RoIC0gZXh0cmFCeXRlczsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHR0ZW1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuXHRcdFx0b3V0cHV0ICs9IHRyaXBsZXRUb0Jhc2U2NCh0ZW1wKVxuXHRcdH1cblxuXHRcdC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcblx0XHRzd2l0Y2ggKGV4dHJhQnl0ZXMpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGVtcCA9IHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUodGVtcCA+PiAyKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9ICc9PSdcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0dGVtcCA9ICh1aW50OFt1aW50OC5sZW5ndGggLSAyXSA8PCA4KSArICh1aW50OFt1aW50OC5sZW5ndGggLSAxXSlcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDEwKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wID4+IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA8PCAyKSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSAnPSdcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cblxuXHRleHBvcnRzLnRvQnl0ZUFycmF5ID0gYjY0VG9CeXRlQXJyYXlcblx0ZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gdWludDhUb0Jhc2U2NFxufSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAodGhpcy5iYXNlNjRqcyA9IHt9KSA6IGV4cG9ydHMpKVxuIl19 }).call(this,require("U9cQDF"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/..\\..\\..\\..\\Óli Tómas\\jobs\\kennitalajs\\node_modules\\base64-js\\lib\\b64.js","/..\\..\\..\\..\\Óli Tómas\\jobs\\kennitalajs\\node_modules\\base64-js\\lib") },{"U9cQDF":3,"buffer":4}],3:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; // shim for using process in browser var process = module.exports = {}; process.nextTick = function () { var canSetImmediate = typeof window !== 'undefined' && window.setImmediate; var canPost = typeof window !== 'undefined' && window.postMessage && window.addEventListener; if (canSetImmediate) { return function (f) { return window.setImmediate(f); }; } if (canPost) { var queue = []; window.addEventListener('message', function (ev) { var source = ev.source; if ((source === window || source === null) && ev.data === 'process-tick') { ev.stopPropagation(); if (queue.length > 0) { var fn = queue.shift(); fn(); } } }, true); return function nextTick(fn) { queue.push(fn); window.postMessage('process-tick', '*'); }; } return function nextTick(fn) { setTimeout(fn, 0); }; }(); process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.binding = function (name) { throw new Error('process.binding is not supported'); }; // TODO(shtylman) process.cwd = function () { return '/'; }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJyb3dzZXIuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJuZXh0VGljayIsImNhblNldEltbWVkaWF0ZSIsIndpbmRvdyIsInNldEltbWVkaWF0ZSIsImNhblBvc3QiLCJwb3N0TWVzc2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJmIiwicXVldWUiLCJldiIsInNvdXJjZSIsImRhdGEiLCJzdG9wUHJvcGFnYXRpb24iLCJsZW5ndGgiLCJmbiIsInNoaWZ0IiwicHVzaCIsInNldFRpbWVvdXQiLCJ0aXRsZSIsImJyb3dzZXIiLCJlbnYiLCJhcmd2Iiwibm9vcCIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwiYmluZGluZyIsIm5hbWUiLCJFcnJvciIsImN3ZCIsImNoZGlyIiwiZGlyIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUVBLElBQUlBLFVBQVVDLE9BQU9DLE9BQVAsR0FBaUIsRUFBL0I7O0FBRUFGLFFBQVFHLFFBQVIsR0FBb0IsWUFBWTtBQUM1QixRQUFJQyxrQkFBa0IsT0FBT0MsTUFBUCxLQUFrQixXQUFsQixJQUNuQkEsT0FBT0MsWUFEVjtBQUVBLFFBQUlDLFVBQVUsT0FBT0YsTUFBUCxLQUFrQixXQUFsQixJQUNYQSxPQUFPRyxXQURJLElBQ1dILE9BQU9JLGdCQURoQzs7QUFJQSxRQUFJTCxlQUFKLEVBQXFCO0FBQ2pCLGVBQU8sVUFBVU0sQ0FBVixFQUFhO0FBQUUsbUJBQU9MLE9BQU9DLFlBQVAsQ0FBb0JJLENBQXBCLENBQVA7QUFBK0IsU0FBckQ7QUFDSDs7QUFFRCxRQUFJSCxPQUFKLEVBQWE7QUFDVCxZQUFJSSxRQUFRLEVBQVo7QUFDQU4sZUFBT0ksZ0JBQVAsQ0FBd0IsU0FBeEIsRUFBbUMsVUFBVUcsRUFBVixFQUFjO0FBQzdDLGdCQUFJQyxTQUFTRCxHQUFHQyxNQUFoQjtBQUNBLGdCQUFJLENBQUNBLFdBQVdSLE1BQVgsSUFBcUJRLFdBQVcsSUFBakMsS0FBMENELEdBQUdFLElBQUgsS0FBWSxjQUExRCxFQUEwRTtBQUN0RUYsbUJBQUdHLGVBQUg7QUFDQSxvQkFBSUosTUFBTUssTUFBTixHQUFlLENBQW5CLEVBQXNCO0FBQ2xCLHdCQUFJQyxLQUFLTixNQUFNTyxLQUFOLEVBQVQ7QUFDQUQ7QUFDSDtBQUNKO0FBQ0osU0FURCxFQVNHLElBVEg7O0FBV0EsZUFBTyxTQUFTZCxRQUFULENBQWtCYyxFQUFsQixFQUFzQjtBQUN6Qk4sa0JBQU1RLElBQU4sQ0FBV0YsRUFBWDtBQUNBWixtQkFBT0csV0FBUCxDQUFtQixjQUFuQixFQUFtQyxHQUFuQztBQUNILFNBSEQ7QUFJSDs7QUFFRCxXQUFPLFNBQVNMLFFBQVQsQ0FBa0JjLEVBQWxCLEVBQXNCO0FBQ3pCRyxtQkFBV0gsRUFBWCxFQUFlLENBQWY7QUFDSCxLQUZEO0FBR0gsQ0FqQ2tCLEVBQW5COztBQW1DQWpCLFFBQVFxQixLQUFSLEdBQWdCLFNBQWhCO0FBQ0FyQixRQUFRc0IsT0FBUixHQUFrQixJQUFsQjtBQUNBdEIsUUFBUXVCLEdBQVIsR0FBYyxFQUFkO0FBQ0F2QixRQUFRd0IsSUFBUixHQUFlLEVBQWY7O0FBRUEsU0FBU0MsSUFBVCxHQUFnQixDQUFFOztBQUVsQnpCLFFBQVEwQixFQUFSLEdBQWFELElBQWI7QUFDQXpCLFFBQVEyQixXQUFSLEdBQXNCRixJQUF0QjtBQUNBekIsUUFBUTRCLElBQVIsR0FBZUgsSUFBZjtBQUNBekIsUUFBUTZCLEdBQVIsR0FBY0osSUFBZDtBQUNBekIsUUFBUThCLGNBQVIsR0FBeUJMLElBQXpCO0FBQ0F6QixRQUFRK0Isa0JBQVIsR0FBNkJOLElBQTdCO0FBQ0F6QixRQUFRZ0MsSUFBUixHQUFlUCxJQUFmOztBQUVBekIsUUFBUWlDLE9BQVIsR0FBa0IsVUFBVUMsSUFBVixFQUFnQjtBQUM5QixVQUFNLElBQUlDLEtBQUosQ0FBVSxrQ0FBVixDQUFOO0FBQ0gsQ0FGRDs7QUFJQTtBQUNBbkMsUUFBUW9DLEdBQVIsR0FBYyxZQUFZO0FBQUUsV0FBTyxHQUFQO0FBQVksQ0FBeEM7QUFDQXBDLFFBQVFxQyxLQUFSLEdBQWdCLFVBQVVDLEdBQVYsRUFBZTtBQUMzQixVQUFNLElBQUlILEtBQUosQ0FBVSxnQ0FBVi