!function(modules) {
    function __webpack_require__(moduleId) {
        if (installedModules[moduleId]) return installedModules[moduleId].exports;
        var module = installedModules[moduleId] = {
            i: moduleId,
            l: !1,
            exports: {}
        };
        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
        module.l = !0;
        return module.exports;
    }
    var installedModules = {};
    __webpack_require__.m = modules;
    __webpack_require__.c = installedModules;
    __webpack_require__.i = function(value) {
        return value;
    };
    __webpack_require__.d = function(exports, name, getter) {
        if (!__webpack_require__.o(exports, name)) Object.defineProperty(exports, name, {
            configurable: !1,
            enumerable: !0,
            get: getter
        });
    };
    __webpack_require__.n = function(module) {
        var getter = module && module.__esModule ? function() {
            return module["default"];
        } : function() {
            return module;
        };
        __webpack_require__.d(getter, "a", getter);
        return getter;
    };
    __webpack_require__.o = function(object, property) {
        return Object.prototype.hasOwnProperty.call(object, property);
    };
    __webpack_require__.p = "";
    __webpack_require__(__webpack_require__.s = 760);
}([ function(module, exports, __webpack_require__) {
    var global = __webpack_require__(8), core = __webpack_require__(88), hide = __webpack_require__(33), redefine = __webpack_require__(35), ctx = __webpack_require__(57), $export = function(type, name, source) {
        var key, own, out, exp, IS_FORCED = type & $export.F, IS_GLOBAL = type & $export.G, IS_STATIC = type & $export.S, IS_PROTO = type & $export.P, IS_BIND = type & $export.B, target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {}).prototype, exports = IS_GLOBAL ? core : core[name] || (core[name] = {}), expProto = exports.prototype || (exports.prototype = {});
        if (IS_GLOBAL) source = name;
        for (key in source) {
            own = !IS_FORCED && target && target[key] !== undefined;
            out = (own ? target : source)[key];
            exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && "function" == typeof out ? ctx(Function.call, out) : out;
            if (target) redefine(target, key, out, type & $export.U);
            if (exports[key] != out) hide(exports, key, exp);
            if (IS_PROTO && expProto[key] != out) expProto[key] = out;
        }
    };
    global.core = core;
    $export.F = 1;
    $export.G = 2;
    $export.S = 4;
    $export.P = 8;
    $export.B = 16;
    $export.W = 32;
    $export.U = 64;
    $export.R = 128;
    module.exports = $export;
}, function(module, exports, __webpack_require__) {
    module.exports = __webpack_require__(611);
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(key) {
        if (!window.language) return key; else return window.language[key] || key;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    var shallowEqual = __webpack_require__(301), ReactComponentWithPureRenderMixin = {
        shouldComponentUpdate: function(nextProps, nextState) {
            return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState);
        }
    };
    module.exports = ReactComponentWithPureRenderMixin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.log = exports.getLogger = exports.logFolder = undefined;
    var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
        return typeof obj;
    } : function(obj) {
        return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    }, _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _Logger = __webpack_require__(343), _Logger2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_Logger), _config = __webpack_require__(107), _fileWriter = __webpack_require__(221);
    exports.logFolder = _fileWriter.logFolder;
    var logger = new _Logger2["default"](_extends({
        logging: _config.logging
    }, _config.logs));
    exports["default"] = logger;
    exports.getLogger = function() {
        return logger.scope.apply(logger, arguments);
    }, exports.log = function() {
        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
        for (var message = [], params = [], _iterator = args, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
            var _ref;
            if (_isArray) {
                if (_i >= _iterator.length) break;
                _ref = _iterator[_i++];
            } else {
                _i = _iterator.next();
                if (_i.done) break;
                _ref = _i.value;
            }
            var part = _ref;
            if ("object" === (void 0 === part ? "undefined" : _typeof(part))) params.push(part); else message.push(String(part));
        }
        var lvl = -1 !== message.indexOf("!!! ERROR !!!") ? "error" : "info";
        logger.log(lvl, message.join(", "), params, "legacy");
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var invariant = function(condition, format, a, b, c, d, e, f) {
        if (!0) if (format === undefined) throw new Error("invariant requires an error message argument");
        if (!condition) {
            var error;
            if (format === undefined) error = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."); else {
                var args = [ a, b, c, d, e, f ], argIndex = 0;
                error = new Error("Invariant Violation: " + format.replace(/%s/g, function() {
                    return args[argIndex++];
                }));
            }
            error.framesToPop = 1;
            throw error;
        }
    };
    module.exports = invariant;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireWildcard(obj) {
        if (obj && obj.__esModule) return obj; else {
            var newObj = {};
            if (null != obj) for (var key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
            newObj["default"] = obj;
            return newObj;
        }
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _cmd = __webpack_require__(129), cmd = _interopRequireWildcard(_cmd), _fso = __webpack_require__(17), fso = _interopRequireWildcard(_fso), _http = __webpack_require__(73), http = _interopRequireWildcard(_http), _localFiles = __webpack_require__(22), localFiles = _interopRequireWildcard(_localFiles), _processes = __webpack_require__(74), processes = _interopRequireWildcard(_processes), _registry = __webpack_require__(56), registry = _interopRequireWildcard(_registry), _sendImg = __webpack_require__(226), sendImg = _interopRequireWildcard(_sendImg), _shell = __webpack_require__(16), shell = _interopRequireWildcard(_shell), _specialFolders = __webpack_require__(18), specialFolders = _interopRequireWildcard(_specialFolders), _wmiRegistry = __webpack_require__(130), wmiRegistry = _interopRequireWildcard(_wmiRegistry), _iterate = __webpack_require__(110), _iterate2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_iterate);
    exports["default"] = _extends({}, cmd, fso, http, localFiles, processes, registry, sendImg, shell, specialFolders, wmiRegistry, {
        iterate: _iterate2["default"]
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _objectWithoutProperties(obj, keys) {
        var target = {};
        for (var i in obj) if (!(keys.indexOf(i) >= 0)) if (Object.prototype.hasOwnProperty.call(obj, i)) target[i] = obj[i];
        return target;
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _react = __webpack_require__(1), _react2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_react), polyfillTransparentPng = function() {
        return /\bMSIE 6/.test(navigator.userAgent);
    }();
    exports["default"] = _react2["default"].createClass({
        displayName: "Img",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            style: _react.PropTypes.object,
            src: _react.PropTypes.string.isRequired
        },
        render: function() {
            var _props = this.props, style = _props.style, src = _props.src, other = _objectWithoutProperties(_props, [ "style", "src" ]), patchedStyle = Object.assign({}, style), realSrc = void 0;
            if (polyfillTransparentPng) {
                patchedStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
                realSrc = "img/blank.gif";
            } else realSrc = src;
            return _react2["default"].DOM.img(_extends({
                src: realSrc,
                style: patchedStyle
            }, other));
        }
    });
    module.exports = exports["default"];
}, function(module, exports) {
    var global = module.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")();
    if ("number" == typeof __g) __g = global;
}, function(module, exports) {
    module.exports = function(exec) {
        try {
            return !!exec();
        } catch (e) {
            return !0;
        }
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _htaAdapter = __webpack_require__(357), _htaAdapter2 = _interopRequireDefault(_htaAdapter), _Statistics = __webpack_require__(355), _Statistics2 = _interopRequireDefault(_Statistics), _config = __webpack_require__(107);
    exports["default"] = new _Statistics2["default"](_htaAdapter2["default"], _config.analytics, {
        version: _config.application.DisplayVersion,
        locale: window.lang
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12);
    module.exports = function(it) {
        if (!isObject(it)) throw TypeError(it + " is not an object!");
        return it;
    };
}, function(module, exports) {
    module.exports = function(it) {
        return "object" == typeof it ? null !== it : "function" == typeof it;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _createConnect = __webpack_require__(779), _createConnect2 = _interopRequireDefault(_createConnect);
    exports["default"] = (0, _createConnect2["default"])(_react2["default"]);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.OSCaption = exports.OSVersionSP = exports.OSName = exports.osVersions = exports.OSArchitecture = exports.OSCSDVersion = exports.OSBuild = exports.OSVersion = exports.OSVersionS = exports.arch = exports.is64 = undefined;
    var _WshShell = __webpack_require__(128), _WshShell2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_WshShell), _wmi = __webpack_require__(23), is64 = exports.is64 = "AMD64" === _WshShell2["default"].ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") || "%PROCESSOR_ARCHITEW6432%" !== _WshShell2["default"].ExpandEnvironmentStrings("%PROCESSOR_ARCHITEW6432%"), _getWMIObjects = (exports.arch = is64 ? "64" : "86", 
    (0, _wmi.getWMIObjects)([ "Version", "CSDVersion", "Caption", "OSArchitecture" ], "Win32_OperatingSystem")), _getWMIObjects$ = _getWMIObjects[0];
    _getWMIObjects$ = _getWMIObjects$ === undefined ? {} : _getWMIObjects$;
    var _getWMIObjects$$Versi = _getWMIObjects$.Version, Version = _getWMIObjects$$Versi === undefined ? "" : _getWMIObjects$$Versi, _getWMIObjects$$CSDVe = _getWMIObjects$.CSDVersion, CSDVersion = _getWMIObjects$$CSDVe === undefined ? "" : _getWMIObjects$$CSDVe, _getWMIObjects$$Capti = _getWMIObjects$.Caption, Caption = _getWMIObjects$$Capti === undefined ? "" : _getWMIObjects$$Capti, _Version$split = Version.split("."), major = _Version$split[0], minor = _Version$split[1], build = _Version$split[2], OSVersionS = exports.OSVersionS = major + "." + minor, OSArchitecture = (exports.OSVersion = parseFloat(OSVersionS) || 5, 
    exports.OSBuild = parseInt(build), exports.OSCSDVersion = CSDVersion, exports.OSArchitecture = OSArchitecture), osVersions = exports.osVersions = {
        "5.0": "2000",
        "5.1": "XP",
        "5.2": "Server 2003",
        "6.0": "Vista",
        "6.1": "7",
        "6.2": "8",
        "6.3": "8.1",
        "6.4": "9",
        "10.0": "10"
    }, m = (exports.OSName = osVersions[OSVersionS] || OSVersionS, CSDVersion && /^Service Pack (\d+)$/i.exec(CSDVersion));
    exports.OSVersionSP = m ? parseInt(m[1], 10) : 0, exports.OSCaption = Caption.replace(/Microsoft /i, "");
}, function(module, exports, __webpack_require__) {
    var store = __webpack_require__(171)("wks"), uid = __webpack_require__(81), Symbol = __webpack_require__(8).Symbol, USE_SYMBOL = "function" == typeof Symbol;
    (module.exports = function(name) {
        return store[name] || (store[name] = USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)("Symbol." + name));
    }).store = store;
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.WshShell = exports.objShell = undefined;
    var _WshShell = __webpack_require__(128), _WshShell2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_WshShell);
    exports.objShell = new ActiveXObject("Shell.Application");
    exports.WshShell = _WshShell2["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.fso = new ActiveXObject("Scripting.FileSystemObject");
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.ProgramFiles = exports.AppFolder = exports.localAppData = exports.MyDocuments = exports.AppData = undefined;
    var _shell = __webpack_require__(16), _config = __webpack_require__(107), _os = __webpack_require__(14), AppData = exports.AppData = _shell.WshShell.SpecialFolders("AppData");
    exports.MyDocuments = _shell.WshShell.SpecialFolders("MyDocuments"), exports.localAppData = _shell.objShell.NameSpace(28).Self.Path, 
    exports.AppFolder = AppData + "\\" + _config.application.AppFolder, exports.ProgramFiles = _os.is64 ? _shell.WshShell.ExpandEnvironmentStrings("%PROGRAMFILES(x86)%") : _shell.WshShell.ExpandEnvironmentStrings("%PROGRAMFILES%");
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.getInternetExplorerVersion = exports.goToUrl = exports.winRun = exports.inc = exports.generateJobId = exports.wrapInCmd = exports.cleanFolder = exports.ParseCMDString = exports.ParseSFXName = undefined;
    var _fso = __webpack_require__(17), _shell = __webpack_require__(16), _registry = __webpack_require__(56), _os = __webpack_require__(14), _logs = __webpack_require__(4), log = (0, 
    _logs.getLogger)("core:lib:utils"), runOpenUrlCommand = (exports.ParseSFXName = function(sfxName) {
        sfxName = sfxName.replace(/(\s*(\(|\[)\d+(\)|\]))?.exe$/i, "");
        return sfxName.split("_").slice(1);
    }, exports.ParseCMDString = function() {
        var cmd = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "", args = [], current = "", quoted = "", quoteType = null, addcurrent = function() {
            if (current) args.push(current.trim());
            current = "";
        };
        cmd = cmd.replace(/\\\n/g, "");
        Array.from(cmd).forEach(function(c) {
            if (quoteType) if (quoteType === c && "\\" !== quoted.slice(-1)) {
                args.push(quoted);
                quoted = "";
                quoteType = null;
            } else quoted += c; else if (" " === c) addcurrent(); else if (current) current += c; else if ("'" === c || '"' === c) quoteType = c; else current = c;
        });
        addcurrent();
        return args;
    }, exports.cleanFolder = function(path) {
        var sync = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0, correctedPath = /\\$/.test(path) ? path : path + "\\";
        _shell.WshShell.Run('cmd /C del /F /S /Q "' + correctedPath + '" && FOR /D %p IN ("' + correctedPath + '*") DO rmdir "%p" /s /q', 0, sync);
    }, exports.wrapInCmd = function(command) {
        return 'cmd /c "' + command + '"';
    }, exports.generateJobId = function() {
        return +Math.round(1e5 * Math.random());
    }, exports.inc = function(filename) {
        var head = document.getElementsByTagName("head").item(0), script = void 0;
        if ("css" === _fso.fso.GetFileName(filename).split(".")[1].toLowerCase()) {
            script = document.createElement("link");
            script.setAttribute("rel", "stylesheet");
            script.setAttribute("type", "text/css");
            script.setAttribute("href", filename);
        } else {
            script = document.createElement("script");
            script.src = filename;
            script.type = "text/javascript";
        }
        if (void 0 !== script) head.appendChild(script);
    }, exports.winRun = function(src, hideMode, wait, bit64) {
        if (!src) return !1;
        hideMode = !!hideMode;
        wait = !!wait;
        if (bit64 && _os.is64) {
            hideMode = !0;
            wait = !1;
            src = '"%windir%\\sysnative\\cmd.exe" /C ' + src;
        }
        return _shell.WshShell.Run(src, hideMode ? 0 : 1, wait);
    }, function(url, command) {
        command = command ? '"' + command.replace(/"/gi, "") + '"' : "rundll32 url.dll,FileProtocolHandler";
        _shell.WshShell.Run(command + ' "' + url + '"', 1, !1);
    });
    exports.goToUrl = function(url) {
        log.info("opening " + url, {
            url: url
        }, "goToUrl:open");
        try {
            var regPath = "HKCU\\SOFTWARE\\Clients\\StartMenuInternet\\";
            if (_os.OSVersion >= 10) regPath = "HKCU\\SOFTWARE\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\\Progid";
            var defBrowser = (0, _registry.RegRead)(regPath);
            if (!defBrowser) defBrowser = (0, _registry.RegRead)(regPath.replace("HKCU", "HKLM"));
            var runComm = (0, _registry.RegRead)("HKLM\\SOFTWARE\\Clients\\StartMenuInternet\\" + defBrowser + "\\shell\\open\\command\\");
            runOpenUrlCommand(url, runComm);
        } catch (err) {
            log.error("failed to open " + url, {
                url: url,
                err: err
            }, "goToUrl:error");
            runOpenUrlCommand(url);
        }
        return !1;
    }, exports.getInternetExplorerVersion = function() {
        var rv = void 0, ua = void 0, re = void 0;
        try {
            rv = parseInt((0, _registry.RegRead)("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\svcVersion").split(".")[0], 10);
        } catch (e) {}
        if ("number" != typeof rv) try {
            rv = parseInt((0, _registry.RegRead)("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\Version").split(".")[0], 10);
        } catch (e) {}
        if ("number" != typeof rv) if ("Microsoft Internet Explorer" === navigator.appName) {
            ua = navigator.userAgent;
            re = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
            if (null != re.exec(ua)) rv = parseFloat(RegExp.$1);
        } else if ("Netscape" === navigator.appName) {
            ua = navigator.userAgent;
            re = new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})");
            if (null != re.exec(ua)) rv = parseFloat(RegExp.$1);
        }
        if ("number" != typeof rv) rv = -1;
        return rv;
    };
}, function(module, exports, __webpack_require__) {
    module.exports = !__webpack_require__(9)(function() {
        return 7 != Object.defineProperty({}, "a", {
            get: function() {
                return 7;
            }
        }).a;
    });
}, function(module, exports, __webpack_require__) {
    var anObject = __webpack_require__(11), IE8_DOM_DEFINE = __webpack_require__(235), toPrimitive = __webpack_require__(45), dP = Object.defineProperty;
    exports.f = __webpack_require__(20) ? Object.defineProperty : function(O, P, Attributes) {
        anObject(O);
        P = toPrimitive(P, !0);
        anObject(Attributes);
        if (IE8_DOM_DEFINE) try {
            return dP(O, P, Attributes);
        } catch (e) {}
        if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported!");
        if ("value" in Attributes) O[P] = Attributes.value;
        return O;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.ensurePath = exports.isFileOverdue = exports.queryFile = exports.deleteFile = exports.createFile = undefined;
    var _fso = __webpack_require__(17), isFileOverdue = (exports.createFile = function(path, fileName, fileContent) {
        ensurePath(path);
        var FSfile = _fso.fso.OpenTextFile(path + fileName, 2, !0, -1);
        FSfile.WriteLine(fileContent);
        FSfile.Close();
    }, exports.deleteFile = function(fullPath) {
        if (!0 === _fso.fso.FileExists(fullPath)) _fso.fso.DeleteFile(fullPath);
    }, exports.queryFile = function(fullPath, overdueInterval) {
        if (_fso.fso.FileExists(fullPath) && _fso.fso.GetFile(fullPath).Size > 0) if (overdueInterval && isFileOverdue(fullPath, overdueInterval)) throw new Error("File is overdue"); else {
            var file = _fso.fso.OpenTextFile(fullPath, 1, !0, -1), data = file.ReadAll();
            file.Close();
            return data;
        } else throw new Error("File is not found");
    }, exports.isFileOverdue = function(fullPath, overdueInterval) {
        if (!0 === _fso.fso.FileExists(fullPath)) {
            if (new Date().getTime() - _fso.fso.GetFile(fullPath).DateLastModified > overdueInterval) return !0; else return !1;
        } else return !0;
    }), ensurePath = exports.ensurePath = function(path) {
        for (var parts = path.split("\\"), stack = []; parts.length > 0; ) {
            var current = parts.join("\\");
            if (parts.pop()) if (_fso.fso.FolderExists(current)) break; else stack.push(current);
        }
        for (;stack.length > 0; ) {
            var _current = stack.pop();
            if (!_fso.fso.FolderExists(_current)) _fso.fso.CreateFolder(_current);
        }
        return path;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.getWMIObjects = exports.objWMIService = exports.ConnectServer = exports.locator = undefined;
    var _iterate = __webpack_require__(110), _iterate2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_iterate), locator = exports.locator = new ActiveXObject("WbemScripting.SWbemLocator"), _ConnectServer = function(namespace, context) {
        if (context) {
            var set = new ActiveXObject("WbemScripting.SWbemNamedValueSet");
            for (var key in context) set.Add(key, context[key]);
            return locator.ConnectServer(null, namespace, null, null, null, null, null, set);
        } else return locator.ConnectServer(null, namespace);
    }, ConnectServer = exports.ConnectServer = function() {
        var wmi = void 0;
        try {
            wmi = _ConnectServer.apply(undefined, arguments);
        } catch (err) {}
        if (!wmi) {
            new ActiveXObject("WScript.Shell").Run("net start winmgmt", 0, !0);
            wmi = _ConnectServer.apply(undefined, arguments);
        }
        return wmi;
    }, objWMIService = exports.objWMIService = ConnectServer("root\\cimv2");
    exports.getWMIObjects = function(names, source, where) {
        var wmi = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : objWMIService;
        try {
            var results = [], query = "SELECT * FROM " + source;
            if (where) query += " WHERE " + where;
            var colItems = wmi.ExecQuery(query, "WQL");
            (0, _iterate2["default"])(colItems, function(objItem) {
                var obj = {};
                names.forEach(function(name) {
                    try {
                        if (objItem[name] || objItem[name].toArray) if (objItem[name].toArray) obj[name] = objItem[name].toArray(); else obj[name] = objItem[name];
                    } catch (e) {}
                });
                results.push(obj);
            });
            return results;
        } catch (e) {
            return [];
        }
    };
}, function(module, exports, __webpack_require__) {
    var toInteger = __webpack_require__(69), min = Math.min;
    module.exports = function(it) {
        return it > 0 ? min(toInteger(it), 9007199254740991) : 0;
    };
}, function(module, exports, __webpack_require__) {
    var defined = __webpack_require__(41);
    module.exports = function(it) {
        return Object(defined(it));
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var canUseDOM = !("undefined" == typeof window || !window.document || !window.document.createElement), ExecutionEnvironment = {
        canUseDOM: canUseDOM,
        canUseWorkers: "undefined" != typeof Worker,
        canUseEventListeners: canUseDOM && !(!window.addEventListener && !window.attachEvent),
        canUseViewport: canUseDOM && !!window.screen,
        isInWorker: !canUseDOM
    };
    module.exports = ExecutionEnvironment;
}, function(module, exports, __webpack_require__) {
    var getNative = __webpack_require__(118), isLength = __webpack_require__(95), isObjectLike = __webpack_require__(46), objectProto = Object.prototype, objToString = objectProto.toString, nativeIsArray = getNative(Array, "isArray"), isArray = nativeIsArray || function(value) {
        return isObjectLike(value) && isLength(value.length) && "[object Array]" == objToString.call(value);
    };
    module.exports = isArray;
}, function(module, exports) {
    function isObject(value) {
        var type = typeof value;
        return !!value && ("object" == type || "function" == type);
    }
    module.exports = isObject;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function countCheckedByDefaultDrivers(drivers, programs) {
        var checkedUtilities = filterDriverUtilities(programs).filter(isItemCheckedByDefault);
        return drivers.filter(isItemCheckedByDefault).length + checkedUtilities.length;
    }
    function isItemChecked(item) {
        return item.isChecked;
    }
    function isItemCheckedByDefault(item) {
        return item.isCheckedByDefault;
    }
    function isDeviceDriverNotInstalled(device) {
        return "install" === device.recommendedDriver.state;
    }
    function isDeviceDriverNotUpdated(device) {
        return "update" === device.recommendedDriver.state;
    }
    function isDeviceDriverInstalled(device) {
        return "installed" === device.recommendedDriver.state || "rollback" === device.recommendedDriver.state;
    }
    function isProgramNotInstalled(program) {
        return !program.isInstalled;
    }
    function isProgramChecked(program) {
        return program.isChecked;
    }
    function isInstalledProgramChecked(program) {
        return program.isChecked;
    }
    function isDeferredProgram(program) {
        return program.confirmPopup && !!program.confirmPopup.isDeferred;
    }
    function isNotifier(program) {
        return /DriverPack (Notifier|Cloud)/.test(program.name) || /DriverPack (Notifier|Cloud)/.test(program.Name);
    }
    function isYandexBrowser(program) {
        return /Yandex\.Browser/.test(program.name);
    }
    function isDriverUtility(program) {
        return program.category === DRIVERS_UTILITY_CATEGORY || program.Category === DRIVERS_UTILITY_CATEGORY;
    }
    function isVisible(program) {
        return program.isVisible;
    }
    function isHarmful(program) {
        return "large" === program.removalRate;
    }
    function isSuspicious(program) {
        return "small" !== program.removalRate;
    }
    function filterCheckedDrivers(drivers) {
        return drivers.filter(isItemChecked);
    }
    function filterCheckedByDefaultDrivers(drivers) {
        return drivers.filter(isItemCheckedByDefault);
    }
    function filterNotInstalledDriverDevices(devices) {
        return devices.filter(isDeviceDriverNotInstalled);
    }
    function filterNotUpdatedDriverDevices(devices) {
        return devices.filter(isDeviceDriverNotUpdated);
    }
    function filterInstalledDriverDevices(devices) {
        return devices.filter(isDeviceDriverInstalled);
    }
    function filterCheckedPrograms(programs) {
        var utils = filterDriverUtilities(programs), soft = filterProgramsPage(programs);
        return (0, _uniq2["default"])([].concat(soft, utils), "id").filter(isProgramChecked);
    }
    function filterCheckedByDefaultPrograms(programs) {
        var utils = filterDriverUtilities(programs), soft = filterProgramsPage(programs);
        return (0, _uniq2["default"])([].concat(soft, utils), "id").filter(isItemCheckedByDefault);
    }
    function filterProgramsPage(programs) {
        return programs.filter(isVisible).filter(function(program) {
            return !isDriverUtility(program);
        });
    }
    function filterDriverUtilities(programs) {
        if (!_settings2["default"].get("general.enableSoftAndDriverUtilities").value) return []; else return programs.filter(isVisible).filter(isDriverUtility);
    }
    function filterCheckedDriverUtilities(programs) {
        if (!_settings2["default"].get("general.enableSoftAndDriverUtilities").value) return []; else return filterDriverUtilities(programs).filter(isItemChecked);
    }
    function filterCheckedSoft(programs) {
        return programs.filter(isItemChecked);
    }
    function filterHarmfulPrograms(programs) {
        return programs.filter(isHarmful);
    }
    function filterSuspiciousPrograms(programs) {
        return programs.filter(isSuspicious);
    }
    function filterProtectPrograms(programs) {
        return programs.filter(function(program) {
            return program.protect;
        });
    }
    function filterCheckedInstalledPrograms(programs) {
        return programs.filter(isInstalledProgramChecked);
    }
    function filterNonDeferredPrograms(programs) {
        return programs.filter(function(program) {
            return !isDeferredProgram(program);
        });
    }
    function filterAppEsteemDrivers(items) {
        return items.filter(isAppEsteemDriver);
    }
    exports.__esModule = !0;
    exports.isAppEsteemDriver = exports.isDriver = exports.DRIVERS_UTILITY_CATEGORY = undefined;
    exports.countCheckedByDefaultDrivers = countCheckedByDefaultDrivers;
    exports.isItemChecked = isItemChecked;
    exports.isItemCheckedByDefault = isItemCheckedByDefault;
    exports.isDeviceDriverNotInstalled = isDeviceDriverNotInstalled;
    exports.isDeviceDriverNotUpdated = isDeviceDriverNotUpdated;
    exports.isDeviceDriverInstalled = isDeviceDriverInstalled;
    exports.isProgramNotInstalled = isProgramNotInstalled;
    exports.isProgramChecked = isProgramChecked;
    exports.isInstalledProgramChecked = isInstalledProgramChecked;
    exports.isDeferredProgram = isDeferredProgram;
    exports.isNotifier = isNotifier;
    exports.isYandexBrowser = isYandexBrowser;
    exports.isDriverUtility = isDriverUtility;
    exports.isVisible = isVisible;
    exports.isHarmful = isHarmful;
    exports.isSuspicious = isSuspicious;
    exports.filterCheckedDrivers = filterCheckedDrivers;
    exports.filterCheckedByDefaultDrivers = filterCheckedByDefaultDrivers;
    exports.filterNotInstalledDriverDevices = filterNotInstalledDriverDevices;
    exports.filterNotUpdatedDriverDevices = filterNotUpdatedDriverDevices;
    exports.filterInstalledDriverDevices = filterInstalledDriverDevices;
    exports.filterCheckedPrograms = filterCheckedPrograms;
    exports.filterCheckedByDefaultPrograms = filterCheckedByDefaultPrograms;
    exports.filterProgramsPage = filterProgramsPage;
    exports.filterDriverUtilities = filterDriverUtilities;
    exports.filterCheckedDriverUtilities = filterCheckedDriverUtilities;
    exports.filterCheckedSoft = filterCheckedSoft;
    exports.filterHarmfulPrograms = filterHarmfulPrograms;
    exports.filterSuspiciousPrograms = filterSuspiciousPrograms;
    exports.filterProtectPrograms = filterProtectPrograms;
    exports.filterCheckedInstalledPrograms = filterCheckedInstalledPrograms;
    exports.filterNonDeferredPrograms = filterNonDeferredPrograms;
    exports.filterAppEsteemDrivers = filterAppEsteemDrivers;
    var _uniq = __webpack_require__(141), _uniq2 = _interopRequireDefault(_uniq), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), DRIVERS_UTILITY_CATEGORY = exports.DRIVERS_UTILITY_CATEGORY = "Drivers", isDriver = exports.isDriver = function(item) {
        return item.deviceId;
    }, isAppEsteemDriver = exports.isAppEsteemDriver = function(item) {
        return (isVisible(item) && isDriverUtility(item) || isDriver(item)) && isItemCheckedByDefault(item);
    };
}, function(module, exports) {
    var hasOwnProperty = {}.hasOwnProperty;
    module.exports = function(it, key) {
        return hasOwnProperty.call(it, key);
    };
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), fails = __webpack_require__(9), defined = __webpack_require__(41), quot = /"/g, createHTML = function(string, tag, attribute, value) {
        var S = String(defined(string)), p1 = "<" + tag;
        if ("" !== attribute) p1 += " " + attribute + '="' + String(value).replace(quot, "&quot;") + '"';
        return p1 + ">" + S + "</" + tag + ">";
    };
    module.exports = function(NAME, exec) {
        var O = {};
        O[NAME] = exec(createHTML);
        $export($export.P + $export.F * fails(function() {
            var test = ""[NAME]('"');
            return test !== test.toLowerCase() || test.split('"').length > 3;
        }), "String", O);
    };
}, function(module, exports, __webpack_require__) {
    var IObject = __webpack_require__(113), defined = __webpack_require__(41);
    module.exports = function(it) {
        return IObject(defined(it));
    };
}, function(module, exports, __webpack_require__) {
    var dP = __webpack_require__(21), createDesc = __webpack_require__(68);
    module.exports = __webpack_require__(20) ? function(object, key, value) {
        return dP.f(object, key, createDesc(1, value));
    } : function(object, key, value) {
        object[key] = value;
        return object;
    };
}, function(module, exports, __webpack_require__) {
    var pIE = __webpack_require__(114), createDesc = __webpack_require__(68), toIObject = __webpack_require__(32), toPrimitive = __webpack_require__(45), has = __webpack_require__(30), IE8_DOM_DEFINE = __webpack_require__(235), gOPD = Object.getOwnPropertyDescriptor;
    exports.f = __webpack_require__(20) ? gOPD : function(O, P) {
        O = toIObject(O);
        P = toPrimitive(P, !0);
        if (IE8_DOM_DEFINE) try {
            return gOPD(O, P);
        } catch (e) {}
        if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
    };
}, function(module, exports, __webpack_require__) {
    var global = __webpack_require__(8), hide = __webpack_require__(33), has = __webpack_require__(30), SRC = __webpack_require__(81)("src"), $toString = Function.toString, TPL = ("" + $toString).split("toString");
    __webpack_require__(88).inspectSource = function(it) {
        return $toString.call(it);
    };
    (module.exports = function(O, key, val, safe) {
        var isFunction = "function" == typeof val;
        if (isFunction) has(val, "name") || hide(val, "name", key);
        if (O[key] !== val) {
            if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? "" + O[key] : TPL.join(String(key)));
            if (O === global) O[key] = val; else if (!safe) {
                delete O[key];
                hide(O, key, val);
            } else if (O[key]) O[key] = val; else hide(O, key, val);
        }
    })(Function.prototype, "toString", function() {
        return "function" == typeof this && this[SRC] || $toString.call(this);
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var keyMirror = __webpack_require__(85), PropagationPhases = keyMirror({
        bubbled: null,
        captured: null
    }), topLevelTypes = keyMirror({
        topBlur: null,
        topChange: null,
        topClick: null,
        topCompositionEnd: null,
        topCompositionStart: null,
        topCompositionUpdate: null,
        topContextMenu: null,
        topCopy: null,
        topCut: null,
        topDoubleClick: null,
        topDrag: null,
        topDragEnd: null,
        topDragEnter: null,
        topDragExit: null,
        topDragLeave: null,
        topDragOver: null,
        topDragStart: null,
        topDrop: null,
        topError: null,
        topFocus: null,
        topInput: null,
        topKeyDown: null,
        topKeyPress: null,
        topKeyUp: null,
        topLoad: null,
        topMouseDown: null,
        topMouseMove: null,
        topMouseOut: null,
        topMouseOver: null,
        topMouseUp: null,
        topPaste: null,
        topReset: null,
        topScroll: null,
        topSelectionChange: null,
        topSubmit: null,
        topTextInput: null,
        topTouchCancel: null,
        topTouchEnd: null,
        topTouchMove: null,
        topTouchStart: null,
        topWheel: null
    }), EventConstants = {
        topLevelTypes: topLevelTypes,
        PropagationPhases: PropagationPhases
    };
    module.exports = EventConstants;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var mergeInto = __webpack_require__(200), merge = function(one, two) {
        var result = {};
        mergeInto(result, one);
        mergeInto(result, two);
        return result;
    };
    module.exports = merge;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function navigate(page) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        switch (page) {
          case "START":
            break;

          case "DRIVERS":
            if (!options.preventSendingEvent) if (showZeroDriversBeOpened()) _statistics2["default"].event({
                action: "drivers zero screen opened"
            }); else _statistics2["default"].event({
                action: "drivers screen opened"
            });
            if (options.startScreenSkipped) _statistics2["default"].event({
                action: "startpage screen skipped"
            });
            break;

          case "PROGRAMS":
            _statistics2["default"].event({
                action: "soft screen opened"
            });
            break;

          case "PROTECT":
            _statistics2["default"].event({
                action: "protect screen opened"
            });
            break;

          case "DIAGNOSTICS":
            _statistics2["default"].event({
                action: "diagnostic screen opened"
            });
            break;

          case "SETTINGS":
            _statistics2["default"].event({
                action: "settings screen opened",
                counters: [ "debug" ]
            });
            break;

          case "GAMES":
            _statistics2["default"].event({
                action: "games screen opened",
                counters: [ "debug" ]
            });
            break;

          case "CONFIGURATOR":
            _statistics2["default"].event({
                action: "configurator screen opened",
                counters: [ "default", "shared" ]
            });
        }
        return {
            type: "NAVIGATE",
            page: page
        };
    }
    function openSystemMenu(page) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, itemName = void 0;
        return function(dispatch) {
            switch (page) {
              case "CONTROL":
                itemName = "control_panel";
                _system.WshShell.Run("control.exe", 1, !1);
                break;

              case "RECOVERY":
                itemName = "recovery_point";
                if (OSVersion >= 6) (0, _utils.winRun)("systempropertiesprotection.exe", "", "", !0); else (0, 
                _utils.winRun)("%systemroot%\\system32\\restore\\rstrui.exe", "", "", !0);
                break;

              case "BACKUP":
                itemName = "drivers_backup";
                dispatch({
                    type: "BACKUP_START"
                });
                _ddriver2["default"].Run().then(function() {
                    _statistics2["default"].event({
                        action: "drivers backup finished"
                    });
                    return dispatch({
                        type: "BACKUP_SUCCESS"
                    });
                }).caught(function(error) {
                    _statistics2["default"].event({
                        action: "drivers backup failed"
                    });
                    log.error("error", {
                        error: error
                    }, "ddriver:error");
                    return dispatch({
                        type: "BACKUP_FAILED"
                    });
                });
                break;

              case "UNINSTALL":
                itemName = "programs_and_features";
                window.store.dispatch({
                    type: "NAVIGATE",
                    page: "PROTECT"
                });
                window.store.dispatch({
                    type: "BURGER_MENU_TOGGLED"
                });
                break;

              case "FEEDBACK":
                if (!options.preventSendingEvent) _statistics2["default"].event({
                    action: "feedback clicked",
                    counters: [ "debug" ]
                });
                (0, _utils.goToUrl)("https://drp.su/" + options.lang + "/info/review-driverpack-" + (!1 ? "online" : !1 ? "network" : "offline"));
                break;

              case "SYSTEM_PROPERTIES":
                itemName = "system";
                if (OSVersion >= 6) _system.WshShell.Run("control.exe system", 1, !1); else _system.WshShell.Run("control.exe sysdm.cpl", 1, !1);
                break;

              case "DEVICE_MANAGER":
                itemName = "device_manager";
                _system.WshShell.Run("mmc.exe devmgmt.msc", 1, !1);
                break;

              case "NETWORK_CONNECTIONS":
                itemName = "network_connections";
                _system.WshShell.Run("control.exe ncpa.cpl", 1, !1);
                break;

              case "DISK_MANAGEMENT":
                itemName = "disk_management";
                _system.WshShell.Run("mmc.exe diskmgmt.msc", 1, !1);
                break;

              case "COMPUTER_MANAGEMENT":
                itemName = "computer_management";
                _system.WshShell.Run("mmc.exe compmgmt.msc", 1, !1);
                break;

              case "CMD":
                itemName = "command_prompt";
                var prevCurrentDirectory = _system.WshShell.CurrentDirectory;
                _system.WshShell.CurrentDirectory = _system.WshShell.ExpandEnvironmentStrings("%USERPROFILE%");
                _system.WshShell.Run("cmd.exe", 1, !1);
                setTimeout(function() {
                    _system.WshShell.CurrentDirectory = prevCurrentDirectory;
                }, 50);
                break;

              case "TASK_MANAGER":
                itemName = "task_manager";
                _system.WshShell.Run("taskmgr.exe", 1, !1);
                break;

              case "DISPLAY_PROPERTIES":
                itemName = "display";
                _system.WshShell.Run("control.exe desk.cpl", 1, !1);
                break;

              case "POWER_OPTIONS":
                itemName = "power_options";
                _system.WshShell.Run("control.exe powercfg.cpl", 1, !1);
            }
            if (!options.preventSendingEvent) _statistics2["default"].event({
                action: "burgermenu " + itemName + " clicked",
                counters: [ "debug" ]
            });
        };
    }
    exports.__esModule = !0;
    exports.navigate = navigate;
    exports.openSystemMenu = openSystemMenu;
    var _system = __webpack_require__(6), _logs = __webpack_require__(4), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _utils = __webpack_require__(19), _ddriver = __webpack_require__(752), _ddriver2 = _interopRequireDefault(_ddriver), _driversPrograms = __webpack_require__(29), log = (0, 
    _logs.getLogger)("actions:menu"), showZeroDriversBeOpened = function() {
        var result = void 0, _window$store$getStat = window.store.getState(), drivers = _window$store$getStat.drivers, zeroDriversVisible = drivers.zeroDriversVisible, devices = drivers.devices, notInstalled = (0, 
        _driversPrograms.filterNotInstalledDriverDevices)(devices), notUpdated = (0, _driversPrograms.filterNotUpdatedDriverDevices)(devices);
        result = zeroDriversVisible && !notInstalled.length && !notUpdated.length;
        return result;
    };
}, function(module, exports) {
    module.exports = function(it) {
        if ("function" != typeof it) throw TypeError(it + " is not a function!");
        return it;
    };
}, function(module, exports) {
    var toString = {}.toString;
    module.exports = function(it) {
        return toString.call(it).slice(8, -1);
    };
}, function(module, exports) {
    module.exports = function(it) {
        if (it == undefined) throw TypeError("Can't call method on  " + it);
        return it;
    };
}, function(module, exports, __webpack_require__) {
    var fails = __webpack_require__(9);
    module.exports = function(method, arg) {
        return !!method && fails(function() {
            arg ? method.call(null, function() {}, 1) : method.call(null);
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _asyncToGenerator(fn) {
            return function() {
                var gen = fn.apply(this, arguments);
                return new Promise(function(resolve, reject) {
                    function step(key, arg) {
                        try {
                            var info = gen[key](arg), value = info.value;
                        } catch (error) {
                            reject(error);
                            return;
                        }
                        if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                            step("next", value);
                        }, function(err) {
                            step("throw", err);
                        });
                    }
                    return step("next");
                });
            };
        }
        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
        }
        exports.__esModule = !0;
        var _extends = Object.assign || function(target) {
            for (var i = 1; i < arguments.length; i++) {
                var source = arguments[i];
                for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
            }
            return target;
        }, _http = __webpack_require__(73), _system = __webpack_require__(6), _logs = __webpack_require__(4), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _user = __webpack_require__(209), _user2 = function(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }(_user), Settings = function() {
            function Settings() {
                _classCallCheck(this, Settings);
            }
            Settings.prototype.prepareSettings = function(settingsData, savedSettings) {
                var result = {};
                Object.entries(settingsData).forEach(function(_ref) {
                    var sectionId = _ref[0], section = _ref[1];
                    result[sectionId] = {};
                    Object.entries(section.settings).forEach(function(_ref2) {
                        var settingId = _ref2[0], setting = _ref2[1], savedSetting = savedSettings[sectionId] && savedSettings[sectionId][settingId], currentSetting = void 0;
                        if (savedSetting && savedSetting.patched === setting.patched) currentSetting = _extends({}, savedSetting); else currentSetting = {
                            defaultValue: setting.defaultValue,
                            value: setting.defaultValue,
                            disabled: setting.disabled,
                            patched: setting.patched
                        };
                        result[sectionId][settingId] = currentSetting;
                    });
                });
                return result;
            };
            Settings.prototype.getFileSettings = function() {
                this.filePath = !1 ? (0, _localFiles.ensurePath)(_specialFolders.AppFolder) + "\\settings.json" : "settings.json";
                var result = void 0;
                if (_system.fso.FileExists(this.filePath)) {
                    var file = _system.fso.OpenTextFile(this.filePath, 1, !1), json = file.ReadAll();
                    file.Close();
                    result = JSON.parse(json);
                }
                return result;
            };
            Settings.prototype.fetch = function() {
                function fetch() {
                    return _ref3.apply(this, arguments);
                }
                var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                    var id, endpoint, headers, _ref4, body;
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            id = _user2["default"].getId();
                            if (!id) {
                                _context.next = 16;
                                break;
                            }
                            endpoint = window.authEndpoint + "/api/user/" + id + "/config/beetle";
                            headers = _user2["default"].getHeaders();
                            _context.prev = 4;
                            _context.next = 7;
                            return (0, _http.httpget)(endpoint, {}, {
                                headers: headers
                            });

                          case 7:
                            _ref4 = _context.sent;
                            body = _ref4.body;
                            this.isFetched = !0;
                            return _context.abrupt("return", body);

                          case 13:
                            _context.prev = 13;
                            _context.t0 = _context["catch"](4);
                            console.warn(_context.t0);

                          case 16:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, this, [ [ 4, 13 ] ]);
                }));
                return fetch;
            }();
            Settings.prototype.load = function() {
                function load() {
                    return _ref5.apply(this, arguments);
                }
                var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2() {
                    var settingsData, fileSettings, fetchedSettings, savedSetting;
                    return regeneratorRuntime.wrap(function(_context2) {
                        for (;;) switch (_context2.prev = _context2.next) {
                          case 0:
                            settingsData = __webpack_require__(318)(l);
                            fileSettings = this.getFileSettings();
                            _context2.next = 4;
                            return this.fetch();

                          case 4:
                            fetchedSettings = _context2.sent;
                            savedSetting = fetchedSettings || fileSettings || {};
                            this.data = this.prepareSettings(settingsData, savedSetting);

                          case 7:
                          case "end":
                            return _context2.stop();
                        }
                    }, _callee2, this);
                }));
                return load;
            }();
            Settings.prototype.saveToFile = function() {
                try {
                    var file = _system.fso.OpenTextFile(this.filePath, 2, !0);
                    file.write(JSON.stringify(this.data));
                    file.Close();
                } catch (err) {
                    (0, _logs.log)("[settings] fail settings save to file", err);
                }
            };
            Settings.prototype.saveToAccount = function() {
                function saveToAccount() {
                    return _ref6.apply(this, arguments);
                }
                var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3() {
                    var id, endpoint, headers;
                    return regeneratorRuntime.wrap(function(_context3) {
                        for (;;) switch (_context3.prev = _context3.next) {
                          case 0:
                            id = _user2["default"].getId();
                            if (!id) {
                                _context3.next = 12;
                                break;
                            }
                            endpoint = window.authEndpoint + "/api/user/" + id + "/config/beetle";
                            headers = _user2["default"].getHeaders();
                            _context3.prev = 4;
                            _context3.next = 7;
                            return (0, _http.httpput)(endpoint, this.data, {
                                headers: headers
                            });

                          case 7:
                            _context3.next = 12;
                            break;

                          case 9:
                            _context3.prev = 9;
                            _context3.t0 = _context3["catch"](4);
                            (0, _logs.log)("[settings] fail settings save to account", _context3.t0);

                          case 12:
                          case "end":
                            return _context3.stop();
                        }
                    }, _callee3, this, [ [ 4, 9 ] ]);
                }));
                return saveToAccount;
            }();
            Settings.prototype.save = function() {
                function save() {
                    return _ref7.apply(this, arguments);
                }
                var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4() {
                    return regeneratorRuntime.wrap(function(_context4) {
                        for (;;) switch (_context4.prev = _context4.next) {
                          case 0:
                            this.saveToFile();
                            _context4.next = 3;
                            return this.saveToAccount();

                          case 3:
                            (0, _logs.log)("[settings] save: ", this.data);
                            return _context4.abrupt("return", this);

                          case 5:
                          case "end":
                            return _context4.stop();
                        }
                    }, _callee4, this);
                }));
                return save;
            }();
            Settings.prototype.get = function(keyPath, defaultValue) {
                var fields = keyPath.split("."), current = this.data, last = fields.pop();
                fields.forEach(function(field) {
                    if (!(field in current)) return defaultValue;
                    current = current[field];
                });
                return current[last];
            };
            Settings.prototype.set = function(keyPath, data) {
                var fields = keyPath.split("."), current = this.data, last = fields.pop();
                fields.forEach(function(field) {
                    if (!(field in current)) current[field] = {};
                    current = current[field];
                });
                current[last] = _extends({}, current[last], data);
                (0, _logs.log)("[settings] set setting " + keyPath + " to " + data.value);
                return this;
            };
            Settings.prototype.disable = function(keyPath, data) {
                var fields = keyPath.split("."), current = this.data, last = fields.pop();
                fields.forEach(function(field) {
                    current = current[field];
                });
                current[last] = _extends({}, current[last], data, {
                    disabled: !0
                });
                (0, _logs.log)("[settings] disable setting " + keyPath);
                return this;
            };
            Settings.prototype.enable = function(keyPath) {
                var fields = keyPath.split("."), current = this.data, last = fields.pop();
                fields.forEach(function(field) {
                    current = current[field];
                });
                current[last] = _extends({}, current[last], {
                    value: current[last].defaultValue,
                    disabled: !1
                });
                (0, _logs.log)("[settings] enable setting " + keyPath);
                return this;
            };
            Settings.prototype.getAll = function() {
                return _extends({}, this.data);
            };
            Settings.prototype.setAll = function(data) {
                this.data = data;
                return this;
            };
            return Settings;
        }();
        exports["default"] = window.settings = new Settings();
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), core = __webpack_require__(88), fails = __webpack_require__(9);
    module.exports = function(KEY, exec) {
        var fn = (core.Object || {})[KEY] || Object[KEY], exp = {};
        exp[KEY] = exec(fn);
        $export($export.S + $export.F * fails(function() {
            fn(1);
        }), "Object", exp);
    };
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12);
    module.exports = function(it, S) {
        if (!isObject(it)) return it;
        var fn, val;
        if (S && "function" == typeof (fn = it.toString) && !isObject(val = fn.call(it))) return val;
        if ("function" == typeof (fn = it.valueOf) && !isObject(val = fn.call(it))) return val;
        if (!S && "function" == typeof (fn = it.toString) && !isObject(val = fn.call(it))) return val;
        throw TypeError("Can't convert object to primitive value");
    };
}, function(module, exports) {
    function isObjectLike(value) {
        return !!value && "object" == typeof value;
    }
    module.exports = isObjectLike;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactEmptyComponent = __webpack_require__(191), ReactMount = __webpack_require__(51), invariant = __webpack_require__(5), ReactBrowserComponentMixin = {
        getDOMNode: function() {
            !0 ? invariant(this.isMounted(), "getDOMNode(): A component must be mounted to have a DOM node.") : invariant(this.isMounted());
            if (ReactEmptyComponent.isNullComponentID(this._rootNodeID)) return null; else return ReactMount.getNode(this._rootNodeID);
        }
    };
    module.exports = ReactBrowserComponentMixin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getDeclarationErrorAddendum(component) {
        var owner = component._owner || null;
        if (owner && owner.constructor && owner.constructor.displayName) return " Check the render method of `" + owner.constructor.displayName + "`."; else return "";
    }
    function validateTypeDef(Constructor, typeDef, location) {
        for (var propName in typeDef) if (typeDef.hasOwnProperty(propName)) !0 ? invariant("function" == typeof typeDef[propName], "%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.", Constructor.displayName || "ReactCompositeComponent", ReactPropTypeLocationNames[location], propName) : invariant("function" == typeof typeDef[propName]);
    }
    function validateMethodOverride(proto, name) {
        var specPolicy = ReactCompositeComponentInterface.hasOwnProperty(name) ? ReactCompositeComponentInterface[name] : null;
        if (ReactCompositeComponentMixin.hasOwnProperty(name)) !0 ? invariant(specPolicy === SpecPolicy.OVERRIDE_BASE, "ReactCompositeComponentInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.", name) : invariant(specPolicy === SpecPolicy.OVERRIDE_BASE);
        if (proto.hasOwnProperty(name)) !0 ? invariant(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED, "ReactCompositeComponentInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.", name) : invariant(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED);
    }
    function validateLifeCycleOnReplaceState(instance) {
        var compositeLifeCycleState = instance._compositeLifeCycleState;
        !0 ? invariant(instance.isMounted() || compositeLifeCycleState === CompositeLifeCycle.MOUNTING, "replaceState(...): Can only update a mounted or mounting component.") : invariant(instance.isMounted() || compositeLifeCycleState === CompositeLifeCycle.MOUNTING);
        !0 ? invariant(compositeLifeCycleState !== CompositeLifeCycle.RECEIVING_STATE, "replaceState(...): Cannot update during an existing state transition (such as within `render`). This could potentially cause an infinite loop so it is forbidden.") : invariant(compositeLifeCycleState !== CompositeLifeCycle.RECEIVING_STATE);
        !0 ? invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING, "replaceState(...): Cannot update while unmounting component. This usually means you called setState() on an unmounted component.") : invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING);
    }
    function mixSpecIntoComponent(Constructor, spec) {
        !0 ? invariant(!ReactDescriptor.isValidFactory(spec), "ReactCompositeComponent: You're attempting to use a component class as a mixin. Instead, just use a regular object.") : invariant(!ReactDescriptor.isValidFactory(spec));
        !0 ? invariant(!ReactDescriptor.isValidDescriptor(spec), "ReactCompositeComponent: You're attempting to use a component as a mixin. Instead, just use a regular object.") : invariant(!ReactDescriptor.isValidDescriptor(spec));
        var proto = Constructor.prototype;
        for (var name in spec) {
            var property = spec[name];
            if (spec.hasOwnProperty(name)) {
                validateMethodOverride(proto, name);
                if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) RESERVED_SPEC_KEYS[name](Constructor, property); else {
                    var isCompositeComponentMethod = ReactCompositeComponentInterface.hasOwnProperty(name), isAlreadyDefined = proto.hasOwnProperty(name), markedDontBind = property && property.__reactDontBind;
                    if ("function" == typeof property && !isCompositeComponentMethod && !isAlreadyDefined && !markedDontBind) {
                        if (!proto.__reactAutoBindMap) proto.__reactAutoBindMap = {};
                        proto.__reactAutoBindMap[name] = property;
                        proto[name] = property;
                    } else if (isAlreadyDefined) {
                        var specPolicy = ReactCompositeComponentInterface[name];
                        !0 ? invariant(isCompositeComponentMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY), "ReactCompositeComponent: Unexpected spec policy %s for key %s when mixing in component specs.", specPolicy, name) : invariant(isCompositeComponentMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY));
                        if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) proto[name] = createMergedResultFunction(proto[name], property); else if (specPolicy === SpecPolicy.DEFINE_MANY) proto[name] = createChainedFunction(proto[name], property);
                    } else {
                        proto[name] = property;
                        if (!0) if ("function" == typeof property && spec.displayName) proto[name].displayName = spec.displayName + "_" + name;
                    }
                }
            }
        }
    }
    function mixStaticSpecIntoComponent(Constructor, statics) {
        if (statics) for (var name in statics) {
            var property = statics[name];
            if (statics.hasOwnProperty(name)) {
                var isInherited = name in Constructor, result = property;
                if (isInherited) {
                    var existingProperty = Constructor[name], existingType = typeof existingProperty, propertyType = typeof property;
                    !0 ? invariant("function" === existingType && "function" === propertyType, "ReactCompositeComponent: You are attempting to define `%s` on your component more than once, but that is only supported for functions, which are chained together. This conflict may be due to a mixin.", name) : invariant("function" === existingType && "function" === propertyType);
                    result = createChainedFunction(existingProperty, property);
                }
                Constructor[name] = result;
            }
        }
    }
    function mergeObjectsWithNoDuplicateKeys(one, two) {
        !0 ? invariant(one && two && "object" == typeof one && "object" == typeof two, "mergeObjectsWithNoDuplicateKeys(): Cannot merge non-objects") : invariant(one && two && "object" == typeof one && "object" == typeof two);
        mapObject(two, function(value, key) {
            !0 ? invariant(one[key] === undefined, "mergeObjectsWithNoDuplicateKeys(): Tried to merge two objects with the same key: %s", key) : invariant(one[key] === undefined);
            one[key] = value;
        });
        return one;
    }
    function createMergedResultFunction(one, two) {
        return function() {
            var a = one.apply(this, arguments), b = two.apply(this, arguments);
            if (null == a) return b; else if (null == b) return a;
            return mergeObjectsWithNoDuplicateKeys(a, b);
        };
    }
    function createChainedFunction(one, two) {
        return function() {
            one.apply(this, arguments);
            two.apply(this, arguments);
        };
    }
    var ReactComponent = __webpack_require__(100), ReactContext = __webpack_require__(190), ReactCurrentOwner = __webpack_require__(101), ReactDescriptor = __webpack_require__(50), ReactDescriptorValidator = __webpack_require__(279), ReactEmptyComponent = __webpack_require__(191), ReactErrorUtils = __webpack_require__(627), ReactOwner = __webpack_require__(283), ReactPerf = __webpack_require__(62), ReactPropTransferer = __webpack_require__(631), ReactPropTypeLocations = __webpack_require__(285), ReactPropTypeLocationNames = __webpack_require__(284), ReactUpdates = __webpack_require__(103), instantiateReactComponent = __webpack_require__(146), invariant = __webpack_require__(5), keyMirror = __webpack_require__(85), merge = __webpack_require__(37), mixInto = __webpack_require__(52), monitorCodeUse = __webpack_require__(201), mapObject = __webpack_require__(298), shouldUpdateReactComponent = __webpack_require__(202), warning = __webpack_require__(53), SpecPolicy = keyMirror({
        DEFINE_ONCE: null,
        DEFINE_MANY: null,
        OVERRIDE_BASE: null,
        DEFINE_MANY_MERGED: null
    }), injectedMixins = [], ReactCompositeComponentInterface = {
        mixins: SpecPolicy.DEFINE_MANY,
        statics: SpecPolicy.DEFINE_MANY,
        propTypes: SpecPolicy.DEFINE_MANY,
        contextTypes: SpecPolicy.DEFINE_MANY,
        childContextTypes: SpecPolicy.DEFINE_MANY,
        getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,
        getInitialState: SpecPolicy.DEFINE_MANY_MERGED,
        getChildContext: SpecPolicy.DEFINE_MANY_MERGED,
        render: SpecPolicy.DEFINE_ONCE,
        componentWillMount: SpecPolicy.DEFINE_MANY,
        componentDidMount: SpecPolicy.DEFINE_MANY,
        componentWillReceiveProps: SpecPolicy.DEFINE_MANY,
        shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,
        componentWillUpdate: SpecPolicy.DEFINE_MANY,
        componentDidUpdate: SpecPolicy.DEFINE_MANY,
        componentWillUnmount: SpecPolicy.DEFINE_MANY,
        updateComponent: SpecPolicy.OVERRIDE_BASE
    }, RESERVED_SPEC_KEYS = {
        displayName: function(Constructor, displayName) {
            Constructor.displayName = displayName;
        },
        mixins: function(Constructor, mixins) {
            if (mixins) for (var i = 0; i < mixins.length; i++) mixSpecIntoComponent(Constructor, mixins[i]);
        },
        childContextTypes: function(Constructor, childContextTypes) {
            validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);
            Constructor.childContextTypes = merge(Constructor.childContextTypes, childContextTypes);
        },
        contextTypes: function(Constructor, contextTypes) {
            validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);
            Constructor.contextTypes = merge(Constructor.contextTypes, contextTypes);
        },
        getDefaultProps: function(Constructor, getDefaultProps) {
            if (Constructor.getDefaultProps) Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps); else Constructor.getDefaultProps = getDefaultProps;
        },
        propTypes: function(Constructor, propTypes) {
            validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);
            Constructor.propTypes = merge(Constructor.propTypes, propTypes);
        },
        statics: function(Constructor, statics) {
            mixStaticSpecIntoComponent(Constructor, statics);
        }
    }, CompositeLifeCycle = keyMirror({
        MOUNTING: null,
        UNMOUNTING: null,
        RECEIVING_PROPS: null,
        RECEIVING_STATE: null
    }), ReactCompositeComponentMixin = {
        construct: function(descriptor) {
            ReactComponent.Mixin.construct.apply(this, arguments);
            ReactOwner.Mixin.construct.apply(this, arguments);
            this.state = null;
            this._pendingState = null;
            this.context = null;
            this._compositeLifeCycleState = null;
        },
        isMounted: function() {
            return ReactComponent.Mixin.isMounted.call(this) && this._compositeLifeCycleState !== CompositeLifeCycle.MOUNTING;
        },
        mountComponent: ReactPerf.measure("ReactCompositeComponent", "mountComponent", function(rootID, transaction, mountDepth) {
            ReactComponent.Mixin.mountComponent.call(this, rootID, transaction, mountDepth);
            this._compositeLifeCycleState = CompositeLifeCycle.MOUNTING;
            if (this.__reactAutoBindMap) this._bindAutoBindMethods();
            this.context = this._processContext(this._descriptor._context);
            this.props = this._processProps(this.props);
            this.state = this.getInitialState ? this.getInitialState() : null;
            !0 ? invariant("object" == typeof this.state && !Array.isArray(this.state), "%s.getInitialState(): must return an object or null", this.constructor.displayName || "ReactCompositeComponent") : invariant("object" == typeof this.state && !Array.isArray(this.state));
            this._pendingState = null;
            this._pendingForceUpdate = !1;
            if (this.componentWillMount) {
                this.componentWillMount();
                if (this._pendingState) {
                    this.state = this._pendingState;
                    this._pendingState = null;
                }
            }
            this._renderedComponent = instantiateReactComponent(this._renderValidatedComponent());
            this._compositeLifeCycleState = null;
            var markup = this._renderedComponent.mountComponent(rootID, transaction, mountDepth + 1);
            if (this.componentDidMount) transaction.getReactMountReady().enqueue(this.componentDidMount, this);
            return markup;
        }),
        unmountComponent: function() {
            this._compositeLifeCycleState = CompositeLifeCycle.UNMOUNTING;
            if (this.componentWillUnmount) this.componentWillUnmount();
            this._compositeLifeCycleState = null;
            this._renderedComponent.unmountComponent();
            this._renderedComponent = null;
            ReactComponent.Mixin.unmountComponent.call(this);
        },
        setState: function(partialState, callback) {
            !0 ? invariant("object" == typeof partialState || null == partialState, "setState(...): takes an object of state variables to update.") : invariant("object" == typeof partialState || null == partialState);
            if (!0) warning(null != partialState, "setState(...): You passed an undefined or null state object; instead, use forceUpdate().");
            this.replaceState(merge(this._pendingState || this.state, partialState), callback);
        },
        replaceState: function(completeState, callback) {
            validateLifeCycleOnReplaceState(this);
            this._pendingState = completeState;
            if (this._compositeLifeCycleState !== CompositeLifeCycle.MOUNTING) ReactUpdates.enqueueUpdate(this, callback);
        },
        _processContext: function(context) {
            var maskedContext = null, contextTypes = this.constructor.contextTypes;
            if (contextTypes) {
                maskedContext = {};
                for (var contextName in contextTypes) maskedContext[contextName] = context[contextName];
                if (!0) this._checkPropTypes(contextTypes, maskedContext, ReactPropTypeLocations.context);
            }
            return maskedContext;
        },
        _processChildContext: function(currentContext) {
            var childContext = this.getChildContext && this.getChildContext(), displayName = this.constructor.displayName || "ReactCompositeComponent";
            if (childContext) {
                !0 ? invariant("object" == typeof this.constructor.childContextTypes, "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().", displayName) : invariant("object" == typeof this.constructor.childContextTypes);
                if (!0) this._checkPropTypes(this.constructor.childContextTypes, childContext, ReactPropTypeLocations.childContext);
                for (var name in childContext) !0 ? invariant(name in this.constructor.childContextTypes, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', displayName, name) : invariant(name in this.constructor.childContextTypes);
                return merge(currentContext, childContext);
            }
            return currentContext;
        },
        _processProps: function(newProps) {
            var props, defaultProps = this.constructor.defaultProps;
            if (defaultProps) {
                props = merge(newProps);
                for (var propName in defaultProps) if ("undefined" == typeof props[propName]) props[propName] = defaultProps[propName];
            } else props = newProps;
            if (!0) {
                var propTypes = this.constructor.propTypes;
                if (propTypes) this._checkPropTypes(propTypes, props, ReactPropTypeLocations.prop);
            }
            return props;
        },
        _checkPropTypes: function(propTypes, props, location) {
            var componentName = this.constructor.displayName;
            for (var propName in propTypes) if (propTypes.hasOwnProperty(propName)) {
                var error = propTypes[propName](props, propName, componentName, location);
                if (error instanceof Error) {
                    var addendum = getDeclarationErrorAddendum(this);
                    warning(!1, error.message + addendum);
                }
            }
        },
        performUpdateIfNecessary: function(transaction) {
            var compositeLifeCycleState = this._compositeLifeCycleState;
            if (compositeLifeCycleState !== CompositeLifeCycle.MOUNTING && compositeLifeCycleState !== CompositeLifeCycle.RECEIVING_PROPS) if (null != this._pendingDescriptor || null != this._pendingState || this._pendingForceUpdate) {
                var nextContext = this.context, nextProps = this.props, nextDescriptor = this._descriptor;
                if (null != this._pendingDescriptor) {
                    nextDescriptor = this._pendingDescriptor;
                    nextContext = this._processContext(nextDescriptor._context);
                    nextProps = this._processProps(nextDescriptor.props);
                    this._pendingDescriptor = null;
                    this._compositeLifeCycleState = CompositeLifeCycle.RECEIVING_PROPS;
                    if (this.componentWillReceiveProps) this.componentWillReceiveProps(nextProps, nextContext);
                }
                this._compositeLifeCycleState = CompositeLifeCycle.RECEIVING_STATE;
                var nextState = this._pendingState || this.state;
                this._pendingState = null;
                try {
                    var shouldUpdate = this._pendingForceUpdate || !this.shouldComponentUpdate || this.shouldComponentUpdate(nextProps, nextState, nextContext);
                    if (!0) if (void 0 === shouldUpdate) console.warn((this.constructor.displayName || "ReactCompositeComponent") + ".shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.");
                    if (shouldUpdate) {
                        this._pendingForceUpdate = !1;
                        this._performComponentUpdate(nextDescriptor, nextProps, nextState, nextContext, transaction);
                    } else {
                        this._descriptor = nextDescriptor;
                        this.props = nextProps;
                        this.state = nextState;
                        this.context = nextContext;
                        this._owner = nextDescriptor._owner;
                    }
                } finally {
                    this._compositeLifeCycleState = null;
                }
            }
        },
        _performComponentUpdate: function(nextDescriptor, nextProps, nextState, nextContext, transaction) {
            var prevDescriptor = this._descriptor, prevProps = this.props, prevState = this.state, prevContext = this.context;
            if (this.componentWillUpdate) this.componentWillUpdate(nextProps, nextState, nextContext);
            this._descriptor = nextDescriptor;
            this.props = nextProps;
            this.state = nextState;
            this.context = nextContext;
            this._owner = nextDescriptor._owner;
            this.updateComponent(transaction, prevDescriptor);
            if (this.componentDidUpdate) transaction.getReactMountReady().enqueue(this.componentDidUpdate.bind(this, prevProps, prevState, prevContext), this);
        },
        receiveComponent: function(nextDescriptor, transaction) {
            if (nextDescriptor !== this._descriptor || null == nextDescriptor._owner) ReactComponent.Mixin.receiveComponent.call(this, nextDescriptor, transaction);
        },
        updateComponent: ReactPerf.measure("ReactCompositeComponent", "updateComponent", function(transaction, prevParentDescriptor) {
            ReactComponent.Mixin.updateComponent.call(this, transaction, prevParentDescriptor);
            var prevComponentInstance = this._renderedComponent, prevDescriptor = prevComponentInstance._descriptor, nextDescriptor = this._renderValidatedComponent();
            if (shouldUpdateReactComponent(prevDescriptor, nextDescriptor)) prevComponentInstance.receiveComponent(nextDescriptor, transaction); else {
                var thisID = this._rootNodeID, prevComponentID = prevComponentInstance._rootNodeID;
                prevComponentInstance.unmountComponent();
                this._renderedComponent = instantiateReactComponent(nextDescriptor);
                var nextMarkup = this._renderedComponent.mountComponent(thisID, transaction, this._mountDepth + 1);
                ReactComponent.BackendIDOperations.dangerouslyReplaceNodeWithMarkupByID(prevComponentID, nextMarkup);
            }
        }),
        forceUpdate: function(callback) {
            var compositeLifeCycleState = this._compositeLifeCycleState;
            !0 ? invariant(this.isMounted() || compositeLifeCycleState === CompositeLifeCycle.MOUNTING, "forceUpdate(...): Can only force an update on mounted or mounting components.") : invariant(this.isMounted() || compositeLifeCycleState === CompositeLifeCycle.MOUNTING);
            !0 ? invariant(compositeLifeCycleState !== CompositeLifeCycle.RECEIVING_STATE && compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING, "forceUpdate(...): Cannot force an update while unmounting component or during an existing state transition (such as within `render`).") : invariant(compositeLifeCycleState !== CompositeLifeCycle.RECEIVING_STATE && compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING);
            this._pendingForceUpdate = !0;
            ReactUpdates.enqueueUpdate(this, callback);
        },
        _renderValidatedComponent: ReactPerf.measure("ReactCompositeComponent", "_renderValidatedComponent", function() {
            var renderedComponent, previousContext = ReactContext.current;
            ReactContext.current = this._processChildContext(this._descriptor._context);
            ReactCurrentOwner.current = this;
            try {
                renderedComponent = this.render();
                if (null === renderedComponent || !1 === renderedComponent) {
                    renderedComponent = ReactEmptyComponent.getEmptyComponent();
                    ReactEmptyComponent.registerNullComponentID(this._rootNodeID);
                } else ReactEmptyComponent.deregisterNullComponentID(this._rootNodeID);
            } finally {
                ReactContext.current = previousContext;
                ReactCurrentOwner.current = null;
            }
            !0 ? invariant(ReactDescriptor.isValidDescriptor(renderedComponent), "%s.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.", this.constructor.displayName || "ReactCompositeComponent") : invariant(ReactDescriptor.isValidDescriptor(renderedComponent));
            return renderedComponent;
        }),
        _bindAutoBindMethods: function() {
            for (var autoBindKey in this.__reactAutoBindMap) if (this.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {
                var method = this.__reactAutoBindMap[autoBindKey];
                this[autoBindKey] = this._bindAutoBindMethod(ReactErrorUtils.guard(method, this.constructor.displayName + "." + autoBindKey));
            }
        },
        _bindAutoBindMethod: function(method) {
            var component = this, boundMethod = function() {
                return method.apply(component, arguments);
            };
            if (!0) {
                boundMethod.__reactBoundContext = component;
                boundMethod.__reactBoundMethod = method;
                boundMethod.__reactBoundArguments = null;
                var componentName = component.constructor.displayName, _bind = boundMethod.bind;
                boundMethod.bind = function(newThis) {
                    var args = Array.prototype.slice.call(arguments, 1);
                    if (newThis !== component && null !== newThis) {
                        monitorCodeUse("react_bind_warning", {
                            component: componentName
                        });
                        console.warn("bind(): React component methods may only be bound to the component instance. See " + componentName);
                    } else if (!args.length) {
                        monitorCodeUse("react_bind_warning", {
                            component: componentName
                        });
                        console.warn("bind(): You are binding a component method to the component. React does this for you automatically in a high-performance way, so you can safely remove this call. See " + componentName);
                        return boundMethod;
                    }
                    var reboundMethod = _bind.apply(boundMethod, arguments);
                    reboundMethod.__reactBoundContext = component;
                    reboundMethod.__reactBoundMethod = method;
                    reboundMethod.__reactBoundArguments = args;
                    return reboundMethod;
                };
            }
            return boundMethod;
        }
    }, ReactCompositeComponentBase = function() {};
    mixInto(ReactCompositeComponentBase, ReactComponent.Mixin);
    mixInto(ReactCompositeComponentBase, ReactOwner.Mixin);
    mixInto(ReactCompositeComponentBase, ReactPropTransferer.Mixin);
    mixInto(ReactCompositeComponentBase, ReactCompositeComponentMixin);
    var ReactCompositeComponent = {
        LifeCycle: CompositeLifeCycle,
        Base: ReactCompositeComponentBase,
        createClass: function(spec) {
            var Constructor = function(props, owner) {
                this.construct(props, owner);
            };
            Constructor.prototype = new ReactCompositeComponentBase();
            Constructor.prototype.constructor = Constructor;
            injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
            mixSpecIntoComponent(Constructor, spec);
            if (Constructor.getDefaultProps) Constructor.defaultProps = Constructor.getDefaultProps();
            !0 ? invariant(Constructor.prototype.render, "createClass(...): Class specification must implement a `render` method.") : invariant(Constructor.prototype.render);
            if (!0) if (Constructor.prototype.componentShouldUpdate) {
                monitorCodeUse("react_component_should_update_warning", {
                    component: spec.displayName
                });
                console.warn((spec.displayName || "A component") + " has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.");
            }
            for (var methodName in ReactCompositeComponentInterface) if (!Constructor.prototype[methodName]) Constructor.prototype[methodName] = null;
            var descriptorFactory = ReactDescriptor.createFactory(Constructor);
            if (!0) return ReactDescriptorValidator.createFactory(descriptorFactory, Constructor.propTypes, Constructor.contextTypes); else return descriptorFactory;
        },
        injection: {
            injectMixin: function(mixin) {
                injectedMixins.push(mixin);
            }
        }
    };
    module.exports = ReactCompositeComponent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createDOMComponentClass(omitClose, tag) {
        var Constructor = function(descriptor) {
            this.construct(descriptor);
        };
        Constructor.prototype = new ReactDOMComponent(tag, omitClose);
        Constructor.prototype.constructor = Constructor;
        Constructor.displayName = tag;
        var ConvenienceConstructor = ReactDescriptor.createFactory(Constructor);
        if (!0) return ReactDescriptorValidator.createFactory(ConvenienceConstructor); else return ConvenienceConstructor;
    }
    var ReactDescriptor = __webpack_require__(50), ReactDescriptorValidator = __webpack_require__(279), ReactDOMComponent = __webpack_require__(278), mergeInto = __webpack_require__(200), mapObject = __webpack_require__(298), ReactDOM = mapObject({
        a: !1,
        abbr: !1,
        address: !1,
        area: !0,
        article: !1,
        aside: !1,
        audio: !1,
        b: !1,
        base: !0,
        bdi: !1,
        bdo: !1,
        big: !1,
        blockquote: !1,
        body: !1,
        br: !0,
        button: !1,
        canvas: !1,
        caption: !1,
        cite: !1,
        code: !1,
        col: !0,
        colgroup: !1,
        data: !1,
        datalist: !1,
        dd: !1,
        del: !1,
        details: !1,
        dfn: !1,
        dialog: !1,
        div: !1,
        dl: !1,
        dt: !1,
        em: !1,
        embed: !0,
        fieldset: !1,
        figcaption: !1,
        figure: !1,
        footer: !1,
        form: !1,
        h1: !1,
        h2: !1,
        h3: !1,
        h4: !1,
        h5: !1,
        h6: !1,
        head: !1,
        header: !1,
        hr: !0,
        html: !1,
        i: !1,
        iframe: !1,
        img: !0,
        input: !0,
        ins: !1,
        kbd: !1,
        keygen: !0,
        label: !1,
        legend: !1,
        li: !1,
        link: !0,
        main: !1,
        map: !1,
        mark: !1,
        menu: !1,
        menuitem: !1,
        meta: !0,
        meter: !1,
        nav: !1,
        noscript: !1,
        object: !1,
        ol: !1,
        optgroup: !1,
        option: !1,
        output: !1,
        p: !1,
        param: !0,
        picture: !1,
        pre: !1,
        progress: !1,
        q: !1,
        rp: !1,
        rt: !1,
        ruby: !1,
        s: !1,
        samp: !1,
        script: !1,
        section: !1,
        select: !1,
        small: !1,
        source: !0,
        span: !1,
        strong: !1,
        style: !1,
        sub: !1,
        summary: !1,
        sup: !1,
        table: !1,
        tbody: !1,
        td: !1,
        textarea: !1,
        tfoot: !1,
        th: !1,
        thead: !1,
        time: !1,
        title: !1,
        tr: !1,
        track: !0,
        u: !1,
        ul: !1,
        "var": !1,
        video: !1,
        wbr: !0,
        circle: !1,
        defs: !1,
        ellipse: !1,
        g: !1,
        line: !1,
        linearGradient: !1,
        mask: !1,
        path: !1,
        pattern: !1,
        polygon: !1,
        polyline: !1,
        radialGradient: !1,
        rect: !1,
        stop: !1,
        svg: !1,
        text: !1,
        tspan: !1
    }, createDOMComponentClass), injection = {
        injectComponentClasses: function(componentClasses) {
            mergeInto(ReactDOM, componentClasses);
        }
    };
    ReactDOM.injection = injection;
    module.exports = ReactDOM;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function defineWarningProperty(object, key) {
        Object.defineProperty(object, key, {
            configurable: !1,
            enumerable: !0,
            get: function() {
                if (!this._store) return null; else return this._store[key];
            },
            set: function(value) {
                warning(!1, "Don't set the " + key + " property of the component. Mutate the existing props object instead.");
                this._store[key] = value;
            }
        });
    }
    function proxyStaticMethods(target, source) {
        if ("function" == typeof source) for (var key in source) if (source.hasOwnProperty(key)) {
            var value = source[key];
            if ("function" == typeof value) {
                var bound = value.bind(source);
                for (var k in value) if (value.hasOwnProperty(k)) bound[k] = value[k];
                target[key] = bound;
            } else target[key] = value;
        }
    }
    var ReactContext = __webpack_require__(190), ReactCurrentOwner = __webpack_require__(101), merge = __webpack_require__(37), warning = __webpack_require__(53), useMutationMembrane = !1, ReactDescriptor = function() {};
    if (!0) !function(prototype) {
        try {
            var pseudoFrozenProperties = {
                props: !0
            };
            for (var key in pseudoFrozenProperties) defineWarningProperty(prototype, key);
            useMutationMembrane = !0;
        } catch (x) {}
    }(ReactDescriptor.prototype);
    ReactDescriptor.createFactory = function(type) {
        var descriptorPrototype = Object.create(ReactDescriptor.prototype), factory = function(props, children) {
            if (null == props) props = {}; else if ("object" == typeof props) props = merge(props);
            var childrenLength = arguments.length - 1;
            if (1 === childrenLength) props.children = children; else if (childrenLength > 1) {
                for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) childArray[i] = arguments[i + 1];
                props.children = childArray;
            }
            var descriptor = Object.create(descriptorPrototype);
            descriptor._owner = ReactCurrentOwner.current;
            descriptor._context = ReactContext.current;
            if (!0) {
                descriptor._store = {
                    validated: !1,
                    props: props
                };
                if (useMutationMembrane) {
                    Object.freeze(descriptor);
                    return descriptor;
                }
            }
            descriptor.props = props;
            return descriptor;
        };
        factory.prototype = descriptorPrototype;
        factory.type = type;
        descriptorPrototype.type = type;
        proxyStaticMethods(factory, type);
        descriptorPrototype.constructor = factory;
        return factory;
    };
    ReactDescriptor.cloneAndReplaceProps = function(oldDescriptor, newProps) {
        var newDescriptor = Object.create(oldDescriptor.constructor.prototype);
        newDescriptor._owner = oldDescriptor._owner;
        newDescriptor._context = oldDescriptor._context;
        if (!0) {
            newDescriptor._store = {
                validated: oldDescriptor._store.validated,
                props: newProps
            };
            if (useMutationMembrane) {
                Object.freeze(newDescriptor);
                return newDescriptor;
            }
        }
        newDescriptor.props = newProps;
        return newDescriptor;
    };
    ReactDescriptor.isValidFactory = function(factory) {
        return "function" == typeof factory && factory.prototype instanceof ReactDescriptor;
    };
    ReactDescriptor.isValidDescriptor = function(object) {
        return object instanceof ReactDescriptor;
    };
    module.exports = ReactDescriptor;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getReactRootID(container) {
        var rootElement = getReactRootElementInContainer(container);
        return rootElement && ReactMount.getID(rootElement);
    }
    function getID(node) {
        var id = internalGetID(node);
        if (id) if (nodeCache.hasOwnProperty(id)) {
            var cached = nodeCache[id];
            if (cached !== node) {
                !0 ? invariant(!isValid(cached, id), "ReactMount: Two valid but unequal nodes with the same `%s`: %s", ATTR_NAME, id) : invariant(!isValid(cached, id));
                nodeCache[id] = node;
            }
        } else nodeCache[id] = node;
        return id;
    }
    function internalGetID(node) {
        return node && node.getAttribute && node.getAttribute(ATTR_NAME) || "";
    }
    function setID(node, id) {
        var oldID = internalGetID(node);
        if (oldID !== id) delete nodeCache[oldID];
        node.setAttribute(ATTR_NAME, id);
        nodeCache[id] = node;
    }
    function getNode(id) {
        if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) nodeCache[id] = ReactMount.findReactNodeByID(id);
        return nodeCache[id];
    }
    function isValid(node, id) {
        if (node) {
            !0 ? invariant(internalGetID(node) === id, "ReactMount: Unexpected modification of `%s`", ATTR_NAME) : invariant(internalGetID(node) === id);
            var container = ReactMount.findReactContainerForID(id);
            if (container && containsNode(container, node)) return !0;
        }
        return !1;
    }
    function purgeID(id) {
        delete nodeCache[id];
    }
    function findDeepestCachedAncestorImpl(ancestorID) {
        var ancestor = nodeCache[ancestorID];
        if (ancestor && isValid(ancestor, ancestorID)) deepestNodeSoFar = ancestor; else return !1;
    }
    function findDeepestCachedAncestor(targetID) {
        deepestNodeSoFar = null;
        ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);
        var foundNode = deepestNodeSoFar;
        deepestNodeSoFar = null;
        return foundNode;
    }
    var DOMProperty = __webpack_require__(83), ReactBrowserEventEmitter = __webpack_require__(99), ReactCurrentOwner = __webpack_require__(101), ReactDescriptor = __webpack_require__(50), ReactInstanceHandles = __webpack_require__(102), ReactPerf = __webpack_require__(62), containsNode = __webpack_require__(291), getReactRootElementInContainer = __webpack_require__(295), instantiateReactComponent = __webpack_require__(146), invariant = __webpack_require__(5), shouldUpdateReactComponent = __webpack_require__(202), warning = __webpack_require__(53), SEPARATOR = ReactInstanceHandles.SEPARATOR, ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME, nodeCache = {}, instancesByReactRootID = {}, containersByReactRootID = {};
    if (!0) var rootElementsByReactRootID = {};
    var findComponentRootReusableArray = [], deepestNodeSoFar = null, ReactMount = {
        _instancesByReactRootID: instancesByReactRootID,
        scrollMonitor: function(container, renderCallback) {
            renderCallback();
        },
        _updateRootComponent: function(prevComponent, nextComponent, container, callback) {
            var nextProps = nextComponent.props;
            ReactMount.scrollMonitor(container, function() {
                prevComponent.replaceProps(nextProps, callback);
            });
            if (!0) rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);
            return prevComponent;
        },
        _registerComponent: function(nextComponent, container) {
            !0 ? invariant(container && (1 === container.nodeType || 9 === container.nodeType), "_registerComponent(...): Target container is not a DOM element.") : invariant(container && (1 === container.nodeType || 9 === container.nodeType));
            ReactBrowserEventEmitter.ensureScrollValueMonitoring();
            var reactRootID = ReactMount.registerContainer(container);
            instancesByReactRootID[reactRootID] = nextComponent;
            return reactRootID;
        },
        _renderNewRootComponent: ReactPerf.measure("ReactMount", "_renderNewRootComponent", function(nextComponent, container, shouldReuseMarkup) {
            warning(null == ReactCurrentOwner.current, "_renderNewRootComponent(): Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.");
            var componentInstance = instantiateReactComponent(nextComponent), reactRootID = ReactMount._registerComponent(componentInstance, container);
            componentInstance.mountComponentIntoNode(reactRootID, container, shouldReuseMarkup);
            if (!0) rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);
            return componentInstance;
        }),
        renderComponent: function(nextDescriptor, container, callback) {
            !0 ? invariant(ReactDescriptor.isValidDescriptor(nextDescriptor), "renderComponent(): Invalid component descriptor.%s", ReactDescriptor.isValidFactory(nextDescriptor) ? " Instead of passing a component class, make sure to instantiate it first by calling it with props." : "undefined" != typeof nextDescriptor.props ? " This may be caused by unintentionally loading two independent copies of React." : "") : invariant(ReactDescriptor.isValidDescriptor(nextDescriptor));
            var prevComponent = instancesByReactRootID[getReactRootID(container)];
            if (prevComponent) {
                var prevDescriptor = prevComponent._descriptor;
                if (shouldUpdateReactComponent(prevDescriptor, nextDescriptor)) return ReactMount._updateRootComponent(prevComponent, nextDescriptor, container, callback); else ReactMount.unmountComponentAtNode(container);
            }
            var reactRootElement = getReactRootElementInContainer(container), containerHasReactMarkup = reactRootElement && ReactMount.isRenderedByReact(reactRootElement), shouldReuseMarkup = containerHasReactMarkup && !prevComponent, component = ReactMount._renderNewRootComponent(nextDescriptor, container, shouldReuseMarkup);
            callback && callback.call(component);
            return component;
        },
        constructAndRenderComponent: function(constructor, props, container) {
            return ReactMount.renderComponent(constructor(props), container);
        },
        constructAndRenderComponentByID: function(constructor, props, id) {
            var domNode = document.getElementById(id);
            !0 ? invariant(domNode, 'Tried to get element with id of "%s" but it is not present on the page.', id) : invariant(domNode);
            return ReactMount.constructAndRenderComponent(constructor, props, domNode);
        },
        registerContainer: function(container) {
            var reactRootID = getReactRootID(container);
            if (reactRootID) reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);
            if (!reactRootID) reactRootID = ReactInstanceHandles.createReactRootID();
            containersByReactRootID[reactRootID] = container;
            return reactRootID;
        },
        unmountComponentAtNode: function(container) {
            warning(null == ReactCurrentOwner.current, "unmountComponentAtNode(): Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.");
            var reactRootID = getReactRootID(container), component = instancesByReactRootID[reactRootID];
            if (!component) return !1;
            ReactMount.unmountComponentFromNode(component, container);
            delete instancesByReactRootID[reactRootID];
            delete containersByReactRootID[reactRootID];
            if (!0) delete rootElementsByReactRootID[reactRootID];
            return !0;
        },
        unmountComponentFromNode: function(instance, container) {
            instance.unmountComponent();
            if (9 === container.nodeType) container = container.documentElement;
            for (;container.lastChild; ) container.removeChild(container.lastChild);
        },
        findReactContainerForID: function(id) {
            var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id), container = containersByReactRootID[reactRootID];
            if (!0) {
                var rootElement = rootElementsByReactRootID[reactRootID];
                if (rootElement && rootElement.parentNode !== container) {
                    !0 ? invariant(internalGetID(rootElement) === reactRootID, "ReactMount: Root element ID differed from reactRootID.") : invariant(internalGetID(rootElement) === reactRootID);
                    var containerChild = container.firstChild;
                    if (containerChild && reactRootID === internalGetID(containerChild)) rootElementsByReactRootID[reactRootID] = containerChild; else console.warn("ReactMount: Root element has been removed from its original container. New container:", rootElement.parentNode);
                }
            }
            return container;
        },
        findReactNodeByID: function(id) {
            var reactRoot = ReactMount.findReactContainerForID(id);
            return ReactMount.findComponentRoot(reactRoot, id);
        },
        isRenderedByReact: function(node) {
            if (1 !== node.nodeType) return !1;
            var id = ReactMount.getID(node);
            return id ? id.charAt(0) === SEPARATOR : !1;
        },
        getFirstReactDOM: function(node) {
            for (var current = node; current && current.parentNode !== current; ) {
                if (ReactMount.isRenderedByReact(current)) return current;
                current = current.parentNode;
            }
            return null;
        },
        findComponentRoot: function(ancestorNode, targetID) {
            var firstChildren = findComponentRootReusableArray, childIndex = 0, deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;
            firstChildren[0] = deepestAncestor.firstChild;
            firstChildren.length = 1;
            for (;childIndex < firstChildren.length; ) {
                for (var targetChild, child = firstChildren[childIndex++]; child; ) {
                    var childID = ReactMount.getID(child);
                    if (childID) {
                        if (targetID === childID) targetChild = child; else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {
                            firstChildren.length = childIndex = 0;
                            firstChildren.push(child.firstChild);
                        }
                    } else firstChildren.push(child.firstChild);
                    child = child.nextSibling;
                }
                if (targetChild) {
                    firstChildren.length = 0;
                    return targetChild;
                }
            }
            firstChildren.length = 0;
            !0 ? invariant(!1, "findComponentRoot(..., %s): Unable to find element. This probably means the DOM was unexpectedly mutated (e.g., by the browser), usually due to forgetting a <tbody> when using tables, nesting <p> or <a> tags, or using non-SVG elements in an <svg> parent. Try inspecting the child nodes of the element with React ID `%s`.", targetID, ReactMount.getID(ancestorNode)) : invariant(!1);
        },
        getReactRootID: getReactRootID,
        getID: getID,
        setID: setID,
        getNode: getNode,
        purgeID: purgeID
    };
    module.exports = ReactMount;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var mixInto = function(constructor, methodBag) {
        var methodName;
        for (methodName in methodBag) if (methodBag.hasOwnProperty(methodName)) constructor.prototype[methodName] = methodBag[methodName];
    };
    module.exports = mixInto;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var emptyFunction = __webpack_require__(63), warning = emptyFunction;
    if (!0) warning = function(condition, format) {
        var args = Array.prototype.slice.call(arguments, 2);
        if (format === undefined) throw new Error("`warning(condition, format, ...args)` requires a warning message argument");
        if (!condition) {
            var argIndex = 0;
            console.warn("Warning: " + format.replace(/%s/g, function() {
                return args[argIndex++];
            }));
        }
    };
    module.exports = warning;
}, function(module, exports) {
    var g;
    g = function() {
        return this;
    }();
    try {
        g = g || Function("return this")() || (0, eval)("this");
    } catch (e) {
        if ("object" == typeof window) g = window;
    }
    module.exports = g;
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function _asyncToGenerator(fn) {
            return function() {
                var gen = fn.apply(this, arguments);
                return new Promise(function(resolve, reject) {
                    function step(key, arg) {
                        try {
                            var info = gen[key](arg), value = info.value;
                        } catch (error) {
                            reject(error);
                            return;
                        }
                        if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                            step("next", value);
                        }, function(err) {
                            step("throw", err);
                        });
                    }
                    return step("next");
                });
            };
        }
        function updateWindowParams() {
            return {
                type: "WINDOW_PARAMETERS_UPDATED",
                payload: {
                    windowWidth: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
                    windowHeight: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
                    windowLeft: window.screenLeft,
                    windowTop: window.screenTop
                }
            };
        }
        function toggleBurgerMenu() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            if (options.eventAction) _logs2["default"].info({
                action: options.eventAction,
                counters: [ "debug" ]
            }, {}, options.eventNamespace);
            return function(dispatch, getState) {
                dispatch({
                    type: "BURGER_MENU_TOGGLED"
                });
            };
        }
        function toggleGdprBanner() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return function(dispatch, getState) {
                var eventAction = options.eventAction, eventNamespace = options.eventNamespace, isDeclined = options.isDeclined, isConfirmed = options.isConfirmed, params = {}, metrikaParams = {};
                if (isConfirmed) {
                    var _prepareDiagnosticsPa = (0, _prepareDiagnosticsParams2["default"])();
                    params = _prepareDiagnosticsPa.params;
                    metrikaParams = _prepareDiagnosticsPa.metrikaParams;
                }
                if (eventAction) _logs2["default"].info({
                    action: eventAction,
                    namespace: eventNamespace,
                    params: params,
                    override: {
                        yandex: {
                            params: metrikaParams
                        }
                    },
                    counters: [ "default", "google.shared" ]
                }, {}, eventNamespace);
                dispatch({
                    type: "TOGGLE_GDPR_BANNER",
                    payload: {
                        isDeclined: isDeclined
                    }
                });
            };
        }
        function confirmMinimizing() {
            return function(dispatch, getState) {
                dispatch({
                    type: "INSTALLATION_CONFIRM_MINIMIZING"
                });
            };
        }
        function minimizeWindow() {
            _logs2["default"].info("minimize clicked", {}, "minimize:clicked");
            return function(dispatch, getState) {
                window.windowRestoreTimeout = window.setTimeout(function() {
                    dispatch(maximizeWindow());
                    (0, _activateAppWindow2["default"])();
                }, 6e5);
                sendPS(buildMinimizeCmd("$htaHwnd"));
                dispatch({
                    type: "WINDOW_STATE_CHANGED",
                    payload: {
                        windowState: "minimized"
                    }
                });
            };
        }
        function maximizeWindow() {
            _logs2["default"].info("maximize clicked", {}, "maximize:clicked");
            return function(dispatch, getState) {
                window.clearTimeout(window.windowRestoreTimeout);
                var _getState$app = getState().app, windowState = _getState$app.windowState, isFullscreen = _getState$app.isFullscreen, screenWidth = isFullscreen ? screen.width : screen.availWidth, screenHeight = isFullscreen ? screen.height : screen.availHeight;
                if ("normal" === windowState || "minimized" === windowState) {
                    if ("minimized" === windowState) sendPS(buildRestoreCmd("$htaHwnd"));
                    window.resizeTo(screenWidth, screenHeight);
                    window.moveTo(0, 0);
                    dispatch({
                        type: "WINDOW_STATE_CHANGED",
                        payload: {
                            windowState: "maximized"
                        }
                    });
                } else if ("maximized" === windowState) {
                    var windowWidth = Math.min(screenWidth, NORMAL_WINDOW_WIDTH), windowHeight = Math.min(screenHeight, NORMAL_WINDOW_HEIGHT);
                    window.resizeTo(windowWidth, windowHeight);
                    window.moveTo((screenWidth - windowWidth) / 2, (screenHeight - windowHeight) / 2);
                    dispatch({
                        type: "WINDOW_STATE_CHANGED",
                        payload: {
                            windowState: "normal"
                        }
                    });
                }
                dispatch(updateWindowParams());
            };
        }
        function Close() {
            _ps2["default"].terminate();
            window.close();
        }
        function CloseWindow() {
            window.moveTo(-5e4, 0);
            return _logs2["default"].info.apply(_logs2["default"], arguments).timeout(5e3)["finally"](function() {
                Close();
            });
        }
        function closeWindow() {
            return function(dispatch, getState) {
                var _getState = getState(), app = _getState.app, page = _getState.page;
                dispatch((0, _onboardingActions.saveOnboardingSettings)());
                switch (page) {
                  case "START":
                    var logArgs = [ {
                        action: "startpage close clicked"
                    }, {}, "startpage:close:clicked" ];
                    if (!app.isDriversFake) {
                        _logs2["default"].info.apply(_logs2["default"], logArgs);
                        dispatch({
                            type: "START_SCREEN_CLOSE_CLICKED"
                        });
                        dispatch((0, _startActions.startInstallCustom)());
                    } else CloseWindow.apply(undefined, logArgs);
                    break;

                  case "INSTALLATION":
                    _logs2["default"].info({
                        action: "installation close clicked"
                    }, {}, "installation:close:clicked");
                    if (!confirm(l("installation_close_confirm"))) _logs2["default"].info({
                        action: "installation close confirm clicked no"
                    }, {}, "installation:close:confirm:clicked:no"); else CloseWindow({
                        action: "installation close confirm clicked yes"
                    }, {}, "installation:close:confirm:clicked:yes");
                    break;

                  default:
                    CloseWindow({
                        action: "close clicked"
                    }, {}, "DriverPackSolution:close:clicked");
                }
            };
        }
        function startWindowDragging(e) {
            return function(dispatch, getState) {
                movingData.isDragging = !0;
                var mouseDownEvent = e || window.event;
                document.body.setCapture();
                movingData.x = mouseDownEvent.screenX;
                movingData.y = mouseDownEvent.screenY;
                movingData.winX = window.screenLeft;
                movingData.winY = window.screenTop;
                (0, _eventsHandling.addEvent)(document.body, "mousemove", mouseMove);
                (0, _eventsHandling.addEvent)(document.body, "mouseup", mouseUp);
            };
        }
        function mouseMove(e) {
            if (movingData.isDragging) {
                var mouseMoveEvent = e || window.event, newWinX = movingData.winX + (mouseMoveEvent.screenX - movingData.x), newWinY = movingData.winY + (mouseMoveEvent.screenY - movingData.y);
                if (newWinY > screen.availHeight - HEADER_HEIGHT) newWinY = screen.availHeight - HEADER_HEIGHT;
                if (newWinY < 0) newWinY = 0;
                try {
                    window.moveTo(newWinX, newWinY);
                } catch (err) {}
                window.dialogLeft = newWinX;
                window.dialogTop = newWinY;
                document.body.setCapture();
            }
        }
        function mouseUp() {
            movingData.isDragging = !1;
            (0, _eventsHandling.removeEvent)(document.body, "mousemove", mouseMove);
            (0, _eventsHandling.removeEvent)(document.body, "mouseup", mouseUp);
            document.body.releaseCapture();
        }
        function checkConnection() {
            var _this = this;
            return function() {
                var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                    var isConnected;
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            _context.next = 2;
                            return _statistics2["default"].checkConnection();

                          case 2:
                            isConnected = _context.sent;
                            dispatch({
                                type: "CONNECTION_CHECKED",
                                payload: isConnected
                            });

                          case 4:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, _this);
                }));
                return function(_x3, _x4) {
                    return _ref.apply(this, arguments);
                };
            }();
        }
        function authorize() {
            var _this2 = this;
            return function() {
                var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(dispatch, getState) {
                    return regeneratorRuntime.wrap(function(_context3) {
                        for (;;) switch (_context3.prev = _context3.next) {
                          case 0:
                            dispatch({
                                type: "AUTHORIZATION_STARTED"
                            });
                            _context3.prev = 1;
                            _context3.next = 4;
                            return _user2["default"].authorize();

                          case 4:
                            _logs2["default"].info({
                                action: "auth authorize succeeded",
                                counters: [ "debug" ]
                            }, {}, "auth:authorize:succeeded", [ "auth" ]);
                            dispatch({
                                type: "USER_ACTIVATED"
                            });
                            _context3.next = 8;
                            return applySettings(dispatch);

                          case 8:
                            _system.WshShell.AppActivate((0, _processes.getMyPID)());
                            dispatch({
                                type: "AUTHORIZED",
                                payload: _user2["default"]
                            });
                            _context3.next = 17;
                            break;

                          case 12:
                            _context3.prev = 12;
                            _context3.t0 = _context3["catch"](1);
                            _logs2["default"].error({
                                action: "auth authorize failed",
                                counters: [ "debug" ]
                            }, {
                                error: _context3.t0
                            }, "auth:authorize:failed", [ "auth" ]);
                            _system.WshShell.AppActivate((0, _processes.getMyPID)());
                            dispatch({
                                type: "UNAUTHORIZED",
                                payload: _user2["default"]
                            });

                          case 17:
                            _context3.prev = 17;
                            sendPS([ "Get-Process", "where {$_.mainWindowTItle -like '*" + authTitle + "*'}", "%{" + buildMinimizeCmd("$_.mainWindowHandle") + "}" ].join(" | "));
                            _system.WshShell.AppActivate((0, _processes.getMyPID)());
                            return _context3.finish(17);

                          case 21:
                          case "end":
                            return _context3.stop();
                        }
                    }, _callee3, _this2, [ [ 1, 12, 17, 21 ] ]);
                }));
                return function(_x6, _x7) {
                    return _ref3.apply(this, arguments);
                };
            }();
        }
        function unauthorize() {
            var _this3 = this;
            return function() {
                var _ref4 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(dispatch, getState) {
                    return regeneratorRuntime.wrap(function(_context4) {
                        for (;;) switch (_context4.prev = _context4.next) {
                          case 0:
                            _context4.prev = 0;
                            _context4.next = 3;
                            return _user2["default"].unauthorize();

                          case 3:
                            _logs2["default"].info({
                                action: "auth unauthorize succeeded",
                                counters: [ "debug" ]
                            }, {}, "auth:unauthorize:succeeded", [ "auth" ]);
                            dispatch({
                                type: "UNAUTHORIZED",
                                payload: _user2["default"]
                            });
                            _context4.next = 10;
                            break;

                          case 7:
                            _context4.prev = 7;
                            _context4.t0 = _context4["catch"](0);
                            _logs2["default"].error({
                                action: "auth unauthorize failed",
                                counters: [ "debug" ]
                            }, {
                                error: _context4.t0
                            }, "auth:unauthorize:failed", [ "auth" ]);

                          case 10:
                          case "end":
                            return _context4.stop();
                        }
                    }, _callee4, _this3, [ [ 0, 7 ] ]);
                }));
                return function(_x8, _x9) {
                    return _ref4.apply(this, arguments);
                };
            }();
        }
        function startExpertMode() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return function(dispatch, getState) {
                dispatch({
                    type: "EXPERT_MODE_CLICKED"
                });
                if ("startpage expertmode clicked" === options.eventAction) dispatch((0, _onboardingActions.addOnboardingEvent)(options.eventAction));
                dispatch((0, _startActions.startInstallCustom)(options));
            };
        }
        function checkGamer() {
            var _this4 = this;
            return function() {
                var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5(dispatch, getState) {
                    var steamProcesses, isGamer;
                    return regeneratorRuntime.wrap(function(_context5) {
                        for (;;) switch (_context5.prev = _context5.next) {
                          case 0:
                            steamProcesses = (0, _wmi.getWMIObjects)([ "ExecutablePath", "CommandLine" ], "Win32_Process", 'Name = "Steam.exe" OR Name = "steam.exe"');
                            isGamer = !!steamProcesses.length;
                            dispatch({
                                type: "GAMER_CHECKED",
                                payload: isGamer
                            });

                          case 3:
                          case "end":
                            return _context5.stop();
                        }
                    }, _callee5, _this4);
                }));
                return function(_x11, _x12) {
                    return _ref5.apply(this, arguments);
                };
            }();
        }
        function toggleProgramsRecommendations() {
            arguments.length > 0 && arguments[0] !== undefined && arguments[0];
            return function(dispatch, getState) {
                _logs2["default"].info({
                    action: "soft software recommendations clicked",
                    counters: [ "default", "google.shared" ]
                }, {}, "soft:software:recommendations:clicked");
                dispatch({
                    type: "TOGGLE_PROGRAMS_RECOMMENDATIONS"
                });
            };
        }
        function toggleProtectRecommendations() {
            arguments.length > 0 && arguments[0] !== undefined && arguments[0];
            _logs2["default"].info({
                action: "protect software recommendations clicked",
                counters: [ "default", "google.shared" ]
            }, {}, "protect:software:recommendations:clicked");
            return function(dispatch, getState) {
                dispatch({
                    type: "TOGGLE_PROTECT_RECOMMENDATIONS"
                });
            };
        }
        exports.__esModule = !0;
        exports.sendPS = exports.initPS = undefined;
        exports.updateWindowParams = updateWindowParams;
        exports.toggleBurgerMenu = toggleBurgerMenu;
        exports.toggleGdprBanner = toggleGdprBanner;
        exports.confirmMinimizing = confirmMinimizing;
        exports.minimizeWindow = minimizeWindow;
        exports.maximizeWindow = maximizeWindow;
        exports.closeWindow = closeWindow;
        exports.startWindowDragging = startWindowDragging;
        exports.checkConnection = checkConnection;
        exports.authorize = authorize;
        exports.unauthorize = unauthorize;
        exports.startExpertMode = startExpertMode;
        exports.checkGamer = checkGamer;
        exports.toggleProgramsRecommendations = toggleProgramsRecommendations;
        exports.toggleProtectRecommendations = toggleProtectRecommendations;
        var _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _ps = __webpack_require__(72), _ps2 = _interopRequireDefault(_ps), _isEmpty = __webpack_require__(270), _isEmpty2 = _interopRequireDefault(_isEmpty), _once = __webpack_require__(538), _once2 = _interopRequireDefault(_once), _onunload = __webpack_require__(212), _eventsHandling = __webpack_require__(210), _prepareDiagnosticsParams = __webpack_require__(325), _prepareDiagnosticsParams2 = _interopRequireDefault(_prepareDiagnosticsParams), _activateAppWindow = __webpack_require__(149), _activateAppWindow2 = _interopRequireDefault(_activateAppWindow), _startActions = __webpack_require__(206), _system = __webpack_require__(6), _processes = __webpack_require__(74), _user = __webpack_require__(209), _user2 = _interopRequireDefault(_user), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), _settingsActions = __webpack_require__(123), _onboardingActions = __webpack_require__(86), _wmi = __webpack_require__(23), NORMAL_WINDOW_WIDTH = 1024, NORMAL_WINDOW_HEIGHT = 768, HEADER_HEIGHT = 48;
        try {
            (0, _onunload.addUnloadListener)(function() {
                _ps2["default"].terminate();
            });
        } catch (e) {}
        var authTitle = "DriverPack Solution Authorization", buildMinimizeCmd = function(hwnd) {
            return "[Win32.NativeMethods]::SendMessage(" + hwnd + ", 0x0112, 0xF020, 0)";
        }, buildRestoreCmd = function(hwnd) {
            return "[Win32.NativeMethods]::SendMessage(" + hwnd + ", 0x0112, 0xF120, 0)";
        }, initPS = exports.initPS = (0, _once2["default"])(function() {
            _ps2["default"].init().send([ "$sig = '" + [ '[DllImport("user32.dll")] public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);', '[DllImport("user32.dll")] public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);', '[DllImport("user32.dll", EntryPoint = "FindWindowEx")] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);' ].join("") + "'", "Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32", '$findHwnd = [Win32.NativeMethods]::FindWindowEx(0, 0, "HTML Application Host Window Class", $null)', "$htaHwnd = [Win32.NativeMethods]::GetWindow($findHwnd,3)" ]);
            try {
                _ps2["default"].run(__webpack_require__(853));
            } catch (err) {}
        }), sendPS = exports.sendPS = function() {
            initPS();
            return _ps2["default"].send.apply(_ps2["default"], arguments);
        }, movingData = {}, applySettings = function() {
            var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(dispatch) {
                var fetchedSettings, notEmpty;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        fetchedSettings = _user2["default"].profile.config && _user2["default"].profile.config.beetle;
                        notEmpty = !(0, _isEmpty2["default"])(fetchedSettings);
                        if (notEmpty) _settings2["default"].setAll(fetchedSettings);
                        _context2.next = 5;
                        return _settings2["default"].save();

                      case 5:
                        dispatch((0, _settingsActions.loadSettings)());
                        if (notEmpty) (0, _settingsActions.performAllSettingsAction)(fetchedSettings);

                      case 7:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, undefined);
            }));
            return function(_x5) {
                return _ref2.apply(this, arguments);
            };
        }();
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.RegDelete = exports.RegWrite = exports.RegRead = exports.RegExists = exports.REG_CORS = undefined;
    var _shell = __webpack_require__(16);
    exports.REG_CORS = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\1\\1406", 
    exports.RegExists = function(path) {
        try {
            _shell.WshShell.RegRead(path);
            return !0;
        } catch (err) {
            return !1;
        }
    }, exports.RegRead = function(path) {
        try {
            return _shell.WshShell.RegRead(path);
        } catch (err) {}
    }, exports.RegWrite = function(path, value) {
        var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "REG_SZ";
        try {
            return _shell.WshShell.RegWrite(path, value, type);
        } catch (err) {}
    }, exports.RegDelete = function(path) {
        try {
            return _shell.WshShell.RegDelete(path);
        } catch (err) {}
    };
}, function(module, exports, __webpack_require__) {
    var aFunction = __webpack_require__(39);
    module.exports = function(fn, that, length) {
        aFunction(fn);
        if (that === undefined) return fn;
        switch (length) {
          case 1:
            return function(a) {
                return fn.call(that, a);
            };

          case 2:
            return function(a, b) {
                return fn.call(that, a, b);
            };

          case 3:
            return function(a, b, c) {
                return fn.call(that, a, b, c);
            };
        }
        return function() {
            return fn.apply(that, arguments);
        };
    };
}, function(module, exports, __webpack_require__) {
    var has = __webpack_require__(30), toObject = __webpack_require__(25), IE_PROTO = __webpack_require__(170)("IE_PROTO"), ObjectProto = Object.prototype;
    module.exports = Object.getPrototypeOf || function(O) {
        O = toObject(O);
        if (has(O, IE_PROTO)) return O[IE_PROTO];
        if ("function" == typeof O.constructor && O instanceof O.constructor) return O.constructor.prototype; else return O instanceof Object ? ObjectProto : null;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    if (__webpack_require__(20)) {
        var LIBRARY = __webpack_require__(76), global = __webpack_require__(8), fails = __webpack_require__(9), $export = __webpack_require__(0), $typed = __webpack_require__(140), $buffer = __webpack_require__(178), ctx = __webpack_require__(57), anInstance = __webpack_require__(111), propertyDesc = __webpack_require__(68), hide = __webpack_require__(33), redefineAll = __webpack_require__(115), toInteger = __webpack_require__(69), toLength = __webpack_require__(24), toIndex = __webpack_require__(80), toPrimitive = __webpack_require__(45), has = __webpack_require__(30), same = __webpack_require__(248), classof = __webpack_require__(112), isObject = __webpack_require__(12), toObject = __webpack_require__(25), isArrayIter = __webpack_require__(163), create = __webpack_require__(77), getPrototypeOf = __webpack_require__(58), gOPN = __webpack_require__(78).f, getIterFn = __webpack_require__(179), uid = __webpack_require__(81), wks = __webpack_require__(15), createArrayMethod = __webpack_require__(67), createArrayIncludes = __webpack_require__(131), speciesConstructor = __webpack_require__(172), ArrayIterators = __webpack_require__(180), Iterators = __webpack_require__(89), $iterDetect = __webpack_require__(137), setSpecies = __webpack_require__(91), arrayFill = __webpack_require__(156), arrayCopyWithin = __webpack_require__(229), $DP = __webpack_require__(21), $GOPD = __webpack_require__(34), dP = $DP.f, gOPD = $GOPD.f, RangeError = global.RangeError, TypeError = global.TypeError, Uint8Array = global.Uint8Array, ArrayProto = Array.prototype, $ArrayBuffer = $buffer.ArrayBuffer, $DataView = $buffer.DataView, arrayForEach = createArrayMethod(0), arrayFilter = createArrayMethod(2), arraySome = createArrayMethod(3), arrayEvery = createArrayMethod(4), arrayFind = createArrayMethod(5), arrayFindIndex = createArrayMethod(6), arrayIncludes = createArrayIncludes(!0), arrayIndexOf = createArrayIncludes(!1), arrayValues = ArrayIterators.values, arrayKeys = ArrayIterators.keys, arrayEntries = ArrayIterators.entries, arrayLastIndexOf = ArrayProto.lastIndexOf, arrayReduce = ArrayProto.reduce, arrayReduceRight = ArrayProto.reduceRight, arrayJoin = ArrayProto.join, arraySort = ArrayProto.sort, arraySlice = ArrayProto.slice, arrayToString = ArrayProto.toString, arrayToLocaleString = ArrayProto.toLocaleString, ITERATOR = wks("iterator"), TAG = wks("toStringTag"), TYPED_CONSTRUCTOR = uid("typed_constructor"), DEF_CONSTRUCTOR = uid("def_constructor"), ALL_CONSTRUCTORS = $typed.CONSTR, TYPED_ARRAY = $typed.TYPED, VIEW = $typed.VIEW, $map = createArrayMethod(1, function(O, length) {
            return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
        }), LITTLE_ENDIAN = fails(function() {
            return 1 === new Uint8Array(new Uint16Array([ 1 ]).buffer)[0];
        }), FORCED_SET = !!Uint8Array && !!Uint8Array.prototype.set && fails(function() {
            new Uint8Array(1).set({});
        }), strictToLength = function(it, SAME) {
            if (it === undefined) throw TypeError("Wrong length!");
            var number = +it, length = toLength(it);
            if (SAME && !same(number, length)) throw RangeError("Wrong length!");
            return length;
        }, toOffset = function(it, BYTES) {
            var offset = toInteger(it);
            if (offset < 0 || offset % BYTES) throw RangeError("Wrong offset!");
            return offset;
        }, validate = function(it) {
            if (isObject(it) && TYPED_ARRAY in it) return it;
            throw TypeError(it + " is not a typed array!");
        }, allocate = function(C, length) {
            if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) throw TypeError("It is not a typed array constructor!");
            return new C(length);
        }, speciesFromList = function(O, list) {
            return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
        }, fromList = function(C, list) {
            for (var index = 0, length = list.length, result = allocate(C, length); length > index; ) result[index] = list[index++];
            return result;
        }, addGetter = function(it, key, internal) {
            dP(it, key, {
                get: function() {
                    return this._d[internal];
                }
            });
        }, $from = function(source) {
            var i, length, values, result, step, iterator, O = toObject(source), aLen = arguments.length, mapfn = aLen > 1 ? arguments[1] : undefined, mapping = mapfn !== undefined, iterFn = getIterFn(O);
            if (iterFn != undefined && !isArrayIter(iterFn)) {
                for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) values.push(step.value);
                O = values;
            }
            if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
            for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) result[i] = mapping ? mapfn(O[i], i) : O[i];
            return result;
        }, $of = function() {
            for (var index = 0, length = arguments.length, result = allocate(this, length); length > index; ) result[index] = arguments[index++];
            return result;
        }, TO_LOCALE_BUG = !!Uint8Array && fails(function() {
            arrayToLocaleString.call(new Uint8Array(1));
        }), $toLocaleString = function() {
            return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
        }, proto = {
            copyWithin: function(target, start) {
                return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
            },
            every: function(callbackfn) {
                return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
            },
            fill: function(value) {
                return arrayFill.apply(validate(this), arguments);
            },
            filter: function(callbackfn) {
                return speciesFromList(this, arrayFilter(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined));
            },
            find: function(predicate) {
                return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
            },
            findIndex: function(predicate) {
                return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
            },
            forEach: function(callbackfn) {
                arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
            },
            indexOf: function(searchElement) {
                return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
            },
            includes: function(searchElement) {
                return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
            },
            join: function(separator) {
                return arrayJoin.apply(validate(this), arguments);
            },
            lastIndexOf: function(searchElement) {
                return arrayLastIndexOf.apply(validate(this), arguments);
            },
            map: function(mapfn) {
                return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
            },
            reduce: function(callbackfn) {
                return arrayReduce.apply(validate(this), arguments);
            },
            reduceRight: function(callbackfn) {
                return arrayReduceRight.apply(validate(this), arguments);
            },
            reverse: function() {
                for (var value, that = this, length = validate(that).length, middle = Math.floor(length / 2), index = 0; index < middle; ) {
                    value = that[index];
                    that[index++] = that[--length];
                    that[length] = value;
                }
                return that;
            },
            some: function(callbackfn) {
                return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
            },
            sort: function(comparefn) {
                return arraySort.call(validate(this), comparefn);
            },
            subarray: function(begin, end) {
                var O = validate(this), length = O.length, $begin = toIndex(begin, length);
                return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(O.buffer, O.byteOffset + $begin * O.BYTES_PER_ELEMENT, toLength((end === undefined ? length : toIndex(end, length)) - $begin));
            }
        }, $slice = function(start, end) {
            return speciesFromList(this, arraySlice.call(validate(this), start, end));
        }, $set = function(arrayLike) {
            validate(this);
            var offset = toOffset(arguments[1], 1), length = this.length, src = toObject(arrayLike), len = toLength(src.length), index = 0;
            if (len + offset > length) throw RangeError("Wrong length!");
            for (;index < len; ) this[offset + index] = src[index++];
        }, $iterators = {
            entries: function() {
                return arrayEntries.call(validate(this));
            },
            keys: function() {
                return arrayKeys.call(validate(this));
            },
            values: function() {
                return arrayValues.call(validate(this));
            }
        }, isTAIndex = function(target, key) {
            return isObject(target) && target[TYPED_ARRAY] && "symbol" != typeof key && key in target && String(+key) == String(key);
        }, $getDesc = function(target, key) {
            return isTAIndex(target, key = toPrimitive(key, !0)) ? propertyDesc(2, target[key]) : gOPD(target, key);
        }, $setDesc = function(target, key, desc) {
            if (isTAIndex(target, key = toPrimitive(key, !0)) && isObject(desc) && has(desc, "value") && !has(desc, "get") && !has(desc, "set") && !desc.configurable && (!has(desc, "writable") || desc.writable) && (!has(desc, "enumerable") || desc.enumerable)) {
                target[key] = desc.value;
                return target;
            } else return dP(target, key, desc);
        };
        if (!ALL_CONSTRUCTORS) {
            $GOPD.f = $getDesc;
            $DP.f = $setDesc;
        }
        $export($export.S + $export.F * !ALL_CONSTRUCTORS, "Object", {
            getOwnPropertyDescriptor: $getDesc,
            defineProperty: $setDesc
        });
        if (fails(function() {
            arrayToString.call({});
        })) arrayToString = arrayToLocaleString = function() {
            return arrayJoin.call(this);
        };
        var $TypedArrayPrototype$ = redefineAll({}, proto);
        redefineAll($TypedArrayPrototype$, $iterators);
        hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
        redefineAll($TypedArrayPrototype$, {
            slice: $slice,
            set: $set,
            constructor: function() {},
            toString: arrayToString,
            toLocaleString: $toLocaleString
        });
        addGetter($TypedArrayPrototype$, "buffer", "b");
        addGetter($TypedArrayPrototype$, "byteOffset", "o");
        addGetter($TypedArrayPrototype$, "byteLength", "l");
        addGetter($TypedArrayPrototype$, "length", "e");
        dP($TypedArrayPrototype$, TAG, {
            get: function() {
                return this[TYPED_ARRAY];
            }
        });
        module.exports = function(KEY, BYTES, wrapper, CLAMPED) {
            CLAMPED = !!CLAMPED;
            var NAME = KEY + (CLAMPED ? "Clamped" : "") + "Array", ISNT_UINT8 = "Uint8Array" != NAME, GETTER = "get" + KEY, SETTER = "set" + KEY, TypedArray = global[NAME], Base = TypedArray || {}, TAC = TypedArray && getPrototypeOf(TypedArray), FORCED = !TypedArray || !$typed.ABV, O = {}, TypedArrayPrototype = TypedArray && TypedArray.prototype, getter = function(that, index) {
                var data = that._d;
                return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
            }, setter = function(that, index, value) {
                var data = that._d;
                if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 255 ? 255 : 255 & value;
                data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
            }, addElement = function(that, index) {
                dP(that, index, {
                    get: function() {
                        return getter(this, index);
                    },
                    set: function(value) {
                        return setter(this, index, value);
                    },
                    enumerable: !0
                });
            };
            if (FORCED) {
                TypedArray = wrapper(function(that, data, $offset, $length) {
                    anInstance(that, TypedArray, NAME, "_d");
                    var buffer, byteLength, length, klass, index = 0, offset = 0;
                    if (!isObject(data)) {
                        length = strictToLength(data, !0);
                        byteLength = length * BYTES;
                        buffer = new $ArrayBuffer(byteLength);
                    } else if (data instanceof $ArrayBuffer || "ArrayBuffer" == (klass = classof(data)) || "SharedArrayBuffer" == klass) {
                        buffer = data;
                        offset = toOffset($offset, BYTES);
                        var $len = data.byteLength;
                        if ($length === undefined) {
                            if ($len % BYTES) throw RangeError("Wrong length!");
                            byteLength = $len - offset;
                            if (byteLength < 0) throw RangeError("Wrong length!");
                        } else {
                            byteLength = toLength($length) * BYTES;
                            if (byteLength + offset > $len) throw RangeError("Wrong length!");
                        }
                        length = byteLength / BYTES;
                    } else if (TYPED_ARRAY in data) return fromList(TypedArray, data); else return $from.call(TypedArray, data);
                    hide(that, "_d", {
                        b: buffer,
                        o: offset,
                        l: byteLength,
                        e: length,
                        v: new $DataView(buffer)
                    });
                    for (;index < length; ) addElement(that, index++);
                });
                TypedArrayPrototype = TypedArray.prototype = create($TypedArrayPrototype$);
                hide(TypedArrayPrototype, "constructor", TypedArray);
            } else if (!$iterDetect(function(iter) {
                new TypedArray(null);
                new TypedArray(iter);
            }, !0)) {
                TypedArray = wrapper(function(that, data, $offset, $length) {
                    anInstance(that, TypedArray, NAME);
                    var klass;
                    if (!isObject(data)) return new Base(strictToLength(data, ISNT_UINT8));
                    if (data instanceof $ArrayBuffer || "ArrayBuffer" == (klass = classof(data)) || "SharedArrayBuffer" == klass) return $length !== undefined ? new Base(data, toOffset($offset, BYTES), $length) : $offset !== undefined ? new Base(data, toOffset($offset, BYTES)) : new Base(data);
                    if (TYPED_ARRAY in data) return fromList(TypedArray, data); else return $from.call(TypedArray, data);
                });
                arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key) {
                    if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
                });
                TypedArray.prototype = TypedArrayPrototype;
                if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
            }
            var $nativeIterator = TypedArrayPrototype[ITERATOR], CORRECT_ITER_NAME = !!$nativeIterator && ("values" == $nativeIterator.name || $nativeIterator.name == undefined), $iterator = $iterators.values;
            hide(TypedArray, TYPED_CONSTRUCTOR, !0);
            hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
            hide(TypedArrayPrototype, VIEW, !0);
            hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
            if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) dP(TypedArrayPrototype, TAG, {
                get: function() {
                    return NAME;
                }
            });
            O[NAME] = TypedArray;
            $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
            $export($export.S, NAME, {
                BYTES_PER_ELEMENT: BYTES,
                from: $from,
                of: $of
            });
            if (!("BYTES_PER_ELEMENT" in TypedArrayPrototype)) hide(TypedArrayPrototype, "BYTES_PER_ELEMENT", BYTES);
            $export($export.P, NAME, proto);
            setSpecies(NAME);
            $export($export.P + $export.F * FORCED_SET, NAME, {
                set: $set
            });
            $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
            $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {
                toString: arrayToString
            });
            $export($export.P + $export.F * fails(function() {
                new TypedArray(1).slice();
            }), NAME, {
                slice: $slice
            });
            $export($export.P + $export.F * (fails(function() {
                return [ 1, 2 ].toLocaleString() != new TypedArray([ 1, 2 ]).toLocaleString();
            }) || !fails(function() {
                TypedArrayPrototype.toLocaleString.call([ 1, 2 ]);
            })), NAME, {
                toLocaleString: $toLocaleString
            });
            Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
            if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
        };
    } else module.exports = function() {};
}, function(module, exports, __webpack_require__) {
    function isArrayLike(value) {
        return null != value && isLength(getLength(value));
    }
    var getLength = __webpack_require__(266), isLength = __webpack_require__(95);
    module.exports = isArrayLike;
}, function(module, exports, __webpack_require__) {
    function toObject(value) {
        return isObject(value) ? value : Object(value);
    }
    var isObject = __webpack_require__(28);
    module.exports = toObject;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _noMeasure(objName, fnName, func) {
        return func;
    }
    var ReactPerf = {
        enableMeasure: !1,
        storedMeasure: _noMeasure,
        measure: function(objName, fnName, func) {
            if (!0) {
                var measuredFunc = null;
                return function() {
                    if (ReactPerf.enableMeasure) {
                        if (!measuredFunc) measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);
                        return measuredFunc.apply(this, arguments);
                    }
                    return func.apply(this, arguments);
                };
            }
            return func;
        },
        injection: {
            injectMeasure: function(measure) {
                ReactPerf.storedMeasure = measure;
            }
        }
    };
    module.exports = ReactPerf;
}, function(module, exports, __webpack_require__) {
    function makeEmptyFunction(arg) {
        return function() {
            return arg;
        };
    }
    function emptyFunction() {}
    __webpack_require__(648)(emptyFunction, {
        thatReturns: makeEmptyFunction,
        thatReturnsFalse: makeEmptyFunction(!1),
        thatReturnsTrue: makeEmptyFunction(!0),
        thatReturnsNull: makeEmptyFunction(null),
        thatReturnsThis: function() {
            return this;
        },
        thatReturnsArgument: function(arg) {
            return arg;
        }
    });
    module.exports = emptyFunction;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function installPrograms(programs) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        (0, _system.deleteFile)(_system.AppData + "\\DRPSu\\diagnostics\\newsoft.json");
        if (options.eventAction) _statistics2["default"].event({
            action: options.eventAction,
            counters: [ "default", "shared" ]
        });
        return function(dispatch, getState) {
            dispatch({
                type: "USER_ACTIVATED"
            });
            dispatch(new _Installation2["default"]().run({
                programs: programs,
                isSingle: options.isSingle
            }));
        };
    }
    function toggleProgram(id, checked, zone) {
        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
        return function(dispatch, getState) {
            if (options.eventAction) _statistics2["default"].event({
                action: options.eventAction,
                counters: [ "debug" ]
            });
            var notSaved = !getState().app.isAntivirusFpTargetUser;
            dispatch({
                type: "PROGRAMS_TOGGLED",
                payload: {
                    id: id,
                    checked: checked,
                    zone: zone
                }
            });
            if ("PROGRAMS_PAGE" === zone) dispatch((0, _onboardingActions.addOnboardingEvent)("program toggled " + (checked ? "on" : "off")));
            if (notSaved) (0, _system.RegWrite)("HKCU\\SOFTWARE\\drpsu\\fpFlag", 1, "REG_DWORD");
        };
    }
    function toggleInstalledProgram(id, isChecked) {
        _statistics2["default"].event({
            action: "protect checkbox used",
            counters: [ "debug" ]
        });
        return {
            type: "INSTALLED_PROGRAM_TOGGLED",
            payload: {
                id: id,
                isChecked: isChecked
            }
        };
    }
    function expandInstalledProgram(id, isExpanded) {
        _statistics2["default"].event({
            action: "protect info clicked",
            counters: [ "debug" ]
        });
        return {
            type: "INSTALLED_PROGRAM_EXPANDED",
            payload: {
                id: id,
                isExpanded: isExpanded
            }
        };
    }
    function expandAllInstalledPrograms(isExpanded) {
        _statistics2["default"].event({
            action: "protect show all clicked",
            counters: [ "debug" ]
        });
        return {
            type: "ALL_INSTALLED_PROGRAMS_EXPANDED"
        };
    }
    function toggleSecurityProgram(id, isChecked, zone) {
        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
        if (options.eventAction) _statistics2["default"].event({
            action: options.eventAction
        });
        return {
            type: "PROTECT_TOGGLE_SECURITY_PROGRAM",
            payload: {
                id: id,
                isChecked: isChecked
            }
        };
    }
    function revertServiceMode() {
        var _this = this;
        return function() {
            var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(dispatch) {
                return regeneratorRuntime.wrap(function(_context3) {
                    for (;;) switch (_context3.prev = _context3.next) {
                      case 0:
                        dispatch({
                            type: "SERVICE_MODE_REVERT"
                        });
                        _context3.prev = 1;
                        _context3.next = 4;
                        return (0, _runCommandAsync.runCommandAsync)({
                            command: "explorer.exe"
                        });

                      case 4:
                        _context3.next = 8;
                        break;

                      case 6:
                        _context3.prev = 6;
                        _context3.t0 = _context3["catch"](1);

                      case 8:
                      case "end":
                        return _context3.stop();
                    }
                }, _callee3, _this, [ [ 1, 6 ] ]);
            }));
            return function(_x7) {
                return _ref5.apply(this, arguments);
            };
        }();
    }
    exports.__esModule = !0;
    exports.runServiceMode = exports.toggleServiceMode = exports.confirmRestart = exports.closeRestartPopup = exports.togglePopupEula = exports.confirmProgramInstallation = exports.closeConfirmPopup = exports.toggleUsefulPrograms = exports.resetProtectScreen = exports.removeAllHarmfulPrograms = exports.removeInstalledProgram = exports.toggleAllPrograms = undefined;
    exports.installPrograms = installPrograms;
    exports.toggleProgram = toggleProgram;
    exports.toggleInstalledProgram = toggleInstalledProgram;
    exports.expandInstalledProgram = expandInstalledProgram;
    exports.expandAllInstalledPrograms = expandAllInstalledPrograms;
    exports.toggleSecurityProgram = toggleSecurityProgram;
    var _system = __webpack_require__(6), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _logs = __webpack_require__(4), _runCommandAsync = __webpack_require__(75), _os = __webpack_require__(14), _ps = __webpack_require__(72), _ps2 = _interopRequireDefault(_ps), _Installation = __webpack_require__(148), _Installation2 = _interopRequireDefault(_Installation), _uninstaller = __webpack_require__(810), _activateAppWindow = __webpack_require__(149), _activateAppWindow2 = _interopRequireDefault(_activateAppWindow), _onboardingActions = __webpack_require__(86), _timeout = __webpack_require__(213), _timeout2 = _interopRequireDefault(_timeout), _serviceMode = __webpack_require__(782), _serviceMode2 = _interopRequireDefault(_serviceMode), log = (0, 
    _logs.getLogger)("actions:programs"), confirmPopupZoneMap = (exports.toggleAllPrograms = function(isChecked) {
        return {
            type: "PROGRAMS_TOGGLE_ALL",
            payload: {
                isChecked: isChecked
            }
        };
    }, exports.removeInstalledProgram = function(_ref) {
        var id = _ref.id, uninstallString = (_ref.name, _ref.uninstallPercents, _ref.uninstallString), regPath = _ref.regPath;
        return function(dispatch, getState) {
            dispatch({
                type: "USER_ACTIVATED"
            });
            dispatch({
                type: "INSTALLED_PROGRAM_REMOVING_STARTED",
                payload: {
                    id: id
                }
            });
            (0, _uninstaller.uninstallProgram)({
                uninstallString: uninstallString,
                regPath: regPath
            }).then(function() {
                log.info("success uninstalling: " + uninstallString, {
                    uninstallString: uninstallString
                }, "protect:uninstalling:succeeded", [ "protect" ]);
                dispatch({
                    type: "INSTALLED_PROGRAM_REMOVING_SUCCESS",
                    payload: {
                        id: id
                    }
                });
            })["catch"](function(error) {
                log.error("failed uninstalling: " + uninstallString, {
                    error: error
                }, "protect:uninstalling:failed", [ "protect" ]);
                dispatch({
                    type: "INSTALLED_PROGRAM_REMOVING_FAILED",
                    payload: {
                        id: id
                    }
                });
            });
        };
    }, exports.removeAllHarmfulPrograms = function(harmfulPrograms) {
        _statistics2["default"].event({
            action: "protect uninstall all clicked"
        });
        return function() {
            var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                var _iterator, _isArray, _i, _ref3, program, id, uninstallString, regPath;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        log.info("removing all harmful started", {}, "protect:removingAllHarmful:started");
                        dispatch({
                            type: "USER_ACTIVATED"
                        });
                        dispatch({
                            type: "REMOVING_ALL_HARMFUL_PROGRAMS_STARTED"
                        });
                        _iterator = harmfulPrograms, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                      case 4:
                        if (!_isArray) {
                            _context.next = 10;
                            break;
                        }
                        if (!(_i >= _iterator.length)) {
                            _context.next = 7;
                            break;
                        }
                        return _context.abrupt("break", 28);

                      case 7:
                        _ref3 = _iterator[_i++];
                        _context.next = 14;
                        break;

                      case 10:
                        _i = _iterator.next();
                        if (!_i.done) {
                            _context.next = 13;
                            break;
                        }
                        return _context.abrupt("break", 28);

                      case 13:
                        _ref3 = _i.value;

                      case 14:
                        program = _ref3;
                        id = program.id, uninstallString = program.uninstallString, regPath = program.regPath;
                        _context.prev = 16;
                        _context.next = 19;
                        return (0, _uninstaller.uninstallProgram)({
                            uninstallString: uninstallString,
                            regPath: regPath
                        });

                      case 19:
                        log.info("success uninstalling: " + uninstallString, {}, "protect:uninstalling:succeeded", [ "protect" ]);
                        dispatch({
                            type: "REMOVING_HARMFUL_PROGRAM_SUCCESS",
                            payload: {
                                id: id
                            }
                        });
                        _context.next = 26;
                        break;

                      case 23:
                        _context.prev = 23;
                        _context.t0 = _context["catch"](16);
                        log.error("failed uninstalling: " + uninstallString, {
                            error: _context.t0
                        }, "protect:uninstalling:failed", [ "protect" ]);

                      case 26:
                        _context.next = 4;
                        break;

                      case 28:
                        log.info("removing all harmful finished", {}, "protect:removingAllHarmful:finished", [ "protect" ]);
                        dispatch({
                            type: "REMOVING_ALL_HARMFUL_PROGRAMS_FINISHED"
                        });

                      case 30:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, undefined, [ [ 16, 23 ] ]);
            }));
            return function(_x3, _x4) {
                return _ref2.apply(this, arguments);
            };
        }();
    }, exports.resetProtectScreen = function() {
        return function(dispatch, getState) {
            dispatch({
                type: "PROTECT_SCREEN_RESET"
            });
        };
    }, exports.toggleUsefulPrograms = function() {
        return function(dispatch, getState) {
            _statistics2["default"].event({
                action: "protect switch used",
                counters: [ "debug" ]
            });
            dispatch({
                type: "PROTECT_SCREEN_TOGGLE_USEFUL_PROGRAMS"
            });
        };
    }, {
        PROGRAMS_PAGE: "soft",
        PROTECT_SECURITY_PROGRAMS: "protect",
        INSTALLATION_PAGE: "installation"
    }), toggleServiceMode = (exports.closeConfirmPopup = function(result, button, program, zone, extra) {
        return function(dispatch, getState) {
            return new Promise(function(resolve) {
                var name = program.name, actionParts = [ "confirm popup " + button.replace("_", " ") + " clicked " + name ];
                actionParts.unshift(confirmPopupZoneMap[zone]);
                _statistics2["default"].event({
                    action: actionParts.join(" ")
                });
                var isCanceledAll = void 0, deferredIds = [];
                if ("cancel_all" === button) {
                    isCanceledAll = !0;
                    deferredIds = extra && extra.deferredIds;
                    var canceledPrograms = window.SoftPack.canceledPrograms;
                    window.SoftPack.canceledPrograms = canceledPrograms.concat(deferredIds);
                }
                dispatch({
                    type: "CONFIRM_POPUP_CLOSE",
                    payload: {
                        result: result,
                        isCanceledAll: isCanceledAll,
                        deferredIds: deferredIds
                    }
                });
            });
        };
    }, exports.confirmProgramInstallation = function(program, zone, extra) {
        return function(dispatch, getState) {
            return new Promise(function(resolve) {
                dispatch({
                    type: "CONFIRM_POPUP_OPEN",
                    payload: {
                        program: program,
                        zone: zone,
                        extra: extra
                    }
                });
                var unsubscribe = window.store.subscribe(function() {
                    var newState = getState(), _newState$app$popup = newState.app.popup, isOpened = _newState$app$popup.isOpened, result = _newState$app$popup.result;
                    if (!isOpened) {
                        unsubscribe();
                        resolve(result);
                        if (window.isAppEsteem && !result) {
                            var id = program.id;
                            dispatch({
                                type: "CONFIRM_POPUP_DECLINE_PROGRAM",
                                payload: {
                                    id: id
                                }
                            });
                            window.SoftPack.declinedPrograms.push(id);
                        }
                    }
                });
            });
        };
    }, exports.togglePopupEula = function(program, zone) {
        return function(dispatch, getState) {
            var name = program.name, actionParts = [ "confirm popup checkbox used " + name ];
            actionParts.unshift(confirmPopupZoneMap[zone]);
            _statistics2["default"].event({
                action: actionParts.join(" ")
            });
            dispatch({
                type: "CONFIRM_POPUP_OPEN_TOGGLE_EULA"
            });
        };
    }, exports.closeRestartPopup = function(shouldRestart) {
        return function(dispatch, getState) {
            dispatch({
                type: "RESTART_POPUP_CLOSE",
                payload: {
                    shouldRestart: shouldRestart
                }
            });
        };
    }, exports.confirmRestart = function() {
        return function(dispatch, getState) {
            return new Promise(function(resolve) {
                dispatch({
                    type: "RESTART_POPUP_OPEN"
                });
                var unsubscribe = window.store.subscribe(function() {
                    var newState = getState(), _newState$app$popup2 = newState.app.popup, isOpened = _newState$app$popup2.isOpened, shouldRestart = _newState$app$popup2.shouldRestart;
                    if (!isOpened) {
                        unsubscribe();
                        resolve();
                        if (shouldRestart) {
                            if (_os.OSVersion >= 6) _ps2["default"].send([ "Start-Sleep -s 5", "Restart-Computer" ]);
                            window.close();
                        } else dispatch(revertServiceMode());
                    }
                });
                (0, _activateAppWindow2["default"])();
            });
        };
    }, exports.toggleServiceMode = function() {
        return function(dispatch) {
            dispatch({
                type: "TOGGLE_SERVICE_MODE"
            });
        };
    });
    exports.runServiceMode = function() {
        return function() {
            var _ref4 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(dispatch) {
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        _context2.prev = 0;
                        window.resizeTo(window.screen.width, window.screen.height);
                        window.moveTo(0, 0);
                        _context2.next = 5;
                        return _serviceMode2["default"].run(function(processName) {
                            dispatch({
                                type: "SERVICE_MODE_TERMINATE",
                                payload: {
                                    processName: processName
                                }
                            });
                        });

                      case 5:
                        _context2.next = 11;
                        break;

                      case 7:
                        _context2.prev = 7;
                        _context2.t0 = _context2["catch"](0);
                        dispatch(toggleServiceMode());
                        return _context2.abrupt("return");

                      case 11:
                        dispatch({
                            type: "SERVICE_MODE_FINISH"
                        });
                        _context2.next = 14;
                        return (0, _timeout2["default"])(5e3);

                      case 14:
                        dispatch(toggleServiceMode());

                      case 15:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, undefined, [ [ 0, 7 ] ]);
            }));
            return function(_x6) {
                return _ref4.apply(this, arguments);
            };
        }();
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _system = __webpack_require__(6), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _uniq = __webpack_require__(141), _uniq2 = _interopRequireDefault(_uniq), _pick = __webpack_require__(272), _pick2 = _interopRequireDefault(_pick), _isEqual = __webpack_require__(590), _isEqual2 = _interopRequireDefault(_isEqual), _checkSoft = __webpack_require__(125), _prepareData = __webpack_require__(806), _prepareData2 = _interopRequireDefault(_prepareData), _getMinimalDriversState = __webpack_require__(802), _getMinimalDriversState2 = _interopRequireDefault(_getMinimalDriversState), _getDeviceProblem = __webpack_require__(218), _getDeviceProblem2 = _interopRequireDefault(_getDeviceProblem), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), _getChromeExtensions = __webpack_require__(217), _getChromeExtensions2 = _interopRequireDefault(_getChromeExtensions), _fakeDrivers = __webpack_require__(332), _fakeDrivers2 = _interopRequireDefault(_fakeDrivers), path = _system.AppData + "\\DRPSu\\diagnostics", checkProgram = function(program) {
        if (/microsoft/i.test(program.Program)) return !1;
        if (/microsoft/i.test(program.Publisher)) return !1;
        if (!program.Uninstaller) return !1;
        if (/dpinst/i.test(program.Uninstaller)) return !1; else return !0;
    }, SystemScanner = function() {
        function SystemScanner() {
            _classCallCheck(this, SystemScanner);
            this.timeout = 12e4;
            this.systemScanCount = 0;
        }
        SystemScanner.prototype.getDriversPath = function() {
            return _system.AppData + "\\DRPSu\\DRIVERS";
        };
        SystemScanner.prototype.getFakeDrivers = function() {
            for (var _iterator = this.query.devices, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                var _ref;
                if (_isArray) {
                    if (_i >= _iterator.length) break;
                    _ref = _iterator[_i++];
                } else {
                    _i = _iterator.next();
                    if (_i.done) break;
                    _ref = _i.value;
                }
                var queryDevice = _ref;
                if (queryDevice.classGuid) {
                    var classGuid = queryDevice.classGuid.toUpperCase();
                    if (_fakeDrivers2["default"][classGuid]) {
                        for (var hasDriver = void 0, _iterator2 = this.driversData.devices, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator](); ;) {
                            var _ref2;
                            if (_isArray2) {
                                if (_i2 >= _iterator2.length) break;
                                _ref2 = _iterator2[_i2++];
                            } else {
                                _i2 = _iterator2.next();
                                if (_i2.done) break;
                                _ref2 = _i2.value;
                            }
                            var _ref3 = _ref2, apiDevice = _ref3[1];
                            if (apiDevice && apiDevice.deviceId === queryDevice.deviceId) {
                                hasDriver = !0;
                                break;
                            }
                        }
                        if (!hasDriver && !_fakeDrivers2["default"][classGuid].added) {
                            this.driversData.devices.push(_fakeDrivers2["default"][classGuid]);
                            _fakeDrivers2["default"][classGuid].added = !0;
                        }
                    }
                }
            }
        };
        SystemScanner.prototype.run = function() {
            function run() {
                return _ref4.apply(this, arguments);
            }
            var _ref4 = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                var installedPrograms, metrikaParams;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        _context.prev = 0;
                        _logs2["default"].info("system scanner run", {}, "systemScanner:run");
                        _context.next = 4;
                        return this.detectDevices();

                      case 4:
                        _context.next = 6;
                        return this.detectCurrentDrivers();

                      case 6:
                        window.store.dispatch({
                            type: "LOADING_STATUS_UPDATED",
                            payload: {
                                status: "system_scan_finished"
                            }
                        });
                        _context.prev = 7;
                        _context.next = 10;
                        return this.queryAPI();

                      case 10:
                        _context.next = 16;
                        break;

                      case 12:
                        _context.prev = 12;
                        _context.t0 = _context["catch"](7);
                        _logs2["default"].error({
                            action: "driver api failed",
                            counters: [ "debug" ]
                        }, {
                            error: _context.t0
                        }, "driversApi:request:failed", [ "api", "drivers" ]);
                        throw _context.t0;

                      case 16:
                        this.getFakeDrivers();
                        window.store.dispatch({
                            type: "DRIVERS_SCAN_SUCCESS",
                            payload: this.driversData
                        });
                        try {
                            this.sendDriversStatistics();
                        } catch (error) {
                            _logs2["default"].error("failed sendDriversStatistics", {
                                error: error
                            }, "driversStatistics:send:failed");
                        }
                        _logs2["default"].info("system scanner drivers state received", (0, _getMinimalDriversState2["default"])(), "systemScanner:drivers:state:received");
                        _context.next = 22;
                        return this.detectInstalledPrograms();

                      case 22:
                        _context.next = 24;
                        return this.patchInstalledPrograms();

                      case 24:
                        installedPrograms = this.installedPrograms;
                        if (installedPrograms && installedPrograms.length) {
                            metrikaParams = installedPrograms.reduce(function(params, item) {
                                params[item.Program] = item.Version;
                                return params;
                            }, {});
                            _logs2["default"].info({
                                action: "installed programs scanned",
                                namespace: "installed:programs:scanned",
                                override: {
                                    yandex: {
                                        params: {
                                            programsStatistics: metrikaParams
                                        }
                                    }
                                },
                                counters: [ "yandex.default", "yandex.shared" ]
                            });
                        }
                        _context.prev = 26;
                        window.store.dispatch({
                            type: "LOADING_STATUS_UPDATED",
                            payload: {
                                status: "installed_programs_scan_finished"
                            }
                        });
                        _context.next = 30;
                        return this.queryProtectAPI();

                      case 30:
                        _context.next = 36;
                        break;

                      case 32:
                        _context.prev = 32;
                        _context.t1 = _context["catch"](26);
                        _logs2["default"].error({
                            action: "protect api failed",
                            counters: [ "debug" ]
                        }, {
                            error: _context.t1
                        }, "protectApi:request:failed");
                        this.installedPrograms = null;

                      case 36:
                        window.store.dispatch({
                            type: "INSTALLED_PROGRAMS_SCAN_FINISHED",
                            payload: this.installedPrograms
                        });
                        try {
                            this.sendUtilitiesInfo();
                        } catch (error) {
                            _logs2["default"].error("Utilities - failed send info", {
                                error: error
                            }, "utilities:send:failed");
                        }
                        try {
                            this.sendExtensionsInfo();
                        } catch (error) {
                            _logs2["default"].error("Extensions - failed send info", {
                                error: error
                            }, "extensions:send:failed");
                        }
                        window.snapshot.create();
                        document.onkeydown = function(e) {
                            e = e || window.event;
                            var keyCode = e.keyCode ? e.keyCode : e.which;
                            if (e.ctrlKey && keyCode === "L".charCodeAt(0)) {
                                window.snapshot.apply();
                                return !1;
                            }
                        };
                        this.systemScanCount += 1;
                        this.timeout = 1;
                        _logs2["default"].info({
                            action: "system scanned",
                            counters: [ "debug" ]
                        }, {}, "system:scanned");
                        delete this.lastScanError;
                        _context.next = 51;
                        break;

                      case 47:
                        _context.prev = 47;
                        _context.t2 = _context["catch"](0);
                        this.lastScanError = _context.t2;
                        throw _context.t2;

                      case 51:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, this, [ [ 0, 47 ], [ 7, 12 ], [ 26, 32 ] ]);
            }));
            return run;
        }();
        SystemScanner.prototype.waitFor = function(task) {
            var cmd = '"' + _system.WshShell.CurrentDirectory + '\\prepare.js" ' + task, query = [ 'Name = "wscript.exe"', 'CommandLine LIKE "%' + JSON.stringify(cmd).slice(1, -1) + '"' ].join(" AND ");
            return (0, _system.waitForProcesses)(query);
        };
        SystemScanner.prototype.fetchData = function(task) {
            var _this = this, load = function() {
                return (0, _system.queryFile)(path + "\\" + task + ".json", _this.timeout);
            };
            return Promise["try"](load)["catch"](function() {
                return _this.waitFor(task).then(load);
            }).then(function(json) {
                var data = JSON.parse(json);
                _logs2["default"].info(task + ".json fetched", {
                    task: task
                }, "systemScanner:quickstartJson:collected", [ "quickstart" ]);
                _logs2["default"].debug(task + ".json data", {
                    task: task,
                    data: data
                }, "systemScanner:quickstartJson:data", [ "quickstart" ]);
                return data;
            })["catch"](function(error) {
                _logs2["default"].warn(task + ".json error", {
                    task: task,
                    error: error
                }, "systemScanner:quickstartJson:failed", [ "quickstart" ]);
                var data = (0, _prepareData2["default"])(task);
                _logs2["default"].debug(task + " data from WMI", {
                    task: task,
                    data: data
                }, "systemScanner:wmi:collected", [ "quickstart", "wmi" ]);
                return data;
            });
        };
        SystemScanner.prototype.markIfProblemDevice = function(device) {
            var problem = (0, _getDeviceProblem2["default"])(device.deviceId);
            if (problem) device.isProblemDevice = problem;
        };
        SystemScanner.prototype.detectDevices = function() {
            var _this2 = this;
            return this.fetchData("hardware").then(function(query) {
                query.devices.map(_this2.markIfProblemDevice);
                Object.assign(_this2, {
                    query: _extends({}, query, {
                        useRank: _settings2["default"].get("driverSelection.useMachineLearning").value
                    }),
                    devices: query.devices
                });
            });
        };
        SystemScanner.prototype.detectCurrentDrivers = function() {
            var _this3 = this;
            return this.fetchData("drivers").then(function(currentDrivers) {
                Object.assign(_this3, {
                    currentDrivers: currentDrivers
                });
            });
        };
        SystemScanner.prototype.queryAPI = function() {
            var _this4 = this;
            return window.delorean.run(this.query).then(function(driversJSON) {
                for (var _iterator3 = driversJSON, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator](); ;) {
                    var _ref5;
                    if (_isArray3) {
                        if (_i3 >= _iterator3.length) break;
                        _ref5 = _iterator3[_i3++];
                    } else {
                        _i3 = _iterator3.next();
                        if (_i3.done) break;
                        _ref5 = _i3.value;
                    }
                    var device = _ref5;
                    if (device.drivers) device.drivers = device.drivers.filter(function(driver) {
                        return ![ "inputdev", "touchpad" ].includes(driver["class"]);
                    });
                }
                _this4.driversJSON = driversJSON;
                _logs2["default"].info("delorean response received", {}, "driversApi:response:beforeFixing");
                _logs2["default"].debug("delorean JSON response (before fixing)", driversJSON, "driversApi:response:beforeFixing:data");
                return window.delorean.prepareData(_this4.driversJSON, _this4.currentDrivers);
            }).then(function(driversData) {
                _this4.driversData = driversData;
                _logs2["default"].debug("delorean JSON response (after fixing)", driversData, "driversApi:response:afterFixing:data");
            });
        };
        SystemScanner.prototype.sendDriversStatistics = function() {
            var _query = this.query, model = _query.model, windows = _query.windows, currentDrivers = this.currentDrivers, driversJSON = this.driversJSON, windowsInstallDate = void 0;
            try {
                var date = new Date(1e3 * parseInt((0, _system.RegRead)("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\InstallDate")));
                windowsInstallDate = "" + date.getFullYear() + ("0" + (date.getMonth() + 1)).slice(-2) + ("0" + date.getDate()).slice(-2);
            } catch (err) {}
            var curDrivers = {};
            currentDrivers.forEach(function(cdriver) {
                curDrivers[cdriver.deviceId] = cdriver;
            });
            var stats = {
                model: (0, _pick2["default"])(model, [ "type", "vendor" ]),
                windows: Object.assign({}, windows, {
                    installDate: windowsInstallDate
                }),
                devices: driversJSON.map(function(device) {
                    var res = {
                        device: (0, _pick2["default"])(device, [ "deviceId", "hardwareId", "status", "statusCode", "isProblemDevice" ])
                    }, currentDriver = curDrivers[device.deviceId];
                    if (currentDriver) res.currentDriver = currentDriver;
                    res.offeredDrivers = device.drivers.map(function(driver) {
                        return Object.assign({}, driver, {
                            degraded: currentDriver ? new Date(currentDriver) > new Date(driver) : !1,
                            compatible: !device.hardwareId.includes(driver.deviceId)
                        });
                    });
                    return res;
                })
            };
            return _logs2["default"].info({
                action: "drivers statistics " + (0 === this.systemScanCount ? "collected" : "recollected"),
                counters: [ "events.default" ]
            }, {
                driversStatistics: stats
            }, "driversStatistics:collected");
        };
        SystemScanner.prototype.detectInstalledPrograms = function() {
            var _this5 = this;
            return this.fetchData("newsoft").then(function(_ref6) {
                var Software = _ref6.Software;
                _this5.installedPrograms = (0, _uniq2["default"])(Software["Installed Software"].filter(checkProgram), "Uninstaller");
            });
        };
        SystemScanner.prototype.patchInstalledPrograms = function() {
            _logs2["default"].info("patching programs", {}, "softApi:patching");
            this.installedPrograms = this.installedPrograms.map(function(soft) {
                soft.partnerInfo = (0, _checkSoft.getPartnerInfo)(soft);
                return soft;
            });
        };
        SystemScanner.prototype.queryProtectAPI = function() {
            var _this6 = this, query = this.installedPrograms;
            if (0 !== query.length) return window.delorean.runProtect(query).then(function(softJSON) {
                _logs2["default"].info("protect response received", {}, "protectApi:response:beforeFixing", [ "protect" ]);
                _logs2["default"].debug("Protect - installed soft JSON (before fixing)", softJSON, "protectApi:response:beforeFixing:data", [ "protect" ]);
                return window.delorean.convertProtectOutput(softJSON);
            }).then(function(softJSON) {
                _this6.installedPrograms = softJSON;
                _logs2["default"].debug("Protect - installed soft JSON (after fixing)", softJSON, "protectApi:response:afterFixing:data", [ "protect" ]);
            }); else _logs2["default"].warn("Protect - no soft on users PC detected", {}, "protect:noSoftDetected", [ "protect" ]);
        };
        SystemScanner.prototype.sendUtilitiesInfo = function() {
            var _query2 = this.query, model = _query2.model, windows = _query2.windows, currentDrivers = this.currentDrivers, installedPrograms = this.installedPrograms, windowsInstallDate = void 0;
            try {
                var date = new Date(1e3 * parseInt((0, _system.RegRead)("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\InstallDate")));
                windowsInstallDate = "" + date.getFullYear() + ("0" + (date.getMonth() + 1)).slice(-2) + ("0" + date.getDate()).slice(-2);
            } catch (err) {}
            var driversManufacturers = (0, _uniq2["default"])(currentDrivers.map(function(driver) {
                return (0, _pick2["default"])(driver, [ "manufacturer", "version" ]);
            }).filter(function(_ref7) {
                return !/microsoft|standard/i.test(_ref7.manufacturer);
            }), _isEqual2["default"]), utilities = [];
            installedPrograms.forEach(function(program) {
                var causes = [];
                if ("Notebook" === model.type && model.vendor && new RegExp(model.vendor, "i").test(program.name)) causes.push("notebookVendor");
                driversManufacturers.forEach(function(_ref8) {
                    var manufacturer = _ref8.manufacturer, version = (_ref8.date, _ref8.version);
                    if (manufacturer && new RegExp(manufacturer, "i").test(program.name)) causes.push("driverManufacturer:" + [ manufacturer, version ].join(":"));
                });
                if (causes.length > 0) utilities.push(Object.assign((0, _pick2["default"])(program, [ "name", "publisher", "version", "installDate" ]), {
                    causes: causes
                }));
            });
            if (0 !== utilities.length) {
                var utilitiesInfo = {
                    model: (0, _pick2["default"])(model, [ "type", "vendor", "name" ]),
                    windows: Object.assign({}, windows, {
                        installDate: windowsInstallDate
                    }),
                    utilities: utilities
                };
                return _logs2["default"].info({
                    action: "utilities info collected",
                    counters: [ "events.default" ]
                }, {
                    utilitiesInfo: utilitiesInfo
                }, "utilities:collected", [ "utilities" ]);
            }
        };
        SystemScanner.prototype.sendExtensionsInfo = function() {
            var extensionsInfo = (0, _getChromeExtensions2["default"])(), yandexDetectedById = Object.values(extensionsInfo).some(function(extension) {
                return extension.meta.isYandexById && extension.isEnabled;
            });
            if (yandexDetectedById) _logs2["default"].info({
                action: "extensions yandexDetectedById on " + (0 === this.systemScanCount ? "collect" : "recollect"),
                counters: [ "debug" ]
            }, {}, "extensions:yandexDetectedById");
            var yandexDetectedByName = Object.values(extensionsInfo).some(function(extension) {
                return extension.meta.isYandexByName && extension.isEnabled;
            });
            if (yandexDetectedByName) _logs2["default"].info({
                action: "extensions yandexDetectedByName on " + (0 === this.systemScanCount ? "collect" : "recollect"),
                counters: [ "debug" ]
            }, {}, "extensions:yandexDetectedByName");
            if (yandexDetectedById || yandexDetectedByName) _logs2["default"].info({
                action: "extensions yandexDetected on " + (0 === this.systemScanCount ? "collect" : "recollect"),
                counters: [ "debug" ]
            }, {}, "extensions:yandexDetected"); else _logs2["default"].info({
                action: "extensions yandexNotDetected on " + (0 === this.systemScanCount ? "collect" : "recollect"),
                counters: [ "debug" ]
            }, {}, "extensions:yandexNotDetected");
            return _logs2["default"].info({
                action: "extensions info " + (0 === this.systemScanCount ? "collected" : "recollected"),
                counters: [ "events.default" ]
            }, {
                extensionsInfo: extensionsInfo
            }, "extensions:collected", [ "extensions" ]);
        };
        return SystemScanner;
    }();
    exports["default"] = new SystemScanner();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getInternetExplorerVersion() {
        var rv = void 0, ua = void 0, re = void 0;
        try {
            rv = parseInt((0, _system.RegRead)("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\svcVersion").split(".")[0], 10);
        } catch (e) {}
        if ("number" != typeof rv) try {
            rv = parseInt((0, _system.RegRead)("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\Version").split(".")[0], 10);
        } catch (e) {}
        if ("number" != typeof rv) if ("Microsoft Internet Explorer" === navigator.appName) {
            ua = navigator.userAgent;
            re = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
            if (null != re.exec(ua)) rv = parseFloat(RegExp.$1);
        } else if ("Netscape" === navigator.appName) {
            ua = navigator.userAgent;
            re = new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})");
            if (null != re.exec(ua)) rv = parseFloat(RegExp.$1);
        }
        if ("number" != typeof rv) rv = -1;
        return rv;
    }
    exports.__esModule = !0;
    exports["default"] = getInternetExplorerVersion;
    var _system = __webpack_require__(6);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    var ctx = __webpack_require__(57), IObject = __webpack_require__(113), toObject = __webpack_require__(25), toLength = __webpack_require__(24), asc = __webpack_require__(363);
    module.exports = function(TYPE, $create) {
        var IS_MAP = 1 == TYPE, IS_FILTER = 2 == TYPE, IS_SOME = 3 == TYPE, IS_EVERY = 4 == TYPE, IS_FIND_INDEX = 6 == TYPE, NO_HOLES = 5 == TYPE || IS_FIND_INDEX, create = $create || asc;
        return function($this, callbackfn, that) {
            for (var val, res, O = toObject($this), self = IObject(O), f = ctx(callbackfn, that, 3), length = toLength(self.length), index = 0, result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; length > index; index++) if (NO_HOLES || index in self) {
                val = self[index];
                res = f(val, index, O);
                if (TYPE) if (IS_MAP) result[index] = res; else if (res) switch (TYPE) {
                  case 3:
                    return !0;

                  case 5:
                    return val;

                  case 6:
                    return index;

                  case 2:
                    result.push(val);
                } else if (IS_EVERY) return !1;
            }
            return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
        };
    };
}, function(module, exports) {
    module.exports = function(bitmap, value) {
        return {
            enumerable: !(1 & bitmap),
            configurable: !(2 & bitmap),
            writable: !(4 & bitmap),
            value: value
        };
    };
}, function(module, exports) {
    var ceil = Math.ceil, floor = Math.floor;
    module.exports = function(it) {
        return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var invariant = __webpack_require__(5), oneArgumentPooler = function(copyFieldsFrom) {
        var Klass = this;
        if (Klass.instancePool.length) {
            var instance = Klass.instancePool.pop();
            Klass.call(instance, copyFieldsFrom);
            return instance;
        } else return new Klass(copyFieldsFrom);
    }, twoArgumentPooler = function(a1, a2) {
        var Klass = this;
        if (Klass.instancePool.length) {
            var instance = Klass.instancePool.pop();
            Klass.call(instance, a1, a2);
            return instance;
        } else return new Klass(a1, a2);
    }, threeArgumentPooler = function(a1, a2, a3) {
        var Klass = this;
        if (Klass.instancePool.length) {
            var instance = Klass.instancePool.pop();
            Klass.call(instance, a1, a2, a3);
            return instance;
        } else return new Klass(a1, a2, a3);
    }, fiveArgumentPooler = function(a1, a2, a3, a4, a5) {
        var Klass = this;
        if (Klass.instancePool.length) {
            var instance = Klass.instancePool.pop();
            Klass.call(instance, a1, a2, a3, a4, a5);
            return instance;
        } else return new Klass(a1, a2, a3, a4, a5);
    }, standardReleaser = function(instance) {
        var Klass = this;
        !0 ? invariant(instance instanceof Klass, "Trying to release an instance into a pool of a different type.") : invariant(instance instanceof Klass);
        if (instance.destructor) instance.destructor();
        if (Klass.instancePool.length < Klass.poolSize) Klass.instancePool.push(instance);
    }, DEFAULT_POOLER = oneArgumentPooler, addPoolingTo = function(CopyConstructor, pooler) {
        var NewKlass = CopyConstructor;
        NewKlass.instancePool = [];
        NewKlass.getPooled = pooler || DEFAULT_POOLER;
        if (!NewKlass.poolSize) NewKlass.poolSize = 10;
        NewKlass.release = standardReleaser;
        return NewKlass;
    }, PooledClass = {
        addPoolingTo: addPoolingTo,
        oneArgumentPooler: oneArgumentPooler,
        twoArgumentPooler: twoArgumentPooler,
        threeArgumentPooler: threeArgumentPooler,
        fiveArgumentPooler: fiveArgumentPooler
    };
    module.exports = PooledClass;
}, function(module, exports) {
    var keyOf = function(oneKeyObj) {
        var key;
        for (key in oneKeyObj) if (oneKeyObj.hasOwnProperty(key)) return key;
        return null;
    };
    module.exports = keyOf;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _specialFolders = __webpack_require__(18), _shell = __webpack_require__(16), _fso = __webpack_require__(17), _localFiles = __webpack_require__(22), _os = __webpack_require__(14), defaultExec = function(cmd) {
        return _shell.WshShell.Run(cmd, 0, !1);
    }, PowerShell = function() {
        function PowerShell() {
            _classCallCheck(this, PowerShell);
            Object.assign(this, {
                running: !1,
                available: _os.OSVersion >= 6
            });
        }
        PowerShell.prototype.getBaseName = function() {
            return (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\ps." + Date.now().toString(36) + "." + Math.random().toString(36).slice(2, 7);
        };
        PowerShell.prototype.init = function() {
            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$exec = _ref.exec, exec = _ref$exec === undefined ? defaultExec : _ref$exec;
            if (this.available && !this.running) {
                var basename = this.getBaseName(), files = this.files = {
                    queue: basename + ".cmd.txt",
                    stdout: basename + ".stdout.log",
                    stderr: basename + ".stderr.log"
                };
                _fso.fso.CreateTextFile(files.queue, !0, !0).Close();
                var cmd = "Get-Content '" + files.queue + "' -Wait | Invoke-Expression";
                try {
                    exec('cmd /C powershell -NonInteractive -NoLogo -NoProfile -ExecutionPolicy Bypass "' + cmd + '" > "' + files.stdout + '" 2> "' + files.stderr + '"');
                    this.running = !0;
                } catch (err) {
                    this.available = !1;
                }
            }
            return this;
        };
        PowerShell.prototype.run = function(text) {
            if (this.available) {
                var fileName = this.getBaseName() + ".ps1", file = _fso.fso.CreateTextFile(fileName, !0, !0);
                file.Write(text);
                file.Close();
                this.send('. "' + fileName + '"');
            }
        };
        PowerShell.prototype.send = function(batch) {
            if (this.available) {
                if (!this.running) this.init();
                batch = [].concat(batch);
                try {
                    var ts = _fso.fso.GetFile(this.files.queue).OpenAsTextStream(8, -1);
                    batch.forEach(function(cmd) {
                        ts.WriteLine(cmd);
                    });
                    ts.Close();
                } catch (err) {}
            }
            return this;
        };
        PowerShell.prototype.terminate = function() {
            if (this.running) {
                this.send("exit");
                this.running = !1;
            }
            return this;
        };
        PowerShell.prototype.read = function(chanel) {
            if (this.available) {
                var file = _fso.fso.OpenTextFile(this.files[chanel], 1, !1, 0), res = file.AtEndOfStream ? "" : file.ReadAll();
                file.Close();
                return res;
            }
        };
        PowerShell.prototype.stdout = function() {
            return this.read("stdout");
        };
        PowerShell.prototype.stderr = function() {
            return this.read("stderr");
        };
        return PowerShell;
    }();
    exports["default"] = new PowerShell();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.httphead = exports.httpput = exports.httppost = exports.httpget = exports.getXMLHttp = undefined;
    var _registry = __webpack_require__(56), _client = __webpack_require__(680), _client2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_client), httprequest = (exports.getXMLHttp = _client2["default"].getXHR, function(send) {
        var originalCORS = Number((0, _registry.RegRead)(_registry.REG_CORS));
        (0, _registry.RegWrite)(_registry.REG_CORS, 0, "REG_DWORD");
        var promise = new Promise(function(resolve, reject) {
            send().timeout(1e4).then(resolve, function(err) {
                err.type = "HttpError";
                reject(err);
            });
        });
        if (0 !== originalCORS) (0, _registry.RegWrite)(_registry.REG_CORS, originalCORS, "REG_DWORD");
        return promise;
    });
    exports.httpget = function(url) {
        return httprequest(function() {
            return _client2["default"].get(url).set("Connection", "close");
        });
    }, exports.httppost = function(url, data) {
        var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, headers = _ref.headers;
        return httprequest(function() {
            var req = _client2["default"].post(url).set("Connection", "close");
            if (headers) req.set(headers);
            return req.send(data);
        });
    }, exports.httpput = function(url, data) {
        return httprequest(function() {
            return _client2["default"].put(url).set("Connection", "close").send(data);
        });
    }, exports.httphead = function(url) {
        return httprequest(function() {
            return _client2["default"].head(url).set("Connection", "close");
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.waitForProcesses = exports.waitForPID = exports.setProcessPriority = exports.killByPID = exports.getMyPID = exports.killProcess = undefined;
    var _shell = __webpack_require__(16), _wmi = __webpack_require__(23), getMyPID = (exports.killProcess = function(commandLineLike) {
        (0, _wmi.getWMIObjects)([ "ProcessId" ], "Win32_Process", 'NAME = "mshta.exe" AND CommandLine LIKE "' + commandLineLike + '"').forEach(function(_ref) {
            var ProcessId = _ref.ProcessId;
            _shell.WshShell.Run("cmd /c taskkill /f /t /pid " + ProcessId, 0, !0);
        });
    }, exports.getMyPID = function() {
        var pid = void 0;
        try {
            var temp = _shell.WshShell.Exec("rundll32 kernel32,Sleep");
            pid = (0, _wmi.getWMIObjects)([ "ParentProcessId" ], "Win32_Process", 'Handle = "' + temp.ProcessId + '"')[0].ParentProcessId;
            temp.Terminate();
        } catch (e) {}
        return pid;
    }), waitForPID = (exports.killByPID = function(pid) {
        var childs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1, timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
        setTimeout(function() {
            var flags = [ "/f" ];
            if (childs) flags.push("/t");
            _shell.WshShell.Run('cmd /c "taskkill ' + flags.join(" ") + " /pid " + pid + '"', 0, !0);
        }, timeout);
    }, exports.setProcessPriority = function() {
        var priority = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 128;
        try {
            var pid = getMyPID(), colItems = _wmi.objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Handle = " + pid, "WQL");
            new Enumerator(colItems).item().SetPriority(priority);
        } catch (e) {}
    }, exports.waitForPID = function(pid) {
        var query = "SELECT * FROM Win32_Process WHERE ProcessId = " + pid;
        return new Promise(function(resolve) {
            var intervId = setInterval(function() {
                if (0 === _wmi.objWMIService.ExecQuery(query, "WQL").Count) {
                    clearInterval(intervId);
                    resolve();
                }
            }, 300);
        });
    });
    exports.waitForProcesses = function(where) {
        var promise = Promise.resolve();
        (0, _wmi.getWMIObjects)([ "ProcessId" ], "Win32_Process", where).forEach(function(_ref2) {
            var ProcessId = _ref2.ProcessId;
            promise = promise.then(function() {
                return waitForPID(ProcessId);
            });
        });
        return promise;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.runCommandAsync = undefined;
    var _shell = __webpack_require__(16), _fso = __webpack_require__(17), _utils = __webpack_require__(19), _logs = __webpack_require__(4), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), log = (0, 
    _logs.getLogger)("core:system:runCommandAsync");
    exports.runCommandAsync = function(_ref) {
        var command = _ref.command, _ref$spaced = _ref.spaced, spaced = _ref$spaced === undefined ? !0 : _ref$spaced, _ref$triggerFile = _ref.triggerFile, triggerFile = _ref$triggerFile === undefined ? (0, 
        _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\run_command_" + (0, 
        _utils.generateJobId)() + ".txt" : _ref$triggerFile, _ref$customOutput = _ref.customOutput, customOutput = _ref$customOutput === undefined ? !1 : _ref$customOutput, _ref$checkInterval = _ref.checkInterval, checkInterval = _ref$checkInterval === undefined ? 1e3 : _ref$checkInterval, _ref$timeout = _ref.timeout, timeout = _ref$timeout === undefined ? 9e5 : _ref$timeout;
        return new Promise(function(resolve, reject) {
            var commandString = command + (spaced ? " " : "") + (customOutput ? "" : "|| echo Done & call echo Done %^errorLevel%") + ' > "' + triggerFile + '"', wrappedCommand = (0, 
            _utils.wrapInCmd)(commandString);
            log.debug("running command", {
                wrappedCommand: wrappedCommand
            }, "command");
            setTimeout(function() {
                _shell.WshShell.Run(wrappedCommand, 0, !1);
            }, 0);
            var textStream = void 0, timeoutTimer = void 0, timer = setInterval(function() {
                if (_fso.fso.FileExists(triggerFile)) try {
                    textStream = _fso.fso.OpenTextFile(triggerFile, 1, !1);
                    if (!textStream.AtEndOfStream) {
                        clearInterval(timeoutTimer);
                        clearInterval(timer);
                        if (!customOutput) {
                            var text = textStream.ReadAll(), matches = text.match(/done\s+(\d+)/i), exitCode = matches && matches[1];
                            if (null !== exitCode) resolve(+exitCode); else {
                                var error = new Error("runCommandAsync: exitCode not found");
                                error.extra = {
                                    triggerFileContent: text
                                };
                                reject(error);
                            }
                        } else resolve();
                    }
                } catch (e) {
                    clearInterval(timeoutTimer);
                    clearInterval(timer);
                    var _error = new Error("runCommandAsync: read trigger file");
                    _error.extra = {
                        errorMessage: e.message
                    };
                    reject(_error);
                } finally {
                    textStream.Close();
                }
            }, checkInterval);
            timeoutTimer = setTimeout(function() {
                clearInterval(timeoutTimer);
                clearInterval(timer);
                reject(new Error("runCommandAsync: timeout"));
            }, timeout);
        });
    };
}, function(module, exports) {
    module.exports = !1;
}, function(module, exports, __webpack_require__) {
    var anObject = __webpack_require__(11), dPs = __webpack_require__(241), enumBugKeys = __webpack_require__(159), IE_PROTO = __webpack_require__(170)("IE_PROTO"), Empty = function() {}, createDict = function() {
        var iframeDocument, iframe = __webpack_require__(158)("iframe"), i = enumBugKeys.length;
        iframe.style.display = "none";
        __webpack_require__(161).appendChild(iframe);
        iframe.src = "javascript:";
        iframeDocument = iframe.contentWindow.document;
        iframeDocument.open();
        iframeDocument.write("<script>document.F=Object<\/script>");
        iframeDocument.close();
        createDict = iframeDocument.F;
        for (;i--; ) delete createDict.prototype[enumBugKeys[i]];
        return createDict();
    };
    module.exports = Object.create || function(O, Properties) {
        var result;
        if (null !== O) {
            Empty.prototype = anObject(O);
            result = new Empty();
            Empty.prototype = null;
            result[IE_PROTO] = O;
        } else result = createDict();
        return Properties === undefined ? result : dPs(result, Properties);
    };
}, function(module, exports, __webpack_require__) {
    var $keys = __webpack_require__(243), hiddenKeys = __webpack_require__(159).concat("length", "prototype");
    exports.f = Object.getOwnPropertyNames || function(O) {
        return $keys(O, hiddenKeys);
    };
}, function(module, exports, __webpack_require__) {
    var $keys = __webpack_require__(243), enumBugKeys = __webpack_require__(159);
    module.exports = Object.keys || function(O) {
        return $keys(O, enumBugKeys);
    };
}, function(module, exports, __webpack_require__) {
    var toInteger = __webpack_require__(69), max = Math.max, min = Math.min;
    module.exports = function(index, length) {
        index = toInteger(index);
        return index < 0 ? max(index + length, 0) : min(index, length);
    };
}, function(module, exports) {
    var id = 0, px = Math.random();
    module.exports = function(key) {
        return "Symbol(".concat(key === undefined ? "" : key, ")_", (++id + px).toString(36));
    };
}, function(module, exports, __webpack_require__) {
    var getNative = __webpack_require__(118), isArrayLike = __webpack_require__(60), isObject = __webpack_require__(28), shimKeys = __webpack_require__(585), nativeKeys = getNative(Object, "keys"), keys = !nativeKeys ? shimKeys : function(object) {
        var Ctor = null == object ? undefined : object.constructor;
        if ("function" == typeof Ctor && Ctor.prototype === object || "function" != typeof object && isArrayLike(object)) return shimKeys(object); else return isObject(object) ? nativeKeys(object) : [];
    };
    module.exports = keys;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var invariant = __webpack_require__(5), DOMPropertyInjection = {
        MUST_USE_ATTRIBUTE: 1,
        MUST_USE_PROPERTY: 2,
        HAS_SIDE_EFFECTS: 4,
        HAS_BOOLEAN_VALUE: 8,
        HAS_NUMERIC_VALUE: 16,
        HAS_POSITIVE_NUMERIC_VALUE: 48,
        HAS_OVERLOADED_BOOLEAN_VALUE: 64,
        injectDOMPropertyConfig: function(domPropertyConfig) {
            var Properties = domPropertyConfig.Properties || {}, DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {}, DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {}, DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
            if (domPropertyConfig.isCustomAttribute) DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
            for (var propName in Properties) {
                !0 ? invariant(!DOMProperty.isStandardName.hasOwnProperty(propName), "injectDOMPropertyConfig(...): You're trying to inject DOM property '%s' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.", propName) : invariant(!DOMProperty.isStandardName.hasOwnProperty(propName));
                DOMProperty.isStandardName[propName] = !0;
                var lowerCased = propName.toLowerCase();
                DOMProperty.getPossibleStandardName[lowerCased] = propName;
                if (DOMAttributeNames.hasOwnProperty(propName)) {
                    var attributeName = DOMAttributeNames[propName];
                    DOMProperty.getPossibleStandardName[attributeName] = propName;
                    DOMProperty.getAttributeName[propName] = attributeName;
                } else DOMProperty.getAttributeName[propName] = lowerCased;
                DOMProperty.getPropertyName[propName] = DOMPropertyNames.hasOwnProperty(propName) ? DOMPropertyNames[propName] : propName;
                if (DOMMutationMethods.hasOwnProperty(propName)) DOMProperty.getMutationMethod[propName] = DOMMutationMethods[propName]; else DOMProperty.getMutationMethod[propName] = null;
                var propConfig = Properties[propName];
                DOMProperty.mustUseAttribute[propName] = propConfig & DOMPropertyInjection.MUST_USE_ATTRIBUTE;
                DOMProperty.mustUseProperty[propName] = propConfig & DOMPropertyInjection.MUST_USE_PROPERTY;
                DOMProperty.hasSideEffects[propName] = propConfig & DOMPropertyInjection.HAS_SIDE_EFFECTS;
                DOMProperty.hasBooleanValue[propName] = propConfig & DOMPropertyInjection.HAS_BOOLEAN_VALUE;
                DOMProperty.hasNumericValue[propName] = propConfig & DOMPropertyInjection.HAS_NUMERIC_VALUE;
                DOMProperty.hasPositiveNumericValue[propName] = propConfig & DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE;
                DOMProperty.hasOverloadedBooleanValue[propName] = propConfig & DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE;
                !0 ? invariant(!DOMProperty.mustUseAttribute[propName] || !DOMProperty.mustUseProperty[propName], "DOMProperty: Cannot require using both attribute and property: %s", propName) : invariant(!DOMProperty.mustUseAttribute[propName] || !DOMProperty.mustUseProperty[propName]);
                !0 ? invariant(DOMProperty.mustUseProperty[propName] || !DOMProperty.hasSideEffects[propName], "DOMProperty: Properties that have side effects must use property: %s", propName) : invariant(DOMProperty.mustUseProperty[propName] || !DOMProperty.hasSideEffects[propName]);
                !0 ? invariant(!!DOMProperty.hasBooleanValue[propName] + !!DOMProperty.hasNumericValue[propName] + !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1, "DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s", propName) : invariant(!!DOMProperty.hasBooleanValue[propName] + !!DOMProperty.hasNumericValue[propName] + !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1);
            }
        }
    }, defaultValueCache = {}, DOMProperty = {
        ID_ATTRIBUTE_NAME: "data-reactid",
        isStandardName: {},
        getPossibleStandardName: {},
        getAttributeName: {},
        getPropertyName: {},
        getMutationMethod: {},
        mustUseAttribute: {},
        mustUseProperty: {},
        hasSideEffects: {},
        hasBooleanValue: {},
        hasNumericValue: {},
        hasPositiveNumericValue: {},
        hasOverloadedBooleanValue: {},
        _isCustomAttributeFunctions: [],
        isCustomAttribute: function(attributeName) {
            for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {
                if ((0, DOMProperty._isCustomAttributeFunctions[i])(attributeName)) return !0;
            }
            return !1;
        },
        getDefaultValueForProperty: function(nodeName, prop) {
            var testElement, nodeDefaults = defaultValueCache[nodeName];
            if (!nodeDefaults) defaultValueCache[nodeName] = nodeDefaults = {};
            if (!(prop in nodeDefaults)) {
                testElement = document.createElement(nodeName);
                nodeDefaults[prop] = testElement[prop];
            }
            return nodeDefaults[prop];
        },
        injection: DOMPropertyInjection
    };
    module.exports = DOMProperty;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        this.dispatchConfig = dispatchConfig;
        this.dispatchMarker = dispatchMarker;
        this.nativeEvent = nativeEvent;
        var Interface = this.constructor.Interface;
        for (var propName in Interface) if (Interface.hasOwnProperty(propName)) {
            var normalize = Interface[propName];
            if (normalize) this[propName] = normalize(nativeEvent); else this[propName] = nativeEvent[propName];
        }
        if (null != nativeEvent.defaultPrevented ? nativeEvent.defaultPrevented : !1 === nativeEvent.returnValue) this.isDefaultPrevented = emptyFunction.thatReturnsTrue; else this.isDefaultPrevented = emptyFunction.thatReturnsFalse;
        this.isPropagationStopped = emptyFunction.thatReturnsFalse;
    }
    var PooledClass = __webpack_require__(70), emptyFunction = __webpack_require__(63), getEventTarget = __webpack_require__(197), merge = __webpack_require__(37), mergeInto = __webpack_require__(200), EventInterface = {
        type: null,
        target: getEventTarget,
        currentTarget: emptyFunction.thatReturnsNull,
        eventPhase: null,
        bubbles: null,
        cancelable: null,
        timeStamp: function(event) {
            return event.timeStamp || Date.now();
        },
        defaultPrevented: null,
        isTrusted: null
    };
    mergeInto(SyntheticEvent.prototype, {
        preventDefault: function() {
            this.defaultPrevented = !0;
            var event = this.nativeEvent;
            event.preventDefault ? event.preventDefault() : event.returnValue = !1;
            this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
        },
        stopPropagation: function() {
            var event = this.nativeEvent;
            event.stopPropagation ? event.stopPropagation() : event.cancelBubble = !0;
            this.isPropagationStopped = emptyFunction.thatReturnsTrue;
        },
        persist: function() {
            this.isPersistent = emptyFunction.thatReturnsTrue;
        },
        isPersistent: emptyFunction.thatReturnsFalse,
        destructor: function() {
            var Interface = this.constructor.Interface;
            for (var propName in Interface) this[propName] = null;
            this.dispatchConfig = null;
            this.dispatchMarker = null;
            this.nativeEvent = null;
        }
    });
    SyntheticEvent.Interface = EventInterface;
    SyntheticEvent.augmentClass = function(Class, Interface) {
        var Super = this, prototype = Object.create(Super.prototype);
        mergeInto(prototype, Class.prototype);
        Class.prototype = prototype;
        Class.prototype.constructor = Class;
        Class.Interface = merge(Super.Interface, Interface);
        Class.augmentClass = Super.augmentClass;
        PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler);
    };
    PooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler);
    module.exports = SyntheticEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var invariant = __webpack_require__(5), keyMirror = function(obj) {
        var key, ret = {};
        !0 ? invariant(obj instanceof Object && !Array.isArray(obj), "keyMirror(...): Argument must be an object.") : invariant(obj instanceof Object && !Array.isArray(obj));
        for (key in obj) if (obj.hasOwnProperty(key)) ret[key] = key;
        return ret;
    };
    module.exports = keyMirror;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    exports.doNotShowOnboardingPopups = exports.loadOnboardingSettings = exports.saveOnboardingSettings = exports.addOnboardingEvent = exports.setActiveScreen = exports.closeOnboardingScreen = exports.closeOnboardingPopup = exports.handleOnboardingUnmount = undefined;
    var _settingsActions = __webpack_require__(123), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), _raven = __webpack_require__(152), _raven2 = _interopRequireDefault(_raven), closeOnboardingPopup = (exports.handleOnboardingUnmount = function() {
        return function(dispatch) {
            setTimeout(function() {
                dispatch({
                    type: "ONBOARDING_UNMOUNTED"
                });
            }, 0);
        };
    }, exports.closeOnboardingPopup = function() {
        return function(dispatch, getState) {
            dispatch(closeOnboardingScreen(getState().onboarding.screenName));
            dispatch({
                type: "ONBOARDING_POPUP_CLOSE"
            });
        };
    }), closeOnboardingScreen = exports.closeOnboardingScreen = function(screenName) {
        return function(dispatch) {
            setTimeout(function() {
                dispatch({
                    type: "ONBOARDING_SCREEN_CLOSED",
                    payload: {
                        screenName: screenName
                    }
                });
            }, 0);
        };
    };
    exports.setActiveScreen = function(screenName) {
        return function(dispatch) {
            if (screenName) dispatch({
                type: "ONBOARDING_SCREEN_CHANGED",
                screenName: screenName
            });
        };
    }, exports.addOnboardingEvent = function(eventName) {
        return function() {
            var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                var mustOpenPopup;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        _context.next = 2;
                        return dispatch({
                            type: "ONBOARDING_EVENT_ADDED",
                            payload: {
                                eventName: eventName
                            }
                        });

                      case 2:
                        mustOpenPopup = getState().onboarding.mustOpenPopup;
                        if (mustOpenPopup) dispatch({
                            type: "ONBOARDING_POPUP_OPEN"
                        });

                      case 4:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, undefined);
            }));
            return function(_x, _x2) {
                return _ref.apply(this, arguments);
            };
        }();
    }, exports.saveOnboardingSettings = function() {
        return function(dispatch, getState) {
            try {
                var _getState$onboarding = getState().onboarding, shownScreens = _getState$onboarding.shownScreens, doNotShowPopups = _getState$onboarding.doNotShowPopups;
                dispatch((0, _settingsActions.setSetting)("hidden.onboarding", {
                    value: {
                        shownScreens: shownScreens,
                        doNotShowPopups: doNotShowPopups
                    }
                }));
            } catch (e) {
                _raven2["default"].captureException(e);
            }
        };
    }, exports.loadOnboardingSettings = function() {
        return function(dispatch) {
            try {
                var value = _settings2["default"].get("hidden.onboarding").value, onboardingSettings = "string" == typeof value ? JSON.stringify(value) : value;
                onboardingSettings.shownScreens = [].concat(onboardingSettings.shownScreens);
                if (Object.keys(onboardingSettings).length) dispatch({
                    type: "ONBOARDING_SETTINGS_LOADED",
                    payload: {
                        onboardingSettings: onboardingSettings
                    }
                });
            } catch (e) {
                _raven2["default"].captureException(e);
            }
        };
    }, exports.doNotShowOnboardingPopups = function() {
        return function() {
            var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(dispatch) {
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        dispatch(closeOnboardingPopup());
                        dispatch({
                            type: "ONBOARDING_DO_NOT_SHOW_CLICKED"
                        });

                      case 2:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, undefined);
            }));
            return function(_x3) {
                return _ref2.apply(this, arguments);
            };
        }();
    };
}, function(module, exports, __webpack_require__) {
    var UNSCOPABLES = __webpack_require__(15)("unscopables"), ArrayProto = Array.prototype;
    if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(33)(ArrayProto, UNSCOPABLES, {});
    module.exports = function(key) {
        ArrayProto[UNSCOPABLES][key] = !0;
    };
}, function(module, exports) {
    var core = module.exports = {
        version: "2.4.0"
    };
    if ("number" == typeof __e) __e = core;
}, function(module, exports) {
    module.exports = {};
}, function(module, exports, __webpack_require__) {
    var META = __webpack_require__(81)("meta"), isObject = __webpack_require__(12), has = __webpack_require__(30), setDesc = __webpack_require__(21).f, id = 0, isExtensible = Object.isExtensible || function() {
        return !0;
    }, FREEZE = !__webpack_require__(9)(function() {
        return isExtensible(Object.preventExtensions({}));
    }), setMeta = function(it) {
        setDesc(it, META, {
            value: {
                i: "O" + ++id,
                w: {}
            }
        });
    }, fastKey = function(it, create) {
        if (!isObject(it)) return "symbol" == typeof it ? it : ("string" == typeof it ? "S" : "P") + it;
        if (!has(it, META)) {
            if (!isExtensible(it)) return "F";
            if (!create) return "E";
            setMeta(it);
        }
        return it[META].i;
    }, getWeak = function(it, create) {
        if (!has(it, META)) {
            if (!isExtensible(it)) return !0;
            if (!create) return !1;
            setMeta(it);
        }
        return it[META].w;
    }, onFreeze = function(it) {
        if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
        return it;
    }, meta = module.exports = {
        KEY: META,
        NEED: !1,
        fastKey: fastKey,
        getWeak: getWeak,
        onFreeze: onFreeze
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var global = __webpack_require__(8), dP = __webpack_require__(21), DESCRIPTORS = __webpack_require__(20), SPECIES = __webpack_require__(15)("species");
    module.exports = function(KEY) {
        var C = global[KEY];
        if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
            configurable: !0,
            get: function() {
                return this;
            }
        });
    };
}, function(module, exports, __webpack_require__) {
    var def = __webpack_require__(21).f, has = __webpack_require__(30), TAG = __webpack_require__(15)("toStringTag");
    module.exports = function(it, tag, stat) {
        if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, {
            configurable: !0,
            value: tag
        });
    };
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), defined = __webpack_require__(41), fails = __webpack_require__(9), spaces = __webpack_require__(176), space = "[" + spaces + "]", non = "​", ltrim = RegExp("^" + space + space + "*"), rtrim = RegExp(space + space + "*$"), exporter = function(KEY, exec, ALIAS) {
        var exp = {}, FORCE = fails(function() {
            return !!spaces[KEY]() || non[KEY]() != non;
        }), fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
        if (ALIAS) exp[ALIAS] = fn;
        $export($export.P + $export.F * FORCE, "String", exp);
    }, trim = exporter.trim = function(string, TYPE) {
        string = String(defined(string));
        if (1 & TYPE) string = string.replace(ltrim, "");
        if (2 & TYPE) string = string.replace(rtrim, "");
        return string;
    };
    module.exports = exporter;
}, function(module, exports, __webpack_require__) {
    (function(module, global) {
        var __WEBPACK_AMD_DEFINE_RESULT__;
        (function() {
            function baseCompareAscending(value, other) {
                if (value !== other) {
                    var valIsNull = null === value, valIsUndef = value === undefined, valIsReflexive = value === value, othIsNull = null === other, othIsUndef = other === undefined, othIsReflexive = other === other;
                    if (value > other && !othIsNull || !valIsReflexive || valIsNull && !othIsUndef && othIsReflexive || valIsUndef && othIsReflexive) return 1;
                    if (value < other && !valIsNull || !othIsReflexive || othIsNull && !valIsUndef && valIsReflexive || othIsUndef && valIsReflexive) return -1;
                }
                return 0;
            }
            function baseFindIndex(array, predicate, fromRight) {
                for (var length = array.length, index = fromRight ? length : -1; fromRight ? index-- : ++index < length; ) if (predicate(array[index], index, array)) return index;
                return -1;
            }
            function baseIndexOf(array, value, fromIndex) {
                if (value !== value) return indexOfNaN(array, fromIndex);
                for (var index = fromIndex - 1, length = array.length; ++index < length; ) if (array[index] === value) return index;
                return -1;
            }
            function baseIsFunction(value) {
                return "function" == typeof value || !1;
            }
            function baseToString(value) {
                return null == value ? "" : value + "";
            }
            function charsLeftIndex(string, chars) {
                for (var index = -1, length = string.length; ++index < length && chars.indexOf(string.charAt(index)) > -1; ) ;
                return index;
            }
            function charsRightIndex(string, chars) {
                for (var index = string.length; index-- && chars.indexOf(string.charAt(index)) > -1; ) ;
                return index;
            }
            function compareAscending(object, other) {
                return baseCompareAscending(object.criteria, other.criteria) || object.index - other.index;
            }
            function compareMultiple(object, other, orders) {
                for (var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; ++index < length; ) {
                    var result = baseCompareAscending(objCriteria[index], othCriteria[index]);
                    if (result) {
                        if (index >= ordersLength) return result;
                        var order = orders[index];
                        return result * ("asc" === order || !0 === order ? 1 : -1);
                    }
                }
                return object.index - other.index;
            }
            function deburrLetter(letter) {
                return deburredLetters[letter];
            }
            function escapeHtmlChar(chr) {
                return htmlEscapes[chr];
            }
            function escapeRegExpChar(chr, leadingChar, whitespaceChar) {
                if (leadingChar) chr = regexpEscapes[chr]; else if (whitespaceChar) chr = stringEscapes[chr];
                return "\\" + chr;
            }
            function escapeStringChar(chr) {
                return "\\" + stringEscapes[chr];
            }
            function indexOfNaN(array, fromIndex, fromRight) {
                for (var length = array.length, index = fromIndex + (fromRight ? 0 : -1); fromRight ? index-- : ++index < length; ) {
                    var other = array[index];
                    if (other !== other) return index;
                }
                return -1;
            }
            function isObjectLike(value) {
                return !!value && "object" == typeof value;
            }
            function isSpace(charCode) {
                return charCode <= 160 && charCode >= 9 && charCode <= 13 || 32 == charCode || 160 == charCode || 5760 == charCode || 6158 == charCode || charCode >= 8192 && (charCode <= 8202 || 8232 == charCode || 8233 == charCode || 8239 == charCode || 8287 == charCode || 12288 == charCode || 65279 == charCode);
            }
            function replaceHolders(array, placeholder) {
                for (var index = -1, length = array.length, resIndex = -1, result = []; ++index < length; ) if (array[index] === placeholder) {
                    array[index] = PLACEHOLDER;
                    result[++resIndex] = index;
                }
                return result;
            }
            function sortedUniq(array, iteratee) {
                for (var seen, index = -1, length = array.length, resIndex = -1, result = []; ++index < length; ) {
                    var value = array[index], computed = iteratee ? iteratee(value, index, array) : value;
                    if (!index || seen !== computed) {
                        seen = computed;
                        result[++resIndex] = value;
                    }
                }
                return result;
            }
            function trimmedLeftIndex(string) {
                for (var index = -1, length = string.length; ++index < length && isSpace(string.charCodeAt(index)); ) ;
                return index;
            }
            function trimmedRightIndex(string) {
                for (var index = string.length; index-- && isSpace(string.charCodeAt(index)); ) ;
                return index;
            }
            function unescapeHtmlChar(chr) {
                return htmlUnescapes[chr];
            }
            function runInContext(context) {
                function lodash(value) {
                    if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
                        if (value instanceof LodashWrapper) return value;
                        if (hasOwnProperty.call(value, "__chain__") && hasOwnProperty.call(value, "__wrapped__")) return wrapperClone(value);
                    }
                    return new LodashWrapper(value);
                }
                function baseLodash() {}
                function LodashWrapper(value, chainAll, actions) {
                    this.__wrapped__ = value;
                    this.__actions__ = actions || [];
                    this.__chain__ = !!chainAll;
                }
                function LazyWrapper(value) {
                    this.__wrapped__ = value;
                    this.__actions__ = [];
                    this.__dir__ = 1;
                    this.__filtered__ = !1;
                    this.__iteratees__ = [];
                    this.__takeCount__ = POSITIVE_INFINITY;
                    this.__views__ = [];
                }
                function lazyClone() {
                    var result = new LazyWrapper(this.__wrapped__);
                    result.__actions__ = arrayCopy(this.__actions__);
                    result.__dir__ = this.__dir__;
                    result.__filtered__ = this.__filtered__;
                    result.__iteratees__ = arrayCopy(this.__iteratees__);
                    result.__takeCount__ = this.__takeCount__;
                    result.__views__ = arrayCopy(this.__views__);
                    return result;
                }
                function lazyReverse() {
                    if (this.__filtered__) {
                        var result = new LazyWrapper(this);
                        result.__dir__ = -1;
                        result.__filtered__ = !0;
                    } else {
                        result = this.clone();
                        result.__dir__ *= -1;
                    }
                    return result;
                }
                function lazyValue() {
                    var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__);
                    if (!isArr || arrLength < LARGE_ARRAY_SIZE || arrLength == length && takeCount == length) return baseWrapperValue(isRight && isArr ? array.reverse() : array, this.__actions__);
                    var result = [];
                    outer: for (;length-- && resIndex < takeCount; ) {
                        index += dir;
                        for (var iterIndex = -1, value = array[index]; ++iterIndex < iterLength; ) {
                            var data = iteratees[iterIndex], iteratee = data.iteratee, type = data.type, computed = iteratee(value);
                            if (type == LAZY_MAP_FLAG) value = computed; else if (!computed) if (type == LAZY_FILTER_FLAG) continue outer; else break outer;
                        }
                        result[resIndex++] = value;
                    }
                    return result;
                }
                function MapCache() {
                    this.__data__ = {};
                }
                function mapDelete(key) {
                    return this.has(key) && delete this.__data__[key];
                }
                function mapGet(key) {
                    return "__proto__" == key ? undefined : this.__data__[key];
                }
                function mapHas(key) {
                    return "__proto__" != key && hasOwnProperty.call(this.__data__, key);
                }
                function mapSet(key, value) {
                    if ("__proto__" != key) this.__data__[key] = value;
                    return this;
                }
                function SetCache(values) {
                    var length = values ? values.length : 0;
                    this.data = {
                        hash: nativeCreate(null),
                        set: new Set()
                    };
                    for (;length--; ) this.push(values[length]);
                }
                function cacheIndexOf(cache, value) {
                    var data = cache.data;
                    return ("string" == typeof value || isObject(value) ? data.set.has(value) : data.hash[value]) ? 0 : -1;
                }
                function cachePush(value) {
                    var data = this.data;
                    if ("string" == typeof value || isObject(value)) data.set.add(value); else data.hash[value] = !0;
                }
                function arrayConcat(array, other) {
                    for (var index = -1, length = array.length, othIndex = -1, othLength = other.length, result = Array(length + othLength); ++index < length; ) result[index] = array[index];
                    for (;++othIndex < othLength; ) result[index++] = other[othIndex];
                    return result;
                }
                function arrayCopy(source, array) {
                    var index = -1, length = source.length;
                    array || (array = Array(length));
                    for (;++index < length; ) array[index] = source[index];
                    return array;
                }
                function arrayEach(array, iteratee) {
                    for (var index = -1, length = array.length; ++index < length && !1 !== iteratee(array[index], index, array); ) ;
                    return array;
                }
                function arrayEachRight(array, iteratee) {
                    for (var length = array.length; length-- && !1 !== iteratee(array[length], length, array); ) ;
                    return array;
                }
                function arrayEvery(array, predicate) {
                    for (var index = -1, length = array.length; ++index < length; ) if (!predicate(array[index], index, array)) return !1;
                    return !0;
                }
                function arrayExtremum(array, iteratee, comparator, exValue) {
                    for (var index = -1, length = array.length, computed = exValue, result = computed; ++index < length; ) {
                        var value = array[index], current = +iteratee(value);
                        if (comparator(current, computed)) {
                            computed = current;
                            result = value;
                        }
                    }
                    return result;
                }
                function arrayFilter(array, predicate) {
                    for (var index = -1, length = array.length, resIndex = -1, result = []; ++index < length; ) {
                        var value = array[index];
                        if (predicate(value, index, array)) result[++resIndex] = value;
                    }
                    return result;
                }
                function arrayMap(array, iteratee) {
                    for (var index = -1, length = array.length, result = Array(length); ++index < length; ) result[index] = iteratee(array[index], index, array);
                    return result;
                }
                function arrayPush(array, values) {
                    for (var index = -1, length = values.length, offset = array.length; ++index < length; ) array[offset + index] = values[index];
                    return array;
                }
                function arrayReduce(array, iteratee, accumulator, initFromArray) {
                    var index = -1, length = array.length;
                    if (initFromArray && length) accumulator = array[++index];
                    for (;++index < length; ) accumulator = iteratee(accumulator, array[index], index, array);
                    return accumulator;
                }
                function arrayReduceRight(array, iteratee, accumulator, initFromArray) {
                    var length = array.length;
                    if (initFromArray && length) accumulator = array[--length];
                    for (;length--; ) accumulator = iteratee(accumulator, array[length], length, array);
                    return accumulator;
                }
                function arraySome(array, predicate) {
                    for (var index = -1, length = array.length; ++index < length; ) if (predicate(array[index], index, array)) return !0;
                    return !1;
                }
                function arraySum(array, iteratee) {
                    for (var length = array.length, result = 0; length--; ) result += +iteratee(array[length]) || 0;
                    return result;
                }
                function assignDefaults(objectValue, sourceValue) {
                    return objectValue === undefined ? sourceValue : objectValue;
                }
                function assignOwnDefaults(objectValue, sourceValue, key, object) {
                    return objectValue === undefined || !hasOwnProperty.call(object, key) ? sourceValue : objectValue;
                }
                function assignWith(object, source, customizer) {
                    for (var index = -1, props = keys(source), length = props.length; ++index < length; ) {
                        var key = props[index], value = object[key], result = customizer(value, source[key], key, object, source);
                        if ((result === result ? result !== value : value === value) || value === undefined && !(key in object)) object[key] = result;
                    }
                    return object;
                }
                function baseAssign(object, source) {
                    return null == source ? object : baseCopy(source, keys(source), object);
                }
                function baseAt(collection, props) {
                    for (var index = -1, isNil = null == collection, isArr = !isNil && isArrayLike(collection), length = isArr ? collection.length : 0, propsLength = props.length, result = Array(propsLength); ++index < propsLength; ) {
                        var key = props[index];
                        if (isArr) result[index] = isIndex(key, length) ? collection[key] : undefined; else result[index] = isNil ? undefined : collection[key];
                    }
                    return result;
                }
                function baseCopy(source, props, object) {
                    object || (object = {});
                    for (var index = -1, length = props.length; ++index < length; ) {
                        var key = props[index];
                        object[key] = source[key];
                    }
                    return object;
                }
                function baseCallback(func, thisArg, argCount) {
                    var type = typeof func;
                    if ("function" == type) return thisArg === undefined ? func : bindCallback(func, thisArg, argCount);
                    if (null == func) return identity;
                    if ("object" == type) return baseMatches(func); else return thisArg === undefined ? property(func) : baseMatchesProperty(func, thisArg);
                }
                function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
                    var result;
                    if (customizer) result = object ? customizer(value, key, object) : customizer(value);
                    if (result !== undefined) return result;
                    if (!isObject(value)) return value;
                    var isArr = isArray(value);
                    if (isArr) {
                        result = initCloneArray(value);
                        if (!isDeep) return arrayCopy(value, result);
                    } else {
                        var tag = objToString.call(value), isFunc = tag == funcTag;
                        if (tag == objectTag || tag == argsTag || isFunc && !object) {
                            result = initCloneObject(isFunc ? {} : value);
                            if (!isDeep) return baseAssign(result, value);
                        } else return cloneableTags[tag] ? initCloneByTag(value, tag, isDeep) : object ? value : {};
                    }
                    stackA || (stackA = []);
                    stackB || (stackB = []);
                    for (var length = stackA.length; length--; ) if (stackA[length] == value) return stackB[length];
                    stackA.push(value);
                    stackB.push(result);
                    (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
                        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
                    });
                    return result;
                }
                function baseDelay(func, wait, args) {
                    if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
                    return setTimeout(function() {
                        func.apply(undefined, args);
                    }, wait);
                }
                function baseDifference(array, values) {
                    var length = array ? array.length : 0, result = [];
                    if (!length) return result;
                    var index = -1, indexOf = getIndexOf(), isCommon = indexOf == baseIndexOf, cache = isCommon && values.length >= LARGE_ARRAY_SIZE ? createCache(values) : null, valuesLength = values.length;
                    if (cache) {
                        indexOf = cacheIndexOf;
                        isCommon = !1;
                        values = cache;
                    }
                    outer: for (;++index < length; ) {
                        var value = array[index];
                        if (isCommon && value === value) {
                            for (var valuesIndex = valuesLength; valuesIndex--; ) if (values[valuesIndex] === value) continue outer;
                            result.push(value);
                        } else if (indexOf(values, value, 0) < 0) result.push(value);
                    }
                    return result;
                }
                function baseEvery(collection, predicate) {
                    var result = !0;
                    baseEach(collection, function(value, index, collection) {
                        result = !!predicate(value, index, collection);
                        return result;
                    });
                    return result;
                }
                function baseExtremum(collection, iteratee, comparator, exValue) {
                    var computed = exValue, result = computed;
                    baseEach(collection, function(value, index, collection) {
                        var current = +iteratee(value, index, collection);
                        if (comparator(current, computed) || current === exValue && current === result) {
                            computed = current;
                            result = value;
                        }
                    });
                    return result;
                }
                function baseFill(array, value, start, end) {
                    var length = array.length;
                    start = null == start ? 0 : +start || 0;
                    if (start < 0) start = -start > length ? 0 : length + start;
                    end = end === undefined || end > length ? length : +end || 0;
                    if (end < 0) end += length;
                    length = start > end ? 0 : end >>> 0;
                    start >>>= 0;
                    for (;start < length; ) array[start++] = value;
                    return array;
                }
                function baseFilter(collection, predicate) {
                    var result = [];
                    baseEach(collection, function(value, index, collection) {
                        if (predicate(value, index, collection)) result.push(value);
                    });
                    return result;
                }
                function baseFind(collection, predicate, eachFunc, retKey) {
                    var result;
                    eachFunc(collection, function(value, key, collection) {
                        if (predicate(value, key, collection)) {
                            result = retKey ? key : value;
                            return !1;
                        }
                    });
                    return result;
                }
                function baseFlatten(array, isDeep, isStrict, result) {
                    result || (result = []);
                    for (var index = -1, length = array.length; ++index < length; ) {
                        var value = array[index];
                        if (isObjectLike(value) && isArrayLike(value) && (isStrict || isArray(value) || isArguments(value))) if (isDeep) baseFlatten(value, isDeep, isStrict, result); else arrayPush(result, value); else if (!isStrict) result[result.length] = value;
                    }
                    return result;
                }
                function baseForIn(object, iteratee) {
                    return baseFor(object, iteratee, keysIn);
                }
                function baseForOwn(object, iteratee) {
                    return baseFor(object, iteratee, keys);
                }
                function baseForOwnRight(object, iteratee) {
                    return baseForRight(object, iteratee, keys);
                }
                function baseFunctions(object, props) {
                    for (var index = -1, length = props.length, resIndex = -1, result = []; ++index < length; ) {
                        var key = props[index];
                        if (isFunction(object[key])) result[++resIndex] = key;
                    }
                    return result;
                }
                function baseGet(object, path, pathKey) {
                    if (null != object) {
                        if (pathKey !== undefined && pathKey in toObject(object)) path = [ pathKey ];
                        for (var index = 0, length = path.length; null != object && index < length; ) object = object[path[index++]];
                        return index && index == length ? object : undefined;
                    }
                }
                function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
                    if (value === other) return !0;
                    if (null == value || null == other || !isObject(value) && !isObjectLike(other)) return value !== value && other !== other; else return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
                }
                function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
                    var objIsArr = isArray(object), othIsArr = isArray(other), objTag = arrayTag, othTag = arrayTag;
                    if (!objIsArr) {
                        objTag = objToString.call(object);
                        if (objTag == argsTag) objTag = objectTag; else if (objTag != objectTag) objIsArr = isTypedArray(object);
                    }
                    if (!othIsArr) {
                        othTag = objToString.call(other);
                        if (othTag == argsTag) othTag = objectTag; else if (othTag != objectTag) othIsArr = isTypedArray(other);
                    }
                    var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
                    if (isSameTag && !objIsArr && !objIsObj) return equalByTag(object, other, objTag);
                    if (!isLoose) {
                        var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
                        if (objIsWrapped || othIsWrapped) return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
                    }
                    if (!isSameTag) return !1;
                    stackA || (stackA = []);
                    stackB || (stackB = []);
                    for (var length = stackA.length; length--; ) if (stackA[length] == object) return stackB[length] == other;
                    stackA.push(object);
                    stackB.push(other);
                    var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
                    stackA.pop();
                    stackB.pop();
                    return result;
                }
                function baseIsMatch(object, matchData, customizer) {
                    var index = matchData.length, length = index, noCustomizer = !customizer;
                    if (null == object) return !length;
                    object = toObject(object);
                    for (;index--; ) {
                        var data = matchData[index];
                        if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) return !1;
                    }
                    for (;++index < length; ) {
                        data = matchData[index];
                        var key = data[0], objValue = object[key], srcValue = data[1];
                        if (noCustomizer && data[2]) {
                            if (objValue === undefined && !(key in object)) return !1;
                        } else {
                            var result = customizer ? customizer(objValue, srcValue, key) : undefined;
                            if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, !0) : result)) return !1;
                        }
                    }
                    return !0;
                }
                function baseMap(collection, iteratee) {
                    var index = -1, result = isArrayLike(collection) ? Array(collection.length) : [];
                    baseEach(collection, function(value, key, collection) {
                        result[++index] = iteratee(value, key, collection);
                    });
                    return result;
                }
                function baseMatches(source) {
                    var matchData = getMatchData(source);
                    if (1 == matchData.length && matchData[0][2]) {
                        var key = matchData[0][0], value = matchData[0][1];
                        return function(object) {
                            if (null == object) return !1; else return object[key] === value && (value !== undefined || key in toObject(object));
                        };
                    }
                    return function(object) {
                        return baseIsMatch(object, matchData);
                    };
                }
                function baseMatchesProperty(path, srcValue) {
                    var isArr = isArray(path), isCommon = isKey(path) && isStrictComparable(srcValue), pathKey = path + "";
                    path = toPath(path);
                    return function(object) {
                        if (null == object) return !1;
                        var key = pathKey;
                        object = toObject(object);
                        if ((isArr || !isCommon) && !(key in object)) {
                            object = 1 == path.length ? object : baseGet(object, baseSlice(path, 0, -1));
                            if (null == object) return !1;
                            key = last(path);
                            object = toObject(object);
                        }
                        return object[key] === srcValue ? srcValue !== undefined || key in object : baseIsEqual(srcValue, object[key], undefined, !0);
                    };
                }
                function baseMerge(object, source, customizer, stackA, stackB) {
                    if (!isObject(object)) return object;
                    var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), props = isSrcArr ? undefined : keys(source);
                    arrayEach(props || source, function(srcValue, key) {
                        if (props) {
                            key = srcValue;
                            srcValue = source[key];
                        }
                        if (isObjectLike(srcValue)) {
                            stackA || (stackA = []);
                            stackB || (stackB = []);
                            baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
                        } else {
                            var value = object[key], result = customizer ? customizer(value, srcValue, key, object, source) : undefined, isCommon = result === undefined;
                            if (isCommon) result = srcValue;
                            if ((result !== undefined || isSrcArr && !(key in object)) && (isCommon || (result === result ? result !== value : value === value))) object[key] = result;
                        }
                    });
                    return object;
                }
                function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
                    for (var length = stackA.length, srcValue = source[key]; length--; ) if (stackA[length] == srcValue) {
                        object[key] = stackB[length];
                        return;
                    }
                    var value = object[key], result = customizer ? customizer(value, srcValue, key, object, source) : undefined, isCommon = result === undefined;
                    if (isCommon) {
                        result = srcValue;
                        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) result = isArray(value) ? value : isArrayLike(value) ? arrayCopy(value) : []; else if (isPlainObject(srcValue) || isArguments(srcValue)) result = isArguments(value) ? toPlainObject(value) : isPlainObject(value) ? value : {}; else isCommon = !1;
                    }
                    stackA.push(srcValue);
                    stackB.push(result);
                    if (isCommon) object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); else if (result === result ? result !== value : value === value) object[key] = result;
                }
                function baseProperty(key) {
                    return function(object) {
                        return null == object ? undefined : object[key];
                    };
                }
                function basePropertyDeep(path) {
                    var pathKey = path + "";
                    path = toPath(path);
                    return function(object) {
                        return baseGet(object, path, pathKey);
                    };
                }
                function basePullAt(array, indexes) {
                    for (var length = array ? indexes.length : 0; length--; ) {
                        var index = indexes[length];
                        if (index != previous && isIndex(index)) {
                            var previous = index;
                            splice.call(array, index, 1);
                        }
                    }
                    return array;
                }
                function baseRandom(min, max) {
                    return min + nativeFloor(nativeRandom() * (max - min + 1));
                }
                function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
                    eachFunc(collection, function(value, index, collection) {
                        accumulator = initFromCollection ? (initFromCollection = !1, value) : iteratee(accumulator, value, index, collection);
                    });
                    return accumulator;
                }
                function baseSlice(array, start, end) {
                    var index = -1, length = array.length;
                    start = null == start ? 0 : +start || 0;
                    if (start < 0) start = -start > length ? 0 : length + start;
                    end = end === undefined || end > length ? length : +end || 0;
                    if (end < 0) end += length;
                    length = start > end ? 0 : end - start >>> 0;
                    start >>>= 0;
                    for (var result = Array(length); ++index < length; ) result[index] = array[index + start];
                    return result;
                }
                function baseSome(collection, predicate) {
                    var result;
                    baseEach(collection, function(value, index, collection) {
                        result = predicate(value, index, collection);
                        return !result;
                    });
                    return !!result;
                }
                function baseSortBy(array, comparer) {
                    var length = array.length;
                    array.sort(comparer);
                    for (;length--; ) array[length] = array[length].value;
                    return array;
                }
                function baseSortByOrder(collection, iteratees, orders) {
                    var callback = getCallback(), index = -1;
                    iteratees = arrayMap(iteratees, function(iteratee) {
                        return callback(iteratee);
                    });
                    return baseSortBy(baseMap(collection, function(value) {
                        return {
                            criteria: arrayMap(iteratees, function(iteratee) {
                                return iteratee(value);
                            }),
                            index: ++index,
                            value: value
                        };
                    }), function(object, other) {
                        return compareMultiple(object, other, orders);
                    });
                }
                function baseSum(collection, iteratee) {
                    var result = 0;
                    baseEach(collection, function(value, index, collection) {
                        result += +iteratee(value, index, collection) || 0;
                    });
                    return result;
                }
                function baseUniq(array, iteratee) {
                    var index = -1, indexOf = getIndexOf(), length = array.length, isCommon = indexOf == baseIndexOf, isLarge = isCommon && length >= LARGE_ARRAY_SIZE, seen = isLarge ? createCache() : null, result = [];
                    if (seen) {
                        indexOf = cacheIndexOf;
                        isCommon = !1;
                    } else {
                        isLarge = !1;
                        seen = iteratee ? [] : result;
                    }
                    outer: for (;++index < length; ) {
                        var value = array[index], computed = iteratee ? iteratee(value, index, array) : value;
                        if (isCommon && value === value) {
                            for (var seenIndex = seen.length; seenIndex--; ) if (seen[seenIndex] === computed) continue outer;
                            if (iteratee) seen.push(computed);
                            result.push(value);
                        } else if (indexOf(seen, computed, 0) < 0) {
                            if (iteratee || isLarge) seen.push(computed);
                            result.push(value);
                        }
                    }
                    return result;
                }
                function baseValues(object, props) {
                    for (var index = -1, length = props.length, result = Array(length); ++index < length; ) result[index] = object[props[index]];
                    return result;
                }
                function baseWhile(array, predicate, isDrop, fromRight) {
                    for (var length = array.length, index = fromRight ? length : -1; (fromRight ? index-- : ++index < length) && predicate(array[index], index, array); ) ;
                    return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index);
                }
                function baseWrapperValue(value, actions) {
                    var result = value;
                    if (result instanceof LazyWrapper) result = result.value();
                    for (var index = -1, length = actions.length; ++index < length; ) {
                        var action = actions[index];
                        result = action.func.apply(action.thisArg, arrayPush([ result ], action.args));
                    }
                    return result;
                }
                function binaryIndex(array, value, retHighest) {
                    var low = 0, high = array ? array.length : low;
                    if ("number" == typeof value && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
                        for (;low < high; ) {
                            var mid = low + high >>> 1, computed = array[mid];
                            if ((retHighest ? computed <= value : computed < value) && null !== computed) low = mid + 1; else high = mid;
                        }
                        return high;
                    }
                    return binaryIndexBy(array, value, identity, retHighest);
                }
                function binaryIndexBy(array, value, iteratee, retHighest) {
                    value = iteratee(value);
                    for (var low = 0, high = array ? array.length : 0, valIsNaN = value !== value, valIsNull = null === value, valIsUndef = value === undefined; low < high; ) {
                        var mid = nativeFloor((low + high) / 2), computed = iteratee(array[mid]), isDef = computed !== undefined, isReflexive = computed === computed;
                        if (valIsNaN) var setLow = isReflexive || retHighest; else if (valIsNull) setLow = isReflexive && isDef && (retHighest || null != computed); else if (valIsUndef) setLow = isReflexive && (retHighest || isDef); else if (null == computed) setLow = !1; else setLow = retHighest ? computed <= value : computed < value;
                        if (setLow) low = mid + 1; else high = mid;
                    }
                    return nativeMin(high, MAX_ARRAY_INDEX);
                }
                function bindCallback(func, thisArg, argCount) {
                    if ("function" != typeof func) return identity;
                    if (thisArg === undefined) return func;
                    switch (argCount) {
                      case 1:
                        return function(value) {
                            return func.call(thisArg, value);
                        };

                      case 3:
                        return function(value, index, collection) {
                            return func.call(thisArg, value, index, collection);
                        };

                      case 4:
                        return function(accumulator, value, index, collection) {
                            return func.call(thisArg, accumulator, value, index, collection);
                        };

                      case 5:
                        return function(value, other, key, object, source) {
                            return func.call(thisArg, value, other, key, object, source);
                        };
                    }
                    return function() {
                        return func.apply(thisArg, arguments);
                    };
                }
                function bufferClone(buffer) {
                    var result = new ArrayBuffer(buffer.byteLength);
                    new Uint8Array(result).set(new Uint8Array(buffer));
                    return result;
                }
                function composeArgs(args, partials, holders) {
                    for (var holdersLength = holders.length, argsIndex = -1, argsLength = nativeMax(args.length - holdersLength, 0), leftIndex = -1, leftLength = partials.length, result = Array(leftLength + argsLength); ++leftIndex < leftLength; ) result[leftIndex] = partials[leftIndex];
                    for (;++argsIndex < holdersLength; ) result[holders[argsIndex]] = args[argsIndex];
                    for (;argsLength--; ) result[leftIndex++] = args[argsIndex++];
                    return result;
                }
                function composeArgsRight(args, partials, holders) {
                    for (var holdersIndex = -1, holdersLength = holders.length, argsIndex = -1, argsLength = nativeMax(args.length - holdersLength, 0), rightIndex = -1, rightLength = partials.length, result = Array(argsLength + rightLength); ++argsIndex < argsLength; ) result[argsIndex] = args[argsIndex];
                    for (var offset = argsIndex; ++rightIndex < rightLength; ) result[offset + rightIndex] = partials[rightIndex];
                    for (;++holdersIndex < holdersLength; ) result[offset + holders[holdersIndex]] = args[argsIndex++];
                    return result;
                }
                function createAggregator(setter, initializer) {
                    return function(collection, iteratee, thisArg) {
                        var result = initializer ? initializer() : {};
                        iteratee = getCallback(iteratee, thisArg, 3);
                        if (isArray(collection)) for (var index = -1, length = collection.length; ++index < length; ) {
                            var value = collection[index];
                            setter(result, value, iteratee(value, index, collection), collection);
                        } else baseEach(collection, function(value, key, collection) {
                            setter(result, value, iteratee(value, key, collection), collection);
                        });
                        return result;
                    };
                }
                function createAssigner(assigner) {
                    return restParam(function(object, sources) {
                        var index = -1, length = null == object ? 0 : sources.length, customizer = length > 2 ? sources[length - 2] : undefined, guard = length > 2 ? sources[2] : undefined, thisArg = length > 1 ? sources[length - 1] : undefined;
                        if ("function" == typeof customizer) {
                            customizer = bindCallback(customizer, thisArg, 5);
                            length -= 2;
                        } else {
                            customizer = "function" == typeof thisArg ? thisArg : undefined;
                            length -= customizer ? 1 : 0;
                        }
                        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
                            customizer = length < 3 ? undefined : customizer;
                            length = 1;
                        }
                        for (;++index < length; ) {
                            var source = sources[index];
                            if (source) assigner(object, source, customizer);
                        }
                        return object;
                    });
                }
                function createBaseEach(eachFunc, fromRight) {
                    return function(collection, iteratee) {
                        var length = collection ? getLength(collection) : 0;
                        if (!isLength(length)) return eachFunc(collection, iteratee);
                        for (var index = fromRight ? length : -1, iterable = toObject(collection); (fromRight ? index-- : ++index < length) && !1 !== iteratee(iterable[index], index, iterable); ) ;
                        return collection;
                    };
                }
                function createBaseFor(fromRight) {
                    return function(object, iteratee, keysFunc) {
                        for (var iterable = toObject(object), props = keysFunc(object), length = props.length, index = fromRight ? length : -1; fromRight ? index-- : ++index < length; ) {
                            var key = props[index];
                            if (!1 === iteratee(iterable[key], key, iterable)) break;
                        }
                        return object;
                    };
                }
                function createBindWrapper(func, thisArg) {
                    function wrapper() {
                        return (this && this !== root && this instanceof wrapper ? Ctor : func).apply(thisArg, arguments);
                    }
                    var Ctor = createCtorWrapper(func);
                    return wrapper;
                }
                function createCache(values) {
                    return nativeCreate && Set ? new SetCache(values) : null;
                }
                function createCompounder(callback) {
                    return function(string) {
                        for (var index = -1, array = words(deburr(string)), length = array.length, result = ""; ++index < length; ) result = callback(result, array[index], index);
                        return result;
                    };
                }
                function createCtorWrapper(Ctor) {
                    return function() {
                        var args = arguments;
                        switch (args.length) {
                          case 0:
                            return new Ctor();

                          case 1:
                            return new Ctor(args[0]);

                          case 2:
                            return new Ctor(args[0], args[1]);

                          case 3:
                            return new Ctor(args[0], args[1], args[2]);

                          case 4:
                            return new Ctor(args[0], args[1], args[2], args[3]);

                          case 5:
                            return new Ctor(args[0], args[1], args[2], args[3], args[4]);

                          case 6:
                            return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);

                          case 7:
                            return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
                        }
                        var thisBinding = baseCreate(Ctor.prototype), result = Ctor.apply(thisBinding, args);
                        return isObject(result) ? result : thisBinding;
                    };
                }
                function createCurry(flag) {
                    function curryFunc(func, arity, guard) {
                        if (guard && isIterateeCall(func, arity, guard)) arity = undefined;
                        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
                        result.placeholder = curryFunc.placeholder;
                        return result;
                    }
                    return curryFunc;
                }
                function createDefaults(assigner, customizer) {
                    return restParam(function(args) {
                        var object = args[0];
                        if (null == object) return object;
                        args.push(customizer);
                        return assigner.apply(undefined, args);
                    });
                }
                function createExtremum(comparator, exValue) {
                    return function(collection, iteratee, thisArg) {
                        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) iteratee = undefined;
                        iteratee = getCallback(iteratee, thisArg, 3);
                        if (1 == iteratee.length) {
                            collection = isArray(collection) ? collection : toIterable(collection);
                            var result = arrayExtremum(collection, iteratee, comparator, exValue);
                            if (!collection.length || result !== exValue) return result;
                        }
                        return baseExtremum(collection, iteratee, comparator, exValue);
                    };
                }
                function createFind(eachFunc, fromRight) {
                    return function(collection, predicate, thisArg) {
                        predicate = getCallback(predicate, thisArg, 3);
                        if (isArray(collection)) {
                            var index = baseFindIndex(collection, predicate, fromRight);
                            return index > -1 ? collection[index] : undefined;
                        }
                        return baseFind(collection, predicate, eachFunc);
                    };
                }
                function createFindIndex(fromRight) {
                    return function(array, predicate, thisArg) {
                        if (!array || !array.length) return -1;
                        predicate = getCallback(predicate, thisArg, 3);
                        return baseFindIndex(array, predicate, fromRight);
                    };
                }
                function createFindKey(objectFunc) {
                    return function(object, predicate, thisArg) {
                        predicate = getCallback(predicate, thisArg, 3);
                        return baseFind(object, predicate, objectFunc, !0);
                    };
                }
                function createFlow(fromRight) {
                    return function() {
                        for (var wrapper, length = arguments.length, index = fromRight ? length : -1, leftIndex = 0, funcs = Array(length); fromRight ? index-- : ++index < length; ) {
                            var func = funcs[leftIndex++] = arguments[index];
                            if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
                            if (!wrapper && LodashWrapper.prototype.thru && "wrapper" == getFuncName(func)) wrapper = new LodashWrapper([], !0);
                        }
                        index = wrapper ? -1 : length;
                        for (;++index < length; ) {
                            func = funcs[index];
                            var funcName = getFuncName(func), data = "wrapper" == funcName ? getData(func) : undefined;
                            if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && 1 == data[9]) wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); else wrapper = 1 == func.length && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);
                        }
                        return function() {
                            var args = arguments, value = args[0];
                            if (wrapper && 1 == args.length && isArray(value) && value.length >= LARGE_ARRAY_SIZE) return wrapper.plant(value).value();
                            for (var index = 0, result = length ? funcs[index].apply(this, args) : value; ++index < length; ) result = funcs[index].call(this, result);
                            return result;
                        };
                    };
                }
                function createForEach(arrayFunc, eachFunc) {
                    return function(collection, iteratee, thisArg) {
                        return "function" == typeof iteratee && thisArg === undefined && isArray(collection) ? arrayFunc(collection, iteratee) : eachFunc(collection, bindCallback(iteratee, thisArg, 3));
                    };
                }
                function createForIn(objectFunc) {
                    return function(object, iteratee, thisArg) {
                        if ("function" != typeof iteratee || thisArg !== undefined) iteratee = bindCallback(iteratee, thisArg, 3);
                        return objectFunc(object, iteratee, keysIn);
                    };
                }
                function createForOwn(objectFunc) {
                    return function(object, iteratee, thisArg) {
                        if ("function" != typeof iteratee || thisArg !== undefined) iteratee = bindCallback(iteratee, thisArg, 3);
                        return objectFunc(object, iteratee);
                    };
                }
                function createObjectMapper(isMapKeys) {
                    return function(object, iteratee, thisArg) {
                        var result = {};
                        iteratee = getCallback(iteratee, thisArg, 3);
                        baseForOwn(object, function(value, key, object) {
                            var mapped = iteratee(value, key, object);
                            key = isMapKeys ? mapped : key;
                            value = isMapKeys ? value : mapped;
                            result[key] = value;
                        });
                        return result;
                    };
                }
                function createPadDir(fromRight) {
                    return function(string, length, chars) {
                        string = baseToString(string);
                        return (fromRight ? string : "") + createPadding(string, length, chars) + (fromRight ? "" : string);
                    };
                }
                function createPartial(flag) {
                    var partialFunc = restParam(function(func, partials) {
                        var holders = replaceHolders(partials, partialFunc.placeholder);
                        return createWrapper(func, flag, undefined, partials, holders);
                    });
                    return partialFunc;
                }
                function createReduce(arrayFunc, eachFunc) {
                    return function(collection, iteratee, accumulator, thisArg) {
                        var initFromArray = arguments.length < 3;
                        return "function" == typeof iteratee && thisArg === undefined && isArray(collection) ? arrayFunc(collection, iteratee, accumulator, initFromArray) : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
                    };
                }
                function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
                    function wrapper() {
                        for (var length = arguments.length, index = length, args = Array(length); index--; ) args[index] = arguments[index];
                        if (partials) args = composeArgs(args, partials, holders);
                        if (partialsRight) args = composeArgsRight(args, partialsRight, holdersRight);
                        if (isCurry || isCurryRight) {
                            var placeholder = wrapper.placeholder, argsHolders = replaceHolders(args, placeholder);
                            length -= argsHolders.length;
                            if (length < arity) {
                                var newArgPos = argPos ? arrayCopy(argPos) : undefined, newArity = nativeMax(arity - length, 0), newsHolders = isCurry ? argsHolders : undefined, newHoldersRight = isCurry ? undefined : argsHolders, newPartials = isCurry ? args : undefined, newPartialsRight = isCurry ? undefined : args;
                                bitmask |= isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG;
                                bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
                                if (!isCurryBound) bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
                                var newData = [ func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity ], result = createHybridWrapper.apply(undefined, newData);
                                if (isLaziable(func)) setData(result, newData);
                                result.placeholder = placeholder;
                                return result;
                            }
                        }
                        var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func;
                        if (argPos) args = reorder(args, argPos);
                        if (isAry && ary < args.length) args.length = ary;
                        if (this && this !== root && this instanceof wrapper) fn = Ctor || createCtorWrapper(func);
                        return fn.apply(thisBinding, args);
                    }
                    var isAry = bitmask & ARY_FLAG, isBind = bitmask & BIND_FLAG, isBindKey = bitmask & BIND_KEY_FLAG, isCurry = bitmask & CURRY_FLAG, isCurryBound = bitmask & CURRY_BOUND_FLAG, isCurryRight = bitmask & CURRY_RIGHT_FLAG, Ctor = isBindKey ? undefined : createCtorWrapper(func);
                    return wrapper;
                }
                function createPadding(string, length, chars) {
                    var strLength = string.length;
                    length = +length;
                    if (strLength >= length || !nativeIsFinite(length)) return "";
                    var padLength = length - strLength;
                    chars = null == chars ? " " : chars + "";
                    return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);
                }
                function createPartialWrapper(func, bitmask, thisArg, partials) {
                    function wrapper() {
                        for (var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array(leftLength + argsLength); ++leftIndex < leftLength; ) args[leftIndex] = partials[leftIndex];
                        for (;argsLength--; ) args[leftIndex++] = arguments[++argsIndex];
                        return (this && this !== root && this instanceof wrapper ? Ctor : func).apply(isBind ? thisArg : this, args);
                    }
                    var isBind = bitmask & BIND_FLAG, Ctor = createCtorWrapper(func);
                    return wrapper;
                }
                function createRound(methodName) {
                    var func = Math[methodName];
                    return function(number, precision) {
                        precision = precision === undefined ? 0 : +precision || 0;
                        if (precision) {
                            precision = pow(10, precision);
                            return func(number * precision) / precision;
                        }
                        return func(number);
                    };
                }
                function createSortedIndex(retHighest) {
                    return function(array, value, iteratee, thisArg) {
                        var callback = getCallback(iteratee);
                        return null == iteratee && callback === baseCallback ? binaryIndex(array, value, retHighest) : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);
                    };
                }
                function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
                    var isBindKey = bitmask & BIND_KEY_FLAG;
                    if (!isBindKey && "function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
                    var length = partials ? partials.length : 0;
                    if (!length) {
                        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
                        partials = holders = undefined;
                    }
                    length -= holders ? holders.length : 0;
                    if (bitmask & PARTIAL_RIGHT_FLAG) {
                        var partialsRight = partials, holdersRight = holders;
                        partials = holders = undefined;
                    }
                    var data = isBindKey ? undefined : getData(func), newData = [ func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity ];
                    if (data) {
                        mergeData(newData, data);
                        bitmask = newData[1];
                        arity = newData[9];
                    }
                    newData[9] = null == arity ? isBindKey ? 0 : func.length : nativeMax(arity - length, 0) || 0;
                    if (bitmask == BIND_FLAG) var result = createBindWrapper(newData[0], newData[2]); else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) result = createPartialWrapper.apply(undefined, newData); else result = createHybridWrapper.apply(undefined, newData);
                    return (data ? baseSetData : setData)(result, newData);
                }
                function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
                    var index = -1, arrLength = array.length, othLength = other.length;
                    if (arrLength != othLength && !(isLoose && othLength > arrLength)) return !1;
                    for (;++index < arrLength; ) {
                        var arrValue = array[index], othValue = other[index], result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
                        if (result !== undefined) {
                            if (result) continue;
                            return !1;
                        }
                        if (isLoose) {
                            if (!arraySome(other, function(othValue) {
                                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
                            })) return !1;
                        } else if (arrValue !== othValue && !equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB)) return !1;
                    }
                    return !0;
                }
                function equalByTag(object, other, tag) {
                    switch (tag) {
                      case boolTag:
                      case dateTag:
                        return +object == +other;

                      case errorTag:
                        return object.name == other.name && object.message == other.message;

                      case numberTag:
                        return object != +object ? other != +other : object == +other;

                      case regexpTag:
                      case stringTag:
                        return object == other + "";
                    }
                    return !1;
                }
                function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
                    var objProps = keys(object), objLength = objProps.length;
                    if (objLength != keys(other).length && !isLoose) return !1;
                    for (var index = objLength; index--; ) {
                        var key = objProps[index];
                        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) return !1;
                    }
                    for (var skipCtor = isLoose; ++index < objLength; ) {
                        key = objProps[index];
                        var objValue = object[key], othValue = other[key], result = customizer ? customizer(isLoose ? othValue : objValue, isLoose ? objValue : othValue, key) : undefined;
                        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) return !1;
                        skipCtor || (skipCtor = "constructor" == key);
                    }
                    if (!skipCtor) {
                        var objCtor = object.constructor, othCtor = other.constructor;
                        if (objCtor != othCtor && "constructor" in object && "constructor" in other && !("function" == typeof objCtor && objCtor instanceof objCtor && "function" == typeof othCtor && othCtor instanceof othCtor)) return !1;
                    }
                    return !0;
                }
                function getCallback(func, thisArg, argCount) {
                    var result = lodash.callback || callback;
                    result = result === callback ? baseCallback : result;
                    return argCount ? result(func, thisArg, argCount) : result;
                }
                function getFuncName(func) {
                    for (var result = func.name, array = realNames[result], length = array ? array.length : 0; length--; ) {
                        var data = array[length], otherFunc = data.func;
                        if (null == otherFunc || otherFunc == func) return data.name;
                    }
                    return result;
                }
                function getIndexOf(collection, target, fromIndex) {
                    var result = lodash.indexOf || indexOf;
                    result = result === indexOf ? baseIndexOf : result;
                    return collection ? result(collection, target, fromIndex) : result;
                }
                function getMatchData(object) {
                    for (var result = pairs(object), length = result.length; length--; ) result[length][2] = isStrictComparable(result[length][1]);
                    return result;
                }
                function getNative(object, key) {
                    var value = null == object ? undefined : object[key];
                    return isNative(value) ? value : undefined;
                }
                function getView(start, end, transforms) {
                    for (var index = -1, length = transforms.length; ++index < length; ) {
                        var data = transforms[index], size = data.size;
                        switch (data.type) {
                          case "drop":
                            start += size;
                            break;

                          case "dropRight":
                            end -= size;
                            break;

                          case "take":
                            end = nativeMin(end, start + size);
                            break;

                          case "takeRight":
                            start = nativeMax(start, end - size);
                        }
                    }
                    return {
                        start: start,
                        end: end
                    };
                }
                function initCloneArray(array) {
                    var length = array.length, result = new array.constructor(length);
                    if (length && "string" == typeof array[0] && hasOwnProperty.call(array, "index")) {
                        result.index = array.index;
                        result.input = array.input;
                    }
                    return result;
                }
                function initCloneObject(object) {
                    var Ctor = object.constructor;
                    if (!("function" == typeof Ctor && Ctor instanceof Ctor)) Ctor = Object;
                    return new Ctor();
                }
                function initCloneByTag(object, tag, isDeep) {
                    var Ctor = object.constructor;
                    switch (tag) {
                      case arrayBufferTag:
                        return bufferClone(object);

                      case boolTag:
                      case dateTag:
                        return new Ctor(+object);

                      case float32Tag:
                      case float64Tag:
                      case int8Tag:
                      case int16Tag:
                      case int32Tag:
                      case uint8Tag:
                      case uint8ClampedTag:
                      case uint16Tag:
                      case uint32Tag:
                        var buffer = object.buffer;
                        return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);

                      case numberTag:
                      case stringTag:
                        return new Ctor(object);

                      case regexpTag:
                        var result = new Ctor(object.source, reFlags.exec(object));
                        result.lastIndex = object.lastIndex;
                    }
                    return result;
                }
                function invokePath(object, path, args) {
                    if (null != object && !isKey(path, object)) {
                        path = toPath(path);
                        object = 1 == path.length ? object : baseGet(object, baseSlice(path, 0, -1));
                        path = last(path);
                    }
                    var func = null == object ? object : object[path];
                    return null == func ? undefined : func.apply(object, args);
                }
                function isArrayLike(value) {
                    return null != value && isLength(getLength(value));
                }
                function isIndex(value, length) {
                    value = "number" == typeof value || reIsUint.test(value) ? +value : -1;
                    length = null == length ? MAX_SAFE_INTEGER : length;
                    return value > -1 && value % 1 == 0 && value < length;
                }
                function isIterateeCall(value, index, object) {
                    if (!isObject(object)) return !1;
                    var type = typeof index;
                    if ("number" == type ? isArrayLike(object) && isIndex(index, object.length) : "string" == type && index in object) {
                        var other = object[index];
                        return value === value ? value === other : other !== other;
                    }
                    return !1;
                }
                function isKey(value, object) {
                    var type = typeof value;
                    if ("string" == type && reIsPlainProp.test(value) || "number" == type) return !0;
                    if (isArray(value)) return !1; else return !reIsDeepProp.test(value) || null != object && value in toObject(object);
                }
                function isLaziable(func) {
                    var funcName = getFuncName(func);
                    if (!(funcName in LazyWrapper.prototype)) return !1;
                    var other = lodash[funcName];
                    if (func === other) return !0;
                    var data = getData(other);
                    return !!data && func === data[0];
                }
                function isLength(value) {
                    return "number" == typeof value && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
                }
                function isStrictComparable(value) {
                    return value === value && !isObject(value);
                }
                function mergeData(data, source) {
                    var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < ARY_FLAG, isCombo = srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG || srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8] || srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG;
                    if (!isCommon && !isCombo) return data;
                    if (srcBitmask & BIND_FLAG) {
                        data[2] = source[2];
                        newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG;
                    }
                    var value = source[3];
                    if (value) {
                        var partials = data[3];
                        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);
                        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);
                    }
                    value = source[5];
                    if (value) {
                        partials = data[5];
                        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);
                        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);
                    }
                    value = source[7];
                    if (value) data[7] = arrayCopy(value);
                    if (srcBitmask & ARY_FLAG) data[8] = null == data[8] ? source[8] : nativeMin(data[8], source[8]);
                    if (null == data[9]) data[9] = source[9];
                    data[0] = source[0];
                    data[1] = newBitmask;
                    return data;
                }
                function mergeDefaults(objectValue, sourceValue) {
                    return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);
                }
                function pickByArray(object, props) {
                    object = toObject(object);
                    for (var index = -1, length = props.length, result = {}; ++index < length; ) {
                        var key = props[index];
                        if (key in object) result[key] = object[key];
                    }
                    return result;
                }
                function pickByCallback(object, predicate) {
                    var result = {};
                    baseForIn(object, function(value, key, object) {
                        if (predicate(value, key, object)) result[key] = value;
                    });
                    return result;
                }
                function reorder(array, indexes) {
                    for (var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = arrayCopy(array); length--; ) {
                        var index = indexes[length];
                        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
                    }
                    return array;
                }
                function shimKeys(object) {
                    for (var props = keysIn(object), propsLength = props.length, length = propsLength && object.length, allowIndexes = !!length && isLength(length) && (isArray(object) || isArguments(object)), index = -1, result = []; ++index < propsLength; ) {
                        var key = props[index];
                        if (allowIndexes && isIndex(key, length) || hasOwnProperty.call(object, key)) result.push(key);
                    }
                    return result;
                }
                function toIterable(value) {
                    if (null == value) return [];
                    if (!isArrayLike(value)) return values(value); else return isObject(value) ? value : Object(value);
                }
                function toObject(value) {
                    return isObject(value) ? value : Object(value);
                }
                function toPath(value) {
                    if (isArray(value)) return value;
                    var result = [];
                    baseToString(value).replace(rePropName, function(match, number, quote, string) {
                        result.push(quote ? string.replace(reEscapeChar, "$1") : number || match);
                    });
                    return result;
                }
                function wrapperClone(wrapper) {
                    return wrapper instanceof LazyWrapper ? wrapper.clone() : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));
                }
                function chunk(array, size, guard) {
                    if (guard ? isIterateeCall(array, size, guard) : null == size) size = 1; else size = nativeMax(nativeFloor(size) || 1, 1);
                    for (var index = 0, length = array ? array.length : 0, resIndex = -1, result = Array(nativeCeil(length / size)); index < length; ) result[++resIndex] = baseSlice(array, index, index += size);
                    return result;
                }
                function compact(array) {
                    for (var index = -1, length = array ? array.length : 0, resIndex = -1, result = []; ++index < length; ) {
                        var value = array[index];
                        if (value) result[++resIndex] = value;
                    }
                    return result;
                }
                function drop(array, n, guard) {
                    if (!(array ? array.length : 0)) return [];
                    if (guard ? isIterateeCall(array, n, guard) : null == n) n = 1;
                    return baseSlice(array, n < 0 ? 0 : n);
                }
                function dropRight(array, n, guard) {
                    var length = array ? array.length : 0;
                    if (!length) return [];
                    if (guard ? isIterateeCall(array, n, guard) : null == n) n = 1;
                    n = length - (+n || 0);
                    return baseSlice(array, 0, n < 0 ? 0 : n);
                }
                function dropRightWhile(array, predicate, thisArg) {
                    return array && array.length ? baseWhile(array, getCallback(predicate, thisArg, 3), !0, !0) : [];
                }
                function dropWhile(array, predicate, thisArg) {
                    return array && array.length ? baseWhile(array, getCallback(predicate, thisArg, 3), !0) : [];
                }
                function fill(array, value, start, end) {
                    var length = array ? array.length : 0;
                    if (!length) return [];
                    if (start && "number" != typeof start && isIterateeCall(array, value, start)) {
                        start = 0;
                        end = length;
                    }
                    return baseFill(array, value, start, end);
                }
                function first(array) {
                    return array ? array[0] : undefined;
                }
                function flatten(array, isDeep, guard) {
                    var length = array ? array.length : 0;
                    if (guard && isIterateeCall(array, isDeep, guard)) isDeep = !1;
                    return length ? baseFlatten(array, isDeep) : [];
                }
                function flattenDeep(array) {
                    return (array ? array.length : 0) ? baseFlatten(array, !0) : [];
                }
                function indexOf(array, value, fromIndex) {
                    var length = array ? array.length : 0;
                    if (!length) return -1;
                    if ("number" == typeof fromIndex) fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; else if (fromIndex) {
                        var index = binaryIndex(array, value);
                        if (index < length && (value === value ? value === array[index] : array[index] !== array[index])) return index; else return -1;
                    }
                    return baseIndexOf(array, value, fromIndex || 0);
                }
                function initial(array) {
                    return dropRight(array, 1);
                }
                function last(array) {
                    var length = array ? array.length : 0;
                    return length ? array[length - 1] : undefined;
                }
                function lastIndexOf(array, value, fromIndex) {
                    var length = array ? array.length : 0;
                    if (!length) return -1;
                    var index = length;
                    if ("number" == typeof fromIndex) index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; else if (fromIndex) {
                        index = binaryIndex(array, value, !0) - 1;
                        var other = array[index];
                        if (value === value ? value === other : other !== other) return index; else return -1;
                    }
                    if (value !== value) return indexOfNaN(array, index, !0);
                    for (;index--; ) if (array[index] === value) return index;
                    return -1;
                }
                function pull() {
                    var args = arguments, array = args[0];
                    if (!array || !array.length) return array;
                    for (var index = 0, indexOf = getIndexOf(), length = args.length; ++index < length; ) for (var fromIndex = 0, value = args[index]; (fromIndex = indexOf(array, value, fromIndex)) > -1; ) splice.call(array, fromIndex, 1);
                    return array;
                }
                function remove(array, predicate, thisArg) {
                    var result = [];
                    if (!array || !array.length) return result;
                    var index = -1, indexes = [], length = array.length;
                    predicate = getCallback(predicate, thisArg, 3);
                    for (;++index < length; ) {
                        var value = array[index];
                        if (predicate(value, index, array)) {
                            result.push(value);
                            indexes.push(index);
                        }
                    }
                    basePullAt(array, indexes);
                    return result;
                }
                function rest(array) {
                    return drop(array, 1);
                }
                function slice(array, start, end) {
                    var length = array ? array.length : 0;
                    if (!length) return [];
                    if (end && "number" != typeof end && isIterateeCall(array, start, end)) {
                        start = 0;
                        end = length;
                    }
                    return baseSlice(array, start, end);
                }
                function take(array, n, guard) {
                    if (!(array ? array.length : 0)) return [];
                    if (guard ? isIterateeCall(array, n, guard) : null == n) n = 1;
                    return baseSlice(array, 0, n < 0 ? 0 : n);
                }
                function takeRight(array, n, guard) {
                    var length = array ? array.length : 0;
                    if (!length) return [];
                    if (guard ? isIterateeCall(array, n, guard) : null == n) n = 1;
                    n = length - (+n || 0);
                    return baseSlice(array, n < 0 ? 0 : n);
                }
                function takeRightWhile(array, predicate, thisArg) {
                    return array && array.length ? baseWhile(array, getCallback(predicate, thisArg, 3), !1, !0) : [];
                }
                function takeWhile(array, predicate, thisArg) {
                    return array && array.length ? baseWhile(array, getCallback(predicate, thisArg, 3)) : [];
                }
                function uniq(array, isSorted, iteratee, thisArg) {
                    if (!(array ? array.length : 0)) return [];
                    if (null != isSorted && "boolean" != typeof isSorted) {
                        thisArg = iteratee;
                        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
                        isSorted = !1;
                    }
                    var callback = getCallback();
                    if (null != iteratee || callback !== baseCallback) iteratee = callback(iteratee, thisArg, 3);
                    return isSorted && getIndexOf() == baseIndexOf ? sortedUniq(array, iteratee) : baseUniq(array, iteratee);
                }
                function unzip(array) {
                    if (!array || !array.length) return [];
                    var index = -1, length = 0;
                    array = arrayFilter(array, function(group) {
                        if (isArrayLike(group)) {
                            length = nativeMax(group.length, length);
                            return !0;
                        }
                    });
                    for (var result = Array(length); ++index < length; ) result[index] = arrayMap(array, baseProperty(index));
                    return result;
                }
                function unzipWith(array, iteratee, thisArg) {
                    if (!(array ? array.length : 0)) return [];
                    var result = unzip(array);
                    if (null == iteratee) return result;
                    iteratee = bindCallback(iteratee, thisArg, 4);
                    return arrayMap(result, function(group) {
                        return arrayReduce(group, iteratee, undefined, !0);
                    });
                }
                function xor() {
                    for (var index = -1, length = arguments.length; ++index < length; ) {
                        var array = arguments[index];
                        if (isArrayLike(array)) var result = result ? arrayPush(baseDifference(result, array), baseDifference(array, result)) : array;
                    }
                    return result ? baseUniq(result) : [];
                }
                function zipObject(props, values) {
                    var index = -1, length = props ? props.length : 0, result = {};
                    if (length && !values && !isArray(props[0])) values = [];
                    for (;++index < length; ) {
                        var key = props[index];
                        if (values) result[key] = values[index]; else if (key) result[key[0]] = key[1];
                    }
                    return result;
                }
                function chain(value) {
                    var result = lodash(value);
                    result.__chain__ = !0;
                    return result;
                }
                function tap(value, interceptor, thisArg) {
                    interceptor.call(thisArg, value);
                    return value;
                }
                function thru(value, interceptor, thisArg) {
                    return interceptor.call(thisArg, value);
                }
                function wrapperChain() {
                    return chain(this);
                }
                function wrapperCommit() {
                    return new LodashWrapper(this.value(), this.__chain__);
                }
                function wrapperPlant(value) {
                    for (var result, parent = this; parent instanceof baseLodash; ) {
                        var clone = wrapperClone(parent);
                        if (result) previous.__wrapped__ = clone; else result = clone;
                        var previous = clone;
                        parent = parent.__wrapped__;
                    }
                    previous.__wrapped__ = value;
                    return result;
                }
                function wrapperReverse() {
                    var value = this.__wrapped__, interceptor = function(value) {
                        return wrapped && wrapped.__dir__ < 0 ? value : value.reverse();
                    };
                    if (value instanceof LazyWrapper) {
                        var wrapped = value;
                        if (this.__actions__.length) wrapped = new LazyWrapper(this);
                        wrapped = wrapped.reverse();
                        wrapped.__actions__.push({
                            func: thru,
                            args: [ interceptor ],
                            thisArg: undefined
                        });
                        return new LodashWrapper(wrapped, this.__chain__);
                    }
                    return this.thru(interceptor);
                }
                function wrapperToString() {
                    return this.value() + "";
                }
                function wrapperValue() {
                    return baseWrapperValue(this.__wrapped__, this.__actions__);
                }
                function every(collection, predicate, thisArg) {
                    var func = isArray(collection) ? arrayEvery : baseEvery;
                    if (thisArg && isIterateeCall(collection, predicate, thisArg)) predicate = undefined;
                    if ("function" != typeof predicate || thisArg !== undefined) predicate = getCallback(predicate, thisArg, 3);
                    return func(collection, predicate);
                }
                function filter(collection, predicate, thisArg) {
                    var func = isArray(collection) ? arrayFilter : baseFilter;
                    predicate = getCallback(predicate, thisArg, 3);
                    return func(collection, predicate);
                }
                function findWhere(collection, source) {
                    return find(collection, baseMatches(source));
                }
                function includes(collection, target, fromIndex, guard) {
                    var length = collection ? getLength(collection) : 0;
                    if (!isLength(length)) {
                        collection = values(collection);
                        length = collection.length;
                    }
                    if ("number" != typeof fromIndex || guard && isIterateeCall(target, fromIndex, guard)) fromIndex = 0; else fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex || 0;
                    return "string" == typeof collection || !isArray(collection) && isString(collection) ? fromIndex <= length && collection.indexOf(target, fromIndex) > -1 : !!length && getIndexOf(collection, target, fromIndex) > -1;
                }
                function map(collection, iteratee, thisArg) {
                    var func = isArray(collection) ? arrayMap : baseMap;
                    iteratee = getCallback(iteratee, thisArg, 3);
                    return func(collection, iteratee);
                }
                function pluck(collection, path) {
                    return map(collection, property(path));
                }
                function reject(collection, predicate, thisArg) {
                    var func = isArray(collection) ? arrayFilter : baseFilter;
                    predicate = getCallback(predicate, thisArg, 3);
                    return func(collection, function(value, index, collection) {
                        return !predicate(value, index, collection);
                    });
                }
                function sample(collection, n, guard) {
                    if (guard ? isIterateeCall(collection, n, guard) : null == n) {
                        collection = toIterable(collection);
                        var length = collection.length;
                        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
                    }
                    var index = -1, result = toArray(collection), length = result.length, lastIndex = length - 1;
                    n = nativeMin(n < 0 ? 0 : +n || 0, length);
                    for (;++index < n; ) {
                        var rand = baseRandom(index, lastIndex), value = result[rand];
                        result[rand] = result[index];
                        result[index] = value;
                    }
                    result.length = n;
                    return result;
                }
                function shuffle(collection) {
                    return sample(collection, POSITIVE_INFINITY);
                }
                function size(collection) {
                    var length = collection ? getLength(collection) : 0;
                    return isLength(length) ? length : keys(collection).length;
                }
                function some(collection, predicate, thisArg) {
                    var func = isArray(collection) ? arraySome : baseSome;
                    if (thisArg && isIterateeCall(collection, predicate, thisArg)) predicate = undefined;
                    if ("function" != typeof predicate || thisArg !== undefined) predicate = getCallback(predicate, thisArg, 3);
                    return func(collection, predicate);
                }
                function sortBy(collection, iteratee, thisArg) {
                    if (null == collection) return [];
                    if (thisArg && isIterateeCall(collection, iteratee, thisArg)) iteratee = undefined;
                    var index = -1;
                    iteratee = getCallback(iteratee, thisArg, 3);
                    return baseSortBy(baseMap(collection, function(value, key, collection) {
                        return {
                            criteria: iteratee(value, key, collection),
                            index: ++index,
                            value: value
                        };
                    }), compareAscending);
                }
                function sortByOrder(collection, iteratees, orders, guard) {
                    if (null == collection) return [];
                    if (guard && isIterateeCall(iteratees, orders, guard)) orders = undefined;
                    if (!isArray(iteratees)) iteratees = null == iteratees ? [] : [ iteratees ];
                    if (!isArray(orders)) orders = null == orders ? [] : [ orders ];
                    return baseSortByOrder(collection, iteratees, orders);
                }
                function where(collection, source) {
                    return filter(collection, baseMatches(source));
                }
                function after(n, func) {
                    if ("function" != typeof func) if ("function" == typeof n) {
                        var temp = n;
                        n = func;
                        func = temp;
                    } else throw new TypeError(FUNC_ERROR_TEXT);
                    n = nativeIsFinite(n = +n) ? n : 0;
                    return function() {
                        if (--n < 1) return func.apply(this, arguments);
                    };
                }
                function ary(func, n, guard) {
                    if (guard && isIterateeCall(func, n, guard)) n = undefined;
                    n = func && null == n ? func.length : nativeMax(+n || 0, 0);
                    return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
                }
                function before(n, func) {
                    var result;
                    if ("function" != typeof func) if ("function" == typeof n) {
                        var temp = n;
                        n = func;
                        func = temp;
                    } else throw new TypeError(FUNC_ERROR_TEXT);
                    return function() {
                        if (--n > 0) result = func.apply(this, arguments);
                        if (n <= 1) func = undefined;
                        return result;
                    };
                }
                function debounce(func, wait, options) {
                    function cancel() {
                        if (timeoutId) clearTimeout(timeoutId);
                        if (maxTimeoutId) clearTimeout(maxTimeoutId);
                        lastCalled = 0;
                        maxTimeoutId = timeoutId = trailingCall = undefined;
                    }
                    function complete(isCalled, id) {
                        if (id) clearTimeout(id);
                        maxTimeoutId = timeoutId = trailingCall = undefined;
                        if (isCalled) {
                            lastCalled = now();
                            result = func.apply(thisArg, args);
                            if (!timeoutId && !maxTimeoutId) args = thisArg = undefined;
                        }
                    }
                    function delayed() {
                        var remaining = wait - (now() - stamp);
                        if (remaining <= 0 || remaining > wait) complete(trailingCall, maxTimeoutId); else timeoutId = setTimeout(delayed, remaining);
                    }
                    function maxDelayed() {
                        complete(trailing, timeoutId);
                    }
                    function debounced() {
                        args = arguments;
                        stamp = now();
                        thisArg = this;
                        trailingCall = trailing && (timeoutId || !leading);
                        if (!1 === maxWait) var leadingCall = leading && !timeoutId; else {
                            if (!maxTimeoutId && !leading) lastCalled = stamp;
                            var remaining = maxWait - (stamp - lastCalled), isCalled = remaining <= 0 || remaining > maxWait;
                            if (isCalled) {
                                if (maxTimeoutId) maxTimeoutId = clearTimeout(maxTimeoutId);
                                lastCalled = stamp;
                                result = func.apply(thisArg, args);
                            } else if (!maxTimeoutId) maxTimeoutId = setTimeout(maxDelayed, remaining);
                        }
                        if (isCalled && timeoutId) timeoutId = clearTimeout(timeoutId); else if (!timeoutId && wait !== maxWait) timeoutId = setTimeout(delayed, wait);
                        if (leadingCall) {
                            isCalled = !0;
                            result = func.apply(thisArg, args);
                        }
                        if (isCalled && !timeoutId && !maxTimeoutId) args = thisArg = undefined;
                        return result;
                    }
                    var args, maxTimeoutId, result, stamp, thisArg, timeoutId, trailingCall, lastCalled = 0, maxWait = !1, trailing = !0;
                    if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
                    wait = wait < 0 ? 0 : +wait || 0;
                    if (!0 === options) {
                        var leading = !0;
                        trailing = !1;
                    } else if (isObject(options)) {
                        leading = !!options.leading;
                        maxWait = "maxWait" in options && nativeMax(+options.maxWait || 0, wait);
                        trailing = "trailing" in options ? !!options.trailing : trailing;
                    }
                    debounced.cancel = cancel;
                    return debounced;
                }
                function memoize(func, resolver) {
                    if ("function" != typeof func || resolver && "function" != typeof resolver) throw new TypeError(FUNC_ERROR_TEXT);
                    var memoized = function() {
                        var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
                        if (cache.has(key)) return cache.get(key);
                        var result = func.apply(this, args);
                        memoized.cache = cache.set(key, result);
                        return result;
                    };
                    memoized.cache = new memoize.Cache();
                    return memoized;
                }
                function negate(predicate) {
                    if ("function" != typeof predicate) throw new TypeError(FUNC_ERROR_TEXT);
                    return function() {
                        return !predicate.apply(this, arguments);
                    };
                }
                function once(func) {
                    return before(2, func);
                }
                function restParam(func, start) {
                    if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
                    start = nativeMax(start === undefined ? func.length - 1 : +start || 0, 0);
                    return function() {
                        for (var args = arguments, index = -1, length = nativeMax(args.length - start, 0), rest = Array(length); ++index < length; ) rest[index] = args[start + index];
                        switch (start) {
                          case 0:
                            return func.call(this, rest);

                          case 1:
                            return func.call(this, args[0], rest);

                          case 2:
                            return func.call(this, args[0], args[1], rest);
                        }
                        var otherArgs = Array(start + 1);
                        index = -1;
                        for (;++index < start; ) otherArgs[index] = args[index];
                        otherArgs[start] = rest;
                        return func.apply(this, otherArgs);
                    };
                }
                function spread(func) {
                    if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
                    return function(array) {
                        return func.apply(this, array);
                    };
                }
                function throttle(func, wait, options) {
                    var leading = !0, trailing = !0;
                    if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
                    if (!1 === options) leading = !1; else if (isObject(options)) {
                        leading = "leading" in options ? !!options.leading : leading;
                        trailing = "trailing" in options ? !!options.trailing : trailing;
                    }
                    return debounce(func, wait, {
                        leading: leading,
                        maxWait: +wait,
                        trailing: trailing
                    });
                }
                function wrap(value, wrapper) {
                    wrapper = null == wrapper ? identity : wrapper;
                    return createWrapper(wrapper, PARTIAL_FLAG, undefined, [ value ], []);
                }
                function clone(value, isDeep, customizer, thisArg) {
                    if (isDeep && "boolean" != typeof isDeep && isIterateeCall(value, isDeep, customizer)) isDeep = !1; else if ("function" == typeof isDeep) {
                        thisArg = customizer;
                        customizer = isDeep;
                        isDeep = !1;
                    }
                    return "function" == typeof customizer ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) : baseClone(value, isDeep);
                }
                function cloneDeep(value, customizer, thisArg) {
                    return "function" == typeof customizer ? baseClone(value, !0, bindCallback(customizer, thisArg, 1)) : baseClone(value, !0);
                }
                function gt(value, other) {
                    return value > other;
                }
                function gte(value, other) {
                    return value >= other;
                }
                function isArguments(value) {
                    return isObjectLike(value) && isArrayLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
                }
                function isBoolean(value) {
                    return !0 === value || !1 === value || isObjectLike(value) && objToString.call(value) == boolTag;
                }
                function isDate(value) {
                    return isObjectLike(value) && objToString.call(value) == dateTag;
                }
                function isElement(value) {
                    return !!value && 1 === value.nodeType && isObjectLike(value) && !isPlainObject(value);
                }
                function isEmpty(value) {
                    if (null == value) return !0;
                    if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || isObjectLike(value) && isFunction(value.splice))) return !value.length; else return !keys(value).length;
                }
                function isEqual(value, other, customizer, thisArg) {
                    customizer = "function" == typeof customizer ? bindCallback(customizer, thisArg, 3) : undefined;
                    var result = customizer ? customizer(value, other) : undefined;
                    return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
                }
                function isError(value) {
                    return isObjectLike(value) && "string" == typeof value.message && objToString.call(value) == errorTag;
                }
                function isFinite(value) {
                    return "number" == typeof value && nativeIsFinite(value);
                }
                function isFunction(value) {
                    return isObject(value) && objToString.call(value) == funcTag;
                }
                function isObject(value) {
                    var type = typeof value;
                    return !!value && ("object" == type || "function" == type);
                }
                function isMatch(object, source, customizer, thisArg) {
                    customizer = "function" == typeof customizer ? bindCallback(customizer, thisArg, 3) : undefined;
                    return baseIsMatch(object, getMatchData(source), customizer);
                }
                function isNaN(value) {
                    return isNumber(value) && value != +value;
                }
                function isNative(value) {
                    if (null == value) return !1;
                    if (isFunction(value)) return reIsNative.test(fnToString.call(value)); else return isObjectLike(value) && reIsHostCtor.test(value);
                }
                function isNull(value) {
                    return null === value;
                }
                function isNumber(value) {
                    return "number" == typeof value || isObjectLike(value) && objToString.call(value) == numberTag;
                }
                function isPlainObject(value) {
                    var Ctor;
                    if (!isObjectLike(value) || objToString.call(value) != objectTag || isArguments(value) || !hasOwnProperty.call(value, "constructor") && "function" == typeof (Ctor = value.constructor) && !(Ctor instanceof Ctor)) return !1;
                    var result;
                    baseForIn(value, function(subValue, key) {
                        result = key;
                    });
                    return result === undefined || hasOwnProperty.call(value, result);
                }
                function isRegExp(value) {
                    return isObject(value) && objToString.call(value) == regexpTag;
                }
                function isString(value) {
                    return "string" == typeof value || isObjectLike(value) && objToString.call(value) == stringTag;
                }
                function isTypedArray(value) {
                    return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
                }
                function isUndefined(value) {
                    return value === undefined;
                }
                function lt(value, other) {
                    return value < other;
                }
                function lte(value, other) {
                    return value <= other;
                }
                function toArray(value) {
                    var length = value ? getLength(value) : 0;
                    if (!isLength(length)) return values(value);
                    if (!length) return []; else return arrayCopy(value);
                }
                function toPlainObject(value) {
                    return baseCopy(value, keysIn(value));
                }
                function create(prototype, properties, guard) {
                    var result = baseCreate(prototype);
                    if (guard && isIterateeCall(prototype, properties, guard)) properties = undefined;
                    return properties ? baseAssign(result, properties) : result;
                }
                function functions(object) {
                    return baseFunctions(object, keysIn(object));
                }
                function get(object, path, defaultValue) {
                    var result = null == object ? undefined : baseGet(object, toPath(path), path + "");
                    return result === undefined ? defaultValue : result;
                }
                function has(object, path) {
                    if (null == object) return !1;
                    var result = hasOwnProperty.call(object, path);
                    if (!result && !isKey(path)) {
                        path = toPath(path);
                        object = 1 == path.length ? object : baseGet(object, baseSlice(path, 0, -1));
                        if (null == object) return !1;
                        path = last(path);
                        result = hasOwnProperty.call(object, path);
                    }
                    return result || isLength(object.length) && isIndex(path, object.length) && (isArray(object) || isArguments(object));
                }
                function invert(object, multiValue, guard) {
                    if (guard && isIterateeCall(object, multiValue, guard)) multiValue = undefined;
                    for (var index = -1, props = keys(object), length = props.length, result = {}; ++index < length; ) {
                        var key = props[index], value = object[key];
                        if (multiValue) if (hasOwnProperty.call(result, value)) result[value].push(key); else result[value] = [ key ]; else result[value] = key;
                    }
                    return result;
                }
                function keysIn(object) {
                    if (null == object) return [];
                    if (!isObject(object)) object = Object(object);
                    var length = object.length;
                    length = length && isLength(length) && (isArray(object) || isArguments(object)) && length || 0;
                    for (var Ctor = object.constructor, index = -1, isProto = "function" == typeof Ctor && Ctor.prototype === object, result = Array(length), skipIndexes = length > 0; ++index < length; ) result[index] = index + "";
                    for (var key in object) if ((!skipIndexes || !isIndex(key, length)) && ("constructor" != key || !isProto && hasOwnProperty.call(object, key))) result.push(key);
                    return result;
                }
                function pairs(object) {
                    object = toObject(object);
                    for (var index = -1, props = keys(object), length = props.length, result = Array(length); ++index < length; ) {
                        var key = props[index];
                        result[index] = [ key, object[key] ];
                    }
                    return result;
                }
                function result(object, path, defaultValue) {
                    var result = null == object ? undefined : object[path];
                    if (result === undefined) {
                        if (null != object && !isKey(path, object)) {
                            path = toPath(path);
                            object = 1 == path.length ? object : baseGet(object, baseSlice(path, 0, -1));
                            result = null == object ? undefined : object[last(path)];
                        }
                        result = result === undefined ? defaultValue : result;
                    }
                    return isFunction(result) ? result.call(object) : result;
                }
                function set(object, path, value) {
                    if (null == object) return object;
                    var pathKey = path + "";
                    path = null != object[pathKey] || isKey(path, object) ? [ pathKey ] : toPath(path);
                    for (var index = -1, length = path.length, lastIndex = length - 1, nested = object; null != nested && ++index < length; ) {
                        var key = path[index];
                        if (isObject(nested)) if (index == lastIndex) nested[key] = value; else if (null == nested[key]) nested[key] = isIndex(path[index + 1]) ? [] : {};
                        nested = nested[key];
                    }
                    return object;
                }
                function transform(object, iteratee, accumulator, thisArg) {
                    var isArr = isArray(object) || isTypedArray(object);
                    iteratee = getCallback(iteratee, thisArg, 4);
                    if (null == accumulator) if (isArr || isObject(object)) {
                        var Ctor = object.constructor;
                        if (isArr) accumulator = isArray(object) ? new Ctor() : []; else accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
                    } else accumulator = {};
                    (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {
                        return iteratee(accumulator, value, index, object);
                    });
                    return accumulator;
                }
                function values(object) {
                    return baseValues(object, keys(object));
                }
                function valuesIn(object) {
                    return baseValues(object, keysIn(object));
                }
                function inRange(value, start, end) {
                    start = +start || 0;
                    if (end === undefined) {
                        end = start;
                        start = 0;
                    } else end = +end || 0;
                    return value >= nativeMin(start, end) && value < nativeMax(start, end);
                }
                function random(min, max, floating) {
                    if (floating && isIterateeCall(min, max, floating)) max = floating = undefined;
                    var noMin = null == min, noMax = null == max;
                    if (null == floating) if (noMax && "boolean" == typeof min) {
                        floating = min;
                        min = 1;
                    } else if ("boolean" == typeof max) {
                        floating = max;
                        noMax = !0;
                    }
                    if (noMin && noMax) {
                        max = 1;
                        noMax = !1;
                    }
                    min = +min || 0;
                    if (noMax) {
                        max = min;
                        min = 0;
                    } else max = +max || 0;
                    if (floating || min % 1 || max % 1) {
                        var rand = nativeRandom();
                        return nativeMin(min + rand * (max - min + parseFloat("1e-" + ((rand + "").length - 1))), max);
                    }
                    return baseRandom(min, max);
                }
                function capitalize(string) {
                    string = baseToString(string);
                    return string && string.charAt(0).toUpperCase() + string.slice(1);
                }
                function deburr(string) {
                    string = baseToString(string);
                    return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, "");
                }
                function endsWith(string, target, position) {
                    string = baseToString(string);
                    target += "";
                    var length = string.length;
                    position = position === undefined ? length : nativeMin(position < 0 ? 0 : +position || 0, length);
                    position -= target.length;
                    return position >= 0 && string.indexOf(target, position) == position;
                }
                function escape(string) {
                    string = baseToString(string);
                    return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
                }
                function escapeRegExp(string) {
                    string = baseToString(string);
                    return string && reHasRegExpChars.test(string) ? string.replace(reRegExpChars, escapeRegExpChar) : string || "(?:)";
                }
                function pad(string, length, chars) {
                    string = baseToString(string);
                    length = +length;
                    var strLength = string.length;
                    if (strLength >= length || !nativeIsFinite(length)) return string;
                    var mid = (length - strLength) / 2, leftLength = nativeFloor(mid);
                    chars = createPadding("", nativeCeil(mid), chars);
                    return chars.slice(0, leftLength) + string + chars;
                }
                function parseInt(string, radix, guard) {
                    if (guard ? isIterateeCall(string, radix, guard) : null == radix) radix = 0; else if (radix) radix = +radix;
                    string = trim(string);
                    return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
                }
                function repeat(string, n) {
                    var result = "";
                    string = baseToString(string);
                    n = +n;
                    if (n < 1 || !string || !nativeIsFinite(n)) return result;
                    do {
                        if (n % 2) result += string;
                        n = nativeFloor(n / 2);
                        string += string;
                    } while (n);
                    return result;
                }
                function startsWith(string, target, position) {
                    string = baseToString(string);
                    position = null == position ? 0 : nativeMin(position < 0 ? 0 : +position || 0, string.length);
                    return string.lastIndexOf(target, position) == position;
                }
                function template(string, options, otherOptions) {
                    var settings = lodash.templateSettings;
                    if (otherOptions && isIterateeCall(string, options, otherOptions)) options = otherOptions = undefined;
                    string = baseToString(string);
                    options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);
                    var isEscaping, isEvaluating, imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys), index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '", reDelimiters = RegExp((options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$", "g"), sourceURL = "//# sourceURL=" + ("sourceURL" in options ? options.sourceURL : "lodash.templateSources[" + ++templateCounter + "]") + "\n";
                    string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
                        interpolateValue || (interpolateValue = esTemplateValue);
                        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
                        if (escapeValue) {
                            isEscaping = !0;
                            source += "' +\n__e(" + escapeValue + ") +\n'";
                        }
                        if (evaluateValue) {
                            isEvaluating = !0;
                            source += "';\n" + evaluateValue + ";\n__p += '";
                        }
                        if (interpolateValue) source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
                        index = offset + match.length;
                        return match;
                    });
                    source += "';\n";
                    var variable = options.variable;
                    if (!variable) source = "with (obj) {\n" + source + "\n}\n";
                    source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;");
                    source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}";
                    var result = attempt(function() {
                        return Function(importsKeys, sourceURL + "return " + source).apply(undefined, importsValues);
                    });
                    result.source = source;
                    if (isError(result)) throw result;
                    return result;
                }
                function trim(string, chars, guard) {
                    var value = string;
                    string = baseToString(string);
                    if (!string) return string;
                    if (guard ? isIterateeCall(value, chars, guard) : null == chars) return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);
                    chars += "";
                    return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);
                }
                function trimLeft(string, chars, guard) {
                    var value = string;
                    string = baseToString(string);
                    if (!string) return string;
                    if (guard ? isIterateeCall(value, chars, guard) : null == chars) return string.slice(trimmedLeftIndex(string)); else return string.slice(charsLeftIndex(string, chars + ""));
                }
                function trimRight(string, chars, guard) {
                    var value = string;
                    string = baseToString(string);
                    if (!string) return string;
                    if (guard ? isIterateeCall(value, chars, guard) : null == chars) return string.slice(0, trimmedRightIndex(string) + 1); else return string.slice(0, charsRightIndex(string, chars + "") + 1);
                }
                function trunc(string, options, guard) {
                    if (guard && isIterateeCall(string, options, guard)) options = undefined;
                    var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION;
                    if (null != options) if (isObject(options)) {
                        var separator = "separator" in options ? options.separator : separator;
                        length = "length" in options ? +options.length || 0 : length;
                        omission = "omission" in options ? baseToString(options.omission) : omission;
                    } else length = +options || 0;
                    string = baseToString(string);
                    if (length >= string.length) return string;
                    var end = length - omission.length;
                    if (end < 1) return omission;
                    var result = string.slice(0, end);
                    if (null == separator) return result + omission;
                    if (isRegExp(separator)) {
                        if (string.slice(end).search(separator)) {
                            var match, newEnd, substring = string.slice(0, end);
                            if (!separator.global) separator = RegExp(separator.source, (reFlags.exec(separator) || "") + "g");
                            separator.lastIndex = 0;
                            for (;match = separator.exec(substring); ) newEnd = match.index;
                            result = result.slice(0, null == newEnd ? end : newEnd);
                        }
                    } else if (string.indexOf(separator, end) != end) {
                        var index = result.lastIndexOf(separator);
                        if (index > -1) result = result.slice(0, index);
                    }
                    return result + omission;
                }
                function unescape(string) {
                    string = baseToString(string);
                    return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string;
                }
                function words(string, pattern, guard) {
                    if (guard && isIterateeCall(string, pattern, guard)) pattern = undefined;
                    string = baseToString(string);
                    return string.match(pattern || reWords) || [];
                }
                function callback(func, thisArg, guard) {
                    if (guard && isIterateeCall(func, thisArg, guard)) thisArg = undefined;
                    return isObjectLike(func) ? matches(func) : baseCallback(func, thisArg);
                }
                function constant(value) {
                    return function() {
                        return value;
                    };
                }
                function identity(value) {
                    return value;
                }
                function matches(source) {
                    return baseMatches(baseClone(source, !0));
                }
                function matchesProperty(path, srcValue) {
                    return baseMatchesProperty(path, baseClone(srcValue, !0));
                }
                function mixin(object, source, options) {
                    if (null == options) {
                        var isObj = isObject(source), props = isObj ? keys(source) : undefined, methodNames = props && props.length ? baseFunctions(source, props) : undefined;
                        if (!(methodNames ? methodNames.length : isObj)) {
                            methodNames = !1;
                            options = source;
                            source = object;
                            object = this;
                        }
                    }
                    if (!methodNames) methodNames = baseFunctions(source, keys(source));
                    var chain = !0, index = -1, isFunc = isFunction(object), length = methodNames.length;
                    if (!1 === options) chain = !1; else if (isObject(options) && "chain" in options) chain = options.chain;
                    for (;++index < length; ) {
                        var methodName = methodNames[index], func = source[methodName];
                        object[methodName] = func;
                        if (isFunc) object.prototype[methodName] = function(func) {
                            return function() {
                                var chainAll = this.__chain__;
                                if (chain || chainAll) {
                                    var result = object(this.__wrapped__);
                                    (result.__actions__ = arrayCopy(this.__actions__)).push({
                                        func: func,
                                        args: arguments,
                                        thisArg: object
                                    });
                                    result.__chain__ = chainAll;
                                    return result;
                                }
                                return func.apply(object, arrayPush([ this.value() ], arguments));
                            };
                        }(func);
                    }
                    return object;
                }
                function noConflict() {
                    root._ = oldDash;
                    return this;
                }
                function noop() {}
                function property(path) {
                    return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
                }
                function propertyOf(object) {
                    return function(path) {
                        return baseGet(object, toPath(path), path + "");
                    };
                }
                function range(start, end, step) {
                    if (step && isIterateeCall(start, end, step)) end = step = undefined;
                    start = +start || 0;
                    step = null == step ? 1 : +step || 0;
                    if (null == end) {
                        end = start;
                        start = 0;
                    } else end = +end || 0;
                    for (var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result = Array(length); ++index < length; ) {
                        result[index] = start;
                        start += step;
                    }
                    return result;
                }
                function times(n, iteratee, thisArg) {
                    n = nativeFloor(n);
                    if (n < 1 || !nativeIsFinite(n)) return [];
                    var index = -1, result = Array(nativeMin(n, MAX_ARRAY_LENGTH));
                    iteratee = bindCallback(iteratee, thisArg, 1);
                    for (;++index < n; ) if (index < MAX_ARRAY_LENGTH) result[index] = iteratee(index); else iteratee(index);
                    return result;
                }
                function uniqueId(prefix) {
                    var id = ++idCounter;
                    return baseToString(prefix) + id;
                }
                function add(augend, addend) {
                    return (+augend || 0) + (+addend || 0);
                }
                function sum(collection, iteratee, thisArg) {
                    if (thisArg && isIterateeCall(collection, iteratee, thisArg)) iteratee = undefined;
                    iteratee = getCallback(iteratee, thisArg, 3);
                    return 1 == iteratee.length ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee) : baseSum(collection, iteratee);
                }
                context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
                var Array = context.Array, Date = context.Date, Error = context.Error, Function = context.Function, Math = context.Math, Number = context.Number, Object = context.Object, RegExp = context.RegExp, String = context.String, TypeError = context.TypeError, arrayProto = Array.prototype, objectProto = Object.prototype, stringProto = String.prototype, fnToString = Function.prototype.toString, hasOwnProperty = objectProto.hasOwnProperty, idCounter = 0, objToString = objectProto.toString, oldDash = root._, reIsNative = RegExp("^" + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), ArrayBuffer = context.ArrayBuffer, clearTimeout = context.clearTimeout, parseFloat = context.parseFloat, pow = Math.pow, propertyIsEnumerable = objectProto.propertyIsEnumerable, Set = getNative(context, "Set"), setTimeout = context.setTimeout, splice = arrayProto.splice, Uint8Array = context.Uint8Array, WeakMap = getNative(context, "WeakMap"), nativeCeil = Math.ceil, nativeCreate = getNative(Object, "create"), nativeFloor = Math.floor, nativeIsArray = getNative(Array, "isArray"), nativeIsFinite = context.isFinite, nativeKeys = getNative(Object, "keys"), nativeMax = Math.max, nativeMin = Math.min, nativeNow = getNative(Date, "now"), nativeParseInt = context.parseInt, nativeRandom = Math.random, NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, POSITIVE_INFINITY = Number.POSITIVE_INFINITY, MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1, MAX_SAFE_INTEGER = 9007199254740991, metaMap = WeakMap && new WeakMap(), realNames = {};
                lodash.support = {};
                lodash.templateSettings = {
                    escape: reEscape,
                    evaluate: reEvaluate,
                    interpolate: reInterpolate,
                    variable: "",
                    imports: {
                        _: lodash
                    }
                };
                var baseCreate = function() {
                    function object() {}
                    return function(prototype) {
                        if (isObject(prototype)) {
                            object.prototype = prototype;
                            var result = new object();
                            object.prototype = undefined;
                        }
                        return result || {};
                    };
                }(), baseEach = createBaseEach(baseForOwn), baseEachRight = createBaseEach(baseForOwnRight, !0), baseFor = createBaseFor(), baseForRight = createBaseFor(!0), baseSetData = !metaMap ? identity : function(func, data) {
                    metaMap.set(func, data);
                    return func;
                }, getData = !metaMap ? noop : function(func) {
                    return metaMap.get(func);
                }, getLength = baseProperty("length"), setData = function() {
                    var count = 0, lastCalled = 0;
                    return function(key, value) {
                        var stamp = now(), remaining = HOT_SPAN - (stamp - lastCalled);
                        lastCalled = stamp;
                        if (remaining > 0) {
                            if (++count >= HOT_COUNT) return key;
                        } else count = 0;
                        return baseSetData(key, value);
                    };
                }(), difference = restParam(function(array, values) {
                    return isObjectLike(array) && isArrayLike(array) ? baseDifference(array, baseFlatten(values, !1, !0)) : [];
                }), findIndex = createFindIndex(), findLastIndex = createFindIndex(!0), intersection = restParam(function(arrays) {
                    for (var othLength = arrays.length, othIndex = othLength, caches = Array(length), indexOf = getIndexOf(), isCommon = indexOf == baseIndexOf, result = []; othIndex--; ) {
                        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];
                        caches[othIndex] = isCommon && value.length >= 120 ? createCache(othIndex && value) : null;
                    }
                    var array = arrays[0], index = -1, length = array ? array.length : 0, seen = caches[0];
                    outer: for (;++index < length; ) {
                        value = array[index];
                        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {
                            for (var othIndex = othLength; --othIndex; ) {
                                var cache = caches[othIndex];
                                if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) continue outer;
                            }
                            if (seen) seen.push(value);
                            result.push(value);
                        }
                    }
                    return result;
                }), pullAt = restParam(function(array, indexes) {
                    indexes = baseFlatten(indexes);
                    var result = baseAt(array, indexes);
                    basePullAt(array, indexes.sort(baseCompareAscending));
                    return result;
                }), sortedIndex = createSortedIndex(), sortedLastIndex = createSortedIndex(!0), union = restParam(function(arrays) {
                    return baseUniq(baseFlatten(arrays, !1, !0));
                }), without = restParam(function(array, values) {
                    return isArrayLike(array) ? baseDifference(array, values) : [];
                }), zip = restParam(unzip), zipWith = restParam(function(arrays) {
                    var length = arrays.length, iteratee = length > 2 ? arrays[length - 2] : undefined, thisArg = length > 1 ? arrays[length - 1] : undefined;
                    if (length > 2 && "function" == typeof iteratee) length -= 2; else {
                        iteratee = length > 1 && "function" == typeof thisArg ? (--length, thisArg) : undefined;
                        thisArg = undefined;
                    }
                    arrays.length = length;
                    return unzipWith(arrays, iteratee, thisArg);
                }), wrapperConcat = restParam(function(values) {
                    values = baseFlatten(values);
                    return this.thru(function(array) {
                        return arrayConcat(isArray(array) ? array : [ toObject(array) ], values);
                    });
                }), at = restParam(function(collection, props) {
                    return baseAt(collection, baseFlatten(props));
                }), countBy = createAggregator(function(result, value, key) {
                    hasOwnProperty.call(result, key) ? ++result[key] : result[key] = 1;
                }), find = createFind(baseEach), findLast = createFind(baseEachRight, !0), forEach = createForEach(arrayEach, baseEach), forEachRight = createForEach(arrayEachRight, baseEachRight), groupBy = createAggregator(function(result, value, key) {
                    if (hasOwnProperty.call(result, key)) result[key].push(value); else result[key] = [ value ];
                }), indexBy = createAggregator(function(result, value, key) {
                    result[key] = value;
                }), invoke = restParam(function(collection, path, args) {
                    var index = -1, isFunc = "function" == typeof path, isProp = isKey(path), result = isArrayLike(collection) ? Array(collection.length) : [];
                    baseEach(collection, function(value) {
                        var func = isFunc ? path : isProp && null != value ? value[path] : undefined;
                        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);
                    });
                    return result;
                }), partition = createAggregator(function(result, value, key) {
                    result[key ? 0 : 1].push(value);
                }, function() {
                    return [ [], [] ];
                }), reduce = createReduce(arrayReduce, baseEach), reduceRight = createReduce(arrayReduceRight, baseEachRight), sortByAll = restParam(function(collection, iteratees) {
                    if (null == collection) return [];
                    var guard = iteratees[2];
                    if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) iteratees.length = 1;
                    return baseSortByOrder(collection, baseFlatten(iteratees), []);
                }), now = nativeNow || function() {
                    return new Date().getTime();
                }, bind = restParam(function(func, thisArg, partials) {
                    var bitmask = BIND_FLAG;
                    if (partials.length) {
                        var holders = replaceHolders(partials, bind.placeholder);
                        bitmask |= PARTIAL_FLAG;
                    }
                    return createWrapper(func, bitmask, thisArg, partials, holders);
                }), bindAll = restParam(function(object, methodNames) {
                    methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
                    for (var index = -1, length = methodNames.length; ++index < length; ) {
                        var key = methodNames[index];
                        object[key] = createWrapper(object[key], BIND_FLAG, object);
                    }
                    return object;
                }), bindKey = restParam(function(object, key, partials) {
                    var bitmask = BIND_FLAG | BIND_KEY_FLAG;
                    if (partials.length) {
                        var holders = replaceHolders(partials, bindKey.placeholder);
                        bitmask |= PARTIAL_FLAG;
                    }
                    return createWrapper(key, bitmask, object, partials, holders);
                }), curry = createCurry(CURRY_FLAG), curryRight = createCurry(CURRY_RIGHT_FLAG), defer = restParam(function(func, args) {
                    return baseDelay(func, 1, args);
                }), delay = restParam(function(func, wait, args) {
                    return baseDelay(func, wait, args);
                }), flow = createFlow(), flowRight = createFlow(!0), modArgs = restParam(function(func, transforms) {
                    transforms = baseFlatten(transforms);
                    if ("function" != typeof func || !arrayEvery(transforms, baseIsFunction)) throw new TypeError(FUNC_ERROR_TEXT);
                    var length = transforms.length;
                    return restParam(function(args) {
                        for (var index = nativeMin(args.length, length); index--; ) args[index] = transforms[index](args[index]);
                        return func.apply(this, args);
                    });
                }), partial = createPartial(PARTIAL_FLAG), partialRight = createPartial(PARTIAL_RIGHT_FLAG), rearg = restParam(function(func, indexes) {
                    return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));
                }), isArray = nativeIsArray || function(value) {
                    return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
                }, merge = createAssigner(baseMerge), assign = createAssigner(function(object, source, customizer) {
                    return customizer ? assignWith(object, source, customizer) : baseAssign(object, source);
                }), defaults = createDefaults(assign, assignDefaults), defaultsDeep = createDefaults(merge, mergeDefaults), findKey = createFindKey(baseForOwn), findLastKey = createFindKey(baseForOwnRight), forIn = createForIn(baseFor), forInRight = createForIn(baseForRight), forOwn = createForOwn(baseForOwn), forOwnRight = createForOwn(baseForOwnRight), keys = !nativeKeys ? shimKeys : function(object) {
                    var Ctor = null == object ? undefined : object.constructor;
                    if ("function" == typeof Ctor && Ctor.prototype === object || "function" != typeof object && isArrayLike(object)) return shimKeys(object); else return isObject(object) ? nativeKeys(object) : [];
                }, mapKeys = createObjectMapper(!0), mapValues = createObjectMapper(), omit = restParam(function(object, props) {
                    if (null == object) return {};
                    if ("function" != typeof props[0]) {
                        var props = arrayMap(baseFlatten(props), String);
                        return pickByArray(object, baseDifference(keysIn(object), props));
                    }
                    var predicate = bindCallback(props[0], props[1], 3);
                    return pickByCallback(object, function(value, key, object) {
                        return !predicate(value, key, object);
                    });
                }), pick = restParam(function(object, props) {
                    if (null == object) return {}; else return "function" == typeof props[0] ? pickByCallback(object, bindCallback(props[0], props[1], 3)) : pickByArray(object, baseFlatten(props));
                }), camelCase = createCompounder(function(result, word, index) {
                    word = word.toLowerCase();
                    return result + (index ? word.charAt(0).toUpperCase() + word.slice(1) : word);
                }), kebabCase = createCompounder(function(result, word, index) {
                    return result + (index ? "-" : "") + word.toLowerCase();
                }), padLeft = createPadDir(), padRight = createPadDir(!0), snakeCase = createCompounder(function(result, word, index) {
                    return result + (index ? "_" : "") + word.toLowerCase();
                }), startCase = createCompounder(function(result, word, index) {
                    return result + (index ? " " : "") + (word.charAt(0).toUpperCase() + word.slice(1));
                }), attempt = restParam(function(func, args) {
                    try {
                        return func.apply(undefined, args);
                    } catch (e) {
                        return isError(e) ? e : new Error(e);
                    }
                }), method = restParam(function(path, args) {
                    return function(object) {
                        return invokePath(object, path, args);
                    };
                }), methodOf = restParam(function(object, args) {
                    return function(path) {
                        return invokePath(object, path, args);
                    };
                }), ceil = createRound("ceil"), floor = createRound("floor"), max = createExtremum(gt, NEGATIVE_INFINITY), min = createExtremum(lt, POSITIVE_INFINITY), round = createRound("round");
                lodash.prototype = baseLodash.prototype;
                LodashWrapper.prototype = baseCreate(baseLodash.prototype);
                LodashWrapper.prototype.constructor = LodashWrapper;
                LazyWrapper.prototype = baseCreate(baseLodash.prototype);
                LazyWrapper.prototype.constructor = LazyWrapper;
                MapCache.prototype["delete"] = mapDelete;
                MapCache.prototype.get = mapGet;
                MapCache.prototype.has = mapHas;
                MapCache.prototype.set = mapSet;
                SetCache.prototype.push = cachePush;
                memoize.Cache = MapCache;
                lodash.after = after;
                lodash.ary = ary;
                lodash.assign = assign;
                lodash.at = at;
                lodash.before = before;
                lodash.bind = bind;
                lodash.bindAll = bindAll;
                lodash.bindKey = bindKey;
                lodash.callback = callback;
                lodash.chain = chain;
                lodash.chunk = chunk;
                lodash.compact = compact;
                lodash.constant = constant;
                lodash.countBy = countBy;
                lodash.create = create;
                lodash.curry = curry;
                lodash.curryRight = curryRight;
                lodash.debounce = debounce;
                lodash.defaults = defaults;
                lodash.defaultsDeep = defaultsDeep;
                lodash.defer = defer;
                lodash.delay = delay;
                lodash.difference = difference;
                lodash.drop = drop;
                lodash.dropRight = dropRight;
                lodash.dropRightWhile = dropRightWhile;
                lodash.dropWhile = dropWhile;
                lodash.fill = fill;
                lodash.filter = filter;
                lodash.flatten = flatten;
                lodash.flattenDeep = flattenDeep;
                lodash.flow = flow;
                lodash.flowRight = flowRight;
                lodash.forEach = forEach;
                lodash.forEachRight = forEachRight;
                lodash.forIn = forIn;
                lodash.forInRight = forInRight;
                lodash.forOwn = forOwn;
                lodash.forOwnRight = forOwnRight;
                lodash.functions = functions;
                lodash.groupBy = groupBy;
                lodash.indexBy = indexBy;
                lodash.initial = initial;
                lodash.intersection = intersection;
                lodash.invert = invert;
                lodash.invoke = invoke;
                lodash.keys = keys;
                lodash.keysIn = keysIn;
                lodash.map = map;
                lodash.mapKeys = mapKeys;
                lodash.mapValues = mapValues;
                lodash.matches = matches;
                lodash.matchesProperty = matchesProperty;
                lodash.memoize = memoize;
                lodash.merge = merge;
                lodash.method = method;
                lodash.methodOf = methodOf;
                lodash.mixin = mixin;
                lodash.modArgs = modArgs;
                lodash.negate = negate;
                lodash.omit = omit;
                lodash.once = once;
                lodash.pairs = pairs;
                lodash.partial = partial;
                lodash.partialRight = partialRight;
                lodash.partition = partition;
                lodash.pick = pick;
                lodash.pluck = pluck;
                lodash.property = property;
                lodash.propertyOf = propertyOf;
                lodash.pull = pull;
                lodash.pullAt = pullAt;
                lodash.range = range;
                lodash.rearg = rearg;
                lodash.reject = reject;
                lodash.remove = remove;
                lodash.rest = rest;
                lodash.restParam = restParam;
                lodash.set = set;
                lodash.shuffle = shuffle;
                lodash.slice = slice;
                lodash.sortBy = sortBy;
                lodash.sortByAll = sortByAll;
                lodash.sortByOrder = sortByOrder;
                lodash.spread = spread;
                lodash.take = take;
                lodash.takeRight = takeRight;
                lodash.takeRightWhile = takeRightWhile;
                lodash.takeWhile = takeWhile;
                lodash.tap = tap;
                lodash.throttle = throttle;
                lodash.thru = thru;
                lodash.times = times;
                lodash.toArray = toArray;
                lodash.toPlainObject = toPlainObject;
                lodash.transform = transform;
                lodash.union = union;
                lodash.uniq = uniq;
                lodash.unzip = unzip;
                lodash.unzipWith = unzipWith;
                lodash.values = values;
                lodash.valuesIn = valuesIn;
                lodash.where = where;
                lodash.without = without;
                lodash.wrap = wrap;
                lodash.xor = xor;
                lodash.zip = zip;
                lodash.zipObject = zipObject;
                lodash.zipWith = zipWith;
                lodash.backflow = flowRight;
                lodash.collect = map;
                lodash.compose = flowRight;
                lodash.each = forEach;
                lodash.eachRight = forEachRight;
                lodash.extend = assign;
                lodash.iteratee = callback;
                lodash.methods = functions;
                lodash.object = zipObject;
                lodash.select = filter;
                lodash.tail = rest;
                lodash.unique = uniq;
                mixin(lodash, lodash);
                lodash.add = add;
                lodash.attempt = attempt;
                lodash.camelCase = camelCase;
                lodash.capitalize = capitalize;
                lodash.ceil = ceil;
                lodash.clone = clone;
                lodash.cloneDeep = cloneDeep;
                lodash.deburr = deburr;
                lodash.endsWith = endsWith;
                lodash.escape = escape;
                lodash.escapeRegExp = escapeRegExp;
                lodash.every = every;
                lodash.find = find;
                lodash.findIndex = findIndex;
                lodash.findKey = findKey;
                lodash.findLast = findLast;
                lodash.findLastIndex = findLastIndex;
                lodash.findLastKey = findLastKey;
                lodash.findWhere = findWhere;
                lodash.first = first;
                lodash.floor = floor;
                lodash.get = get;
                lodash.gt = gt;
                lodash.gte = gte;
                lodash.has = has;
                lodash.identity = identity;
                lodash.includes = includes;
                lodash.indexOf = indexOf;
                lodash.inRange = inRange;
                lodash.isArguments = isArguments;
                lodash.isArray = isArray;
                lodash.isBoolean = isBoolean;
                lodash.isDate = isDate;
                lodash.isElement = isElement;
                lodash.isEmpty = isEmpty;
                lodash.isEqual = isEqual;
                lodash.isError = isError;
                lodash.isFinite = isFinite;
                lodash.isFunction = isFunction;
                lodash.isMatch = isMatch;
                lodash.isNaN = isNaN;
                lodash.isNative = isNative;
                lodash.isNull = isNull;
                lodash.isNumber = isNumber;
                lodash.isObject = isObject;
                lodash.isPlainObject = isPlainObject;
                lodash.isRegExp = isRegExp;
                lodash.isString = isString;
                lodash.isTypedArray = isTypedArray;
                lodash.isUndefined = isUndefined;
                lodash.kebabCase = kebabCase;
                lodash.last = last;
                lodash.lastIndexOf = lastIndexOf;
                lodash.lt = lt;
                lodash.lte = lte;
                lodash.max = max;
                lodash.min = min;
                lodash.noConflict = noConflict;
                lodash.noop = noop;
                lodash.now = now;
                lodash.pad = pad;
                lodash.padLeft = padLeft;
                lodash.padRight = padRight;
                lodash.parseInt = parseInt;
                lodash.random = random;
                lodash.reduce = reduce;
                lodash.reduceRight = reduceRight;
                lodash.repeat = repeat;
                lodash.result = result;
                lodash.round = round;
                lodash.runInContext = runInContext;
                lodash.size = size;
                lodash.snakeCase = snakeCase;
                lodash.some = some;
                lodash.sortedIndex = sortedIndex;
                lodash.sortedLastIndex = sortedLastIndex;
                lodash.startCase = startCase;
                lodash.startsWith = startsWith;
                lodash.sum = sum;
                lodash.template = template;
                lodash.trim = trim;
                lodash.trimLeft = trimLeft;
                lodash.trimRight = trimRight;
                lodash.trunc = trunc;
                lodash.unescape = unescape;
                lodash.uniqueId = uniqueId;
                lodash.words = words;
                lodash.all = every;
                lodash.any = some;
                lodash.contains = includes;
                lodash.eq = isEqual;
                lodash.detect = find;
                lodash.foldl = reduce;
                lodash.foldr = reduceRight;
                lodash.head = first;
                lodash.include = includes;
                lodash.inject = reduce;
                mixin(lodash, function() {
                    var source = {};
                    baseForOwn(lodash, function(func, methodName) {
                        if (!lodash.prototype[methodName]) source[methodName] = func;
                    });
                    return source;
                }(), !1);
                lodash.sample = sample;
                lodash.prototype.sample = function(n) {
                    if (!this.__chain__ && null == n) return sample(this.value()); else return this.thru(function(value) {
                        return sample(value, n);
                    });
                };
                lodash.VERSION = VERSION;
                arrayEach([ "bind", "bindKey", "curry", "curryRight", "partial", "partialRight" ], function(methodName) {
                    lodash[methodName].placeholder = lodash;
                });
                arrayEach([ "drop", "take" ], function(methodName, index) {
                    LazyWrapper.prototype[methodName] = function(n) {
                        var filtered = this.__filtered__;
                        if (filtered && !index) return new LazyWrapper(this);
                        n = null == n ? 1 : nativeMax(nativeFloor(n) || 0, 0);
                        var result = this.clone();
                        if (filtered) result.__takeCount__ = nativeMin(result.__takeCount__, n); else result.__views__.push({
                            size: n,
                            type: methodName + (result.__dir__ < 0 ? "Right" : "")
                        });
                        return result;
                    };
                    LazyWrapper.prototype[methodName + "Right"] = function(n) {
                        return this.reverse()[methodName](n).reverse();
                    };
                });
                arrayEach([ "filter", "map", "takeWhile" ], function(methodName, index) {
                    var type = index + 1, isFilter = type != LAZY_MAP_FLAG;
                    LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {
                        var result = this.clone();
                        result.__iteratees__.push({
                            iteratee: getCallback(iteratee, thisArg, 1),
                            type: type
                        });
                        result.__filtered__ = result.__filtered__ || isFilter;
                        return result;
                    };
                });
                arrayEach([ "first", "last" ], function(methodName, index) {
                    var takeName = "take" + (index ? "Right" : "");
                    LazyWrapper.prototype[methodName] = function() {
                        return this[takeName](1).value()[0];
                    };
                });
                arrayEach([ "initial", "rest" ], function(methodName, index) {
                    var dropName = "drop" + (index ? "" : "Right");
                    LazyWrapper.prototype[methodName] = function() {
                        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
                    };
                });
                arrayEach([ "pluck", "where" ], function(methodName, index) {
                    var operationName = index ? "filter" : "map", createCallback = index ? baseMatches : property;
                    LazyWrapper.prototype[methodName] = function(value) {
                        return this[operationName](createCallback(value));
                    };
                });
                LazyWrapper.prototype.compact = function() {
                    return this.filter(identity);
                };
                LazyWrapper.prototype.reject = function(predicate, thisArg) {
                    predicate = getCallback(predicate, thisArg, 1);
                    return this.filter(function(value) {
                        return !predicate(value);
                    });
                };
                LazyWrapper.prototype.slice = function(start, end) {
                    start = null == start ? 0 : +start || 0;
                    var result = this;
                    if (result.__filtered__ && (start > 0 || end < 0)) return new LazyWrapper(result);
                    if (start < 0) result = result.takeRight(-start); else if (start) result = result.drop(start);
                    if (end !== undefined) {
                        end = +end || 0;
                        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
                    }
                    return result;
                };
                LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {
                    return this.reverse().takeWhile(predicate, thisArg).reverse();
                };
                LazyWrapper.prototype.toArray = function() {
                    return this.take(POSITIVE_INFINITY);
                };
                baseForOwn(LazyWrapper.prototype, function(func, methodName) {
                    var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName), retUnwrapped = /^(?:first|last)$/.test(methodName), lodashFunc = lodash[retUnwrapped ? "take" + ("last" == methodName ? "Right" : "") : methodName];
                    if (lodashFunc) lodash.prototype[methodName] = function() {
                        var args = retUnwrapped ? [ 1 ] : arguments, chainAll = this.__chain__, value = this.__wrapped__, isHybrid = !!this.__actions__.length, isLazy = value instanceof LazyWrapper, iteratee = args[0], useLazy = isLazy || isArray(value);
                        if (useLazy && checkIteratee && "function" == typeof iteratee && 1 != iteratee.length) isLazy = useLazy = !1;
                        var interceptor = function(value) {
                            return retUnwrapped && chainAll ? lodashFunc(value, 1)[0] : lodashFunc.apply(undefined, arrayPush([ value ], args));
                        }, action = {
                            func: thru,
                            args: [ interceptor ],
                            thisArg: undefined
                        }, onlyLazy = isLazy && !isHybrid;
                        if (retUnwrapped && !chainAll) {
                            if (onlyLazy) {
                                value = value.clone();
                                value.__actions__.push(action);
                                return func.call(value);
                            }
                            return lodashFunc.call(undefined, this.value())[0];
                        }
                        if (!retUnwrapped && useLazy) {
                            value = onlyLazy ? value : new LazyWrapper(this);
                            var result = func.apply(value, args);
                            result.__actions__.push(action);
                            return new LodashWrapper(result, chainAll);
                        }
                        return this.thru(interceptor);
                    };
                });
                arrayEach([ "join", "pop", "push", "replace", "shift", "sort", "splice", "split", "unshift" ], function(methodName) {
                    var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);
                    lodash.prototype[methodName] = function() {
                        var args = arguments;
                        if (retUnwrapped && !this.__chain__) return func.apply(this.value(), args); else return this[chainName](function(value) {
                            return func.apply(value, args);
                        });
                    };
                });
                baseForOwn(LazyWrapper.prototype, function(func, methodName) {
                    var lodashFunc = lodash[methodName];
                    if (lodashFunc) {
                        var key = lodashFunc.name;
                        (realNames[key] || (realNames[key] = [])).push({
                            name: methodName,
                            func: lodashFunc
                        });
                    }
                });
                realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [ {
                    name: "wrapper",
                    func: undefined
                } ];
                LazyWrapper.prototype.clone = lazyClone;
                LazyWrapper.prototype.reverse = lazyReverse;
                LazyWrapper.prototype.value = lazyValue;
                lodash.prototype.chain = wrapperChain;
                lodash.prototype.commit = wrapperCommit;
                lodash.prototype.concat = wrapperConcat;
                lodash.prototype.plant = wrapperPlant;
                lodash.prototype.reverse = wrapperReverse;
                lodash.prototype.toString = wrapperToString;
                lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
                lodash.prototype.collect = lodash.prototype.map;
                lodash.prototype.head = lodash.prototype.first;
                lodash.prototype.select = lodash.prototype.filter;
                lodash.prototype.tail = lodash.prototype.rest;
                return lodash;
            }
            var undefined, VERSION = "3.10.1", BIND_FLAG = 1, BIND_KEY_FLAG = 2, CURRY_BOUND_FLAG = 4, CURRY_FLAG = 8, CURRY_RIGHT_FLAG = 16, PARTIAL_FLAG = 32, PARTIAL_RIGHT_FLAG = 64, ARY_FLAG = 128, REARG_FLAG = 256, DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...", HOT_COUNT = 150, HOT_SPAN = 16, LARGE_ARRAY_SIZE = 200, LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, FUNC_ERROR_TEXT = "Expected a function", PLACEHOLDER = "__lodash_placeholder__", argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", numberTag = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", stringTag = "[object String]", arrayBufferTag = "[object ArrayBuffer]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]", reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g, reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, reUnescapedHtml = /[&<>"'`]/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source), reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g, reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g, reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, reHasRegExpChars = RegExp(reRegExpChars.source), reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g, reEscapeChar = /\\(\\)?/g, reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, reFlags = /\w*$/, reHasHexPrefix = /^0[xX]/, reIsHostCtor = /^\[object .+?Constructor\]$/, reIsUint = /^\d+$/, reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g, reNoMatch = /($^)/, reUnescapedString = /['\n\r\u2028\u2029\\]/g, reWords = function() {
                var upper = "[A-Z\\xc0-\\xd6\\xd8-\\xde]", lower = "[a-z\\xdf-\\xf6\\xf8-\\xff]+";
                return RegExp(upper + "+(?=" + upper + lower + ")|" + upper + "?" + lower + "|" + upper + "+|[0-9]+", "g");
            }(), contextProps = [ "Array", "ArrayBuffer", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Math", "Number", "Object", "RegExp", "Set", "String", "_", "clearTimeout", "isFinite", "parseFloat", "parseInt", "setTimeout", "TypeError", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap" ], templateCounter = -1, typedArrayTags = {};
            typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = !0;
            typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags["[object Map]"] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags["[object Set]"] = typedArrayTags[stringTag] = typedArrayTags["[object WeakMap]"] = !1;
            var cloneableTags = {};
            cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[stringTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = !0;
            cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags["[object Map]"] = cloneableTags["[object Set]"] = cloneableTags["[object WeakMap]"] = !1;
            var deburredLetters = {
                "À": "A",
                "Á": "A",
                "Â": "A",
                "Ã": "A",
                "Ä": "A",
                "Å": "A",
                "à": "a",
                "á": "a",
                "â": "a",
                "ã": "a",
                "ä": "a",
                "å": "a",
                "Ç": "C",
                "ç": "c",
                "Ð": "D",
                "ð": "d",
                "È": "E",
                "É": "E",
                "Ê": "E",
                "Ë": "E",
                "è": "e",
                "é": "e",
                "ê": "e",
                "ë": "e",
                "Ì": "I",
                "Í": "I",
                "Î": "I",
                "Ï": "I",
                "ì": "i",
                "í": "i",
                "î": "i",
                "ï": "i",
                "Ñ": "N",
                "ñ": "n",
                "Ò": "O",
                "Ó": "O",
                "Ô": "O",
                "Õ": "O",
                "Ö": "O",
                "Ø": "O",
                "ò": "o",
                "ó": "o",
                "ô": "o",
                "õ": "o",
                "ö": "o",
                "ø": "o",
                "Ù": "U",
                "Ú": "U",
                "Û": "U",
                "Ü": "U",
                "ù": "u",
                "ú": "u",
                "û": "u",
                "ü": "u",
                "Ý": "Y",
                "ý": "y",
                "ÿ": "y",
                "Æ": "Ae",
                "æ": "ae",
                "Þ": "Th",
                "þ": "th",
                "ß": "ss"
            }, htmlEscapes = {
                "&": "&amp;",
                "<": "&lt;",
                ">": "&gt;",
                '"': "&quot;",
                "'": "&#39;",
                "`": "&#96;"
            }, htmlUnescapes = {
                "&amp;": "&",
                "&lt;": "<",
                "&gt;": ">",
                "&quot;": '"',
                "&#39;": "'",
                "&#96;": "`"
            }, objectTypes = {
                "function": !0,
                object: !0
            }, regexpEscapes = {
                "0": "x30",
                "1": "x31",
                "2": "x32",
                "3": "x33",
                "4": "x34",
                "5": "x35",
                "6": "x36",
                "7": "x37",
                "8": "x38",
                "9": "x39",
                A: "x41",
                B: "x42",
                C: "x43",
                D: "x44",
                E: "x45",
                F: "x46",
                a: "x61",
                b: "x62",
                c: "x63",
                d: "x64",
                e: "x65",
                f: "x66",
                n: "x6e",
                r: "x72",
                t: "x74",
                u: "x75",
                v: "x76",
                x: "x78"
            }, stringEscapes = {
                "\\": "\\",
                "'": "'",
                "\n": "n",
                "\r": "r",
                "\u2028": "u2028",
                "\u2029": "u2029"
            }, freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports, freeModule = objectTypes[typeof module] && module && !module.nodeType && module, freeGlobal = freeExports && freeModule && "object" == typeof global && global && global.Object && global, freeSelf = objectTypes[typeof self] && self && self.Object && self, freeWindow = objectTypes[typeof window] && window && window.Object && window, moduleExports = freeModule && freeModule.exports === freeExports && freeExports, root = freeGlobal || freeWindow !== (this && this.window) && freeWindow || freeSelf || this, _ = runInContext();
            if (!0) {
                root._ = _;
                (__WEBPACK_AMD_DEFINE_RESULT__ = function() {
                    return _;
                }.call(exports, __webpack_require__, exports, module)) !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
            } else if (freeExports && freeModule) if (moduleExports) (freeModule.exports = _)._ = _; else freeExports._ = _; else root._ = _;
        }).call(this);
    }).call(exports, __webpack_require__(214)(module), __webpack_require__(54));
}, function(module, exports) {
    function isLength(value) {
        return "number" == typeof value && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }
    var MAX_SAFE_INTEGER = 9007199254740991;
    module.exports = isLength;
}, function(module, exports, __webpack_require__) {
    function isArguments(value) {
        return isObjectLike(value) && isArrayLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
    }
    var isArrayLike = __webpack_require__(60), isObjectLike = __webpack_require__(46), objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty, propertyIsEnumerable = objectProto.propertyIsEnumerable;
    module.exports = isArguments;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function shouldIgnoreValue(name, value) {
        return null == value || DOMProperty.hasBooleanValue[name] && !value || DOMProperty.hasNumericValue[name] && isNaN(value) || DOMProperty.hasPositiveNumericValue[name] && value < 1 || DOMProperty.hasOverloadedBooleanValue[name] && !1 === value;
    }
    var DOMProperty = __webpack_require__(83), escapeTextForBrowser = __webpack_require__(194), memoizeStringOnly = __webpack_require__(299), warning = __webpack_require__(53), processAttributeNameAndPrefix = memoizeStringOnly(function(name) {
        return escapeTextForBrowser(name) + '="';
    });
    if (!0) var reactProps = {
        children: !0,
        dangerouslySetInnerHTML: !0,
        key: !0,
        ref: !0
    }, warnedProperties = {}, warnUnknownProperty = function(name) {
        if (!(reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name])) {
            warnedProperties[name] = !0;
            var lowerCasedName = name.toLowerCase(), standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
            warning(null == standardName, "Unknown DOM property " + name + ". Did you mean " + standardName + "?");
        }
    };
    var DOMPropertyOperations = {
        createMarkupForID: function(id) {
            return processAttributeNameAndPrefix(DOMProperty.ID_ATTRIBUTE_NAME) + escapeTextForBrowser(id) + '"';
        },
        createMarkupForProperty: function(name, value) {
            if (DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]) {
                if (shouldIgnoreValue(name, value)) return "";
                var attributeName = DOMProperty.getAttributeName[name];
                if (DOMProperty.hasBooleanValue[name] || DOMProperty.hasOverloadedBooleanValue[name] && !0 === value) return escapeTextForBrowser(attributeName); else return processAttributeNameAndPrefix(attributeName) + escapeTextForBrowser(value) + '"';
            } else if (DOMProperty.isCustomAttribute(name)) if (null == value) return ""; else return processAttributeNameAndPrefix(name) + escapeTextForBrowser(value) + '"'; else if (!0) warnUnknownProperty(name);
            return null;
        },
        setValueForProperty: function(node, name, value) {
            if (DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]) {
                var mutationMethod = DOMProperty.getMutationMethod[name];
                if (mutationMethod) mutationMethod(node, value); else if (shouldIgnoreValue(name, value)) this.deleteValueForProperty(node, name); else if (DOMProperty.mustUseAttribute[name]) node.setAttribute(DOMProperty.getAttributeName[name], "" + value); else {
                    var propName = DOMProperty.getPropertyName[name];
                    if (!DOMProperty.hasSideEffects[name] || node[propName] !== value) node[propName] = value;
                }
            } else if (DOMProperty.isCustomAttribute(name)) if (null == value) node.removeAttribute(name); else node.setAttribute(name, "" + value); else if (!0) warnUnknownProperty(name);
        },
        deleteValueForProperty: function(node, name) {
            if (DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]) {
                var mutationMethod = DOMProperty.getMutationMethod[name];
                if (mutationMethod) mutationMethod(node, undefined); else if (DOMProperty.mustUseAttribute[name]) node.removeAttribute(DOMProperty.getAttributeName[name]); else {
                    var propName = DOMProperty.getPropertyName[name], defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);
                    if (!DOMProperty.hasSideEffects[name] || node[propName] !== defaultValue) node[propName] = defaultValue;
                }
            } else if (DOMProperty.isCustomAttribute(name)) node.removeAttribute(name); else if (!0) warnUnknownProperty(name);
        }
    };
    module.exports = DOMPropertyOperations;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function listenerAtPhase(id, event, propagationPhase) {
        var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];
        return getListener(id, registrationName);
    }
    function accumulateDirectionalDispatches(domID, upwards, event) {
        if (!0) if (!domID) throw new Error("Dispatching id must not be null");
        var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured, listener = listenerAtPhase(domID, event, phase);
        if (listener) {
            event._dispatchListeners = accumulate(event._dispatchListeners, listener);
            event._dispatchIDs = accumulate(event._dispatchIDs, domID);
        }
    }
    function accumulateTwoPhaseDispatchesSingle(event) {
        if (event && event.dispatchConfig.phasedRegistrationNames) EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);
    }
    function accumulateDispatches(id, ignoredDirection, event) {
        if (event && event.dispatchConfig.registrationName) {
            var registrationName = event.dispatchConfig.registrationName, listener = getListener(id, registrationName);
            if (listener) {
                event._dispatchListeners = accumulate(event._dispatchListeners, listener);
                event._dispatchIDs = accumulate(event._dispatchIDs, id);
            }
        }
    }
    function accumulateDirectDispatchesSingle(event) {
        if (event && event.dispatchConfig.registrationName) accumulateDispatches(event.dispatchMarker, null, event);
    }
    function accumulateTwoPhaseDispatches(events) {
        forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
    }
    function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {
        EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);
    }
    function accumulateDirectDispatches(events) {
        forEachAccumulated(events, accumulateDirectDispatchesSingle);
    }
    var EventConstants = __webpack_require__(36), EventPluginHub = __webpack_require__(120), accumulate = __webpack_require__(193), forEachAccumulated = __webpack_require__(195), PropagationPhases = EventConstants.PropagationPhases, getListener = EventPluginHub.getListener, EventPropagators = {
        accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
        accumulateDirectDispatches: accumulateDirectDispatches,
        accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
    };
    module.exports = EventPropagators;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getListeningForDocument(mountAt) {
        if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {
            mountAt[topListenersIDKey] = reactTopListenersCounter++;
            alreadyListeningTo[mountAt[topListenersIDKey]] = {};
        }
        return alreadyListeningTo[mountAt[topListenersIDKey]];
    }
    var EventConstants = __webpack_require__(36), EventPluginHub = __webpack_require__(120), EventPluginRegistry = __webpack_require__(276), ReactEventEmitterMixin = __webpack_require__(628), ViewportMetrics = __webpack_require__(290), isEventSupported = __webpack_require__(199), merge = __webpack_require__(37), alreadyListeningTo = {}, isMonitoringScrollValue = !1, reactTopListenersCounter = 0, topEventMapping = {
        topBlur: "blur",
        topChange: "change",
        topClick: "click",
        topCompositionEnd: "compositionend",
        topCompositionStart: "compositionstart",
        topCompositionUpdate: "compositionupdate",
        topContextMenu: "contextmenu",
        topCopy: "copy",
        topCut: "cut",
        topDoubleClick: "dblclick",
        topDrag: "drag",
        topDragEnd: "dragend",
        topDragEnter: "dragenter",
        topDragExit: "dragexit",
        topDragLeave: "dragleave",
        topDragOver: "dragover",
        topDragStart: "dragstart",
        topDrop: "drop",
        topFocus: "focus",
        topInput: "input",
        topKeyDown: "keydown",
        topKeyPress: "keypress",
        topKeyUp: "keyup",
        topMouseDown: "mousedown",
        topMouseMove: "mousemove",
        topMouseOut: "mouseout",
        topMouseOver: "mouseover",
        topMouseUp: "mouseup",
        topPaste: "paste",
        topScroll: "scroll",
        topSelectionChange: "selectionchange",
        topTextInput: "textInput",
        topTouchCancel: "touchcancel",
        topTouchEnd: "touchend",
        topTouchMove: "touchmove",
        topTouchStart: "touchstart",
        topWheel: "wheel"
    }, topListenersIDKey = "_reactListenersID" + String(Math.random()).slice(2), ReactBrowserEventEmitter = merge(ReactEventEmitterMixin, {
        ReactEventListener: null,
        injection: {
            injectReactEventListener: function(ReactEventListener) {
                ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);
                ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;
            }
        },
        setEnabled: function(enabled) {
            if (ReactBrowserEventEmitter.ReactEventListener) ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);
        },
        isEnabled: function() {
            return !(!ReactBrowserEventEmitter.ReactEventListener || !ReactBrowserEventEmitter.ReactEventListener.isEnabled());
        },
        listenTo: function(registrationName, contentDocumentHandle) {
            for (var mountAt = contentDocumentHandle, isListening = getListeningForDocument(mountAt), dependencies = EventPluginRegistry.registrationNameDependencies[registrationName], topLevelTypes = EventConstants.topLevelTypes, i = 0, l = dependencies.length; i < l; i++) {
                var dependency = dependencies[i];
                if (!isListening.hasOwnProperty(dependency) || !isListening[dependency]) {
                    if (dependency === topLevelTypes.topWheel) if (isEventSupported("wheel")) ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, "wheel", mountAt); else if (isEventSupported("mousewheel")) ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, "mousewheel", mountAt); else ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, "DOMMouseScroll", mountAt); else if (dependency === topLevelTypes.topScroll) if (isEventSupported("scroll", !0)) ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, "scroll", mountAt); else ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, "scroll", ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE); else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {
                        if (isEventSupported("focus", !0)) {
                            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, "focus", mountAt);
                            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, "blur", mountAt);
                        } else if (isEventSupported("focusin")) {
                            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, "focusin", mountAt);
                            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, "focusout", mountAt);
                        }
                        isListening[topLevelTypes.topBlur] = !0;
                        isListening[topLevelTypes.topFocus] = !0;
                    } else if (topEventMapping.hasOwnProperty(dependency)) ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);
                    isListening[dependency] = !0;
                }
            }
        },
        trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {
            return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);
        },
        trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {
            return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);
        },
        ensureScrollValueMonitoring: function() {
            if (!isMonitoringScrollValue) {
                var refresh = ViewportMetrics.refreshScrollValues;
                ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
                isMonitoringScrollValue = !0;
            }
        },
        eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,
        registrationNameModules: EventPluginHub.registrationNameModules,
        putListener: EventPluginHub.putListener,
        getListener: EventPluginHub.getListener,
        deleteListener: EventPluginHub.deleteListener,
        deleteAllListeners: EventPluginHub.deleteAllListeners
    });
    module.exports = ReactBrowserEventEmitter;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactDescriptor = __webpack_require__(50), ReactOwner = __webpack_require__(283), ReactUpdates = __webpack_require__(103), invariant = __webpack_require__(5), keyMirror = __webpack_require__(85), merge = __webpack_require__(37), ComponentLifeCycle = keyMirror({
        MOUNTED: null,
        UNMOUNTED: null
    }), injected = !1, unmountIDFromEnvironment = null, mountImageIntoNode = null, ReactComponent = {
        injection: {
            injectEnvironment: function(ReactComponentEnvironment) {
                !0 ? invariant(!injected, "ReactComponent: injectEnvironment() can only be called once.") : invariant(!injected);
                mountImageIntoNode = ReactComponentEnvironment.mountImageIntoNode;
                unmountIDFromEnvironment = ReactComponentEnvironment.unmountIDFromEnvironment;
                ReactComponent.BackendIDOperations = ReactComponentEnvironment.BackendIDOperations;
                injected = !0;
            }
        },
        LifeCycle: ComponentLifeCycle,
        BackendIDOperations: null,
        Mixin: {
            isMounted: function() {
                return this._lifeCycleState === ComponentLifeCycle.MOUNTED;
            },
            setProps: function(partialProps, callback) {
                var descriptor = this._pendingDescriptor || this._descriptor;
                this.replaceProps(merge(descriptor.props, partialProps), callback);
            },
            replaceProps: function(props, callback) {
                !0 ? invariant(this.isMounted(), "replaceProps(...): Can only update a mounted component.") : invariant(this.isMounted());
                !0 ? invariant(0 === this._mountDepth, "replaceProps(...): You called `setProps` or `replaceProps` on a component with a parent. This is an anti-pattern since props will get reactively updated when rendered. Instead, change the owner's `render` method to pass the correct value as props to the component where it is created.") : invariant(0 === this._mountDepth);
                this._pendingDescriptor = ReactDescriptor.cloneAndReplaceProps(this._pendingDescriptor || this._descriptor, props);
                ReactUpdates.enqueueUpdate(this, callback);
            },
            _setPropsInternal: function(partialProps, callback) {
                var descriptor = this._pendingDescriptor || this._descriptor;
                this._pendingDescriptor = ReactDescriptor.cloneAndReplaceProps(descriptor, merge(descriptor.props, partialProps));
                ReactUpdates.enqueueUpdate(this, callback);
            },
            construct: function(descriptor) {
                this.props = descriptor.props;
                this._owner = descriptor._owner;
                this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;
                this._pendingCallbacks = null;
                this._descriptor = descriptor;
                this._pendingDescriptor = null;
            },
            mountComponent: function(rootID, transaction, mountDepth) {
                !0 ? invariant(!this.isMounted(), "mountComponent(%s, ...): Can only mount an unmounted component. Make sure to avoid storing components between renders or reusing a single component instance in multiple places.", rootID) : invariant(!this.isMounted());
                var props = this._descriptor.props;
                if (null != props.ref) {
                    var owner = this._descriptor._owner;
                    ReactOwner.addComponentAsRefTo(this, props.ref, owner);
                }
                this._rootNodeID = rootID;
                this._lifeCycleState = ComponentLifeCycle.MOUNTED;
                this._mountDepth = mountDepth;
            },
            unmountComponent: function() {
                !0 ? invariant(this.isMounted(), "unmountComponent(): Can only unmount a mounted component.") : invariant(this.isMounted());
                var props = this.props;
                if (null != props.ref) ReactOwner.removeComponentAsRefFrom(this, props.ref, this._owner);
                unmountIDFromEnvironment(this._rootNodeID);
                this._rootNodeID = null;
                this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;
            },
            receiveComponent: function(nextDescriptor, transaction) {
                !0 ? invariant(this.isMounted(), "receiveComponent(...): Can only update a mounted component.") : invariant(this.isMounted());
                this._pendingDescriptor = nextDescriptor;
                this.performUpdateIfNecessary(transaction);
            },
            performUpdateIfNecessary: function(transaction) {
                if (null != this._pendingDescriptor) {
                    var prevDescriptor = this._descriptor, nextDescriptor = this._pendingDescriptor;
                    this._descriptor = nextDescriptor;
                    this.props = nextDescriptor.props;
                    this._owner = nextDescriptor._owner;
                    this._pendingDescriptor = null;
                    this.updateComponent(transaction, prevDescriptor);
                }
            },
            updateComponent: function(transaction, prevDescriptor) {
                var nextDescriptor = this._descriptor;
                if (nextDescriptor._owner !== prevDescriptor._owner || nextDescriptor.props.ref !== prevDescriptor.props.ref) {
                    if (null != prevDescriptor.props.ref) ReactOwner.removeComponentAsRefFrom(this, prevDescriptor.props.ref, prevDescriptor._owner);
                    if (null != nextDescriptor.props.ref) ReactOwner.addComponentAsRefTo(this, nextDescriptor.props.ref, nextDescriptor._owner);
                }
            },
            mountComponentIntoNode: function(rootID, container, shouldReuseMarkup) {
                var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();
                transaction.perform(this._mountComponentIntoNode, this, rootID, container, transaction, shouldReuseMarkup);
                ReactUpdates.ReactReconcileTransaction.release(transaction);
            },
            _mountComponentIntoNode: function(rootID, container, transaction, shouldReuseMarkup) {
                var markup = this.mountComponent(rootID, transaction, 0);
                mountImageIntoNode(markup, container, shouldReuseMarkup);
            },
            isOwnedBy: function(owner) {
                return this._owner === owner;
            },
            getSiblingByRef: function(ref) {
                var owner = this._owner;
                if (!owner || !owner.refs) return null; else return owner.refs[ref];
            }
        }
    };
    module.exports = ReactComponent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactCurrentOwner = {
        current: null
    };
    module.exports = ReactCurrentOwner;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getReactRootIDString(index) {
        return SEPARATOR + index.toString(36);
    }
    function isBoundary(id, index) {
        return id.charAt(index) === SEPARATOR || index === id.length;
    }
    function isValidID(id) {
        return "" === id || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;
    }
    function isAncestorIDOf(ancestorID, descendantID) {
        return 0 === descendantID.indexOf(ancestorID) && isBoundary(descendantID, ancestorID.length);
    }
    function getParentID(id) {
        return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : "";
    }
    function getNextDescendantID(ancestorID, destinationID) {
        !0 ? invariant(isValidID(ancestorID) && isValidID(destinationID), "getNextDescendantID(%s, %s): Received an invalid React DOM ID.", ancestorID, destinationID) : invariant(isValidID(ancestorID) && isValidID(destinationID));
        !0 ? invariant(isAncestorIDOf(ancestorID, destinationID), "getNextDescendantID(...): React has made an invalid assumption about the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.", ancestorID, destinationID) : invariant(isAncestorIDOf(ancestorID, destinationID));
        if (ancestorID === destinationID) return ancestorID;
        for (var start = ancestorID.length + SEPARATOR_LENGTH, i = start; i < destinationID.length && !isBoundary(destinationID, i); i++) ;
        return destinationID.substr(0, i);
    }
    function getFirstCommonAncestorID(oneID, twoID) {
        var minLength = Math.min(oneID.length, twoID.length);
        if (0 === minLength) return "";
        for (var lastCommonMarkerIndex = 0, i = 0; i <= minLength; i++) if (isBoundary(oneID, i) && isBoundary(twoID, i)) lastCommonMarkerIndex = i; else if (oneID.charAt(i) !== twoID.charAt(i)) break;
        var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);
        !0 ? invariant(isValidID(longestCommonID), "getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s", oneID, twoID, longestCommonID) : invariant(isValidID(longestCommonID));
        return longestCommonID;
    }
    function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {
        start = start || "";
        stop = stop || "";
        !0 ? invariant(start !== stop, "traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.", start) : invariant(start !== stop);
        var traverseUp = isAncestorIDOf(stop, start);
        !0 ? invariant(traverseUp || isAncestorIDOf(start, stop), "traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do not have a parent path.", start, stop) : invariant(traverseUp || isAncestorIDOf(start, stop));
        for (var depth = 0, traverse = traverseUp ? getParentID : getNextDescendantID, id = start; ;id = traverse(id, stop)) {
            var ret;
            if (!(skipFirst && id === start || skipLast && id === stop)) ret = cb(id, traverseUp, arg);
            if (!1 === ret || id === stop) break;
            !0 ? invariant(depth++ < MAX_TREE_DEPTH, "traverseParentPath(%s, %s, ...): Detected an infinite loop while traversing the React DOM ID tree. This may be due to malformed IDs: %s", start, stop) : invariant(depth++ < MAX_TREE_DEPTH);
        }
    }
    var ReactRootIndex = __webpack_require__(288), invariant = __webpack_require__(5), SEPARATOR = ".", SEPARATOR_LENGTH = SEPARATOR.length, MAX_TREE_DEPTH = 100, ReactInstanceHandles = {
        createReactRootID: function() {
            return getReactRootIDString(ReactRootIndex.createReactRootIndex());
        },
        createReactID: function(rootID, name) {
            return rootID + name;
        },
        getReactRootIDFromNodeID: function(id) {
            if (id && id.charAt(0) === SEPARATOR && id.length > 1) {
                var index = id.indexOf(SEPARATOR, 1);
                return index > -1 ? id.substr(0, index) : id;
            }
            return null;
        },
        traverseEnterLeave: function(leaveID, enterID, cb, upArg, downArg) {
            var ancestorID = getFirstCommonAncestorID(leaveID, enterID);
            if (ancestorID !== leaveID) traverseParentPath(leaveID, ancestorID, cb, upArg, !1, !0);
            if (ancestorID !== enterID) traverseParentPath(ancestorID, enterID, cb, downArg, !0, !1);
        },
        traverseTwoPhase: function(targetID, cb, arg) {
            if (targetID) {
                traverseParentPath("", targetID, cb, arg, !0, !1);
                traverseParentPath(targetID, "", cb, arg, !1, !0);
            }
        },
        traverseAncestors: function(targetID, cb, arg) {
            traverseParentPath("", targetID, cb, arg, !0, !1);
        },
        _getFirstCommonAncestorID: getFirstCommonAncestorID,
        _getNextDescendantID: getNextDescendantID,
        isAncestorIDOf: isAncestorIDOf,
        SEPARATOR: SEPARATOR
    };
    module.exports = ReactInstanceHandles;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function ensureInjected() {
        !0 ? invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy, "ReactUpdates: must inject a reconcile transaction class and batching strategy") : invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy);
    }
    function ReactUpdatesFlushTransaction() {
        this.reinitializeTransaction();
        this.dirtyComponentsLength = null;
        this.callbackQueue = CallbackQueue.getPooled(null);
        this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled();
    }
    function batchedUpdates(callback, a, b) {
        ensureInjected();
        batchingStrategy.batchedUpdates(callback, a, b);
    }
    function mountDepthComparator(c1, c2) {
        return c1._mountDepth - c2._mountDepth;
    }
    function runBatchedUpdates(transaction) {
        var len = transaction.dirtyComponentsLength;
        !0 ? invariant(len === dirtyComponents.length, "Expected flush transaction's stored dirty-components length (%s) to match dirty-components array length (%s).", len, dirtyComponents.length) : invariant(len === dirtyComponents.length);
        dirtyComponents.sort(mountDepthComparator);
        for (var i = 0; i < len; i++) {
            var component = dirtyComponents[i];
            if (component.isMounted()) {
                var callbacks = component._pendingCallbacks;
                component._pendingCallbacks = null;
                component.performUpdateIfNecessary(transaction.reconcileTransaction);
                if (callbacks) for (var j = 0; j < callbacks.length; j++) transaction.callbackQueue.enqueue(callbacks[j], component);
            }
        }
    }
    function enqueueUpdate(component, callback) {
        !0 ? invariant(!callback || "function" == typeof callback, "enqueueUpdate(...): You called `setProps`, `replaceProps`, `setState`, `replaceState`, or `forceUpdate` with a callback that isn't callable.") : invariant(!callback || "function" == typeof callback);
        ensureInjected();
        warning(null == ReactCurrentOwner.current, "enqueueUpdate(): Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.");
        if (batchingStrategy.isBatchingUpdates) {
            dirtyComponents.push(component);
            if (callback) if (component._pendingCallbacks) component._pendingCallbacks.push(callback); else component._pendingCallbacks = [ callback ];
        } else batchingStrategy.batchedUpdates(enqueueUpdate, component, callback);
    }
    var CallbackQueue = __webpack_require__(187), PooledClass = __webpack_require__(70), ReactCurrentOwner = __webpack_require__(101), ReactPerf = __webpack_require__(62), Transaction = __webpack_require__(145), invariant = __webpack_require__(5), mixInto = __webpack_require__(52), warning = __webpack_require__(53), dirtyComponents = [], batchingStrategy = null, NESTED_UPDATES = {
        initialize: function() {
            this.dirtyComponentsLength = dirtyComponents.length;
        },
        close: function() {
            if (this.dirtyComponentsLength !== dirtyComponents.length) {
                dirtyComponents.splice(0, this.dirtyComponentsLength);
                flushBatchedUpdates();
            } else dirtyComponents.length = 0;
        }
    }, UPDATE_QUEUEING = {
        initialize: function() {
            this.callbackQueue.reset();
        },
        close: function() {
            this.callbackQueue.notifyAll();
        }
    }, TRANSACTION_WRAPPERS = [ NESTED_UPDATES, UPDATE_QUEUEING ];
    mixInto(ReactUpdatesFlushTransaction, Transaction.Mixin);
    mixInto(ReactUpdatesFlushTransaction, {
        getTransactionWrappers: function() {
            return TRANSACTION_WRAPPERS;
        },
        destructor: function() {
            this.dirtyComponentsLength = null;
            CallbackQueue.release(this.callbackQueue);
            this.callbackQueue = null;
            ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);
            this.reconcileTransaction = null;
        },
        perform: function(method, scope, a) {
            return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);
        }
    });
    PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);
    var flushBatchedUpdates = ReactPerf.measure("ReactUpdates", "flushBatchedUpdates", function() {
        for (;dirtyComponents.length; ) {
            var transaction = ReactUpdatesFlushTransaction.getPooled();
            transaction.perform(runBatchedUpdates, null, transaction);
            ReactUpdatesFlushTransaction.release(transaction);
        }
    }), ReactUpdatesInjection = {
        injectReconcileTransaction: function(ReconcileTransaction) {
            !0 ? invariant(ReconcileTransaction, "ReactUpdates: must provide a reconcile transaction class") : invariant(ReconcileTransaction);
            ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
        },
        injectBatchingStrategy: function(_batchingStrategy) {
            !0 ? invariant(_batchingStrategy, "ReactUpdates: must provide a batching strategy") : invariant(_batchingStrategy);
            !0 ? invariant("function" == typeof _batchingStrategy.batchedUpdates, "ReactUpdates: must provide a batchedUpdates() function") : invariant("function" == typeof _batchingStrategy.batchedUpdates);
            !0 ? invariant("boolean" == typeof _batchingStrategy.isBatchingUpdates, "ReactUpdates: must provide an isBatchingUpdates boolean attribute") : invariant("boolean" == typeof _batchingStrategy.isBatchingUpdates);
            batchingStrategy = _batchingStrategy;
        }
    }, ReactUpdates = {
        ReactReconcileTransaction: null,
        batchedUpdates: batchedUpdates,
        enqueueUpdate: enqueueUpdate,
        flushBatchedUpdates: flushBatchedUpdates,
        injection: ReactUpdatesInjection
    };
    module.exports = ReactUpdates;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _lodash = __webpack_require__(94), _runCommandAsync = __webpack_require__(75), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _shell = __webpack_require__(16), _utils = __webpack_require__(19), _fso = __webpack_require__(17), _os = __webpack_require__(14), _wget = __webpack_require__(227), _wget2 = _interopRequireDefault(_wget), _logs = __webpack_require__(4), _constants = __webpack_require__(208), _constants2 = _interopRequireDefault(_constants), _common = __webpack_require__(105), _getRandomFromInterval = __webpack_require__(151), _getRandomFromInterval2 = _interopRequireDefault(_getRandomFromInterval), log = (0, 
    _logs.getLogger)("aria"), parseLength = function(data) {
        var _ref = data.match(/^(.*)\(([\d,]+)\)\s*$/) || [], _ref$ = _ref[1], pretty = _ref$ === undefined ? "" : _ref$, _ref$2 = _ref[2], value = _ref$2 === undefined ? "" : _ref$2;
        return {
            pretty: pretty.trim(),
            value: parseInt(value.replace(/\D/g, ""), 10)
        };
    }, postProcessors = {
        "Total Length": parseLength,
        Announce: function(data) {
            return data.split("\n").map(function(line) {
                return line.trim();
            });
        },
        Files: function(data) {
            for (var info = [], parts = data.split(/^[+-=]+$/m).slice(1), _iterator = parts, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                var _ref2;
                if (_isArray) {
                    if (_i >= _iterator.length) break;
                    _ref2 = _iterator[_i++];
                } else {
                    _i = _iterator.next();
                    if (_i.done) break;
                    _ref2 = _i.value;
                }
                var part = _ref2;
                if (/\|/.test(part)) {
                    var _part$split = part.split("|"), index = _part$split[0], path = _part$split[1], size = _part$split[2];
                    info.push({
                        index: parseInt(index, 10),
                        path: path.trim(),
                        size: parseLength(size)
                    });
                }
            }
            return info;
        }
    }, Aria = function() {
        function Aria() {
            _classCallCheck(this, Aria);
            this.ariaPath = "tools\\aria2c.exe";
            this.concurrency = 5;
        }
        Aria.prototype.parseTorrent = function(path) {
            var id = +Math.round(1e5 * Math.random()), outputFile = (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\aria2_log_" + id + ".log", ariaCommand = '"' + this.ariaPath + '" -S "' + path + '" >"' + outputFile + '"';
            _shell.WshShell.Run((0, _utils.wrapInCmd)(ariaCommand), 0, !0);
            var outputFileDescriptor = _fso.fso.OpenTextFile(outputFile, _constants2["default"].FSO_FOR_READING, _constants2["default"].FSO_DONT_CREATE);
            if (!outputFileDescriptor.AtEndOfStream) {
                for (var info = {}, data = outputFileDescriptor.ReadAll(), parts = data.split(/^(?=\w[\w\s]*:)/m).slice(1), _iterator2 = parts, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator](); ;) {
                    var _ref3;
                    if (_isArray2) {
                        if (_i2 >= _iterator2.length) break;
                        _ref3 = _iterator2[_i2++];
                    } else {
                        _i2 = _iterator2.next();
                        if (_i2.done) break;
                        _ref3 = _i2.value;
                    }
                    var part = _ref3, _ref4 = part.match(/^(\w[\w\s]*):([\s\S]*)$/) || [], _ref4$ = _ref4[1], key = _ref4$ === undefined ? "" : _ref4$, _ref4$2 = _ref4[2], value = _ref4$2 === undefined ? "" : _ref4$2;
                    info[(0, _lodash.camelCase)(key)] = key in postProcessors ? postProcessors[key](value.trim()) : value.trim();
                }
                return info;
            } else throw new Error("Failed to parse aria2c output");
        };
        Aria.prototype.runAria = function() {
            function runAria(_x) {
                return _ref5.apply(this, arguments);
            }
            var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee(command) {
                var ariaCommand, exitCode, opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        ariaCommand = '"' + this.ariaPath + '" ' + command + " --quiet --continue --min-split-size=1M --follow-torrent=true --check-integrity --seed-time=0 --bt-stop-timeout=120";
                        _context.next = 3;
                        return (0, _runCommandAsync.runCommandAsync)(_extends({
                            command: ariaCommand,
                            timeout: 18e5
                        }, opts));

                      case 3:
                        exitCode = _context.sent;
                        if ([ 0, 13 ].includes(exitCode)) {
                            _context.next = 6;
                            break;
                        }
                        throw new Error("Aria2 exited with exitCode " + exitCode);

                      case 6:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, this);
            }));
            return runAria;
        }();
        Aria.prototype.download = function() {
            function download(_x3, _x4) {
                return _ref6.apply(this, arguments);
            }
            var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(path, _ref7) {
                var handler, events, link, _this = this, uri = _ref7.uri, fake = _ref7.fake;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        if (!fake) {
                            _context2.next = 2;
                            break;
                        }
                        return _context2.abrupt("return", new Promise(function(resolve, reject) {
                            setTimeout(resolve, 1e3 * (0, _getRandomFromInterval2["default"])(10, 20));
                        }));

                      case 2:
                        handler = function(uri) {
                            log.info("downloading " + uri + " file", {
                                file: uri
                            }, "download");
                            return _this.runAria('"' + uri + '" --dir="' + path + '"');
                        };
                        _context2.prev = 3;
                        _context2.next = 6;
                        return handler(uri);

                      case 6:
                        _context2.next = 31;
                        break;

                      case 8:
                        _context2.prev = 8;
                        _context2.t0 = _context2["catch"](3);
                        log.error("failed downloading " + uri + " file", {
                            file: uri
                        }, "fail");
                        _context2.prev = 11;
                        _context2.next = 14;
                        return (0, _common.makeFailover)(_context2.t0, handler, uri);

                      case 14:
                        _context2.next = 31;
                        break;

                      case 16:
                        _context2.prev = 16;
                        _context2.t1 = _context2["catch"](11);
                        _context2.prev = 18;
                        log.info({
                            action: "wget failover activate"
                        }, {}, "failover");
                        events = {
                            beforeDownloading: function() {},
                            afterDownloading: function() {}
                        };
                        link = uri.replace(/\.torrent$/, "");
                        _context2.next = 24;
                        return _wget2["default"].downloadFiles(events, path, [ {
                            link: link
                        } ]);

                      case 24:
                        log.info({
                            action: "wget failover success"
                        }, {}, "failover");
                        _context2.next = 31;
                        break;

                      case 27:
                        _context2.prev = 27;
                        _context2.t2 = _context2["catch"](18);
                        log.error({
                            action: "wget failover fail"
                        }, {}, "failover");
                        throw _context2.t0;

                      case 31:
                        log.info("downloaded " + uri + " file", {
                            file: uri
                        }, "success");

                      case 32:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, this, [ [ 3, 8 ], [ 11, 16 ], [ 18, 27 ] ]);
            }));
            return download;
        }();
        Aria.prototype.downloadFiles = function() {
            function downloadFiles(_x5, _x6, _x7) {
                return _ref8.apply(this, arguments);
            }
            var _ref8 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(path, items, fake) {
                var iterator, _this2 = this;
                return regeneratorRuntime.wrap(function(_context3) {
                    for (;;) switch (_context3.prev = _context3.next) {
                      case 0:
                        log.info("downloading " + items.length + " files", {
                            files: items.length
                        }, "download");
                        iterator = function(_ref9) {
                            var link = _ref9.link, torrentLink = _ref9.torrentLink, fake = _ref9.fake;
                            return _this2.download(path, {
                                uri: torrentLink || link,
                                fake: fake
                            });
                        };
                        if (!Promise.map) {
                            _context3.next = 6;
                            break;
                        }
                        return _context3.abrupt("return", Promise.map(items, iterator, {
                            concurrency: this.concurrency
                        }));

                      case 6:
                        return _context3.abrupt("return", Promise.all(items.map(iterator)));

                      case 7:
                      case "end":
                        return _context3.stop();
                    }
                }, _callee3, this);
            }));
            return downloadFiles;
        }();
        Aria.prototype.downloadParts = function() {
            function downloadParts(_x8) {
                return _ref10.apply(this, arguments);
            }
            var _ref10 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(path) {
                var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, uri = _ref11.uri, indexes = _ref11.indexes;
                return regeneratorRuntime.wrap(function(_context4) {
                    for (;;) switch (_context4.prev = _context4.next) {
                      case 0:
                        _context4.next = 2;
                        return this.runAria('"' + uri + '" --dir="' + path + '" --select-file="' + indexes + '" --file-allocation=none', {
                            timeout: 18e6
                        });

                      case 2:
                      case "end":
                        return _context4.stop();
                    }
                }, _callee4, this);
            }));
            return downloadParts;
        }();
        Aria.prototype.addToFirewallAllowed = function() {
            function addToFirewallAllowed() {
                return _ref12.apply(this, arguments);
            }
            var _ref12 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5() {
                var cd;
                return regeneratorRuntime.wrap(function(_context5) {
                    for (;;) switch (_context5.prev = _context5.next) {
                      case 0:
                        cd = _shell.WshShell.CurrentDirectory.replace(/^.*\\AppData/i, "%USERPROFILE%\\AppData");
                        if ("XP" !== _os.OSName) {
                            _context5.next = 13;
                            break;
                        }
                        _context5.prev = 2;
                        _context5.next = 5;
                        return (0, _runCommandAsync.runCommandAsync)({
                            command: 'netsh firewall delete allowedprogram "' + cd + "\\" + this.ariaPath + '" all',
                            timeout: 3e4
                        });

                      case 5:
                        _context5.next = 9;
                        break;

                      case 7:
                        _context5.prev = 7;
                        _context5.t0 = _context5["catch"](2);

                      case 9:
                        _context5.next = 11;
                        return (0, _runCommandAsync.runCommandAsync)({
                            command: 'netsh firewall add allowedprogram "' + cd + "\\" + this.ariaPath + '" "dp aria2c.exe" ENABLE',
                            timeout: 12e4
                        });

                      case 11:
                        _context5.next = 22;
                        break;

                      case 13:
                        _context5.prev = 13;
                        _context5.next = 16;
                        return (0, _runCommandAsync.runCommandAsync)({
                            command: 'netsh advfirewall firewall delete rule name="DriverPack aria2c.exe"',
                            timeout: 3e4
                        });

                      case 16:
                        _context5.next = 20;
                        break;

                      case 18:
                        _context5.prev = 18;
                        _context5.t1 = _context5["catch"](13);

                      case 20:
                        _context5.next = 22;
                        return (0, _runCommandAsync.runCommandAsync)({
                            command: 'netsh advfirewall firewall add rule name="DriverPack aria2c.exe" dir=in action=allow program="' + cd + "\\" + this.ariaPath + '"',
                            timeout: 12e4
                        });

                      case 22:
                      case "end":
                        return _context5.stop();
                    }
                }, _callee5, this, [ [ 2, 7 ], [ 13, 18 ] ]);
            }));
            return addToFirewallAllowed;
        }();
        return Aria;
    }();
    exports["default"] = new Aria();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.wrap = exports.makeFailover = exports.base = undefined;
    var _localFiles = __webpack_require__(22), _fso = __webpack_require__(17), base = exports.base = "http://dl.drp.su/updates/beetle", makeFailover = exports.makeFailover = function(err, handler, url) {
        for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) args[_key - 3] = arguments[_key];
        if (0 === url.indexOf("http://dl.drp.su")) {
            url = url.replace("http://dl.drp.su", "http://download.driverpacks.net");
            return handler.apply(undefined, [ url ].concat(args));
        } else if (0 === url.indexOf("http://download.drp.su")) {
            url = url.replace("http://download.drp.su", "http://download.driverpacks.net");
            return handler.apply(undefined, [ url ].concat(args));
        } else throw err;
    };
    exports.wrap = function(download, isAsync) {
        return function(fileName) {
            var dir = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "tools", url = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : base + "/" + fileName, seed = Math.random().toString(36).slice(2, 10), filePath = dir + "\\" + seed + ".part", dest = dir + "\\" + fileName, failover = function(err) {
                return makeFailover(err, download, url, filePath);
            }, finalize = function() {
                if (!0 === _fso.fso.FileExists(dest)) _fso.fso.DeleteFile(dest);
                _fso.fso.MoveFile(filePath, dest);
            };
            (0, _localFiles.ensurePath)(dir);
            if (isAsync) return download(url, filePath)["catch"](failover).then(finalize); else {
                try {
                    download(url, filePath);
                } catch (err) {
                    failover(err);
                }
                finalize();
            }
        };
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    Object.defineProperty(exports, "__esModule", {
        value: !0
    });
    var _deviceClasses = __webpack_require__(331), _deviceClasses2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_deviceClasses);
    exports["default"] = function(l) {
        var res = {};
        _deviceClasses2["default"].forEach(function(_ref) {
            var id = _ref.id;
            switch (id) {
              case "bluetooth":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_bluetooth-single-main"),
                            "for": l("deviceclasses_bluetooth-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_bluetooth-plural-main"),
                            "for": l("deviceclasses_bluetooth-plural-for")
                        }
                    }
                };
                break;

              case "cardreader":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_cardreader-single-main"),
                            "for": l("deviceclasses_cardreader-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_cardreader-plural-main"),
                            "for": l("deviceclasses_cardreader-plural-for")
                        }
                    }
                };
                break;

              case "chipset":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_chipset-single-main"),
                            "for": l("deviceclasses_chipset-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_chipset-plural-main"),
                            "for": l("deviceclasses_chipset-plural-for")
                        }
                    }
                };
                break;

              case "inputdev":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_inputdev-single-main"),
                            "for": l("deviceclasses_inputdev-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_inputdev-plural-main"),
                            "for": l("deviceclasses_inputdev-plural-for")
                        }
                    }
                };
                break;

              case "lan":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_lan-single-main"),
                            "for": l("deviceclasses_lan-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_lan-plural-main"),
                            "for": l("deviceclasses_lan-plural-for")
                        }
                    }
                };
                break;

              case "massstorage":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_massstorage-single-main"),
                            "for": l("deviceclasses_massstorage-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_massstorage-plural-main"),
                            "for": l("deviceclasses_massstorage-plural-for")
                        }
                    }
                };
                break;

              case "modem":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_modem-single-main"),
                            "for": l("deviceclasses_modem-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_modem-plural-main"),
                            "for": l("deviceclasses_modem-plural-for")
                        }
                    }
                };
                break;

              case "monitor":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_monitor-single-main"),
                            "for": l("deviceclasses_monitor-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_monitor-plural-main"),
                            "for": l("deviceclasses_monitor-plural-for")
                        }
                    }
                };
                break;

              case "phone":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_phone-single-main"),
                            "for": l("deviceclasses_phone-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_phone-plural-main"),
                            "for": l("deviceclasses_phone-plural-for")
                        }
                    }
                };
                break;

              case "printer":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_printer-single-main"),
                            "for": l("deviceclasses_printer-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_printer-plural-main"),
                            "for": l("deviceclasses_printer-plural-for")
                        }
                    }
                };
                break;

              case "sound":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_sound-single-main"),
                            "for": l("deviceclasses_sound-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_sound-plural-main"),
                            "for": l("deviceclasses_sound-plural-for")
                        }
                    }
                };
                break;

              case "tvtuner":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_tvtuner-single-main"),
                            "for": l("deviceclasses_tvtuner-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_tvtuner-plural-main"),
                            "for": l("deviceclasses_tvtuner-plural-for")
                        }
                    }
                };
                break;

              case "video":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_video-single-main"),
                            "for": l("deviceclasses_video-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_video-plural-main"),
                            "for": l("deviceclasses_video-plural-for")
                        }
                    }
                };
                break;

              case "webcamera":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_webcamera-single-main"),
                            "for": l("deviceclasses_webcamera-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_webcamera-plural-main"),
                            "for": l("deviceclasses_webcamera-plural-for")
                        }
                    }
                };
                break;

              case "wifi":
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_wifi-single-main"),
                            "for": l("deviceclasses_wifi-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_wifi-plural-main"),
                            "for": l("deviceclasses_wifi-plural-for")
                        }
                    }
                };
                break;

              case "other":
              default:
                res[id] = {
                    morpher: {
                        single: {
                            main: l("deviceclasses_other-single-main"),
                            "for": l("deviceclasses_other-single-for")
                        },
                        plural: {
                            main: l("deviceclasses_other-plural-main"),
                            "for": l("deviceclasses_other-plural-for")
                        }
                    }
                };
            }
        });
        return res;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var context = "undefined" == typeof window ? {} : window, version = context.version || "1.0", verType = context.verType, config = {
        application: {
            AppFolder: "DRPSu",
            DisplayVersion: verType ? version + " " + verType : version
        },
        analytics: {
            category: "desktop",
            identifier: "clientId",
            google: {},
            yandex: {
                enabled: !1
            }
        },
        logging: !0
    };
    try {
        Object.assign(config, {
            logs: {
                endpoint: "http://update.drp.su/api/logs"
            },
            analytics: {
                events: {
                    "default": {
                        url: "http://update.drp.su/api/events",
                        tags: [ "debug" ]
                    }
                },
                google: {
                    shared: {
                        id: "UA-58593486-1"
                    },
                    "default": {
                        id: "UA-68879973-24"
                    },
                    debug: {
                        id: "UA-68879973-24"
                    },
                    partner: {
                        id: "UA-68879973-17"
                    },
                    options: {
                        source: "hta",
                        identifier: "clientId",
                        dimensions: {
                            cd7: "driversInstallFailed",
                            cd8: "installationTime",
                            cd9: "errorDevicesApiFailed",
                            cm1: "driversInstallFailed",
                            cm2: "installationTime",
                            cm3: "errorDevicesApiFailed"
                        }
                    }
                },
                yandex: {
                    shared: {
                        id: "33423178",
                        tags: [ "default", "debug" ]
                    },
                    "default": {
                        id: "33217588",
                        tags: [ "debug" ]
                    },
                    partner: {
                        id: "46420341"
                    },
                    options: {
                        url: "http://online.drp.su/"
                    }
                },
                category: "driverpack offline"
            },
            wget: {
                paths: [ "tools\\driverpack-wget.exe", "tools\\wget.exe" ]
            }
        });
    } catch (err) {}
    exports["default"] = config;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _wmi = __webpack_require__(23), _wmiRegistry = __webpack_require__(130), _diagnosticsMap = __webpack_require__(336), _diagnosticsMap2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_diagnosticsMap), collectWMIQueries = function(diagMap) {
        var res = {};
        Object.keys(diagMap).forEach(function(section) {
            Object.entries(diagMap[section]).forEach(function(_ref) {
                var svalue = (_ref[0], _ref[1]);
                switch (svalue.type) {
                  case "object":
                    svalue.groups.forEach(function(group) {
                        group.fields.forEach(function(field) {
                            if (field.wmi) {
                                if (!res[field.wmi.source]) res[field.wmi.source] = [];
                                field.wmi.fields.forEach(function(f) {
                                    if (-1 === res[field.wmi.source].indexOf(f)) res[field.wmi.source].push(f);
                                });
                            }
                        });
                    });
                    break;

                  case "array":
                    if (svalue.wmi) {
                        if (!res[svalue.wmi.source]) res[svalue.wmi.source] = [];
                        svalue.wmi.fields.forEach(function(field) {
                            if (-1 === res[svalue.wmi.source].indexOf(field.field)) res[svalue.wmi.source].push(field.field);
                        });
                    }
                }
            });
        });
        return res;
    }, cacheWMI = function(diagMap) {
        var wmis = {}, res = {};
        Object.entries(collectWMIQueries(diagMap)).forEach(function(_ref2) {
            var source = _ref2[0], fields = _ref2[1], _source$split = source.split(" WHERE "), path = _source$split[0], where = _source$split[1], parts = path.split(":");
            if (2 === parts.length) {
                if (!wmis[parts[0]]) try {
                    wmis[parts[0]] = new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer(null, parts[0]);
                } catch (e) {}
                res[source] = (0, _wmi.getWMIObjects)(fields, parts[1], where, wmis[parts[0]]);
            } else res[source] = (0, _wmi.getWMIObjects)(fields, parts[0], where);
        });
        return res;
    }, filterDiagnosticsMap = function(target) {
        var res = {};
        Object.keys(_diagnosticsMap2["default"]).forEach(function(section) {
            Object.entries(_diagnosticsMap2["default"][section]).forEach(function(_ref3) {
                var subsection = _ref3[0], svalue = _ref3[1];
                if (!target || !svalue.targets || -1 !== svalue.targets.indexOf(target)) {
                    if (!res[section]) res[section] = {};
                    res[section][subsection] = svalue;
                } else switch (svalue.type) {
                  case "object":
                    var resGroups = [];
                    svalue.groups.forEach(function(group) {
                        var resFields = [];
                        group.fields.forEach(function(field) {
                            if (field.targets && -1 !== field.targets.indexOf(target)) resFields.push(field);
                        });
                        if (resFields.length) {
                            var resGroup = {
                                name: group.name,
                                fields: resFields
                            };
                            resGroups.push(resGroup);
                        }
                    });
                    if (resGroups.length) {
                        if (!res[section]) res[section] = {};
                        res[section][subsection] = {
                            type: "object",
                            groups: resGroups
                        };
                    }
                    break;

                  case "array":
                    [ "wmi", "reg" ].forEach(function(src) {
                        if (svalue[src]) {
                            var resFields = [];
                            svalue[src].fields.forEach(function(field) {
                                if (field.targets && -1 !== field.targets.indexOf(target)) resFields.push(field);
                            });
                            if (resFields.length) {
                                if (!res[section]) res[section] = {};
                                res[section][subsection] = {
                                    type: "array"
                                };
                                res[section][subsection][src] = {
                                    source: svalue[src].source,
                                    fields: resFields
                                };
                            }
                        }
                    });
                }
            });
        });
        return res;
    };
    exports["default"] = function(target) {
        var res = {}, diagMap = filterDiagnosticsMap(target), cache = cacheWMI(diagMap);
        Object.keys(diagMap).forEach(function(section) {
            res[section] = {};
            Object.entries(diagMap[section]).forEach(function(_ref4) {
                var subsection = _ref4[0], svalue = _ref4[1];
                res[section][subsection] = {};
                switch (svalue.type) {
                  case "object":
                    svalue.groups.forEach(function(group) {
                        svalue[group.name] = {};
                        var sres = svalue[group.name];
                        group.fields.forEach(function(field) {
                            try {
                                if (field.wmi) {
                                    var wmiRes = cache[field.wmi.source];
                                    if (field.wmi.filter) wmiRes = wmiRes.filter(field.wmi.filter);
                                    if (field.format) wmiRes = wmiRes.map(field.format); else wmiRes = wmiRes.map(function(v) {
                                        return v[field.wmi.fields[0]];
                                    });
                                    if (field.multi) sres[field.name] = wmiRes; else sres[field.name] = wmiRes ? wmiRes[0] : "";
                                } else if (field.reg) {
                                    for (var sources = Array.isArray(field.reg.source) ? field.reg.source : [ field.reg.source ], regRes = void 0, _iterator = sources, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                                        var _ref5;
                                        if (_isArray) {
                                            if (_i >= _iterator.length) break;
                                            _ref5 = _iterator[_i++];
                                        } else {
                                            _i = _iterator.next();
                                            if (_i.done) break;
                                            _ref5 = _i.value;
                                        }
                                        var source = _ref5, _source$split2 = source.split("\\"), sect = _source$split2[0], path = _source$split2.slice(1), key = path.splice(-1, 1);
                                        path = path.join("\\");
                                        var wmiReg = _wmiRegistry.wmiRegistry;
                                        if (sect.endsWith("64")) {
                                            sect = sect.slice(0, -2);
                                            wmiReg = _wmiRegistry.wmiRegistry64;
                                        }
                                        regRes = wmiReg.GetStringValue(wmiReg[sect], path, key);
                                        if (!regRes) regRes = wmiReg.GetDWORDValue(wmiReg[sect], path, key);
                                        if (regRes) break;
                                    }
                                    if (field.format) sres[field.name] = field.format(regRes); else sres[field.name] = regRes;
                                } else if (field.format) sres[field.name] = field.format(); else sres[field.name] = "";
                                res[section][subsection][group.name] = sres;
                            } catch (e) {
                                res[section][subsection][group.name] = "";
                            }
                        });
                    });
                    break;

                  case "array":
                    try {
                        if (svalue.wmi) {
                            var wmiRes = cache[svalue.wmi.source];
                            if (svalue.wmi.filter) wmiRes = wmiRes.filter(svalue.wmi.filter);
                            var outputArr = wmiRes.map(function(resItem) {
                                var outputObj = {};
                                svalue.wmi.fields.forEach(function(fieldsItem) {
                                    if (resItem[fieldsItem.field]) {
                                        var fieldVal = resItem[fieldsItem.field];
                                        if (fieldsItem.format) fieldVal = fieldsItem.format(fieldVal);
                                        outputObj[fieldsItem.name] = fieldVal;
                                    }
                                });
                                return outputObj;
                            });
                            if (svalue.format) outputArr = svalue.format(outputArr);
                            res[section][subsection] = outputArr;
                        } else if (svalue.reg) {
                            var _outputArr = [], sourceArr = Array.isArray(svalue.reg.source) ? svalue.reg.source : [ svalue.reg.source ];
                            sourceArr.forEach(function(source) {
                                var _source$split3 = source.split("\\"), sect = _source$split3[0], path = _source$split3.slice(1);
                                path = path.join("\\");
                                var wmiReg = _wmiRegistry.wmiRegistry;
                                if (sect.endsWith("64")) {
                                    sect = sect.slice(0, -2);
                                    wmiReg = _wmiRegistry.wmiRegistry64;
                                }
                                wmiReg.EnumKey(wmiReg[sect], path).forEach(function(regSection) {
                                    var outputObj = {};
                                    svalue.reg.fields.forEach(function(fieldsItem) {
                                        var fieldVal = void 0;
                                        if ("RegPath" === fieldsItem.field) fieldVal = "" + source + regSection + "\\"; else {
                                            fieldVal = wmiReg.GetStringValue(wmiReg[sect], path + "\\" + regSection, fieldsItem.field);
                                            if (!fieldVal) fieldVal = wmiReg.GetDWORDValue(wmiReg[sect], path + "\\" + regSection, fieldsItem.field);
                                        }
                                        if (fieldsItem.format) fieldVal = fieldsItem.format(fieldVal);
                                        outputObj[fieldsItem.name] = fieldVal;
                                    });
                                    _outputArr.push(outputObj);
                                });
                            });
                            _outputArr = _outputArr.filter(function(obj) {
                                return Object.values(obj).some(function(v) {
                                    return !!v;
                                });
                            });
                            if (svalue.reg.filter) _outputArr = _outputArr.filter(svalue.reg.filter);
                            if (svalue.format) _outputArr = svalue.format(_outputArr);
                            res[section][subsection] = _outputArr;
                        }
                    } catch (e) {
                        res[section][subsection] = [];
                    }
                }
            });
        });
        return res;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    module.exports = function(inputVendorName) {
        var defaultVendorName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "noname", toLower = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !0;
        if (!defaultVendorName) defaultVendorName = "noname";
        if (!inputVendorName) inputVendorName = defaultVendorName;
        var replacePattern = new RegExp([ "(\\s|,\\s?)inc(\\.|$)", "\\scorporation", "\\scorp(\\.|$)", "\\scomputer", "\\scomputers", "\\selectronics", "\\gmbh", "\\stechnology", "\\stechnologies", "\\sinternational", "\\sinformation", "\\ssemiconductor", "\\sco\\.,\\s?ltd\\.?", "\\sco(\\.|$)", "\\sltd", "\\slimited", "\\sag$", "\\ssa$", "\\sas$", "(\\s|-|\\.)(g|s|a)(\\.|$)" ].join("|"), "ig");
        if (toLower) inputVendorName = inputVendorName.toLowerCase();
        var trimedVendorName = inputVendorName.replace(replacePattern, "").replace(/[_\s]+/g, " ").replace(/^\s+|\s+$/g, "").replace(/^[.,]+|[.,]+$/g, "").replace(/^_+|_+$/g, "").replace(/^-+|-+$/g, "").replace(/"/g, "'").replace(/\s+/g, " ");
        return "" === trimedVendorName ? defaultVendorName : trimedVendorName;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(collection, iterator) {
        var colItems = new Enumerator(collection);
        for (colItems.moveFirst(); !colItems.atEnd(); colItems.moveNext()) iterator(colItems.item());
    };
    module.exports = exports["default"];
}, function(module, exports) {
    module.exports = function(it, Constructor, name, forbiddenField) {
        if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) throw TypeError(name + ": incorrect invocation!");
        return it;
    };
}, function(module, exports, __webpack_require__) {
    var cof = __webpack_require__(40), TAG = __webpack_require__(15)("toStringTag"), ARG = "Arguments" == cof(function() {
        return arguments;
    }()), tryGet = function(it, key) {
        try {
            return it[key];
        } catch (e) {}
    };
    module.exports = function(it) {
        var O, T, B;
        return it === undefined ? "Undefined" : null === it ? "Null" : "string" == typeof (T = tryGet(O = Object(it), TAG)) ? T : ARG ? cof(O) : "Object" == (B = cof(O)) && "function" == typeof O.callee ? "Arguments" : B;
    };
}, function(module, exports, __webpack_require__) {
    var cof = __webpack_require__(40);
    module.exports = Object("z").propertyIsEnumerable(0) ? Object : function(it) {
        return "String" == cof(it) ? it.split("") : Object(it);
    };
}, function(module, exports) {
    exports.f = {}.propertyIsEnumerable;
}, function(module, exports, __webpack_require__) {
    var redefine = __webpack_require__(35);
    module.exports = function(target, src, safe) {
        for (var key in src) redefine(target, key, src[key], safe);
        return target;
    };
}, function(module, exports, __webpack_require__) {
    function baseCallback(func, thisArg, argCount) {
        var type = typeof func;
        if ("function" == type) return thisArg === undefined ? func : bindCallback(func, thisArg, argCount);
        if (null == func) return identity;
        if ("object" == type) return baseMatches(func); else return thisArg === undefined ? property(func) : baseMatchesProperty(func, thisArg);
    }
    var baseMatches = __webpack_require__(553), baseMatchesProperty = __webpack_require__(554), bindCallback = __webpack_require__(117), identity = __webpack_require__(273), property = __webpack_require__(599);
    module.exports = baseCallback;
}, function(module, exports, __webpack_require__) {
    function bindCallback(func, thisArg, argCount) {
        if ("function" != typeof func) return identity;
        if (thisArg === undefined) return func;
        switch (argCount) {
          case 1:
            return function(value) {
                return func.call(thisArg, value);
            };

          case 3:
            return function(value, index, collection) {
                return func.call(thisArg, value, index, collection);
            };

          case 4:
            return function(accumulator, value, index, collection) {
                return func.call(thisArg, accumulator, value, index, collection);
            };

          case 5:
            return function(value, other, key, object, source) {
                return func.call(thisArg, value, other, key, object, source);
            };
        }
        return function() {
            return func.apply(thisArg, arguments);
        };
    }
    var identity = __webpack_require__(273);
    module.exports = bindCallback;
}, function(module, exports, __webpack_require__) {
    function getNative(object, key) {
        var value = null == object ? undefined : object[key];
        return isNative(value) ? value : undefined;
    }
    var isNative = __webpack_require__(591);
    module.exports = getNative;
}, function(module, exports, __webpack_require__) {
    function isIterateeCall(value, index, object) {
        if (!isObject(object)) return !1;
        var type = typeof index;
        if ("number" == type ? isArrayLike(object) && isIndex(index, object.length) : "string" == type && index in object) {
            var other = object[index];
            return value === value ? value === other : other !== other;
        }
        return !1;
    }
    var isArrayLike = __webpack_require__(60), isIndex = __webpack_require__(183), isObject = __webpack_require__(28);
    module.exports = isIterateeCall;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function validateInstanceHandle() {
        if (!InstanceHandle || !InstanceHandle.traverseTwoPhase || !InstanceHandle.traverseEnterLeave) throw new Error("InstanceHandle not injected before use!");
    }
    var EventPluginRegistry = __webpack_require__(276), EventPluginUtils = __webpack_require__(188), accumulate = __webpack_require__(193), forEachAccumulated = __webpack_require__(195), invariant = __webpack_require__(5), isEventSupported = __webpack_require__(199), monitorCodeUse = __webpack_require__(201), listenerBank = {}, eventQueue = null, executeDispatchesAndRelease = function(event) {
        if (event) {
            var executeDispatch = EventPluginUtils.executeDispatch, PluginModule = EventPluginRegistry.getPluginModuleForEvent(event);
            if (PluginModule && PluginModule.executeDispatch) executeDispatch = PluginModule.executeDispatch;
            EventPluginUtils.executeDispatchesInOrder(event, executeDispatch);
            if (!event.isPersistent()) event.constructor.release(event);
        }
    }, InstanceHandle = null, EventPluginHub = {
        injection: {
            injectMount: EventPluginUtils.injection.injectMount,
            injectInstanceHandle: function(InjectedInstanceHandle) {
                InstanceHandle = InjectedInstanceHandle;
                if (!0) validateInstanceHandle();
            },
            getInstanceHandle: function() {
                if (!0) validateInstanceHandle();
                return InstanceHandle;
            },
            injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,
            injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName
        },
        eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,
        registrationNameModules: EventPluginRegistry.registrationNameModules,
        putListener: function(id, registrationName, listener) {
            !0 ? invariant(!listener || "function" == typeof listener, "Expected %s listener to be a function, instead got type %s", registrationName, typeof listener) : invariant(!listener || "function" == typeof listener);
            if (!0) if ("onScroll" === registrationName && !isEventSupported("scroll", !0)) {
                monitorCodeUse("react_no_scroll_event");
                console.warn("This browser doesn't support the `onScroll` event");
            }
            (listenerBank[registrationName] || (listenerBank[registrationName] = {}))[id] = listener;
        },
        getListener: function(id, registrationName) {
            var bankForRegistrationName = listenerBank[registrationName];
            return bankForRegistrationName && bankForRegistrationName[id];
        },
        deleteListener: function(id, registrationName) {
            var bankForRegistrationName = listenerBank[registrationName];
            if (bankForRegistrationName) delete bankForRegistrationName[id];
        },
        deleteAllListeners: function(id) {
            for (var registrationName in listenerBank) delete listenerBank[registrationName][id];
        },
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            for (var events, plugins = EventPluginRegistry.plugins, i = 0, l = plugins.length; i < l; i++) {
                var possiblePlugin = plugins[i];
                if (possiblePlugin) {
                    var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent);
                    if (extractedEvents) events = accumulate(events, extractedEvents);
                }
            }
            return events;
        },
        enqueueEvents: function(events) {
            if (events) eventQueue = accumulate(eventQueue, events);
        },
        processEventQueue: function() {
            var processingEventQueue = eventQueue;
            eventQueue = null;
            forEachAccumulated(processingEventQueue, executeDispatchesAndRelease);
            !0 ? invariant(!eventQueue, "processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.") : invariant(!eventQueue);
        },
        __purge: function() {
            listenerBank = {};
        },
        __getListenerBank: function() {
            return listenerBank;
        }
    };
    module.exports = EventPluginHub;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticEvent = __webpack_require__(84), getEventTarget = __webpack_require__(197), UIEventInterface = {
        view: function(event) {
            if (event.view) return event.view;
            var target = getEventTarget(event);
            if (null != target && target.window === target) return target;
            var doc = target.ownerDocument;
            if (doc) return doc.defaultView || doc.parentWindow; else return window;
        },
        detail: function(event) {
            return event.detail || 0;
        }
    };
    SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
    module.exports = SyntheticUIEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function expandDevice(id, expanded) {
        _statistics2["default"].event({
            action: "drivers alternative clicked",
            counters: [ "debug" ]
        });
        return {
            type: "DRIVERS_EXPAND_DEVICE",
            id: id,
            expanded: expanded
        };
    }
    function openDriverInfo(id, index) {
        return {
            type: "DRIVERS_INFO_OPEN",
            id: id,
            index: index
        };
    }
    function openDeviceManagerFor(id) {
        _statistics2["default"].event({
            action: "drivers popover device details clicked",
            counters: [ "debug" ]
        });
        _system.WshShell.Run('cmd /c "Rundll32.exe devmgr.dll DeviceProperties_RunDLL /DeviceID "' + id + '""', 0, !1);
        return {
            type: "DRIVERS_OPEN_DEVICE_MANAGER_FOR",
            id: id
        };
    }
    function installSingleDriver(device) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        (0, _system.deleteFile)(_system.AppData + "\\DRPSu\\diagnostics\\drivers.json");
        if (options.recommended) _statistics2["default"].event({
            action: "drivers recommended action clicked"
        }); else if (options.alternative) _statistics2["default"].event({
            action: "drivers alternative action clicked"
        });
        return function(dispatch, getState) {
            dispatch({
                type: "USER_ACTIVATED"
            });
            dispatch(new _Installation2["default"]().run({
                drivers: [ device ]
            }));
        };
    }
    function installDrivers() {
        var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        (0, _system.deleteFile)(_system.AppData + "\\DRPSu\\diagnostics\\drivers.json");
        if (options.eventAction) _statistics2["default"].event({
            action: options.eventAction,
            counters: [ "default", "shared" ]
        });
        return function(dispatch, getState) {
            var _getState = getState(), drivers = _getState.drivers, notInstalled = (0, _driversPrograms.filterNotInstalledDriverDevices)(drivers.devices), installingDevices = (0, 
            _driversPrograms.filterCheckedDrivers)(notInstalled);
            dispatch({
                type: "USER_ACTIVATED"
            });
            dispatch(new _Installation2["default"]().run({
                drivers: installingDevices
            }));
        };
    }
    function installDriversAndPrograms() {
        var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        (0, _system.deleteFile)(_system.AppData + "\\DRPSu\\diagnostics\\newsoft.json");
        (0, _system.deleteFile)(_system.AppData + "\\DRPSu\\diagnostics\\drivers.json");
        if (options.eventAction) _statistics2["default"].event({
            action: options.eventAction,
            counters: [ "default", "shared" ]
        });
        var programsFilterFunc = void 0;
        options.mode = options.mode ? options.mode : "ALL";
        switch (options.mode) {
          case "ALL":
            programsFilterFunc = _driversPrograms.filterCheckedPrograms;
            break;

          case "DRIVERS":
            programsFilterFunc = _driversPrograms.filterCheckedDriverUtilities;
            break;

          default:
            throw new Error("Not correct mode for installDriversAndPrograms specified");
        }
        return function(dispatch, getState) {
            var _getState2 = getState(), drivers = _getState2.drivers, programs = _getState2.programs, installingDevices = (0, 
            _driversPrograms.filterCheckedDrivers)(drivers.devices), installingPrograms = programsFilterFunc(programs);
            dispatch({
                type: "USER_ACTIVATED"
            });
            dispatch(new _Installation2["default"]().run({
                drivers: installingDevices,
                programs: installingPrograms,
                zone: options.zone
            }));
        };
    }
    function installAll(_ref) {
        var devices = _ref.devices, programs = _ref.programs, _ref$options = _ref.options, options = _ref$options === undefined ? {} : _ref$options;
        (0, _system.deleteFile)(_system.AppData + "\\DRPSu\\diagnostics\\newsoft.json");
        (0, _system.deleteFile)(_system.AppData + "\\DRPSu\\diagnostics\\drivers.json");
        if (options.eventAction) _statistics2["default"].event({
            action: options.eventAction,
            counters: [ "default", "shared" ]
        });
        return function(dispatch, getState) {
            var installingDevices = devices.map(function(device) {
                return {
                    recommendedDriver: device.otherDrivers.find(function(driver) {
                        return !!driver.isChecked;
                    }),
                    deviceId: device.deviceId
                };
            });
            dispatch({
                type: "USER_ACTIVATED"
            });
            dispatch(new _Installation2["default"]().run({
                drivers: installingDevices,
                programs: (0, _uniq2["default"])(programs, "id")
            }));
        };
    }
    function hideZeroDrivers() {
        return {
            type: "DRIVERS_HIDE_ZERO_DRIVERS"
        };
    }
    function toggleAdminMode() {
        _statistics2["default"].event({
            action: "drivers admin mode switch used",
            counters: [ "debug" ]
        });
        return {
            type: "DRIVERS_TOGGLE_ADMIN_MODE"
        };
    }
    function selectDeviceDriver(_ref2) {
        return {
            type: "DRIVERS_DEVICE_DRIVER_SELECTED",
            _deviceId: _ref2._deviceId,
            driverId: _ref2.driverId
        };
    }
    function toggleDevice(id, checked) {
        return {
            type: "DRIVERS_TOGGLE_DEVICE",
            id: id,
            checked: checked
        };
    }
    function toggleNotInstalled(isChecked) {
        _statistics2["default"].event({
            action: "drivers install list select all clicked",
            counters: [ "debug" ]
        });
        return {
            type: "DRIVERS_TOGGLE_NOT_INSTALLED",
            payload: {
                isChecked: isChecked
            }
        };
    }
    function toggleNotUpdated(isChecked) {
        _statistics2["default"].event({
            action: "drivers update list select all clicked",
            counters: [ "debug" ]
        });
        return {
            type: "DRIVERS_TOGGLE_NOT_UPDATED",
            payload: {
                isChecked: isChecked
            }
        };
    }
    function toggleNotRecommendedVisibility() {
        _statistics2["default"].event({
            action: "drivers installed list switch used",
            counters: [ "debug" ]
        });
        return {
            type: "DRIVERS_TOGGLE_NOT_RECOMMENDED_VISIBILITY"
        };
    }
    function expandViewOptionsDropdown(isExpanded) {
        return {
            type: "DRIVERS_EXPAND_VIEW_OPTIONS_DROPDOWN",
            payload: {
                isExpanded: isExpanded
            }
        };
    }
    function toggleViewOption(optionName) {
        _statistics2["default"].event({
            action: "drivers dropdown option used",
            counters: [ "debug" ]
        });
        return {
            type: "DRIVERS_TOGGLE_VIEW_OPTION",
            payload: {
                optionName: optionName
            }
        };
    }
    function toggleDriverUtilities(isChecked) {
        _statistics2["default"].event({
            action: "drivers utilities list select all clicked",
            counters: [ "debug" ]
        });
        return {
            type: "TOGGLE_DRIVER_UTILITIES",
            payload: {
                isChecked: isChecked
            }
        };
    }
    function toggleAllDrivers(isChecked) {
        _statistics2["default"].event({
            action: "drivers select all clicked"
        });
        return {
            type: "DRIVERS_CHECK_ALL_TOGGLED",
            payload: {
                isChecked: isChecked
            }
        };
    }
    function openDriverMenu(id, _deviceId, isOpened) {
        return {
            type: "DRIVERS_OPEN_DRIVER_MENU",
            payload: {
                id: id,
                _deviceId: _deviceId,
                isOpened: isOpened
            }
        };
    }
    exports.__esModule = !0;
    exports.checkZeroDriversCondition = undefined;
    exports.expandDevice = expandDevice;
    exports.openDriverInfo = openDriverInfo;
    exports.openDeviceManagerFor = openDeviceManagerFor;
    exports.installSingleDriver = installSingleDriver;
    exports.installDrivers = installDrivers;
    exports.installDriversAndPrograms = installDriversAndPrograms;
    exports.installAll = installAll;
    exports.hideZeroDrivers = hideZeroDrivers;
    exports.toggleAdminMode = toggleAdminMode;
    exports.selectDeviceDriver = selectDeviceDriver;
    exports.toggleDevice = toggleDevice;
    exports.toggleNotInstalled = toggleNotInstalled;
    exports.toggleNotUpdated = toggleNotUpdated;
    exports.toggleNotRecommendedVisibility = toggleNotRecommendedVisibility;
    exports.expandViewOptionsDropdown = expandViewOptionsDropdown;
    exports.toggleViewOption = toggleViewOption;
    exports.toggleDriverUtilities = toggleDriverUtilities;
    exports.toggleAllDrivers = toggleAllDrivers;
    exports.openDriverMenu = openDriverMenu;
    var _uniq = __webpack_require__(141), _uniq2 = _interopRequireDefault(_uniq), _system = __webpack_require__(6), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _driversPrograms = __webpack_require__(29), _Installation = __webpack_require__(148), _Installation2 = _interopRequireDefault(_Installation);
    exports.checkZeroDriversCondition = function() {
        return function(dispatch, getState) {
            var _getState3 = getState(), drivers = _getState3.drivers, programs = _getState3.programs, zeroDriversVisible = drivers.zeroDriversVisible, devices = drivers.devices;
            return zeroDriversVisible && !(0, _driversPrograms.countCheckedByDefaultDrivers)(devices, programs);
        };
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function _asyncToGenerator(fn) {
            return function() {
                var gen = fn.apply(this, arguments);
                return new Promise(function(resolve, reject) {
                    function step(key, arg) {
                        try {
                            var info = gen[key](arg), value = info.value;
                        } catch (error) {
                            reject(error);
                            return;
                        }
                        if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                            step("next", value);
                        }, function(err) {
                            step("throw", err);
                        });
                    }
                    return step("next");
                });
            };
        }
        function loadSettings() {
            var _this = this;
            return function() {
                var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch) {
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            dispatch({
                                type: "SETTINGS_LOADED",
                                payload: {
                                    settingsData: (0, _SettingsData2["default"])(l),
                                    settings: _settings2["default"].getAll()
                                }
                            });
                            dispatch((0, _onboardingActions.loadOnboardingSettings)());

                          case 2:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, _this);
                }));
                return function(_x) {
                    return _ref.apply(this, arguments);
                };
            }();
        }
        function disableSettings(keyPaths, data) {
            return function(dispatch) {
                keyPaths.forEach(function(keyPath) {
                    _settings2["default"].disable(keyPath, data);
                    dispatch({
                        type: "SETTINGS_DISABLE_SETTING",
                        payload: {
                            keyPath: keyPath,
                            data: data
                        }
                    });
                });
                _settings2["default"].save();
            };
        }
        function enableSettings(keyPaths) {
            return function(dispatch, getState) {
                keyPaths.forEach(function(keyPath) {
                    _settings2["default"].enable(keyPath);
                    dispatch({
                        type: "SETTINGS_ENABLE_SETTING",
                        payload: {
                            keyPath: keyPath
                        }
                    });
                });
                _settings2["default"].save();
            };
        }
        function setSetting(keyPath, data) {
            return function(dispatch, getState) {
                _settings2["default"].set(keyPath, data).save();
                dispatch({
                    type: "SETTINGS_SET_SETTING",
                    payload: {
                        keyPath: keyPath,
                        data: data
                    }
                });
            };
        }
        exports.__esModule = !0;
        exports.changeSetting = exports.performAllSettingsAction = undefined;
        exports.loadSettings = loadSettings;
        exports.disableSettings = disableSettings;
        exports.enableSettings = enableSettings;
        exports.setSetting = setSetting;
        var _SettingsData = __webpack_require__(318), _SettingsData2 = _interopRequireDefault(_SettingsData), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), _activateFirebug = __webpack_require__(319), _activateFirebug2 = _interopRequireDefault(_activateFirebug), _handleClasses = __webpack_require__(211), _toggleStatistics = __webpack_require__(328), _toggleStatistics2 = _interopRequireDefault(_toggleStatistics), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _onboardingActions = __webpack_require__(86), performSettingAction = function(keyPath, data) {
            switch (keyPath) {
              case "general.activateFirebug":
                if (data.value) (0, _activateFirebug2["default"])();
                break;

              case "general.minifyMenu":
                data.value ? (0, _handleClasses.addClass)(document.body, "minify-menu") : (0, _handleClasses.removeClass)(document.body, "minify-menu");
                break;

              case "general.enableLogging":
                _logs2["default"].logging = data.value;
                break;

              case "driverSelection.sendStatistics":
                (0, _toggleStatistics2["default"])(data.value);
            }
        };
        exports.performAllSettingsAction = function(settings) {
            Object.entries(settings).forEach(function(_ref2) {
                var sectionId = _ref2[0], section = _ref2[1];
                Object.entries(section).forEach(function(_ref3) {
                    var settingId = _ref3[0], setting = _ref3[1];
                    performSettingAction(sectionId + "." + settingId, setting);
                });
            });
        }, exports.changeSetting = function(keyPath, setting, value) {
            return function(dispatch, getState) {
                dispatch(setSetting(keyPath, {
                    value: value
                }));
                if ("switch" === setting.type) {
                    var dependentSettings = setting.dependentSettings;
                    if (dependentSettings) value ? dispatch(enableSettings(dependentSettings)) : dispatch(disableSettings(dependentSettings, {
                        value: !1
                    }));
                }
                performSettingAction(keyPath, {
                    value: value
                });
            };
        };
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _runCommandAsync = __webpack_require__(75), _runExeAsynchronously = __webpack_require__(225), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _wmi = __webpack_require__(23), _logs = __webpack_require__(4), _systemScanner = __webpack_require__(65), _systemScanner2 = _interopRequireDefault(_systemScanner), _getRandomFromInterval = __webpack_require__(151), _getRandomFromInterval2 = _interopRequireDefault(_getRandomFromInterval), log = (0, 
    _logs.getLogger)("unzip"), Unzip = function() {
        function Unzip() {
            _classCallCheck(this, Unzip);
        }
        Unzip.prototype.getExeName = function() {
            if (!this.exeName) this.exeName = _system.fso.fileExists("tools\\driverpack-7za.exe") ? "driverpack-7za.exe" : "7za.exe";
            return this.exeName;
        };
        Unzip.prototype.tempDir = function() {
            return _system.WshShell.ExpandEnvironmentStrings("%temp%\\drp\\unzip\\drp");
        };
        Unzip.prototype.pathToPack = function(name) {
            return "..\\drivers\\" + name + ".7z";
        };
        Unzip.prototype.getDestDir = function(dest) {
            if (!dest) return this.tempDir();
            if (-1 === dest.indexOf("\\")) return this.tempDir() + "\\" + dest; else return dest;
        };
        Unzip.prototype.run7z = function(pack, zipFile, directory, jobId, fake) {
            if (fake) return new Promise(function(resolve, reject) {
                setTimeout(function() {
                    return resolve(0);
                }, 1e3 * (0, _getRandomFromInterval2["default"])(2, 10));
            });
            var destDir = this.getDestDir(pack), triggerFile = (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\unzipping_" + jobId + ".txt", keys = 'x -y -o"' + destDir + '" "' + zipFile + '"';
            if (directory) keys = keys + ' "' + directory + '"';
            return (0, _runExeAsynchronously.runExeAsynchronously)({
                exePath: "tools\\" + this.getExeName(),
                keys: keys,
                triggerFile: triggerFile
            }).then(function(exitCode) {
                if (0 === exitCode) log.info("unzip run success", {}, "run:succeeded"); else log.error("unzip run failed", {
                    exitCode: exitCode
                }, "run:failed");
                return exitCode;
            }).caught(function(err) {
                throw err;
            });
        };
        Unzip.prototype.unzipFromPack = function(pack, directory, jobId) {
            var zipFile = this.pathToPack(pack);
            return this.run7z(pack, zipFile, directory, jobId);
        };
        Unzip.prototype.stopUnzipping = function(zipName) {
            var commandLineLike = "%" + this.getExeName() + "%" + zipName + "%";
            (0, _wmi.getWMIObjects)([ "ProcessId" ], "Win32_Process", 'CommandLine LIKE "' + commandLineLike + '"').forEach(function(_ref) {
                var ProcessId = _ref.ProcessId;
                _system.WshShell.Run("cmd /c taskkill /f /t /pid " + ProcessId, 0, !0);
            });
        };
        Unzip.prototype.checkZipArchiveFilesCount = function(device, fake) {
            var _this = this;
            if (fake) return function(dispatch) {}; else return function(dispatch) {
                var driver = device.recommendedDriver, zipFile = void 0;
                if (_system.fso.FileExists("..\\drivers\\" + driver.pack + ".7z")) zipFile = "..\\drivers\\" + driver.pack + ".7z"; else {
                    var zipName = driver.link.split("/").slice(-1);
                    zipFile = _systemScanner2["default"].getDriversPath() + "\\" + zipName;
                }
                var zipFileLog = (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\log_zip_file_" + device.jobId + ".txt", totalCount = void 0;
                (0, _runCommandAsync.runCommandAsync)({
                    command: "tools\\" + _this.getExeName() + ' l "' + zipFile + '" | findstr ' + driver.directory + ' | find /v /c ""',
                    triggerFile: zipFileLog,
                    customOutput: !0,
                    checkInterval: 300,
                    timeout: 6e4
                }).then(function() {
                    try {
                        var textStream = _system.fso.OpenTextFile(zipFileLog, 1, !1), text = textStream.ReadAll(), matches = text.match(/(\d+)/);
                        totalCount = matches && matches[1] || 0;
                        dispatch({
                            type: "NEW_ORDER_ZIP_TOTAL_COUNT_RECEIVED",
                            payload: device,
                            meta: {
                                id: device.id,
                                totalCount: totalCount
                            }
                        });
                        textStream.Close();
                    } catch (error) {
                        log.error("checkZipArchiveFilesCount: read file error", {
                            error: error
                        }, "checkZipArchiveFilesCount:readFileError");
                    }
                });
            };
        };
        Unzip.prototype.watchUnzippedPartFilesCount = function(device, fake) {
            var _this2 = this;
            if (fake) return function(dispatch) {}; else return function(dispatch) {
                var driver = device.recommendedDriver, destDir = _this2.getDestDir(driver.pack), driverDirectory = driver.directory.replace(/\\$/, ""), checkingDirectory = void 0;
                checkingDirectory = destDir + "\\" + driverDirectory;
                device.unzippingTimer = setInterval(function() {
                    if (_system.fso.FolderExists(checkingDirectory)) {
                        var fsoFolder = _system.fso.GetFolder(checkingDirectory), totalFilesCount = fsoFolder.Files.Count, totalSubfoldersCount = fsoFolder.Subfolders.Count;
                        dispatch({
                            type: "NEW_ORDER_UNZIPPED_PART_UPDATED",
                            payload: device,
                            meta: {
                                id: device.id,
                                unzippedCount: totalFilesCount + totalSubfoldersCount
                            }
                        });
                    }
                }, 1e3);
            };
        };
        return Unzip;
    }();
    exports["default"] = new Unzip();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    exports.getPartnerInfo = exports.checkSoftInstalled = exports.dropInstalledSoftCache = undefined;
    var _getDiagnostics = __webpack_require__(108), _getDiagnostics2 = _interopRequireDefault(_getDiagnostics), _partnerSoft = __webpack_require__(339), _partnerSoft2 = _interopRequireDefault(_partnerSoft), installedSoftCache = void 0, getInstalledSoft = function() {
        if (!installedSoftCache) installedSoftCache = (0, _getDiagnostics2["default"])("soft").Software["Installed Software"];
        return installedSoftCache;
    };
    exports.dropInstalledSoftCache = function() {
        installedSoftCache = undefined;
    }, exports.checkSoftInstalled = function(nameReg, installedSoft) {
        if (!installedSoft) installedSoft = getInstalledSoft();
        return installedSoft.some(function(soft) {
            return nameReg.test(soft.Program);
        });
    }, exports.getPartnerInfo = function(soft) {
        var pSoft = _partnerSoft2["default"].find(function(_ref) {
            return _ref.nameReg.test(soft.Program);
        });
        if (!pSoft) return {
            isPartner: !1
        };
        if (!pSoft.getClids) return {
            title: pSoft.title,
            isPartner: !0
        };
        var clids = pSoft.getClids();
        return {
            title: pSoft.title,
            clids: clids,
            isPartner: clids.some(function(clid) {
                return pSoft.clidsReg.test(clid);
            })
        };
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    exports.getDevicesStatus = exports.getDevicesCount = exports.getHardware = undefined;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _wmi = __webpack_require__(23), _iterate = __webpack_require__(110), _iterate2 = _interopRequireDefault(_iterate), _getDeviceProblem = __webpack_require__(218), _getDeviceProblem2 = _interopRequireDefault(_getDeviceProblem), re1 = /^(.*(?:VEN|VID).*(?:DEV|PID).*?)(?=&|\\|$).*?(?=\\|$)/, re2 = /^((?:ACPI\\(?:IO|FUJITSU)|.*?(?!\\(?:IO|FUJITSU)\\))\\.*?)\\.*/, remap = function(_ref) {
        return {
            deviceId: _ref.DeviceID,
            status: _ref.Status,
            statusCode: _ref.ConfigManagerErrorCode,
            classGuid: _ref.ClassGuid
        };
    };
    exports.getHardware = function() {
        var DevicecolItems = _wmi.objWMIService.ExecQuery("SELECT * FROM  Win32_PnPEntity", "WQL"), DeviceenumItems = new Enumerator(DevicecolItems);
        DeviceenumItems.moveFirst();
        for (var DriverPackInstalled = [], i = 0; !1 === DeviceenumItems.atEnd(); i++) !function(i) {
            var deviceItem = DeviceenumItems.item(), hardwareId = [];
            if (deviceItem.HardWareID !== undefined && null !== deviceItem.HardWareID && deviceItem.HardWareID.toArray) for (var h = 0; h < deviceItem.HardWareID.toArray().length; h++) hardwareId.push(deviceItem.HardWareID.toArray()[h].toString().toUpperCase()); else if (deviceItem.DeviceID) {
                var id = deviceItem.DeviceID.toUpperCase().replace(/^\*\s*/, "ACPI\\").replace(/^ACPI\\VEN_([0-9A-Z]+)&DEV_([0-9A-Z]+)/, "ACPI\\$1$2"), m = re1.exec(id);
                if (m) {
                    for (var parts = m[0].slice(m[1].length + 1).split("&"), hwid = m[1], p = 0; p < parts.length; p++) {
                        hwid += "&" + parts[p];
                        hardwareId.push(hwid);
                    }
                    parts.forEach(function(part) {
                        hwid += "&" + part;
                        hardwareId.push(hwid);
                    });
                } else hardwareId.push(id.replace(re2, "$1"));
            }
            DriverPackInstalled.push(_extends({}, remap(deviceItem), {
                hardwareId: hardwareId
            }));
            DeviceenumItems.moveNext();
        }();
        return DriverPackInstalled;
    }, exports.getDevicesCount = function(_ref2) {
        var status = _ref2.status, errCode = _ref2.errCode, filterBroken = _ref2.filterBroken, query = "SELECT DeviceID FROM Win32_PnPEntity", whereParts = [];
        if (status) whereParts.push('Status = "' + status + '"');
        if (errCode) {
            if (errCode.min) whereParts.push("ConfigManagerErrorCode >= " + errCode.min);
            if (errCode.max) whereParts.push("ConfigManagerErrorCode <= " + errCode.max);
        }
        if (whereParts.length > 0) query = query + " WHERE " + whereParts.join(" AND ");
        var DevicecolItems = _wmi.objWMIService.ExecQuery(query, "WQL");
        if (!filterBroken) return DevicecolItems.Count;
        var res = 0, DeviceenumItems = new Enumerator(DevicecolItems);
        DeviceenumItems.moveFirst();
        for (var i = 0; !1 === DeviceenumItems.atEnd(); i++) {
            var DeviceID = DeviceenumItems.item().DeviceID;
            if (DeviceID && !(0, _getDeviceProblem2["default"])(DeviceID)) res++;
            DeviceenumItems.moveNext();
        }
        return res;
    }, exports.getDevicesStatus = function(hwids) {
        var where = hwids.map(function(deviceId) {
            return "(DeviceID=" + JSON.stringify(deviceId) + ")";
        }).join(" OR "), query = "SELECT * FROM  Win32_PnPEntity" + (where ? " WHERE " + where : ""), res = [];
        (0, _iterate2["default"])(_wmi.objWMIService.ExecQuery(query, "WQL"), function(item) {
            res.push(_extends({}, remap(item)));
        });
        return res;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.vendorsDict = exports.trimVendorName = undefined;
    var _basicNBVendors = __webpack_require__(850), _basicNBVendors2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_basicNBVendors), trimVendorName = __webpack_require__(109);
    exports.trimVendorName = trimVendorName;
    var vendorsDict = exports.vendorsDict = {};
    _basicNBVendors2["default"].forEach(function(_ref) {
        var name = _ref.name;
        _ref.altNames.forEach(function(altName) {
            vendorsDict[altName] = name;
        });
    });
    exports["default"] = function(vendor) {
        vendor = trimVendorName(vendor);
        return vendorsDict[vendor] ? vendorsDict[vendor] : vendor;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = new ActiveXObject("WScript.Shell");
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.ParseCMD = undefined;
    var _utils = __webpack_require__(19);
    exports.ParseCMD = function(cmd) {
        var args = (0, _utils.ParseCMDString)(cmd);
        if (args.length > 2 && "--sfx" === args[1]) {
            var _args = args, command = _args[0], sfxName = _args[2], overwrite = _args.slice(3);
            args = [ command ].concat((0, _utils.ParseSFXName)(sfxName));
            overwrite.forEach(function(val, ind) {
                if (val) args[ind + 1] = val;
            });
        }
        return args;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.wmiRegRead = exports.wmiRegistry64 = exports.wmiRegistry = undefined;
    var _WMIRegistry = __webpack_require__(342), _WMIRegistry2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_WMIRegistry), wmiRegistry = exports.wmiRegistry = new _WMIRegistry2["default"](), wmiRegistry64 = exports.wmiRegistry64 = new _WMIRegistry2["default"](!0);
    exports.wmiRegRead = function(regPath) {
        var _regPath$split = regPath.split("\\"), sect = _regPath$split[0], path = _regPath$split.slice(1), key = path.splice(-1);
        path = path.join("\\");
        var wmiReg = wmiRegistry;
        if (sect.endsWith("64")) {
            sect = sect.slice(0, -2);
            wmiReg = wmiRegistry64;
        }
        return wmiReg.GetStringValue(wmiReg[sect], path, key);
    };
}, function(module, exports, __webpack_require__) {
    var toIObject = __webpack_require__(32), toLength = __webpack_require__(24), toIndex = __webpack_require__(80);
    module.exports = function(IS_INCLUDES) {
        return function($this, el, fromIndex) {
            var value, O = toIObject($this), length = toLength(O.length), index = toIndex(fromIndex, length);
            if (IS_INCLUDES && el != el) for (;length > index; ) {
                value = O[index++];
                if (value != value) return !0;
            } else for (;length > index; index++) if (IS_INCLUDES || index in O) if (O[index] === el) return IS_INCLUDES || index || 0;
            return !IS_INCLUDES && -1;
        };
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var hide = __webpack_require__(33), redefine = __webpack_require__(35), fails = __webpack_require__(9), defined = __webpack_require__(41), wks = __webpack_require__(15);
    module.exports = function(KEY, length, exec) {
        var SYMBOL = wks(KEY), fns = exec(defined, SYMBOL, ""[KEY]), strfn = fns[0], rxfn = fns[1];
        if (fails(function() {
            var O = {};
            O[SYMBOL] = function() {
                return 7;
            };
            return 7 != ""[KEY](O);
        })) {
            redefine(String.prototype, KEY, strfn);
            hide(RegExp.prototype, SYMBOL, 2 == length ? function(string, arg) {
                return rxfn.call(string, this, arg);
            } : function(string) {
                return rxfn.call(string, this);
            });
        }
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var anObject = __webpack_require__(11);
    module.exports = function() {
        var that = anObject(this), result = "";
        if (that.global) result += "g";
        if (that.ignoreCase) result += "i";
        if (that.multiline) result += "m";
        if (that.unicode) result += "u";
        if (that.sticky) result += "y";
        return result;
    };
}, function(module, exports, __webpack_require__) {
    var ctx = __webpack_require__(57), call = __webpack_require__(237), isArrayIter = __webpack_require__(163), anObject = __webpack_require__(11), toLength = __webpack_require__(24), getIterFn = __webpack_require__(179), BREAK = {}, RETURN = {}, exports = module.exports = function(iterable, entries, fn, that, ITERATOR) {
        var length, step, iterator, result, iterFn = ITERATOR ? function() {
            return iterable;
        } : getIterFn(iterable), f = ctx(fn, that, entries ? 2 : 1), index = 0;
        if ("function" != typeof iterFn) throw TypeError(iterable + " is not iterable!");
        if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
            result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
            if (result === BREAK || result === RETURN) return result;
        } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done; ) {
            result = call(iterator, f, step.value, entries);
            if (result === BREAK || result === RETURN) return result;
        }
    };
    exports.BREAK = BREAK;
    exports.RETURN = RETURN;
}, function(module, exports) {
    module.exports = function(fn, args, that) {
        var un = that === undefined;
        switch (args.length) {
          case 0:
            return un ? fn() : fn.call(that);

          case 1:
            return un ? fn(args[0]) : fn.call(that, args[0]);

          case 2:
            return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]);

          case 3:
            return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]);

          case 4:
            return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]);
        }
        return fn.apply(that, args);
    };
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), cof = __webpack_require__(40), MATCH = __webpack_require__(15)("match");
    module.exports = function(it) {
        var isRegExp;
        return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : "RegExp" == cof(it));
    };
}, function(module, exports, __webpack_require__) {
    var ITERATOR = __webpack_require__(15)("iterator"), SAFE_CLOSING = !1;
    try {
        var riter = [ 7 ][ITERATOR]();
        riter["return"] = function() {
            SAFE_CLOSING = !0;
        };
        Array.from(riter, function() {
            throw 2;
        });
    } catch (e) {}
    module.exports = function(exec, skipClosing) {
        if (!skipClosing && !SAFE_CLOSING) return !1;
        var safe = !1;
        try {
            var arr = [ 7 ], iter = arr[ITERATOR]();
            iter.next = function() {
                return {
                    done: safe = !0
                };
            };
            arr[ITERATOR] = function() {
                return iter;
            };
            exec(arr);
        } catch (e) {}
        return safe;
    };
}, function(module, exports, __webpack_require__) {
    module.exports = __webpack_require__(76) || !__webpack_require__(9)(function() {
        var K = Math.random();
        __defineSetter__.call(null, K, function() {});
        delete __webpack_require__(8)[K];
    });
}, function(module, exports) {
    exports.f = Object.getOwnPropertySymbols;
}, function(module, exports, __webpack_require__) {
    for (var Typed, global = __webpack_require__(8), hide = __webpack_require__(33), uid = __webpack_require__(81), TYPED = uid("typed_array"), VIEW = uid("view"), ABV = !(!global.ArrayBuffer || !global.DataView), CONSTR = ABV, i = 0, TypedArrayConstructors = "Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(","); i < 9; ) if (Typed = global[TypedArrayConstructors[i++]]) {
        hide(Typed.prototype, TYPED, !0);
        hide(Typed.prototype, VIEW, !0);
    } else CONSTR = !1;
    module.exports = {
        ABV: ABV,
        CONSTR: CONSTR,
        TYPED: TYPED,
        VIEW: VIEW
    };
}, function(module, exports, __webpack_require__) {
    function uniq(array, isSorted, iteratee, thisArg) {
        if (!(array ? array.length : 0)) return [];
        if (null != isSorted && "boolean" != typeof isSorted) {
            thisArg = iteratee;
            iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
            isSorted = !1;
        }
        iteratee = null == iteratee ? iteratee : baseCallback(iteratee, thisArg, 3);
        return isSorted ? sortedUniq(array, iteratee) : baseUniq(array, iteratee);
    }
    var baseCallback = __webpack_require__(116), baseUniq = __webpack_require__(562), isIterateeCall = __webpack_require__(119), sortedUniq = __webpack_require__(586);
    module.exports = uniq;
}, function(module, exports, __webpack_require__) {
    var baseForOwn = __webpack_require__(263), createBaseEach = __webpack_require__(570), baseEach = createBaseEach(baseForOwn);
    module.exports = baseEach;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var focusNode = __webpack_require__(292), AutoFocusMixin = {
        componentDidMount: function() {
            if (this.props.autoFocus) focusNode(this.getDOMNode());
        }
    };
    module.exports = AutoFocusMixin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticUIEvent = __webpack_require__(121), ViewportMetrics = __webpack_require__(290), getEventModifierState = __webpack_require__(196), MouseEventInterface = {
        screenX: null,
        screenY: null,
        clientX: null,
        clientY: null,
        ctrlKey: null,
        shiftKey: null,
        altKey: null,
        metaKey: null,
        getModifierState: getEventModifierState,
        button: function(event) {
            var button = event.button;
            if ("which" in event) return button; else return 2 === button ? 2 : 4 === button ? 1 : 0;
        },
        buttons: null,
        relatedTarget: function(event) {
            return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
        },
        pageX: function(event) {
            return "pageX" in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
        },
        pageY: function(event) {
            return "pageY" in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
        }
    };
    SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
    module.exports = SyntheticMouseEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var invariant = __webpack_require__(5), Mixin = {
        reinitializeTransaction: function() {
            this.transactionWrappers = this.getTransactionWrappers();
            if (!this.wrapperInitData) this.wrapperInitData = []; else this.wrapperInitData.length = 0;
            this._isInTransaction = !1;
        },
        _isInTransaction: !1,
        getTransactionWrappers: null,
        isInTransaction: function() {
            return !!this._isInTransaction;
        },
        perform: function(method, scope, a, b, c, d, e, f) {
            !0 ? invariant(!this.isInTransaction(), "Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.") : invariant(!this.isInTransaction());
            var errorThrown, ret;
            try {
                this._isInTransaction = !0;
                errorThrown = !0;
                this.initializeAll(0);
                ret = method.call(scope, a, b, c, d, e, f);
                errorThrown = !1;
            } finally {
                try {
                    if (errorThrown) try {
                        this.closeAll(0);
                    } catch (err) {} else this.closeAll(0);
                } finally {
                    this._isInTransaction = !1;
                }
            }
            return ret;
        },
        initializeAll: function(startIndex) {
            for (var transactionWrappers = this.transactionWrappers, i = startIndex; i < transactionWrappers.length; i++) {
                var wrapper = transactionWrappers[i];
                try {
                    this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;
                    this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;
                } finally {
                    if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) try {
                        this.initializeAll(i + 1);
                    } catch (err) {}
                }
            }
        },
        closeAll: function(startIndex) {
            !0 ? invariant(this.isInTransaction(), "Transaction.closeAll(): Cannot close transaction when none are open.") : invariant(this.isInTransaction());
            for (var transactionWrappers = this.transactionWrappers, i = startIndex; i < transactionWrappers.length; i++) {
                var errorThrown, wrapper = transactionWrappers[i], initData = this.wrapperInitData[i];
                try {
                    errorThrown = !0;
                    if (initData !== Transaction.OBSERVED_ERROR) wrapper.close && wrapper.close.call(this, initData);
                    errorThrown = !1;
                } finally {
                    if (errorThrown) try {
                        this.closeAll(i + 1);
                    } catch (e) {}
                }
            }
            this.wrapperInitData.length = 0;
        }
    }, Transaction = {
        Mixin: Mixin,
        OBSERVED_ERROR: {}
    };
    module.exports = Transaction;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isValidComponentDescriptor(descriptor) {
        return descriptor && "function" == typeof descriptor.type && "function" == typeof descriptor.type.prototype.mountComponent && "function" == typeof descriptor.type.prototype.receiveComponent;
    }
    function instantiateReactComponent(descriptor) {
        !0 ? invariant(isValidComponentDescriptor(descriptor), "Only React Components are valid for mounting.") : invariant(isValidComponentDescriptor(descriptor));
        return new descriptor.type(descriptor);
    }
    var invariant = __webpack_require__(5);
    module.exports = instantiateReactComponent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
        return typeof obj;
    } : function(obj) {
        return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    }, _system = __webpack_require__(6), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _antivirus = __webpack_require__(216), _antivirus2 = _interopRequireDefault(_antivirus), _driversPrograms = __webpack_require__(29), _checkIfAppEsteem = __webpack_require__(320), _checkIfAppEsteem2 = _interopRequireDefault(_checkIfAppEsteem), SoftPack = function() {
        function SoftPack() {
            _classCallCheck(this, SoftPack);
        }
        SoftPack.prototype.getSoftPath = function() {
            return _system.AppData + "\\DRPSu\\PROGRAMS";
        };
        SoftPack.prototype.run = function() {
            var _this = this;
            return new Promise(function(resolve, reject) {
                _logs2["default"].info("softJs called", {}, "softJs:called");
                window.SoftPack.jsonCallback = function(json) {
                    if (!window.geoip || !window.geoip.geoip_country_code) window.geoip = __webpack_require__(798);
                    _logs2["default"].debug("softJs callback with JSON", {
                        json: json
                    }, "softJs:callback");
                    _logs2["default"].info("GeoIp set", {
                        geoip: window.geoip
                    }, "geoip:set");
                    _this.soft = json;
                    _this.applyAll();
                    resolve();
                };
                _antivirus2["default"].init();
                setTimeout(function() {
                    _this.insertSoftScript();
                }, 100);
            });
        };
        SoftPack.prototype.insertScript = function(src) {
            var documentElement = document.documentElement, script = document.createElement("script");
            script.src = src;
            documentElement.insertBefore(script, documentElement.lastChild);
        };
        SoftPack.prototype.insertSoftScript = function insertSoftScript() {
            if (_system.fso.FileExists("js/soft.js")) try {
                var http = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
                http.open("GET", window.softEndpoint);
                http.send();
                if (200 === http.Status) eval(http.ResponseText); else throw new Error("status code is " + http.Status);
            } catch (err) {
                this.insertScript("js/soft.js");
            } else this.insertScript(window.softEndpoint);
        };
        SoftPack.prototype.applyAll = function() {
            window.isAppEsteem = (0, _checkIfAppEsteem2["default"])();
            if (window.isAppEsteem) {
                if (!this.declinedPrograms) this.declinedPrograms = [];
                if (!this.canceledPrograms) this.canceledPrograms = [];
            }
            var programs = this.applyTargeting(this.soft);
            window.store.dispatch({
                type: "PROGRAMS_LOADED",
                payload: programs
            });
        };
        SoftPack.prototype.applyTargeting = function(json) {
            json.forEach(function(item, i, json) {
                json[i].isVisible = !0;
                json[i].isInstalled = !1;
                json[i].IsChecked = !1;
                var systemData = {
                    statistics: window.statistics,
                    antivirus: _antivirus2["default"],
                    geoip: window.geoip,
                    os: window.os,
                    system: window.system,
                    wmi: window.wmi,
                    diagnostics: window.diagnostics
                };
                if (json[i].Targeting) try {
                    json[i].isVisible = json[i].Targeting(systemData);
                } catch (error) {
                    _logs2["default"].error("Targeting failed", {
                        error: error
                    }, "softTargeting:Targeting:failed");
                }
                if (json[i].isVisible) {
                    if (json[i].CheckInstalled) json[i].isInstalled = json[i].CheckInstalled(systemData); else {
                        if (json[i].Registry_32) if (window.system.RegExists(json[i].Registry_32)) json[i].isInstalled = !0;
                        if (window.os.is64 && json[i].Registry_64) {
                            var parts = json[i].Registry_64.split("\\"), value = parts.pop(), path = parts.join("\\"), com = '%windir%\\sysnative\\reg query "' + path + '" /v "' + value + '"';
                            if (!window.system.WshShell.run(com, 0, !0)) json[i].isInstalled = !0;
                        }
                    }
                    if (!json[i].isInstalled) {
                        try {
                            switch (_typeof(json[i].Checked)) {
                              case "boolean":
                                json[i].IsChecked = json[i].Checked;
                                break;

                              case "function":
                                json[i].IsChecked = json[i].Checked(systemData);
                            }
                        } catch (error) {
                            _logs2["default"].error("Checked failed", {
                                error: error
                            }, "softTargeting:checked:failed");
                        }
                        if (window.isAppEsteem) if (window.SoftPack.declinedPrograms.includes(json[i].ID)) {
                            json[i].IsChecked = !1;
                            json[i].isVisible = !1;
                        } else if (window.SoftPack.canceledPrograms.includes(json[i].ID)) json[i].IsChecked = !1;
                    } else {
                        if ((0, _driversPrograms.isDriverUtility)(json[i])) json[i].isVisible = !1;
                        json[i].IsChecked = !1;
                    }
                }
            });
            _logs2["default"].debug("Targeting applied", {
                json: json
            }, "softTargeting:applied");
            return json;
        };
        return SoftPack;
    }();
    exports["default"] = window.SoftPack = new SoftPack();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _objectWithoutProperties(obj, keys) {
        var target = {};
        for (var i in obj) if (!(keys.indexOf(i) >= 0)) if (Object.prototype.hasOwnProperty.call(obj, i)) target[i] = obj[i];
        return target;
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _lodash = __webpack_require__(94), _prepareInstallation = __webpack_require__(808), _prepareInstallation2 = _interopRequireDefault(_prepareInstallation), _logs = __webpack_require__(4), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _utils = __webpack_require__(19), _appActions = __webpack_require__(55), _programsActions = __webpack_require__(64), _createRestorePoint = __webpack_require__(789), _createRestorePoint2 = _interopRequireDefault(_createRestorePoint), _InstallingItem = __webpack_require__(784), _InstallingItem2 = _interopRequireDefault(_InstallingItem), _unzip = __webpack_require__(124), _unzip2 = _interopRequireDefault(_unzip), _systemScanner = __webpack_require__(65), _systemScanner2 = _interopRequireDefault(_systemScanner), _download = __webpack_require__(150), _softPack = __webpack_require__(147), _softPack2 = _interopRequireDefault(_softPack), _getHardware = __webpack_require__(126), _checkSoft = __webpack_require__(125), _processes = __webpack_require__(74), _registry = __webpack_require__(56), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _fso = __webpack_require__(17), _installerBits = __webpack_require__(804), _os = __webpack_require__(14), _antivirus = __webpack_require__(216), _antivirus2 = _interopRequireDefault(_antivirus), _promos2 = __webpack_require__(763), _promos3 = _interopRequireDefault(_promos2), _getSoftFromStore = __webpack_require__(803), _applicationsRestartConfirm = __webpack_require__(787), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), _ps = __webpack_require__(72), _ps2 = _interopRequireDefault(_ps), _timeout = __webpack_require__(213), _timeout2 = _interopRequireDefault(_timeout), _activateAppWindow = __webpack_require__(149), _activateAppWindow2 = _interopRequireDefault(_activateAppWindow), _driversPrograms = __webpack_require__(29), log = (0, 
    _logs.getLogger)("newOrder"), instance = void 0, installationSessionId = 0, filterItems = function(items) {
        return items.map(function(_ref) {
            return {
                name: _ref.name,
                priority: _ref.priority
            };
        });
    }, detectDefaultDrivers = function(items, stateDevices) {
        var devices = items.filter(function(item) {
            return item.isDriver;
        }), defaults = stateDevices.filter(function(d) {
            return d.isCheckedByDefault;
        });
        return devices.length && devices.every(function(d) {
            return d.isCheckedByDefault;
        }) && devices.length === defaults.length;
    }, cloudFolder = _specialFolders.AppData + "\\DriverPack Cloud", cloudAliceFile = cloudFolder + "\\cloud-alice-data.json", aliceDataOmitFields = [ "confirmPopup", "Description", "description", "downloading", "otherDrivers", "protect", "unzipping" ], resolutionStates = {
        "-1": "worse",
        "0": "same",
        "1": "better"
    }, Installation = function() {
        function Installation() {
            _classCallCheck(this, Installation);
            if (!instance) {
                instance = this;
                this.items = {};
                this.downloading = [];
                this.installChunks = [];
                this.installDeferred = [];
                this.itemsContainDrivers = !1;
                this.firstInstallation = !0;
            }
            return instance;
        }
        Installation.prototype.run = function(_ref2) {
            var _this = this, _ref2$drivers = _ref2.drivers, drivers = _ref2$drivers === undefined ? [] : _ref2$drivers, _ref2$programs = _ref2.programs, programs = _ref2$programs === undefined ? [] : _ref2$programs, isSingle = _ref2.isSingle, zone = _ref2.zone;
            return function() {
                var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(dispatch, getState) {
                    var inputData, _showApplicationsRest, restartingApps, patchedPrograms, programsBits, programsNormal, items, _separateDeferred, deferred, active, store, activePromos, shouldPreventSm;
                    return regeneratorRuntime.wrap(function(_context2) {
                        for (;;) switch (_context2.prev = _context2.next) {
                          case 0:
                            installationSessionId++;
                            log.info({
                                action: "installation started",
                                counters: [ "debug" ]
                            }, {
                                installationSessionId: installationSessionId
                            }, "installation:started");
                            _this.cloud = programs.find(_driversPrograms.isNotifier);
                            if (!_this.cloud) {
                                _this.cloud = getState().programs.find(_driversPrograms.isNotifier);
                                if (_this.cloud && _this.cloud.isVisible && !_this.cloud.isInstalled) {
                                    _this.cloud.isSilent = !0;
                                    programs.push(_this.cloud);
                                }
                            }
                            inputData = {
                                drivers: drivers,
                                programs: programs
                            };
                            _showApplicationsRest = (0, _applicationsRestartConfirm.showApplicationsRestartConfirm)(programs), 
                            restartingApps = _showApplicationsRest.restartingApps, patchedPrograms = _showApplicationsRest.patchedPrograms;
                            if (restartingApps.length > 0) {
                                dispatch({
                                    type: "NEW_ORDER_RESTART_APPLICATIONS_CONFIRMED",
                                    payload: restartingApps
                                });
                                programs = patchedPrograms;
                            }
                            programsBits = [];
                            programsNormal = [];
                            programs.forEach(function(program) {
                                if (program.bits & _os.OSVersionS >= 6.1) programsBits.push(program); else programsNormal.push(program);
                            });
                            _this.zone = zone;
                            _this.startTime = Date.now();
                            _this.itemsContainDrivers = drivers.length > 0;
                            items = (0, _prepareInstallation2["default"])({
                                drivers: drivers,
                                programs: programsNormal
                            });
                            log.info("items prepared", {
                                installationSessionId: installationSessionId,
                                installationItems: filterItems(items)
                            }, "installation:itemsPrepared");
                            dispatch({
                                type: "NEW_ORDER_INSTALL_ALL_START",
                                payload: {
                                    total: drivers.length + programs.length,
                                    totalDrivers: drivers.length,
                                    items: items,
                                    itemsContainDrivers: _this.itemsContainDrivers,
                                    itemsContainPrograms: _this.itemsContainPrograms,
                                    inputData: inputData,
                                    driversState: getState().drivers
                                }
                            });
                            items = items.map(function(item) {
                                var installingItem = new _InstallingItem2["default"](item, _this, installationSessionId);
                                _this.items[item.id] = installingItem;
                                return installingItem;
                            });
                            Promise.race(items.map(function(item) {
                                return item.installStartTrigger;
                            })).then(function() {
                                log.info({
                                    action: "installation install started",
                                    counters: [ "debug" ]
                                }, {
                                    installationSessionId: installationSessionId
                                }, "installation:install:started");
                            });
                            _this.downloading = items.slice();
                            _separateDeferred = _this.separateDeferred(items, isSingle), deferred = _separateDeferred.deferred, 
                            active = _separateDeferred.active;
                            _this.installDeferred = deferred;
                            if (active) {
                                _context2.next = 26;
                                break;
                            }
                            _context2.next = 24;
                            return dispatch(_this.showDeferredPopups());

                          case 24:
                            _context2.next = 27;
                            break;

                          case 26:
                            _this.installChunks = _this.createChunks(active);

                          case 27:
                            log.info("installing", {
                                installationSessionId: installationSessionId,
                                installChunks: _this.installChunks.map(filterItems)
                            }, "installation:installChunks");
                            store = window.store.getState();
                            activePromos = [];
                            (0, _promos3["default"])(window.lang).filter(function(_ref4) {
                                return _ref4.priority > 0;
                            }).forEach(function(promo) {
                                if (promo.softId) {
                                    var offered = (0, _getSoftFromStore.getOffered)(store, promo.softId);
                                    if (offered) {
                                        promo.name = offered.name;
                                        promo.soft = {
                                            link: promo.patchLink ? promo.patchLink(offered.link) : offered.link,
                                            Keys: promo.patchKeys ? promo.patchKeys(offered.Keys) : offered.Keys
                                        };
                                        promo.priority = promo.priority || offered.priority;
                                        if (offered.isInstalled) promo.state = "promo"; else {
                                            if ((0, _getSoftFromStore.getInstalling)(store, promo.softId)) promo.state = "promo"; else promo.state = _os.OSVersionS >= 6.1 ? "offer" : "promo";
                                        }
                                        activePromos.push(promo);
                                    }
                                } else {
                                    promo.name = promo.id;
                                    promo.state = "promo";
                                    activePromos.push(promo);
                                }
                            });
                            dispatch({
                                type: "NEW_ORDER_INSTALLATION_PROMOS_LOADED",
                                promos: activePromos.sort(function(a, b) {
                                    return a.priority - b.priority;
                                })
                            });
                            shouldPreventSm = getState().app.isDriversFake && !_this.cloud;
                            setTimeout(function() {
                                _systemScanner2["default"].waitFor("binaries").then(_asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                                    var restorePointStatus;
                                    return regeneratorRuntime.wrap(function(_context) {
                                        for (;;) switch (_context.prev = _context.next) {
                                          case 0:
                                            _context.prev = 0;
                                            _context.next = 3;
                                            return (0, _download.ensure)([ "devcon" + (_os.is64 ? "64" : "") + ".exe", "aria2c.exe", {
                                                name: "driverpack-wget.exe",
                                                aliases: [ "wget.exe" ]
                                            }, {
                                                name: "driverpack-7za.exe",
                                                aliases: [ "7za.exe" ]
                                            } ], undefined, undefined, 1);

                                          case 3:
                                            _context.next = 8;
                                            break;

                                          case 5:
                                            _context.prev = 5;
                                            _context.t0 = _context["catch"](0);
                                            log.error("ensure call failed", _context.t0);

                                          case 8:
                                            if (!shouldPreventSm) setTimeout(function() {
                                                return dispatch((0, _programsActions.toggleServiceMode)());
                                            }, 3e4);
                                            restorePointStatus = void 0;
                                            if (!_this.itemsContainDrivers) {
                                                _context.next = 21;
                                                break;
                                            }
                                            if (!_settings2["default"].get("errors.createRestorePoint").value) {
                                                _context.next = 21;
                                                break;
                                            }
                                            _context.prev = 12;
                                            _context.next = 15;
                                            return Promise.race([ (0, _createRestorePoint2["default"])(), new Promise(function(resolve) {
                                                return setTimeout(resolve, 6e5);
                                            }) ]);

                                          case 15:
                                            restorePointStatus = _context.sent;
                                            _context.next = 21;
                                            break;

                                          case 18:
                                            _context.prev = 18;
                                            _context.t1 = _context["catch"](12);
                                            log.error("restore point creation error", _context.t1);

                                          case 21:
                                            (0, _processes.setProcessPriority)();
                                            dispatch({
                                                type: "NEW_ORDER_PREPARING_FINISHED",
                                                payload: restorePointStatus
                                            });
                                            log.info({
                                                action: "installation download started",
                                                counters: [ "debug" ]
                                            }, {
                                                installationSessionId: installationSessionId
                                            }, "installation:download:started");
                                            dispatch(_this.downloadItems());
                                            if (!shouldPreventSm) setTimeout(function() {
                                                try {
                                                    dispatch((0, _programsActions.runServiceMode)());
                                                } catch (dismiss) {}
                                            }, 3e4);
                                            dispatch(_this.installItems(programsBits));
                                            if (!isSingle && active) _this.deferredPromise = dispatch(_this.showDeferredPopups());

                                          case 28:
                                          case "end":
                                            return _context.stop();
                                        }
                                    }, _callee, _this, [ [ 0, 5 ], [ 12, 18 ] ]);
                                }))).done();
                            }, 0);

                          case 34:
                          case "end":
                            return _context2.stop();
                        }
                    }, _callee2, _this);
                }));
                return function(_x, _x2) {
                    return _ref3.apply(this, arguments);
                };
            }();
        };
        Installation.prototype.separateDeferred = function(items, isSingle) {
            var result = void 0;
            if (isSingle) result = {
                deferred: [],
                active: items
            }; else {
                var _groupBy = (0, _lodash.groupBy)(items, "confirmPopup.isDeferred");
                result = {
                    deferred: _groupBy["true"],
                    active: _groupBy.undefined
                };
            }
            return result;
        };
        Installation.prototype.createChunks = function(items) {
            var preparedQueue = [], chunk = [], flush = function() {
                if (chunk.length) {
                    preparedQueue.push(chunk);
                    chunk = [];
                }
            };
            items.forEach(function(item) {
                if (item.singleOnly) {
                    flush();
                    preparedQueue.push([ item ]);
                } else chunk.push(item);
            });
            flush();
            return preparedQueue;
        };
        Installation.prototype.downloadItems = function() {
            var _this2 = this;
            return function() {
                var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(dispatch) {
                    var workers, i;
                    return regeneratorRuntime.wrap(function(_context3) {
                        for (;;) switch (_context3.prev = _context3.next) {
                          case 0:
                            workers = [];
                            for (i = 0; i < 5; i += 1) workers.push(dispatch(_this2.downloadWorker(installationSessionId)));
                            _this2.downloadFinished = Promise.all(workers);
                            _context3.next = 5;
                            return _this2.downloadFinished;

                          case 5:
                            log.info({
                                action: "installation download finished",
                                counters: [ "debug" ]
                            }, {
                                installationSessionId: installationSessionId
                            }, "installation:download:finished");

                          case 6:
                          case "end":
                            return _context3.stop();
                        }
                    }, _callee3, _this2);
                }));
                return function(_x3) {
                    return _ref6.apply(this, arguments);
                };
            }();
        };
        Installation.prototype.downloadWorker = function() {
            var _this3 = this;
            return function() {
                var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(dispatch) {
                    var item;
                    return regeneratorRuntime.wrap(function(_context4) {
                        for (;;) switch (_context4.prev = _context4.next) {
                          case 0:
                            if (!_this3.downloading.length) {
                                _context4.next = 7;
                                break;
                            }
                            item = _this3.downloading.shift();
                            log.info("download worker selected: " + item.name, {
                                installationSessionId: installationSessionId,
                                name: item.name
                            }, "downloadWorker");
                            _context4.next = 5;
                            return dispatch(item.download());

                          case 5:
                            _context4.next = 0;
                            break;

                          case 7:
                          case "end":
                            return _context4.stop();
                        }
                    }, _callee4, _this3);
                }));
                return function(_x4) {
                    return _ref7.apply(this, arguments);
                };
            }();
        };
        Installation.prototype.getResolution = function() {
            var width = window.screen.width * window.screen.deviceXDPI / window.screen.logicalXDPI, height = window.screen.height * window.screen.deviceXDPI / window.screen.logicalXDPI;
            return {
                width: width,
                height: height,
                points: width * height
            };
        };
        Installation.prototype.installItems = function(programsBits) {
            var _this4 = this;
            return function() {
                var _ref8 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5(dispatch, getState) {
                    var oldResolution, bitsStringsArr, _window, isAppEsteem, newResolution, resolutionState, resolution, errorDevicesCount, isFullscreen, screenWidth, screenHeight, isAliceNps, _getState, installation, drivers, defaultDriversDetected;
                    return regeneratorRuntime.wrap(function(_context5) {
                        for (;;) switch (_context5.prev = _context5.next) {
                          case 0:
                            oldResolution = _this4.getResolution();
                            _context5.next = 3;
                            return dispatch(_this4.installAllChunks());

                          case 3:
                            if (programsBits.length) {
                                bitsStringsArr = (0, _installerBits.joinBitsString)(programsBits);
                                (0, _installerBits.startBitsDownloading)(bitsStringsArr);
                                log.info("BITS jobs started", {
                                    bitsStringsArr: bitsStringsArr,
                                    installationSessionId: installationSessionId
                                }, "bits:jobsStarted", [ "bits" ]);
                            }
                            _window = window, isAppEsteem = _window.isAppEsteem;
                            if (!isAppEsteem || !_this4.deferredPromise) {
                                _context5.next = 8;
                                break;
                            }
                            _context5.next = 8;
                            return _this4.deferredPromise;

                          case 8:
                            if (!_this4.installChunks.length) {
                                _context5.next = 11;
                                break;
                            }
                            _context5.next = 11;
                            return _this4.installAllChunks(_this4.installChunks);

                          case 11:
                            newResolution = _this4.getResolution();
                            resolutionState = resolutionStates[Math.sign(newResolution.points - oldResolution.points)];
                            resolution = (0, _lodash.max)([ oldResolution, newResolution ], "points");
                            log.info({
                                action: "installation install finished",
                                counters: [ "debug" ]
                            }, {
                                installationSessionId: installationSessionId,
                                resolution: {
                                    installation: resolutionState
                                }
                            }, "installation:install:finished");
                            _this4.sendInstallatioFinished(getState(), installationSessionId);
                            errorDevicesCount = (0, _getHardware.getDevicesCount)({
                                errCode: {
                                    min: 1,
                                    max: 21
                                }
                            }) + (0, _getHardware.getDevicesCount)({
                                errCode: {
                                    min: 23
                                }
                            });
                            dispatch({
                                type: "ERROR_DEVICES_COUNT_RECEIVED",
                                meta: {
                                    count: errorDevicesCount
                                }
                            });
                            if (getState().installation.successDrivers > 0 && 0 === errorDevicesCount) (0, _registry.RegWrite)("HKCU\\SOFTWARE\\drpsu\\lastSuccessFinish", Date.now());
                            (0, _registry.RegWrite)("HKCU\\SOFTWARE\\drpsu\\lastFinish", Date.now());
                            log.info("process finished", {}, "process:finished");
                            if ("worse" === resolutionState) try {
                                _ps2["default"].send("SetScreenResolution -Width " + resolution.width + " -Height " + resolution.height);
                                if ("maximized" === window.store.getState().app.windowState) {
                                    isFullscreen = getState().app.isFullscreen;
                                    screenWidth = isFullscreen ? window.screen.width : window.screen.availWidth;
                                    screenHeight = isFullscreen ? window.screen.height : window.screen.availHeight;
                                    window.resizeTo(screenWidth, screenHeight);
                                    window.moveTo(0, 0);
                                }
                            } catch (error) {
                                log.error("failed screen resolution recovery", {
                                    error: error
                                }, "resolution:recovery:failed");
                            }
                            _context5.next = 24;
                            return dispatch(_this4.writeAliceNPSData({
                                resolution: resolution
                            }));

                          case 24:
                            isAliceNps = _context5.sent;
                            dispatch({
                                type: "INSTALLATION_PROCESS_FINISHED"
                            });
                            _getState = getState(), installation = _getState.installation, drivers = _getState.drivers;
                            defaultDriversDetected = detectDefaultDrivers(installation.items, drivers.devices);
                            if (defaultDriversDetected) (0, _registry.RegWrite)("HKCU\\SOFTWARE\\drpsu\\lastDefaultDriversFinish", Date.now());
                            _context5.next = 31;
                            return (0, _timeout2["default"])(1e3);

                          case 31:
                            if (!isAliceNps || getState().app.isDriversFake) {
                                _context5.next = 36;
                                break;
                            }
                            _context5.next = 34;
                            return dispatch((0, _programsActions.confirmRestart)());

                          case 34:
                            _context5.next = 38;
                            break;

                          case 36:
                            dispatch({
                                type: "NEW_ORDER_DRIVERS_INSTALL_ALL_SUCCESS"
                            });
                            return _context5.abrupt("return");

                          case 38:
                            _context5.prev = 38;
                            _context5.next = 41;
                            return _systemScanner2["default"].run();

                          case 41:
                            (0, _checkSoft.dropInstalledSoftCache)();
                            SoftPack.applyAll();
                            _context5.next = 47;
                            break;

                          case 45:
                            _context5.prev = 45;
                            _context5.t0 = _context5["catch"](38);

                          case 47:
                            _this4.itemsContainDrivers ? dispatch({
                                type: "NEW_ORDER_DRIVERS_INSTALL_ALL_SUCCESS"
                            }) : dispatch({
                                type: "NEW_ORDER_PROGRAMS_INSTALL_ALL_SUCCESS"
                            });
                            instance = null;
                            if ("minimized" === window.store.getState().app.windowState) dispatch((0, _appActions.maximizeWindow)());
                            (0, _activateAppWindow2["default"])();
                            if (_settings2["default"].get("general.removeIntallationTempFiles").value) {
                                (0, _utils.cleanFolder)(_systemScanner2["default"].getDriversPath());
                                (0, _utils.cleanFolder)(_unzip2["default"].tempDir());
                                (0, _utils.cleanFolder)(_softPack2["default"].getSoftPath());
                            }

                          case 52:
                          case "end":
                            return _context5.stop();
                        }
                    }, _callee5, _this4, [ [ 38, 45 ] ]);
                }));
                return function(_x5, _x6) {
                    return _ref8.apply(this, arguments);
                };
            }();
        };
        Installation.prototype.installAllChunks = function() {
            var _this5 = this;
            return function() {
                var _ref9 = _asyncToGenerator(regeneratorRuntime.mark(function _callee6(dispatch, getState) {
                    var currentChunk;
                    return regeneratorRuntime.wrap(function(_context6) {
                        for (;;) switch (_context6.prev = _context6.next) {
                          case 0:
                            if (!_this5.installChunks.length) {
                                _context6.next = 6;
                                break;
                            }
                            currentChunk = _this5.installChunks.shift();
                            _context6.next = 4;
                            return dispatch(_this5.installChunk(currentChunk));

                          case 4:
                            _context6.next = 0;
                            break;

                          case 6:
                          case "end":
                            return _context6.stop();
                        }
                    }, _callee6, _this5);
                }));
                return function(_x7, _x8) {
                    return _ref9.apply(this, arguments);
                };
            }();
        };
        Installation.prototype.installChunk = function(currentChunk) {
            var _this6 = this;
            return function() {
                var _ref10 = _asyncToGenerator(regeneratorRuntime.mark(function _callee8(dispatch) {
                    return regeneratorRuntime.wrap(function(_context8) {
                        for (;;) switch (_context8.prev = _context8.next) {
                          case 0:
                            dispatch({
                                type: "CHUNK_INSTALLATION_STARTED"
                            });
                            _context8.next = 3;
                            return Promise.map(currentChunk, function() {
                                var _ref11 = _asyncToGenerator(regeneratorRuntime.mark(function _callee7(item) {
                                    var driverClass;
                                    return regeneratorRuntime.wrap(function(_context7) {
                                        for (;;) switch (_context7.prev = _context7.next) {
                                          case 0:
                                            if (!item.isDriver) {
                                                _context7.next = 10;
                                                break;
                                            }
                                            driverClass = item.recommendedDriver["class"];
                                            if ("lan" !== driverClass && "wifi" !== driverClass) {
                                                _context7.next = 10;
                                                break;
                                            }
                                            _context7.prev = 3;
                                            _context7.next = 6;
                                            return _this6.downloadFinished;

                                          case 6:
                                            _context7.next = 10;
                                            break;

                                          case 8:
                                            _context7.prev = 8;
                                            _context7.t0 = _context7["catch"](3);

                                          case 10:
                                            _context7.prev = 10;
                                            _context7.next = 13;
                                            return dispatch(item.install());

                                          case 13:
                                            if (item.isDriver && "error" === item.status && item.installationAttempts < 3) _this6.installChunks.push([ Object.assign(item, {
                                                isAwaitingInstalling: !1
                                            }) ]);
                                            _context7.next = 18;
                                            break;

                                          case 16:
                                            _context7.prev = 16;
                                            _context7.t1 = _context7["catch"](10);

                                          case 18:
                                            return _context7.abrupt("return", !0);

                                          case 19:
                                          case "end":
                                            return _context7.stop();
                                        }
                                    }, _callee7, _this6, [ [ 3, 8 ], [ 10, 16 ] ]);
                                }));
                                return function(_x10) {
                                    return _ref11.apply(this, arguments);
                                };
                            }(), {
                                concurrency: 5
                            });

                          case 3:
                          case "end":
                            return _context8.stop();
                        }
                    }, _callee8, _this6);
                }));
                return function(_x9) {
                    return _ref10.apply(this, arguments);
                };
            }();
        };
        Installation.prototype.showDeferredPopups = function() {
            var _this7 = this;
            return function() {
                var _ref12 = _asyncToGenerator(regeneratorRuntime.mark(function _callee9(dispatch, getState) {
                    var zone, _iterator, _isArray, _i, _ref13, item, deferred, isProgramsDisabled, result;
                    return regeneratorRuntime.wrap(function(_context9) {
                        for (;;) switch (_context9.prev = _context9.next) {
                          case 0:
                            zone = "INSTALLATION_PAGE";
                            _iterator = _this7.installDeferred, _isArray = Array.isArray(_iterator), _i = 0, 
                            _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                          case 2:
                            if (!_isArray) {
                                _context9.next = 8;
                                break;
                            }
                            if (!(_i >= _iterator.length)) {
                                _context9.next = 5;
                                break;
                            }
                            return _context9.abrupt("break", 26);

                          case 5:
                            _ref13 = _iterator[_i++];
                            _context9.next = 12;
                            break;

                          case 8:
                            _i = _iterator.next();
                            if (!_i.done) {
                                _context9.next = 11;
                                break;
                            }
                            return _context9.abrupt("break", 26);

                          case 11:
                            _ref13 = _i.value;

                          case 12:
                            item = _ref13;
                            deferred = _this7.installDeferred;
                            isProgramsDisabled = getState().app.isProgramsDisabled;
                            if (!isProgramsDisabled) {
                                _context9.next = 19;
                                break;
                            }
                            _context9.t0 = !1;
                            _context9.next = 22;
                            break;

                          case 19:
                            _context9.next = 21;
                            return dispatch((0, _programsActions.confirmProgramInstallation)(item, zone, {
                                deferred: deferred
                            }));

                          case 21:
                            _context9.t0 = _context9.sent;

                          case 22:
                            result = _context9.t0;
                            if (result) _this7.installChunks.unshift([ item ]); else dispatch(_this7.cancelItem(item.id, item.status));

                          case 24:
                            _context9.next = 2;
                            break;

                          case 26:
                          case "end":
                            return _context9.stop();
                        }
                    }, _callee9, _this7);
                }));
                return function(_x11, _x12) {
                    return _ref12.apply(this, arguments);
                };
            }();
        };
        Installation.prototype.cancelItem = function(itemId, itemStatus) {
            var _this8 = this;
            return function(dispatch) {
                if ([ "waiting", "downloading", "downloaded" ].includes(itemStatus)) {
                    dispatch(_this8.items[itemId].cancel());
                    dispatch({
                        type: "NEW_ORDER_ITEM_CANCELED",
                        payload: {
                            id: itemId
                        }
                    });
                }
            };
        };
        Installation.prototype.countDriversResults = function(installationState) {
            for (var res = {
                alt: {},
                "native": {}
            }, _iterator2 = installationState.items, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator](); ;) {
                var _ref14;
                if (_isArray2) {
                    if (_i2 >= _iterator2.length) break;
                    _ref14 = _iterator2[_i2++];
                } else {
                    _i2 = _iterator2.next();
                    if (_i2.done) break;
                    _ref14 = _i2.value;
                }
                var item = _ref14;
                if (item.isDriver) if (item.recommendedDriver.strict) {
                    if (!res["native"][item.status]) res["native"][item.status] = 0;
                    res["native"][item.status]++;
                } else {
                    if (!res.alt[item.status]) res.alt[item.status] = 0;
                    res.alt[item.status]++;
                }
            }
            return res;
        };
        Installation.prototype.sendInstallatioFinished = function(state) {
            var installationTime = Math.round((Date.now() - this.startTime) / 1e3), driversInstallFailed = void 0, params = {
                installationSessionId: installationSessionId
            };
            if (installationTime > 0) params.installationTime = installationTime;
            if (this.itemsContainDrivers) {
                var installation = state.installation;
                driversInstallFailed = installation.totalDrivers - installation.successDrivers;
                if (driversInstallFailed >= 0) params.driversInstallFailed = driversInstallFailed;
                try {
                    params.driversResults = this.countDriversResults(state.installation);
                } catch (e) {}
            }
            log.info({
                action: "installation finished",
                counters: [ "debug" ]
            }, params, "installation:finished");
            if (window.delorean.chosenDriversOnly) window.delorean.resetUserChoice();
            try {
                var _promos = window.store.getState().installation.promos.filter(function(_ref15) {
                    var state = _ref15.state, softId = _ref15.softId;
                    return "confirmed" === state && softId;
                });
                if (_promos.length > 0) (0, _installerBits.startBitsDownloading)((0, _installerBits.joinBitsString)(_promos.map(function(_ref16) {
                    return _ref16.soft;
                }), "drp_bits_promo_job"));
            } catch (error) {
                log.error("promo installation failed", {
                    error: error,
                    installationSessionId: installationSessionId
                }, "promo:installation:failed");
            }
            (0, _applicationsRestartConfirm.restartApplications)(window.store.getState().installation.restartingApplications);
        };
        Installation.prototype.writeAliceNPSData = function(_ref17) {
            var _this9 = this, resolution = _ref17.resolution;
            return function() {
                var _ref18 = _asyncToGenerator(regeneratorRuntime.mark(function _callee10(dispatch, getState) {
                    var _getState$installatio, items, state, cloud, showAliceNPS, version, sessionId, antivirusList, data, file;
                    return regeneratorRuntime.wrap(function(_context10) {
                        for (;;) switch (_context10.prev = _context10.next) {
                          case 0:
                            _getState$installatio = getState().installation, items = _getState$installatio.items, 
                            state = _objectWithoutProperties(_getState$installatio, [ "items" ]);
                            cloud = items.find(_driversPrograms.isNotifier);
                            showAliceNPS = cloud && "error" !== cloud.state || _this9.cloud && _this9.cloud.isInstalled;
                            if (showAliceNPS) {
                                _context10.next = 5;
                                break;
                            }
                            return _context10.abrupt("return");

                          case 5:
                            (0, _localFiles.ensurePath)(cloudFolder);
                            version = _statistics2["default"].version, sessionId = _statistics2["default"].sessionId;
                            antivirusList = [];
                            try {
                                antivirusList = _antivirus2["default"].hasAntiviruses() && _antivirus2["default"].scanAntiviruses() || [];
                            } catch (dismiss) {}
                            data = {
                                state: state,
                                resolution: resolution,
                                uninstall: _this9.cloud && _this9.cloud.isSilent,
                                items: items.map(function(item) {
                                    return (0, _lodash.omit)(item, aliceDataOmitFields);
                                }),
                                statistics: {
                                    version: version,
                                    sessionId: sessionId
                                },
                                antivirusList: antivirusList
                            };
                            try {
                                file = _fso.fso.OpenTextFile(cloudAliceFile, 2, !0, -1);
                                file.WriteLine(JSON.stringify(data));
                                file.Close();
                            } catch (err) {}
                            return _context10.abrupt("return", !0);

                          case 12:
                          case "end":
                            return _context10.stop();
                        }
                    }, _callee10, _this9);
                }));
                return function(_x13, _x14) {
                    return _ref18.apply(this, arguments);
                };
            }();
        };
        return Installation;
    }();
    exports["default"] = Installation;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _processes = __webpack_require__(74);
    exports["default"] = function() {
        try {
            _system.WshShell.AppActivate((0, _processes.getMyPID)());
        } catch (e) {}
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    exports.ensure = exports.download = undefined;
    var _shell = __webpack_require__(16), _fso = __webpack_require__(17), _retry = __webpack_require__(215), _retry2 = _interopRequireDefault(_retry), _getRemoteFileSize = __webpack_require__(322), _getRemoteFileSize2 = _interopRequireDefault(_getRemoteFileSize), _common = __webpack_require__(105), _ps = __webpack_require__(793), _ps2 = _interopRequireDefault(_ps), _bits = __webpack_require__(792), _bits2 = _interopRequireDefault(_bits), _adodb = __webpack_require__(791), _adodb2 = _interopRequireDefault(_adodb), download = exports.download = function() {
        var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(name, dir, url) {
            return regeneratorRuntime.wrap(function(_context) {
                for (;;) switch (_context.prev = _context.next) {
                  case 0:
                    _context.prev = 0;
                    if ("file:" === document.location.protocol) (0, _adodb2["default"])(name, dir, url); else (0, 
                    _bits2["default"])(name, dir, url);
                    _context.next = 8;
                    break;

                  case 4:
                    _context.prev = 4;
                    _context.t0 = _context["catch"](0);
                    _context.next = 8;
                    return (0, _ps2["default"])(name, dir, url);

                  case 8:
                  case "end":
                    return _context.stop();
                }
            }, _callee, undefined, [ [ 0, 4 ] ]);
        }));
        return function(_x, _x2, _x3) {
            return _ref.apply(this, arguments);
        };
    }(), fullPath = _shell.WshShell.CurrentDirectory + "\\tools", ensureFiles = function() {
        var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(files, dir, url) {
            var _iterator, _isArray, _i, _ref3, fileSpec, _ref4, name, aliases, exists, _iterator2, _isArray2, _i2, _ref5, fileName, remoteSize, localSize;
            return regeneratorRuntime.wrap(function(_context2) {
                for (;;) switch (_context2.prev = _context2.next) {
                  case 0:
                    _iterator = [].concat(files), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                  case 1:
                    if (!_isArray) {
                        _context2.next = 7;
                        break;
                    }
                    if (!(_i >= _iterator.length)) {
                        _context2.next = 4;
                        break;
                    }
                    return _context2.abrupt("break", 45);

                  case 4:
                    _ref3 = _iterator[_i++];
                    _context2.next = 11;
                    break;

                  case 7:
                    _i = _iterator.next();
                    if (!_i.done) {
                        _context2.next = 10;
                        break;
                    }
                    return _context2.abrupt("break", 45);

                  case 10:
                    _ref3 = _i.value;

                  case 11:
                    fileSpec = _ref3;
                    _ref4 = "string" == typeof fileSpec ? {
                        name: fileSpec,
                        aliases: []
                    } : fileSpec, name = _ref4.name, aliases = _ref4.aliases;
                    exists = !1;
                    _iterator2 = [ name ].concat(aliases), _isArray2 = Array.isArray(_iterator2), _i2 = 0, 
                    _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();

                  case 15:
                    if (!_isArray2) {
                        _context2.next = 21;
                        break;
                    }
                    if (!(_i2 >= _iterator2.length)) {
                        _context2.next = 18;
                        break;
                    }
                    return _context2.abrupt("break", 40);

                  case 18:
                    _ref5 = _iterator2[_i2++];
                    _context2.next = 25;
                    break;

                  case 21:
                    _i2 = _iterator2.next();
                    if (!_i2.done) {
                        _context2.next = 24;
                        break;
                    }
                    return _context2.abrupt("break", 40);

                  case 24:
                    _ref5 = _i2.value;

                  case 25:
                    fileName = _ref5;
                    if (!_fso.fso.FileExists(dir + "\\" + fileName)) {
                        _context2.next = 38;
                        break;
                    }
                    if (!0) {
                        _context2.next = 35;
                        break;
                    }
                    _context2.next = 30;
                    return (0, _getRemoteFileSize2["default"])(url || _common.base + "/" + fileName);

                  case 30:
                    remoteSize = _context2.sent;
                    localSize = _fso.fso.GetFile(dir + "\\" + fileName).Size;
                    exists = remoteSize === localSize;
                    _context2.next = 36;
                    break;

                  case 35:
                    exists = !0;

                  case 36:
                    if (!exists) {
                        _context2.next = 38;
                        break;
                    }
                    return _context2.abrupt("break", 40);

                  case 38:
                    _context2.next = 15;
                    break;

                  case 40:
                    if (exists) {
                        _context2.next = 43;
                        break;
                    }
                    _context2.next = 43;
                    return download(name, dir, url);

                  case 43:
                    _context2.next = 1;
                    break;

                  case 45:
                  case "end":
                    return _context2.stop();
                }
            }, _callee2, undefined);
        }));
        return function(_x4, _x5, _x6) {
            return _ref2.apply(this, arguments);
        };
    }(), ensureWithFailover = function() {
        var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(files) {
            var dir = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : fullPath, url = arguments[2];
            return regeneratorRuntime.wrap(function(_context3) {
                for (;;) switch (_context3.prev = _context3.next) {
                  case 0:
                    _context3.prev = 0;
                    _context3.next = 3;
                    return ensureFiles(files, dir, url);

                  case 3:
                    _context3.next = 10;
                    break;

                  case 5:
                    _context3.prev = 5;
                    _context3.t0 = _context3["catch"](0);
                    _shell.WshShell.Run("wscript.exe //B prepare.js binaries", 0, !0);
                    _context3.next = 10;
                    return ensureFiles(files, dir, url);

                  case 10:
                  case "end":
                    return _context3.stop();
                }
            }, _callee3, undefined, [ [ 0, 5 ] ]);
        }));
        return function(_x7) {
            return _ref6.apply(this, arguments);
        };
    }();
    exports.ensure = function() {
        var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(files, dir, url) {
            var tries = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
            return regeneratorRuntime.wrap(function(_context4) {
                for (;;) switch (_context4.prev = _context4.next) {
                  case 0:
                    _context4.next = 2;
                    return (0, _retry2["default"])(function() {
                        return ensureWithFailover(files, dir, url);
                    }, tries, 3e3);

                  case 2:
                  case "end":
                    return _context4.stop();
                }
            }, _callee4, undefined);
        }));
        return function(_x9, _x10, _x11) {
            return _ref7.apply(this, arguments);
        };
    }();
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(min, max) {
        return Math.floor(Math.random() * (max - min + 1) + min);
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function httppost(url, params) {
        var originalCrossdomainValue = _system.WshShell.RegRead(REGISTRY_KEY_FOR_CROSSDOMAIN_ON_LOCAL_ZONE);
        _system.WshShell.RegWrite(REGISTRY_KEY_FOR_CROSSDOMAIN_ON_LOCAL_ZONE, 0, "REG_DWORD");
        var http = new window.XMLHttpRequest();
        http.open("POST", url, !0);
        http.setRequestHeader("Content-type", "application/json");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
        http.send(params);
        if (0 !== originalCrossdomainValue) _system.WshShell.RegWrite(REGISTRY_KEY_FOR_CROSSDOMAIN_ON_LOCAL_ZONE, originalCrossdomainValue, "REG_DWORD");
    }
    function urlencode(o) {
        var pairs = [];
        Object.entries(o).forEach(function(_ref) {
            var key = _ref[0], value = _ref[1];
            pairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
        });
        return pairs.join("&");
    }
    exports.__esModule = !0;
    exports.setRavenContext = exports.setRavenExtra = undefined;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _system = __webpack_require__(6), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _raven = __webpack_require__(811), _raven2 = _interopRequireDefault(_raven), _os = __webpack_require__(14), ScriptEngine = window.ScriptEngine, ScriptEngineMajorVersion = window.ScriptEngineMajorVersion, ScriptEngineMinorVersion = window.ScriptEngineMinorVersion;
    window.TraceKit.report.subscribe(function(stackInfo) {
        _logs2["default"].error("Unhandled JS-exception, catched by raven", {
            stackInfo: stackInfo
        }, "jsException");
    });
    var projectConfig = !1 ? {
        sentry_dsn: "http://9cb31aee70244b7e9b721f3ff5b1a49f@sentry.drp.su/3",
        sentry_secret: "6d47d40d3ba94a16b3e15d4f09165eee"
    } : {
        sentry_dsn: "http://6d3b4fe6d1bf4a1dafb737cfc834f7f2@sentry.drp.su/2",
        sentry_secret: "4bc6c5d74cec466593974c512dccba0c"
    }, REGISTRY_KEY_FOR_CROSSDOMAIN_ON_LOCAL_ZONE = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\1\\1406", transport = function(opts) {
        try {
            var auth = _extends({}, opts.auth, {
                sentry_secret: projectConfig.sentry_secret
            });
            httppost(opts.url + "?" + urlencode(auth), JSON.stringify(opts.data));
        } catch (err) {}
    }, ravenConfig = {
        linesOfContext: 11,
        fetchContext: !0,
        release: window.version,
        tags: {
            os: function() {
                var servicePack = _os.OSCSDVersion.replace(/Service Pack /i, "SP");
                return _os.OSCaption + " " + servicePack;
            }(),
            js: function() {
                if (!ScriptEngine) return "Browser"; else return ScriptEngine() + " " + ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion();
            }(),
            version: window.version,
            arch: _os.is64 ? "x64" : "x86"
        },
        transport: transport
    };
    if (!0) _raven2["default"].config(projectConfig.sentry_dsn, ravenConfig).install();
    var extra = {}, setRavenExtra = exports.setRavenExtra = function(data) {
        Object.assign(extra, data);
        _raven2["default"].setExtraContext(extra);
    };
    exports.setRavenContext = function(_ref2) {
        var clientId = _ref2.clientId, computerId = _ref2.computerId, sessionId = _ref2.sessionId, experiment = _ref2.experiment;
        setRavenExtra({
            clientId: clientId,
            computerId: computerId,
            sessionId: sessionId,
            experiment: experiment
        });
        _raven2["default"].setUserContext({
            id: computerId
        });
    };
    exports["default"] = _raven2["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function getModel() {
        var _getWMIObjects = (0, _wmi.getWMIObjects)([ "Manufacturer", "Model", "Caption" ], "Win32_ComputerSystem"), _getWMIObjects$ = _getWMIObjects[0], pc = _getWMIObjects$ === undefined ? {} : _getWMIObjects$, _getWMIObjects2 = (0, 
        _wmi.getWMIObjects)([ "Vendor", "Name", "Version" ], "Win32_ComputerSystemProduct"), _getWMIObjects2$ = _getWMIObjects2[0], csp = _getWMIObjects2$ === undefined ? {} : _getWMIObjects2$, _getWMIObjects3 = (0, 
        _wmi.getWMIObjects)([ "Product", "Version", "Manufacturer" ], "Win32_BaseBoard"), _getWMIObjects3$ = _getWMIObjects3[0], bb = _getWMIObjects3$ === undefined ? {} : _getWMIObjects3$, type = (0, 
        _getPCType2["default"])(csp), vendor = "Notebook" === type ? (0, _getNotebookVendor2["default"])(csp.Vendor) : (0, 
        _trimVendorName2["default"])(csp.Vendor, "Noname", !1);
        return {
            type: type,
            vendor: vendor,
            name: "Notebook" === type ? (0, _getNotebookModel2["default"])(Object.assign({}, csp, {
                Vendor: vendor
            })) : pc.Caption,
            info: {
                computerSystem: pc,
                computerSystemProduct: csp,
                baseBoard: bb
            }
        };
    }
    exports.__esModule = !0;
    exports.getModel = getModel;
    var _wmi = __webpack_require__(23), _trimVendorName = __webpack_require__(109), _trimVendorName2 = _interopRequireDefault(_trimVendorName), _getPCType = __webpack_require__(337), _getPCType2 = _interopRequireDefault(_getPCType), _getNotebookVendor = __webpack_require__(127), _getNotebookVendor2 = _interopRequireDefault(_getNotebookVendor), _getNotebookModel = __webpack_require__(220), _getNotebookModel2 = _interopRequireDefault(_getNotebookModel);
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _fso = __webpack_require__(17), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _getDiagnostics = __webpack_require__(108), _getDiagnostics2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_getDiagnostics), analyseSoftChanges = function(prev, cur) {
        var res = {
            installed: [],
            uninstalled: [],
            updated: []
        };
        if (!prev.Software || !prev.Software["Installed Software"]) return res;
        var prevSoft = prev.Software["Installed Software"], curSoft = cur.Software["Installed Software"];
        res.installed = curSoft.filter(function(csoft) {
            return !prevSoft.find(function(psoft) {
                return psoft.Program === csoft.Program;
            });
        });
        res.uninstalled = prevSoft.filter(function(psoft) {
            return !curSoft.find(function(csoft) {
                return csoft.Program === psoft.Program;
            });
        });
        res.updated = curSoft.filter(function(csoft) {
            return prevSoft.find(function(psoft) {
                return psoft.Program === csoft.Program && psoft.Version !== csoft.Version;
            });
        });
        return res;
    }, checkPrevSoftFile = function(fullPath) {
        try {
            if (_fso.fso.FileExists(fullPath)) {
                var fileIn = _fso.fso.OpenTextFile(fullPath, 1, !0, -1), prev = JSON.parse(fileIn.ReadAll());
                fileIn.Close();
                return prev;
            }
        } catch (e) {}
        return {};
    };
    exports["default"] = function(cur) {
        var path = _specialFolders.AppData + "\\DRPSu\\diagnostics\\", fullPathCur = path + "newsoft.json", fullPathPrev = path + "soft.json";
        try {
            if (!cur) cur = JSON.parse((0, _localFiles.queryFile)(fullPathCur, 6e4));
        } catch (err) {
            cur = (0, _getDiagnostics2["default"])("soft");
        }
        var prev = checkPrevSoftFile(fullPathPrev), changes = analyseSoftChanges(prev, cur);
        (0, _localFiles.createFile)(path, "soft.json", JSON.stringify(cur));
        return changes;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.checkInternet = undefined;
    var _http = __webpack_require__(73);
    exports.checkInternet = function() {
        return (0, _http.httpget)("https://www.google-analytics.com/collect").then(function() {
            return !0;
        }, function() {
            return (0, _http.httpget)("http://www.msftncsi.com/ncsi.txt").then(function() {
                return !0;
            }, function() {
                return !1;
            });
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var toObject = __webpack_require__(25), toIndex = __webpack_require__(80), toLength = __webpack_require__(24);
    module.exports = function(value) {
        for (var O = toObject(this), length = toLength(O.length), aLen = arguments.length, index = toIndex(aLen > 1 ? arguments[1] : undefined, length), end = aLen > 2 ? arguments[2] : undefined, endPos = end === undefined ? length : toIndex(end, length); endPos > index; ) O[index++] = value;
        return O;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $defineProperty = __webpack_require__(21), createDesc = __webpack_require__(68);
    module.exports = function(object, index, value) {
        if (index in object) $defineProperty.f(object, index, createDesc(0, value)); else object[index] = value;
    };
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), document = __webpack_require__(8).document, is = isObject(document) && isObject(document.createElement);
    module.exports = function(it) {
        return is ? document.createElement(it) : {};
    };
}, function(module, exports) {
    module.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");
}, function(module, exports, __webpack_require__) {
    var MATCH = __webpack_require__(15)("match");
    module.exports = function(KEY) {
        var re = /./;
        try {
            "/./"[KEY](re);
        } catch (e) {
            try {
                re[MATCH] = !1;
                return !"/./"[KEY](re);
            } catch (f) {}
        }
        return !0;
    };
}, function(module, exports, __webpack_require__) {
    module.exports = __webpack_require__(8).document && document.documentElement;
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), setPrototypeOf = __webpack_require__(169).set;
    module.exports = function(that, target, C) {
        var P, S = target.constructor;
        if (S !== C && "function" == typeof S && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) setPrototypeOf(that, P);
        return that;
    };
}, function(module, exports, __webpack_require__) {
    var Iterators = __webpack_require__(89), ITERATOR = __webpack_require__(15)("iterator"), ArrayProto = Array.prototype;
    module.exports = function(it) {
        return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
    };
}, function(module, exports, __webpack_require__) {
    var cof = __webpack_require__(40);
    module.exports = Array.isArray || function(arg) {
        return "Array" == cof(arg);
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var create = __webpack_require__(77), descriptor = __webpack_require__(68), setToStringTag = __webpack_require__(92), IteratorPrototype = {};
    __webpack_require__(33)(IteratorPrototype, __webpack_require__(15)("iterator"), function() {
        return this;
    });
    module.exports = function(Constructor, NAME, next) {
        Constructor.prototype = create(IteratorPrototype, {
            next: descriptor(1, next)
        });
        setToStringTag(Constructor, NAME + " Iterator");
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var LIBRARY = __webpack_require__(76), $export = __webpack_require__(0), redefine = __webpack_require__(35), hide = __webpack_require__(33), has = __webpack_require__(30), Iterators = __webpack_require__(89), $iterCreate = __webpack_require__(165), setToStringTag = __webpack_require__(92), getPrototypeOf = __webpack_require__(58), ITERATOR = __webpack_require__(15)("iterator"), BUGGY = !([].keys && "next" in [].keys()), returnThis = function() {
        return this;
    };
    module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
        $iterCreate(Constructor, NAME, next);
        var methods, key, IteratorPrototype, getMethod = function(kind) {
            if (!BUGGY && kind in proto) return proto[kind];
            switch (kind) {
              case "keys":
              case "values":
                return function() {
                    return new Constructor(this, kind);
                };
            }
            return function() {
                return new Constructor(this, kind);
            };
        }, TAG = NAME + " Iterator", DEF_VALUES = "values" == DEFAULT, VALUES_BUG = !1, proto = Base.prototype, $native = proto[ITERATOR] || proto["@@iterator"] || DEFAULT && proto[DEFAULT], $default = $native || getMethod(DEFAULT), $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod("entries") : undefined, $anyNative = "Array" == NAME ? proto.entries || $native : $native;
        if ($anyNative) {
            IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
            if (IteratorPrototype !== Object.prototype) {
                setToStringTag(IteratorPrototype, TAG, !0);
                if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);
            }
        }
        if (DEF_VALUES && $native && "values" !== $native.name) {
            VALUES_BUG = !0;
            $default = function() {
                return $native.call(this);
            };
        }
        if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) hide(proto, ITERATOR, $default);
        Iterators[NAME] = $default;
        Iterators[TAG] = returnThis;
        if (DEFAULT) {
            methods = {
                values: DEF_VALUES ? $default : getMethod("values"),
                keys: IS_SET ? $default : getMethod("keys"),
                entries: $entries
            };
            if (FORCED) {
                for (key in methods) if (!(key in proto)) redefine(proto, key, methods[key]);
            } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
        }
        return methods;
    };
}, function(module, exports) {
    var $expm1 = Math.expm1;
    module.exports = !$expm1 || $expm1(10) > 22025.465794806718 || $expm1(10) < 22025.465794806718 || -2e-17 != $expm1(-2e-17) ? function(x) {
        return 0 == (x = +x) ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
    } : $expm1;
}, function(module, exports) {
    module.exports = Math.sign || function(x) {
        return 0 == (x = +x) || x != x ? x : x < 0 ? -1 : 1;
    };
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), anObject = __webpack_require__(11), check = function(O, proto) {
        anObject(O);
        if (!isObject(proto) && null !== proto) throw TypeError(proto + ": can't set as prototype!");
    };
    module.exports = {
        set: Object.setPrototypeOf || ("__proto__" in {} ? function(test, buggy, set) {
            try {
                set = __webpack_require__(57)(Function.call, __webpack_require__(34).f(Object.prototype, "__proto__").set, 2);
                set(test, []);
                buggy = !(test instanceof Array);
            } catch (e) {
                buggy = !0;
            }
            return function(O, proto) {
                check(O, proto);
                if (buggy) O.__proto__ = proto; else set(O, proto);
                return O;
            };
        }({}, !1) : undefined),
        check: check
    };
}, function(module, exports, __webpack_require__) {
    var shared = __webpack_require__(171)("keys"), uid = __webpack_require__(81);
    module.exports = function(key) {
        return shared[key] || (shared[key] = uid(key));
    };
}, function(module, exports, __webpack_require__) {
    var global = __webpack_require__(8), store = global["__core-js_shared__"] || (global["__core-js_shared__"] = {});
    module.exports = function(key) {
        return store[key] || (store[key] = {});
    };
}, function(module, exports, __webpack_require__) {
    var anObject = __webpack_require__(11), aFunction = __webpack_require__(39), SPECIES = __webpack_require__(15)("species");
    module.exports = function(O, D) {
        var S, C = anObject(O).constructor;
        return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
    };
}, function(module, exports, __webpack_require__) {
    var toInteger = __webpack_require__(69), defined = __webpack_require__(41);
    module.exports = function(TO_STRING) {
        return function(that, pos) {
            var a, b, s = String(defined(that)), i = toInteger(pos), l = s.length;
            if (i < 0 || i >= l) return TO_STRING ? "" : undefined;
            a = s.charCodeAt(i);
            return a < 55296 || a > 56319 || i + 1 === l || (b = s.charCodeAt(i + 1)) < 56320 || b > 57343 ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : b - 56320 + (a - 55296 << 10) + 65536;
        };
    };
}, function(module, exports, __webpack_require__) {
    var isRegExp = __webpack_require__(136), defined = __webpack_require__(41);
    module.exports = function(that, searchString, NAME) {
        if (isRegExp(searchString)) throw TypeError("String#" + NAME + " doesn't accept regex!");
        return String(defined(that));
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var toInteger = __webpack_require__(69), defined = __webpack_require__(41);
    module.exports = function(count) {
        var str = String(defined(this)), res = "", n = toInteger(count);
        if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
        for (;n > 0; (n >>>= 1) && (str += str)) if (1 & n) res += str;
        return res;
    };
}, function(module, exports) {
    module.exports = "\t\n\x0B\f\r   ᠎             　\u2028\u2029\ufeff";
}, function(module, exports, __webpack_require__) {
    var defer, channel, port, ctx = __webpack_require__(57), invoke = __webpack_require__(135), html = __webpack_require__(161), cel = __webpack_require__(158), global = __webpack_require__(8), process = global.process, setTask = global.setImmediate, clearTask = global.clearImmediate, MessageChannel = global.MessageChannel, counter = 0, queue = {}, run = function() {
        var id = +this;
        if (queue.hasOwnProperty(id)) {
            var fn = queue[id];
            delete queue[id];
            fn();
        }
    }, listener = function(event) {
        run.call(event.data);
    };
    if (!setTask || !clearTask) {
        setTask = function(fn) {
            for (var args = [], i = 1; arguments.length > i; ) args.push(arguments[i++]);
            queue[++counter] = function() {
                invoke("function" == typeof fn ? fn : Function(fn), args);
            };
            defer(counter);
            return counter;
        };
        clearTask = function(id) {
            delete queue[id];
        };
        if ("process" == __webpack_require__(40)(process)) defer = function(id) {
            process.nextTick(ctx(run, id, 1));
        }; else if (MessageChannel) {
            channel = new MessageChannel();
            port = channel.port2;
            channel.port1.onmessage = listener;
            defer = ctx(port.postMessage, port, 1);
        } else if (global.addEventListener && "function" == typeof postMessage && !global.importScripts) {
            defer = function(id) {
                global.postMessage(id + "", "*");
            };
            global.addEventListener("message", listener, !1);
        } else if ("onreadystatechange" in cel("script")) defer = function(id) {
            html.appendChild(cel("script")).onreadystatechange = function() {
                html.removeChild(this);
                run.call(id);
            };
        }; else defer = function(id) {
            setTimeout(ctx(run, id, 1), 0);
        };
    }
    module.exports = {
        set: setTask,
        clear: clearTask
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var global = __webpack_require__(8), DESCRIPTORS = __webpack_require__(20), LIBRARY = __webpack_require__(76), $typed = __webpack_require__(140), hide = __webpack_require__(33), redefineAll = __webpack_require__(115), fails = __webpack_require__(9), anInstance = __webpack_require__(111), toInteger = __webpack_require__(69), toLength = __webpack_require__(24), gOPN = __webpack_require__(78).f, dP = __webpack_require__(21).f, arrayFill = __webpack_require__(156), setToStringTag = __webpack_require__(92), $ArrayBuffer = global.ArrayBuffer, $DataView = global.DataView, Math = global.Math, RangeError = global.RangeError, Infinity = global.Infinity, BaseBuffer = $ArrayBuffer, abs = Math.abs, pow = Math.pow, floor = Math.floor, log = Math.log, LN2 = Math.LN2, $BUFFER = DESCRIPTORS ? "_b" : "buffer", $LENGTH = DESCRIPTORS ? "_l" : "byteLength", $OFFSET = DESCRIPTORS ? "_o" : "byteOffset", packIEEE754 = function(value, mLen, nBytes) {
        var e, m, c, buffer = Array(nBytes), eLen = 8 * nBytes - mLen - 1, eMax = (1 << eLen) - 1, eBias = eMax >> 1, rt = 23 === mLen ? pow(2, -24) - pow(2, -77) : 0, i = 0, s = value < 0 || 0 === value && 1 / value < 0 ? 1 : 0;
        value = abs(value);
        if (value != value || value === Infinity) {
            m = value != value ? 1 : 0;
            e = eMax;
        } else {
            e = floor(log(value) / LN2);
            if (value * (c = pow(2, -e)) < 1) {
                e--;
                c *= 2;
            }
            if (e + eBias >= 1) value += rt / c; else value += rt * pow(2, 1 - eBias);
            if (value * c >= 2) {
                e++;
                c /= 2;
            }
            if (e + eBias >= eMax) {
                m = 0;
                e = eMax;
            } else if (e + eBias >= 1) {
                m = (value * c - 1) * pow(2, mLen);
                e += eBias;
            } else {
                m = value * pow(2, eBias - 1) * pow(2, mLen);
                e = 0;
            }
        }
        for (;mLen >= 8; buffer[i++] = 255 & m, m /= 256, mLen -= 8) ;
        e = e << mLen | m;
        eLen += mLen;
        for (;eLen > 0; buffer[i++] = 255 & e, e /= 256, eLen -= 8) ;
        buffer[--i] |= 128 * s;
        return buffer;
    }, unpackIEEE754 = function(buffer, mLen, nBytes) {
        var m, eLen = 8 * nBytes - mLen - 1, eMax = (1 << eLen) - 1, eBias = eMax >> 1, nBits = eLen - 7, i = nBytes - 1, s = buffer[i--], e = 127 & s;
        s >>= 7;
        for (;nBits > 0; e = 256 * e + buffer[i], i--, nBits -= 8) ;
        m = e & (1 << -nBits) - 1;
        e >>= -nBits;
        nBits += mLen;
        for (;nBits > 0; m = 256 * m + buffer[i], i--, nBits -= 8) ;
        if (0 === e) e = 1 - eBias; else if (e === eMax) return m ? NaN : s ? -Infinity : Infinity; else {
            m += pow(2, mLen);
            e -= eBias;
        }
        return (s ? -1 : 1) * m * pow(2, e - mLen);
    }, unpackI32 = function(bytes) {
        return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
    }, packI8 = function(it) {
        return [ 255 & it ];
    }, packI16 = function(it) {
        return [ 255 & it, it >> 8 & 255 ];
    }, packI32 = function(it) {
        return [ 255 & it, it >> 8 & 255, it >> 16 & 255, it >> 24 & 255 ];
    }, packF64 = function(it) {
        return packIEEE754(it, 52, 8);
    }, packF32 = function(it) {
        return packIEEE754(it, 23, 4);
    }, addGetter = function(C, key, internal) {
        dP(C.prototype, key, {
            get: function() {
                return this[internal];
            }
        });
    }, get = function(view, bytes, index, isLittleEndian) {
        var numIndex = +index, intIndex = toInteger(numIndex);
        if (numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH]) throw RangeError("Wrong index!");
        var store = view[$BUFFER]._b, start = intIndex + view[$OFFSET], pack = store.slice(start, start + bytes);
        return isLittleEndian ? pack : pack.reverse();
    }, set = function(view, bytes, index, conversion, value, isLittleEndian) {
        var numIndex = +index, intIndex = toInteger(numIndex);
        if (numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH]) throw RangeError("Wrong index!");
        for (var store = view[$BUFFER]._b, start = intIndex + view[$OFFSET], pack = conversion(+value), i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
    }, validateArrayBufferArguments = function(that, length) {
        anInstance(that, $ArrayBuffer, "ArrayBuffer");
        var numberLength = +length, byteLength = toLength(numberLength);
        if (numberLength != byteLength) throw RangeError("Wrong length!");
        return byteLength;
    };
    if (!$typed.ABV) {
        $ArrayBuffer = function(length) {
            var byteLength = validateArrayBufferArguments(this, length);
            this._b = arrayFill.call(Array(byteLength), 0);
            this[$LENGTH] = byteLength;
        };
        $DataView = function(buffer, byteOffset, byteLength) {
            anInstance(this, $DataView, "DataView");
            anInstance(buffer, $ArrayBuffer, "DataView");
            var bufferLength = buffer[$LENGTH], offset = toInteger(byteOffset);
            if (offset < 0 || offset > bufferLength) throw RangeError("Wrong offset!");
            byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
            if (offset + byteLength > bufferLength) throw RangeError("Wrong length!");
            this[$BUFFER] = buffer;
            this[$OFFSET] = offset;
            this[$LENGTH] = byteLength;
        };
        if (DESCRIPTORS) {
            addGetter($ArrayBuffer, "byteLength", "_l");
            addGetter($DataView, "buffer", "_b");
            addGetter($DataView, "byteLength", "_l");
            addGetter($DataView, "byteOffset", "_o");
        }
        redefineAll($DataView.prototype, {
            getInt8: function(byteOffset) {
                return get(this, 1, byteOffset)[0] << 24 >> 24;
            },
            getUint8: function(byteOffset) {
                return get(this, 1, byteOffset)[0];
            },
            getInt16: function(byteOffset) {
                var bytes = get(this, 2, byteOffset, arguments[1]);
                return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
            },
            getUint16: function(byteOffset) {
                var bytes = get(this, 2, byteOffset, arguments[1]);
                return bytes[1] << 8 | bytes[0];
            },
            getInt32: function(byteOffset) {
                return unpackI32(get(this, 4, byteOffset, arguments[1]));
            },
            getUint32: function(byteOffset) {
                return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
            },
            getFloat32: function(byteOffset) {
                return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
            },
            getFloat64: function(byteOffset) {
                return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
            },
            setInt8: function(byteOffset, value) {
                set(this, 1, byteOffset, packI8, value);
            },
            setUint8: function(byteOffset, value) {
                set(this, 1, byteOffset, packI8, value);
            },
            setInt16: function(byteOffset, value) {
                set(this, 2, byteOffset, packI16, value, arguments[2]);
            },
            setUint16: function(byteOffset, value) {
                set(this, 2, byteOffset, packI16, value, arguments[2]);
            },
            setInt32: function(byteOffset, value) {
                set(this, 4, byteOffset, packI32, value, arguments[2]);
            },
            setUint32: function(byteOffset, value) {
                set(this, 4, byteOffset, packI32, value, arguments[2]);
            },
            setFloat32: function(byteOffset, value) {
                set(this, 4, byteOffset, packF32, value, arguments[2]);
            },
            setFloat64: function(byteOffset, value) {
                set(this, 8, byteOffset, packF64, value, arguments[2]);
            }
        });
    } else {
        if (!fails(function() {
            new $ArrayBuffer();
        }) || !fails(function() {
            new $ArrayBuffer(.5);
        })) {
            $ArrayBuffer = function(length) {
                return new BaseBuffer(validateArrayBufferArguments(this, length));
            };
            for (var key, ArrayBufferProto = $ArrayBuffer.prototype = BaseBuffer.prototype, keys = gOPN(BaseBuffer), j = 0; keys.length > j; ) if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
            if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
        }
        var view = new $DataView(new $ArrayBuffer(2)), $setInt8 = $DataView.prototype.setInt8;
        view.setInt8(0, 2147483648);
        view.setInt8(1, 2147483649);
        if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView.prototype, {
            setInt8: function(byteOffset, value) {
                $setInt8.call(this, byteOffset, value << 24 >> 24);
            },
            setUint8: function(byteOffset, value) {
                $setInt8.call(this, byteOffset, value << 24 >> 24);
            }
        }, !0);
    }
    setToStringTag($ArrayBuffer, "ArrayBuffer");
    setToStringTag($DataView, "DataView");
    hide($DataView.prototype, $typed.VIEW, !0);
    exports.ArrayBuffer = $ArrayBuffer;
    exports.DataView = $DataView;
}, function(module, exports, __webpack_require__) {
    var classof = __webpack_require__(112), ITERATOR = __webpack_require__(15)("iterator"), Iterators = __webpack_require__(89);
    module.exports = __webpack_require__(88).getIteratorMethod = function(it) {
        if (it != undefined) return it[ITERATOR] || it["@@iterator"] || Iterators[classof(it)];
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var addToUnscopables = __webpack_require__(87), step = __webpack_require__(238), Iterators = __webpack_require__(89), toIObject = __webpack_require__(32);
    module.exports = __webpack_require__(166)(Array, "Array", function(iterated, kind) {
        this._t = toIObject(iterated);
        this._i = 0;
        this._k = kind;
    }, function() {
        var O = this._t, kind = this._k, index = this._i++;
        if (!O || index >= O.length) {
            this._t = undefined;
            return step(1);
        }
        if ("keys" == kind) return step(0, index);
        if ("values" == kind) return step(0, O[index]); else return step(0, [ index, O[index] ]);
    }, "values");
    Iterators.Arguments = Iterators.Array;
    addToUnscopables("keys");
    addToUnscopables("values");
    addToUnscopables("entries");
}, function(module, exports, __webpack_require__) {
    "use strict";
    var invariant = function(condition, format, a, b, c, d, e, f) {
        if (!0) if (format === undefined) throw new Error("invariant requires an error message argument");
        if (!condition) {
            var error;
            if (format === undefined) error = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."); else {
                var args = [ a, b, c, d, e, f ], argIndex = 0;
                error = new Error("Invariant Violation: " + format.replace(/%s/g, function() {
                    return args[argIndex++];
                }));
            }
            error.framesToPop = 1;
            throw error;
        }
    };
    module.exports = invariant;
}, function(module, exports, __webpack_require__) {
    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
        if (value === other) return !0;
        if (null == value || null == other || !isObject(value) && !isObjectLike(other)) return value !== value && other !== other; else return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
    }
    var baseIsEqualDeep = __webpack_require__(550), isObject = __webpack_require__(28), isObjectLike = __webpack_require__(46);
    module.exports = baseIsEqual;
}, function(module, exports) {
    function isIndex(value, length) {
        value = "number" == typeof value || reIsUint.test(value) ? +value : -1;
        length = null == length ? MAX_SAFE_INTEGER : length;
        return value > -1 && value % 1 == 0 && value < length;
    }
    var reIsUint = /^\d+$/, MAX_SAFE_INTEGER = 9007199254740991;
    module.exports = isIndex;
}, function(module, exports, __webpack_require__) {
    function isTypedArray(value) {
        return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
    }
    var isLength = __webpack_require__(95), isObjectLike = __webpack_require__(46), typedArrayTags = {};
    typedArrayTags["[object Float32Array]"] = typedArrayTags["[object Float64Array]"] = typedArrayTags["[object Int8Array]"] = typedArrayTags["[object Int16Array]"] = typedArrayTags["[object Int32Array]"] = typedArrayTags["[object Uint8Array]"] = typedArrayTags["[object Uint8ClampedArray]"] = typedArrayTags["[object Uint16Array]"] = typedArrayTags["[object Uint32Array]"] = !0;
    typedArrayTags["[object Arguments]"] = typedArrayTags["[object Array]"] = typedArrayTags["[object ArrayBuffer]"] = typedArrayTags["[object Boolean]"] = typedArrayTags["[object Date]"] = typedArrayTags["[object Error]"] = typedArrayTags["[object Function]"] = typedArrayTags["[object Map]"] = typedArrayTags["[object Number]"] = typedArrayTags["[object Object]"] = typedArrayTags["[object RegExp]"] = typedArrayTags["[object Set]"] = typedArrayTags["[object String]"] = typedArrayTags["[object WeakMap]"] = !1;
    var objectProto = Object.prototype, objToString = objectProto.toString;
    module.exports = isTypedArray;
}, function(module, exports, __webpack_require__) {
    function keysIn(object) {
        if (null == object) return [];
        if (!isObject(object)) object = Object(object);
        var length = object.length;
        length = length && isLength(length) && (isArray(object) || isArguments(object)) && length || 0;
        for (var Ctor = object.constructor, index = -1, isProto = "function" == typeof Ctor && Ctor.prototype === object, result = Array(length), skipIndexes = length > 0; ++index < length; ) result[index] = index + "";
        for (var key in object) if ((!skipIndexes || !isIndex(key, length)) && ("constructor" != key || !isProto && hasOwnProperty.call(object, key))) result.push(key);
        return result;
    }
    var isArguments = __webpack_require__(96), isArray = __webpack_require__(27), isIndex = __webpack_require__(183), isLength = __webpack_require__(95), isObject = __webpack_require__(28), objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty;
    module.exports = keysIn;
}, function(module, exports) {
    function defaultSetTimout() {
        throw new Error("setTimeout has not been defined");
    }
    function defaultClearTimeout() {
        throw new Error("clearTimeout has not been defined");
    }
    function runTimeout(fun) {
        if (cachedSetTimeout === setTimeout) return setTimeout(fun, 0);
        if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
            cachedSetTimeout = setTimeout;
            return setTimeout(fun, 0);
        }
        try {
            return cachedSetTimeout(fun, 0);
        } catch (e) {
            try {
                return cachedSetTimeout.call(null, fun, 0);
            } catch (e) {
                return cachedSetTimeout.call(this, fun, 0);
            }
        }
    }
    function runClearTimeout(marker) {
        if (cachedClearTimeout === clearTimeout) return clearTimeout(marker);
        if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
            cachedClearTimeout = clearTimeout;
            return clearTimeout(marker);
        }
        try {
            return cachedClearTimeout(marker);
        } catch (e) {
            try {
                return cachedClearTimeout.call(null, marker);
            } catch (e) {
                return cachedClearTimeout.call(this, marker);
            }
        }
    }
    function cleanUpNextTick() {
        if (draining && currentQueue) {
            draining = !1;
            if (currentQueue.length) queue = currentQueue.concat(queue); else queueIndex = -1;
            if (queue.length) drainQueue();
        }
    }
    function drainQueue() {
        if (!draining) {
            var timeout = runTimeout(cleanUpNextTick);
            draining = !0;
            for (var len = queue.length; len; ) {
                currentQueue = queue;
                queue = [];
                for (;++queueIndex < len; ) if (currentQueue) currentQueue[queueIndex].run();
                queueIndex = -1;
                len = queue.length;
            }
            currentQueue = null;
            draining = !1;
            runClearTimeout(timeout);
        }
    }
    function Item(fun, array) {
        this.fun = fun;
        this.array = array;
    }
    function noop() {}
    var cachedSetTimeout, cachedClearTimeout, process = module.exports = {};
    !function() {
        try {
            if ("function" == typeof setTimeout) cachedSetTimeout = setTimeout; else cachedSetTimeout = defaultSetTimout;
        } catch (e) {
            cachedSetTimeout = defaultSetTimout;
        }
        try {
            if ("function" == typeof clearTimeout) cachedClearTimeout = clearTimeout; else cachedClearTimeout = defaultClearTimeout;
        } catch (e) {
            cachedClearTimeout = defaultClearTimeout;
        }
    }();
    var currentQueue, queue = [], draining = !1, queueIndex = -1;
    process.nextTick = function(fun) {
        var args = new Array(arguments.length - 1);
        if (arguments.length > 1) for (var i = 1; i < arguments.length; i++) args[i - 1] = arguments[i];
        queue.push(new Item(fun, args));
        if (1 === queue.length && !draining) runTimeout(drainQueue);
    };
    Item.prototype.run = function() {
        this.fun.apply(null, this.array);
    };
    process.title = "browser";
    process.browser = !0;
    process.env = {};
    process.argv = [];
    process.version = "";
    process.versions = {};
    process.on = noop;
    process.addListener = noop;
    process.once = noop;
    process.off = noop;
    process.removeListener = noop;
    process.removeAllListeners = noop;
    process.emit = noop;
    process.prependListener = noop;
    process.prependOnceListener = noop;
    process.listeners = function(name) {
        return [];
    };
    process.binding = function(name) {
        throw new Error("process.binding is not supported");
    };
    process.cwd = function() {
        return "/";
    };
    process.chdir = function(dir) {
        throw new Error("process.chdir is not supported");
    };
    process.umask = function() {
        return 0;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function CallbackQueue() {
        this._callbacks = null;
        this._contexts = null;
    }
    var PooledClass = __webpack_require__(70), invariant = __webpack_require__(5);
    __webpack_require__(52)(CallbackQueue, {
        enqueue: function(callback, context) {
            this._callbacks = this._callbacks || [];
            this._contexts = this._contexts || [];
            this._callbacks.push(callback);
            this._contexts.push(context);
        },
        notifyAll: function() {
            var callbacks = this._callbacks, contexts = this._contexts;
            if (callbacks) {
                !0 ? invariant(callbacks.length === contexts.length, "Mismatched list of contexts in callback queue") : invariant(callbacks.length === contexts.length);
                this._callbacks = null;
                this._contexts = null;
                for (var i = 0, l = callbacks.length; i < l; i++) callbacks[i].call(contexts[i]);
                callbacks.length = 0;
                contexts.length = 0;
            }
        },
        reset: function() {
            this._callbacks = null;
            this._contexts = null;
        },
        destructor: function() {
            this.reset();
        }
    });
    PooledClass.addPoolingTo(CallbackQueue);
    module.exports = CallbackQueue;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isEndish(topLevelType) {
        return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;
    }
    function isMoveish(topLevelType) {
        return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;
    }
    function isStartish(topLevelType) {
        return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;
    }
    function forEachEventDispatch(event, cb) {
        var dispatchListeners = event._dispatchListeners, dispatchIDs = event._dispatchIDs;
        if (!0) validateEventDispatches(event);
        if (Array.isArray(dispatchListeners)) for (var i = 0; i < dispatchListeners.length && !event.isPropagationStopped(); i++) cb(event, dispatchListeners[i], dispatchIDs[i]); else if (dispatchListeners) cb(event, dispatchListeners, dispatchIDs);
    }
    function executeDispatch(event, listener, domID) {
        event.currentTarget = injection.Mount.getNode(domID);
        var returnValue = listener(event, domID);
        event.currentTarget = null;
        return returnValue;
    }
    function executeDispatchesInOrder(event, executeDispatch) {
        forEachEventDispatch(event, executeDispatch);
        event._dispatchListeners = null;
        event._dispatchIDs = null;
    }
    function executeDispatchesInOrderStopAtTrueImpl(event) {
        var dispatchListeners = event._dispatchListeners, dispatchIDs = event._dispatchIDs;
        if (!0) validateEventDispatches(event);
        if (Array.isArray(dispatchListeners)) {
            for (var i = 0; i < dispatchListeners.length && !event.isPropagationStopped(); i++) if (dispatchListeners[i](event, dispatchIDs[i])) return dispatchIDs[i];
        } else if (dispatchListeners) if (dispatchListeners(event, dispatchIDs)) return dispatchIDs;
        return null;
    }
    function executeDispatchesInOrderStopAtTrue(event) {
        var ret = executeDispatchesInOrderStopAtTrueImpl(event);
        event._dispatchIDs = null;
        event._dispatchListeners = null;
        return ret;
    }
    function executeDirectDispatch(event) {
        if (!0) validateEventDispatches(event);
        var dispatchListener = event._dispatchListeners, dispatchID = event._dispatchIDs;
        !0 ? invariant(!Array.isArray(dispatchListener), "executeDirectDispatch(...): Invalid `event`.") : invariant(!Array.isArray(dispatchListener));
        var res = dispatchListener ? dispatchListener(event, dispatchID) : null;
        event._dispatchListeners = null;
        event._dispatchIDs = null;
        return res;
    }
    function hasDispatches(event) {
        return !!event._dispatchListeners;
    }
    var validateEventDispatches, EventConstants = __webpack_require__(36), invariant = __webpack_require__(5), injection = {
        Mount: null,
        injectMount: function(InjectedMount) {
            injection.Mount = InjectedMount;
            if (!0) !0 ? invariant(InjectedMount && InjectedMount.getNode, "EventPluginUtils.injection.injectMount(...): Injected Mount module is missing getNode.") : invariant(InjectedMount && InjectedMount.getNode);
        }
    }, topLevelTypes = EventConstants.topLevelTypes;
    if (!0) validateEventDispatches = function(event) {
        var dispatchListeners = event._dispatchListeners, dispatchIDs = event._dispatchIDs, listenersIsArr = Array.isArray(dispatchListeners), idsIsArr = Array.isArray(dispatchIDs), IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0, listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;
        !0 ? invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen, "EventPluginUtils: Invalid `event`.") : invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen);
    };
    var EventPluginUtils = {
        isEndish: isEndish,
        isMoveish: isMoveish,
        isStartish: isStartish,
        executeDirectDispatch: executeDirectDispatch,
        executeDispatch: executeDispatch,
        executeDispatchesInOrder: executeDispatchesInOrder,
        executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
        hasDispatches: hasDispatches,
        injection: injection,
        useTouchEvents: !1
    };
    module.exports = EventPluginUtils;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _assertSingleLink(input) {
        !0 ? invariant(null == input.props.checkedLink || null == input.props.valueLink, "Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don't want to use valueLink and vice versa.") : invariant(null == input.props.checkedLink || null == input.props.valueLink);
    }
    function _assertValueLink(input) {
        _assertSingleLink(input);
        !0 ? invariant(null == input.props.value && null == input.props.onChange, "Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don't want to use valueLink.") : invariant(null == input.props.value && null == input.props.onChange);
    }
    function _assertCheckedLink(input) {
        _assertSingleLink(input);
        !0 ? invariant(null == input.props.checked && null == input.props.onChange, "Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don't want to use checkedLink") : invariant(null == input.props.checked && null == input.props.onChange);
    }
    function _handleLinkedValueChange(e) {
        this.props.valueLink.requestChange(e.target.value);
    }
    function _handleLinkedCheckChange(e) {
        this.props.checkedLink.requestChange(e.target.checked);
    }
    var ReactPropTypes = __webpack_require__(286), invariant = __webpack_require__(5), hasReadOnlyValue = {
        button: !0,
        checkbox: !0,
        image: !0,
        hidden: !0,
        radio: !0,
        reset: !0,
        submit: !0
    }, LinkedValueUtils = {
        Mixin: {
            propTypes: {
                value: function(props, propName, componentName) {
                    if (!(!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled)) return new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.");
                },
                checked: function(props, propName, componentName) {
                    if (props[propName] && !props.onChange && !props.readOnly && !props.disabled) return new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.");
                },
                onChange: ReactPropTypes.func
            }
        },
        getValue: function(input) {
            if (input.props.valueLink) {
                _assertValueLink(input);
                return input.props.valueLink.value;
            }
            return input.props.value;
        },
        getChecked: function(input) {
            if (input.props.checkedLink) {
                _assertCheckedLink(input);
                return input.props.checkedLink.value;
            }
            return input.props.checked;
        },
        getOnChange: function(input) {
            if (input.props.valueLink) {
                _assertValueLink(input);
                return _handleLinkedValueChange;
            } else if (input.props.checkedLink) {
                _assertCheckedLink(input);
                return _handleLinkedCheckChange;
            }
            return input.props.onChange;
        }
    };
    module.exports = LinkedValueUtils;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var merge = __webpack_require__(37), ReactContext = {
        current: {},
        withContext: function(newContext, scopedCallback) {
            var result, previousContext = ReactContext.current;
            ReactContext.current = merge(previousContext, newContext);
            try {
                result = scopedCallback();
            } finally {
                ReactContext.current = previousContext;
            }
            return result;
        }
    };
    module.exports = ReactContext;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getEmptyComponent() {
        !0 ? invariant(component, "Trying to return null from a render, but no null placeholder component was injected.") : invariant(component);
        return component();
    }
    function registerNullComponentID(id) {
        nullComponentIdsRegistry[id] = !0;
    }
    function deregisterNullComponentID(id) {
        delete nullComponentIdsRegistry[id];
    }
    function isNullComponentID(id) {
        return nullComponentIdsRegistry[id];
    }
    var component, invariant = __webpack_require__(5), nullComponentIdsRegistry = {}, ReactEmptyComponentInjection = {
        injectEmptyComponent: function(emptyComponent) {
            component = emptyComponent;
        }
    }, ReactEmptyComponent = {
        deregisterNullComponentID: deregisterNullComponentID,
        getEmptyComponent: getEmptyComponent,
        injection: ReactEmptyComponentInjection,
        isNullComponentID: isNullComponentID,
        registerNullComponentID: registerNullComponentID
    };
    module.exports = ReactEmptyComponent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isInDocument(node) {
        return containsNode(document.documentElement, node);
    }
    var ReactDOMSelection = __webpack_require__(621), containsNode = __webpack_require__(291), focusNode = __webpack_require__(292), getActiveElement = __webpack_require__(293), ReactInputSelection = {
        hasSelectionCapabilities: function(elem) {
            return elem && ("INPUT" === elem.nodeName && "text" === elem.type || "TEXTAREA" === elem.nodeName || "true" === elem.contentEditable);
        },
        getSelectionInformation: function() {
            var focusedElem = getActiveElement();
            return {
                focusedElem: focusedElem,
                selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null
            };
        },
        restoreSelection: function(priorSelectionInformation) {
            var curFocusedElem = getActiveElement(), priorFocusedElem = priorSelectionInformation.focusedElem, priorSelectionRange = priorSelectionInformation.selectionRange;
            if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
                if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);
                focusNode(priorFocusedElem);
            }
        },
        getSelection: function(input) {
            var selection;
            if ("selectionStart" in input) selection = {
                start: input.selectionStart,
                end: input.selectionEnd
            }; else if (document.selection && "INPUT" === input.nodeName) {
                var range = document.selection.createRange();
                if (range.parentElement() === input) selection = {
                    start: -range.moveStart("character", -input.value.length),
                    end: -range.moveEnd("character", -input.value.length)
                };
            } else selection = ReactDOMSelection.getOffsets(input);
            return selection || {
                start: 0,
                end: 0
            };
        },
        setSelection: function(input, offsets) {
            var start = offsets.start, end = offsets.end;
            if (void 0 === end) end = start;
            if ("selectionStart" in input) {
                input.selectionStart = start;
                input.selectionEnd = Math.min(end, input.value.length);
            } else if (document.selection && "INPUT" === input.nodeName) {
                var range = input.createTextRange();
                range.collapse(!0);
                range.moveStart("character", start);
                range.moveEnd("character", end - start);
                range.select();
            } else ReactDOMSelection.setOffsets(input, offsets);
        }
    };
    module.exports = ReactInputSelection;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function accumulate(current, next) {
        !0 ? invariant(null != next, "accumulate(...): Accumulated items must be not be null or undefined.") : invariant(null != next);
        if (null == current) return next; else {
            var currentIsArray = Array.isArray(current), nextIsArray = Array.isArray(next);
            if (currentIsArray) return current.concat(next); else if (nextIsArray) return [ current ].concat(next); else return [ current, next ];
        }
    }
    var invariant = __webpack_require__(5);
    module.exports = accumulate;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function escaper(match) {
        return ESCAPE_LOOKUP[match];
    }
    function escapeTextForBrowser(text) {
        return ("" + text).replace(ESCAPE_REGEX, escaper);
    }
    var ESCAPE_LOOKUP = {
        "&": "&amp;",
        ">": "&gt;",
        "<": "&lt;",
        '"': "&quot;",
        "'": "&#x27;"
    }, ESCAPE_REGEX = /[&><"']/g;
    module.exports = escapeTextForBrowser;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var forEachAccumulated = function(arr, cb, scope) {
        if (Array.isArray(arr)) arr.forEach(cb, scope); else if (arr) cb.call(scope, arr);
    };
    module.exports = forEachAccumulated;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function modifierStateGetter(keyArg) {
        var syntheticEvent = this, nativeEvent = syntheticEvent.nativeEvent;
        if (nativeEvent.getModifierState) return nativeEvent.getModifierState(keyArg);
        var keyProp = modifierKeyToProp[keyArg];
        return keyProp ? !!nativeEvent[keyProp] : !1;
    }
    function getEventModifierState(nativeEvent) {
        return modifierStateGetter;
    }
    var modifierKeyToProp = {
        Alt: "altKey",
        Control: "ctrlKey",
        Meta: "metaKey",
        Shift: "shiftKey"
    };
    module.exports = getEventModifierState;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getEventTarget(nativeEvent) {
        var target = nativeEvent.target || nativeEvent.srcElement || window;
        return 3 === target.nodeType ? target.parentNode : target;
    }
    module.exports = getEventTarget;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getTextContentAccessor() {
        if (!contentKey && ExecutionEnvironment.canUseDOM) contentKey = "textContent" in document.documentElement ? "textContent" : "innerText";
        return contentKey;
    }
    var ExecutionEnvironment = __webpack_require__(26), contentKey = null;
    module.exports = getTextContentAccessor;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isEventSupported(eventNameSuffix, capture) {
        if (!ExecutionEnvironment.canUseDOM || capture && !("addEventListener" in document)) return !1;
        var eventName = "on" + eventNameSuffix, isSupported = eventName in document;
        if (!isSupported) {
            var element = document.createElement("div");
            element.setAttribute(eventName, "return;");
            isSupported = "function" == typeof element[eventName];
        }
        if (!isSupported && useHasFeature && "wheel" === eventNameSuffix) isSupported = document.implementation.hasFeature("Events.wheel", "3.0");
        return isSupported;
    }
    var useHasFeature, ExecutionEnvironment = __webpack_require__(26);
    if (ExecutionEnvironment.canUseDOM) useHasFeature = document.implementation && document.implementation.hasFeature && !0 !== document.implementation.hasFeature("", "");
    module.exports = isEventSupported;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function mergeInto(one, two) {
        checkMergeIntoObjectArg(one);
        if (null != two) {
            checkMergeObjectArg(two);
            for (var key in two) if (two.hasOwnProperty(key)) one[key] = two[key];
        }
    }
    var mergeHelpers = __webpack_require__(662), checkMergeObjectArg = mergeHelpers.checkMergeObjectArg, checkMergeIntoObjectArg = mergeHelpers.checkMergeIntoObjectArg;
    module.exports = mergeInto;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function monitorCodeUse(eventName, data) {
        !0 ? invariant(eventName && !/[^a-z0-9_]/.test(eventName), "You must provide an eventName using only the characters [a-z0-9_]") : invariant(eventName && !/[^a-z0-9_]/.test(eventName));
    }
    var invariant = __webpack_require__(5);
    module.exports = monitorCodeUse;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function shouldUpdateReactComponent(prevDescriptor, nextDescriptor) {
        if (prevDescriptor && nextDescriptor && prevDescriptor.type === nextDescriptor.type && (prevDescriptor.props && prevDescriptor.props.key) === (nextDescriptor.props && nextDescriptor.props.key) && prevDescriptor._owner === nextDescriptor._owner) return !0; else return !1;
    }
    module.exports = shouldUpdateReactComponent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function compose() {
        for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) funcs[_key] = arguments[_key];
        return funcs.reduceRight(function(composed, f) {
            return f(composed);
        });
    }
    exports.__esModule = !0;
    exports["default"] = compose;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function loadDiagnosticInfo() {
        return function(dispatch, getState) {
            (!1 ? Promise.resolve(require("@drp/core/diagnostics/sysinfo-emulator.json")) : _systemScanner2["default"].fetchData("localdiagnostics")).then(function(diagObj) {
                dispatch({
                    type: "DIAGNOSTICS_UPDATE_SUCCESS",
                    payload: diagObj
                });
            });
        };
    }
    function updateDiagnosticInfo() {
        return function(dispatch, getState) {
            (!1 ? Promise.resolve(require("@drp/core/diagnostics/sysinfo-emulator.json")) : Promise.delay(0).then(function() {
                return (0, _getDiagnostics2["default"])("temporary");
            })).then(function(diagObj) {
                dispatch({
                    type: "DIAGNOSTICS_UPDATE_SUCCESS",
                    payload: diagObj
                });
            });
        };
    }
    function openDiagnostic(tool) {
        switch (tool) {
          case "TESTRAM":
            _statistics2["default"].event({
                action: "diagnostic memorytest clicked"
            });
            (0, _utils.winRun)("mdsched.exe", "", "", !0);
            break;

          case "DEFRAG":
            _statistics2["default"].event({
                action: "diagnostic defrag clicked"
            });
            if (OSVersion >= 6) (0, _utils.winRun)("dfrgui.exe", "", "", !0); else (0, _utils.winRun)("dfrg.msc", "", "", !0);
            break;

          case "SYSINFO":
            _statistics2["default"].event({
                action: "diagnostic details clicked"
            });
            _system.WshShell.Run("msinfo32.exe", 0, !1);
        }
        return {};
    }
    exports.__esModule = !0;
    exports.loadDiagnosticInfo = loadDiagnosticInfo;
    exports.updateDiagnosticInfo = updateDiagnosticInfo;
    exports.openDiagnostic = openDiagnostic;
    var _system = __webpack_require__(6), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _getDiagnostics = __webpack_require__(108), _getDiagnostics2 = _interopRequireDefault(_getDiagnostics), _utils = __webpack_require__(19), _systemScanner = __webpack_require__(65), _systemScanner2 = _interopRequireDefault(_systemScanner);
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function loadLanguageList() {
        return {
            type: "MENU_LANGUAGES_LIST_LOADED",
            payload: (0, _sortBy2["default"])(window.languagesList, "name")
        };
    }
    function changeLang(lang, eventAction) {
        var _this = this;
        return function() {
            var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                var state, page, prevLang;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        if (eventAction) _statistics2["default"].event({
                            action: eventAction,
                            counters: [ "debug" ]
                        });
                        state = getState();
                        page = state.page;
                        prevLang = state.lang.currentLanguage;
                        _context.next = 6;
                        return window.changeLanguage(lang);

                      case 6:
                        dispatch({
                            type: "CURRENT_LANGUAGE_UPDATED",
                            payload: lang
                        });
                        if ("SCAN_SCREEN" !== page) dispatch((0, _settingsActions.loadSettings)());
                        if ("GAMES" === page && "ru" === prevLang && "ru" !== lang) dispatch((0, _menuActions.navigate)("DRIVERS"));
                        window.SoftPack.applyAll();

                      case 10:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, _this);
            }));
            return function(_x, _x2) {
                return _ref.apply(this, arguments);
            };
        }();
    }
    exports.__esModule = !0;
    exports.loadLanguageList = loadLanguageList;
    exports.changeLang = changeLang;
    var _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _sortBy = __webpack_require__(535), _sortBy2 = _interopRequireDefault(_sortBy), _settingsActions = __webpack_require__(123), _menuActions = __webpack_require__(38);
}, function(module, exports, __webpack_require__) {
    "use strict";
    function startInstallAll() {
        (0, _recoverInternet.saveWifiProfile)();
        return (0, _driversActions2.installDriversAndPrograms)({
            eventAction: "startpage install all clicked",
            zone: "START_PAGE"
        });
    }
    function startInstallCustom() {
        var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        (0, _recoverInternet.saveWifiProfile)();
        if (options.eventAction) _statistics2["default"].event({
            action: options.eventAction
        });
        return (0, _menuActions.navigate)("DRIVERS", {
            preventSendingEvent: !0
        });
    }
    function expandDrivers() {
        return function(dispatch, getState) {
            dispatch({
                type: "START_SCREEN_DRIVERS_EXPANDED"
            });
        };
    }
    function expandPrograms() {
        return function(dispatch, getState) {
            dispatch({
                type: "START_SCREEN_PROGRAMS_EXPANDED"
            });
        };
    }
    function openDriversPopover() {
        return function(dispatch, getState) {
            dispatch({
                type: "START_SCREEN_DRIVERS_POPOVER_OPENED"
            });
        };
    }
    function openProgramsPopover() {
        return function(dispatch, getState) {
            dispatch({
                type: "START_SCREEN_PROGRAMS_POPOVER_OPENED"
            });
        };
    }
    function openDiagnosticsPopover() {
        return function(dispatch, getState) {
            dispatch({
                type: "START_SCREEN_DIAGNOSTICS_POPOVER_OPENED"
            });
        };
    }
    function closePopovers() {
        return function(dispatch, getState) {
            dispatch({
                type: "START_SCREEN_POPOVERS_CLOSED"
            });
        };
    }
    exports.__esModule = !0;
    exports.closeStartFakePopup = exports.openStartFakePopup = exports.setInstallationMode = exports.toggleAllAppEsteemDrivers = exports.toggleAppEsteemDriver = undefined;
    exports.startInstallAll = startInstallAll;
    exports.startInstallCustom = startInstallCustom;
    exports.expandDrivers = expandDrivers;
    exports.expandPrograms = expandPrograms;
    exports.openDriversPopover = openDriversPopover;
    exports.openProgramsPopover = openProgramsPopover;
    exports.openDiagnosticsPopover = openDiagnosticsPopover;
    exports.closePopovers = closePopovers;
    var _statistics = __webpack_require__(10), _statistics2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_statistics), _menuActions = __webpack_require__(38), _driversActions = __webpack_require__(122), _programsActions = __webpack_require__(64), _driversActions2 = __webpack_require__(122), _recoverInternet = __webpack_require__(327);
    exports.toggleAppEsteemDriver = function(options) {
        return function(dispatch, getState) {
            var isDriver = options.isDriver, isChecked = options.isChecked, id = options.id, deviceId = options.deviceId;
            if (isDriver) dispatch((0, _driversActions.toggleDevice)(deviceId, isChecked)); else dispatch((0, 
            _programsActions.toggleProgram)(id, isChecked, "START"));
        };
    }, exports.toggleAllAppEsteemDrivers = function(isChecked) {
        return {
            type: "START_SCREEN_TOGGLE_ALL_APPESTEEM_DRIVERS",
            payload: {
                isChecked: isChecked
            }
        };
    }, exports.setInstallationMode = function(mode) {
        return function(dispatch, getState) {
            dispatch({
                type: "START_SCREEN_SET_INSTALLATION_MODE",
                payload: {
                    mode: mode
                }
            });
        };
    }, exports.openStartFakePopup = function() {
        return {
            type: "START_FAKE_POPUP_OPEN"
        };
    }, exports.closeStartFakePopup = function() {
        return {
            type: "START_FAKE_POPUP_CLOSE"
        };
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _objectWithoutProperties(obj, keys) {
        var target = {};
        for (var i in obj) if (!(keys.indexOf(i) >= 0)) if (Object.prototype.hasOwnProperty.call(obj, i)) target[i] = obj[i];
        return target;
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _lodash = __webpack_require__(94), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _fso = __webpack_require__(17), _wget = __webpack_require__(227), _wget2 = _interopRequireDefault(_wget), _aria = __webpack_require__(104), _aria2 = _interopRequireDefault(_aria), _unzip = __webpack_require__(124), _unzip2 = _interopRequireDefault(_unzip), _getClass = __webpack_require__(799), _getClass2 = _interopRequireDefault(_getClass), _download = __webpack_require__(150), parseBuild = function(str) {
        return (0, _lodash.chunk)(str, 2).map(function(a) {
            return a.join("");
        }).join(".");
    }, processFiles = function(files) {
        for (var drivers = [], programs = [], core = [], misc = [], indexes = [], filesByIndex = {}, _iterator = files, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
            var _ref2;
            if (_isArray) {
                if (_i >= _iterator.length) break;
                _ref2 = _iterator[_i++];
            } else {
                _i = _iterator.next();
                if (_i.done) break;
                _ref2 = _i.value;
            }
            var _ref3 = _ref2, index = _ref3.index, path = _ref3.path, size = _ref3.size;
            indexes.push(index);
            var _path$split = path.split("/"), root = _path$split[1], parts = _path$split.slice(2), file = filesByIndex[index] = {
                index: index,
                size: size,
                root: root,
                path: parts.join("\\")
            }, firstPart = (0, _lodash.first)(parts), filename = (0, _lodash.last)(parts);
            if ("drivers" === firstPart) {
                var _ref4 = filename.match(/^DP_(.+)_(\d+)\.7z$/) || [], name = _ref4[1], build = _ref4[2];
                drivers.push(_extends({}, file, {
                    name: name,
                    build: parseBuild(build),
                    "class": (0, _getClass2["default"])(filename)
                }));
            } else if ("programs" === firstPart) {
                var _name = filename.split(".").slice(0, -1).join(".");
                programs.push(_extends({}, file, {
                    name: _name
                }));
            } else if (/^DriverPack_/.test(firstPart)) {
                var _ref5 = firstPart.match(/^DriverPack_([\d\.]+)-(\d+)\./) || [], version = _ref5[1], _build = _ref5[2];
                core.push(_extends({}, file, {
                    version: version,
                    build: parseBuild(_build)
                }));
            } else misc.push(file);
        }
        return {
            indexes: indexes,
            filesByIndex: filesByIndex,
            files: {
                drivers: drivers,
                programs: programs,
                core: core,
                misc: misc
            }
        };
    }, Configurator = function() {
        function Configurator() {
            _classCallCheck(this, Configurator);
            this.torrentFilename = "DriverPack_Update.torrent";
            this.torrentUri = window.downloadEndpoint + "/" + this.torrentFilename;
            this.altTorrentUri = window.altDownloadEndpoint + "/" + this.torrentFilename;
            this.tempPath = (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp");
            this.torrentPath = this.tempPath + "\\" + this.torrentFilename;
        }
        Configurator.prototype.init = function() {
            function init() {
                return _ref6.apply(this, arguments);
            }
            var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                var events, _aria$parseTorrent, allFiles, info, _processFiles, indexes, filesByIndex, files;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        if (this.info && this.files) {
                            _context.next = 23;
                            break;
                        }
                        _context.next = 3;
                        return (0, _download.ensure)([ "aria2c.exe", {
                            name: "driverpack-wget.exe",
                            aliases: [ "wget.exe" ]
                        }, {
                            name: "driverpack-7za.exe",
                            aliases: [ "7za.exe" ]
                        } ]);

                      case 3:
                        events = {
                            beforeDownloading: function() {},
                            afterDownloading: function() {}
                        };
                        _context.prev = 4;
                        _context.next = 7;
                        return _wget2["default"].downloadFiles(events, this.tempPath, [ {
                            link: this.torrentUri
                        } ]);

                      case 7:
                        _context.next = 13;
                        break;

                      case 9:
                        _context.prev = 9;
                        _context.t0 = _context["catch"](4);
                        _context.next = 13;
                        return _wget2["default"].downloadFiles(events, this.tempPath, [ {
                            link: this.altTorrentUri
                        } ]);

                      case 13:
                        _context.prev = 13;
                        _context.next = 16;
                        return _aria2["default"].addToFirewallAllowed();

                      case 16:
                        _context.next = 20;
                        break;

                      case 18:
                        _context.prev = 18;
                        _context.t1 = _context["catch"](13);

                      case 20:
                        _aria$parseTorrent = _aria2["default"].parseTorrent(this.torrentPath), allFiles = _aria$parseTorrent.files, 
                        info = _objectWithoutProperties(_aria$parseTorrent, [ "files" ]);
                        _processFiles = processFiles(allFiles), indexes = _processFiles.indexes, filesByIndex = _processFiles.filesByIndex, 
                        files = _processFiles.files;
                        Object.assign(this, {
                            info: info,
                            files: files,
                            indexes: indexes,
                            filesByIndex: filesByIndex
                        });

                      case 23:
                        return _context.abrupt("return", this.files);

                      case 24:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, this, [ [ 4, 9 ], [ 13, 18 ] ]);
            }));
            return init;
        }();
        Configurator.prototype.getTotalSize = function(selectedIndexes) {
            var indexes = (0, _lodash.union)((0, _lodash.map)(this.files.core, "index"), selectedIndexes);
            return (0, _lodash.sum)((0, _lodash.map)((0, _lodash.pick)(this.filesByIndex, indexes), "size.value"));
        };
        Configurator.prototype.getDownloadedSize = function(path, indexes) {
            for (var total = 0, _iterator2 = Object.values((0, _lodash.pick)(this.filesByIndex, indexes)), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator](); ;) {
                var _ref7;
                if (_isArray2) {
                    if (_i2 >= _iterator2.length) break;
                    _ref7 = _iterator2[_i2++];
                } else {
                    _i2 = _iterator2.next();
                    if (_i2.done) break;
                    _ref7 = _i2.value;
                }
                var file = _ref7, localPath = path + "\\" + file.root + "\\" + file.path;
                if (_fso.fso.FileExists(localPath)) total += _fso.fso.GetFile(localPath).Size;
            }
            return total;
        };
        Configurator.prototype.cleanupFiles = function(path, indexes) {
            for (var _iterator3 = Object.values((0, _lodash.pick)(this.filesByIndex, indexes)), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator](); ;) {
                var _ref8;
                if (_isArray3) {
                    if (_i3 >= _iterator3.length) break;
                    _ref8 = _iterator3[_i3++];
                } else {
                    _i3 = _iterator3.next();
                    if (_i3.done) break;
                    _ref8 = _i3.value;
                }
                var file = _ref8;
                (0, _localFiles.deleteFile)(path + "\\" + file.root + "\\" + file.path);
            }
        };
        Configurator.prototype.build = function() {
            function build(_x, _x2) {
                return _ref9.apply(this, arguments);
            }
            var _ref9 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(path, selectedIndexes) {
                var core, coreIndexes, indexes, totalSize, reportProgress, interval, downloadedSize, _iterator4, _isArray4, _i4, _ref11, file, dest, zipFile, id, _ref12, root, version, build, _this = this, _ref10 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, onProgress = _ref10.onProgress, _ref10$checkInterval = _ref10.checkInterval, checkInterval = _ref10$checkInterval === undefined ? 3e3 : _ref10$checkInterval;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        core = this.files.core;
                        coreIndexes = (0, _lodash.map)(core, "index");
                        indexes = (0, _lodash.union)(coreIndexes, selectedIndexes);
                        totalSize = this.getTotalSize(selectedIndexes);
                        reportProgress = "function" == typeof onProgress ? function() {
                            var downloadedSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.getDownloadedSize(path, indexes);
                            return onProgress({
                                totalSize: totalSize,
                                downloadedSize: downloadedSize
                            });
                        } : function() {};
                        (0, _localFiles.ensurePath)(path);
                        reportProgress(0);
                        interval = setInterval(reportProgress, checkInterval);
                        _context2.prev = 8;
                        _context2.next = 11;
                        return _aria2["default"].downloadParts(path, {
                            uri: this.torrentPath,
                            indexes: indexes
                        });

                      case 11:
                        _context2.next = 18;
                        break;

                      case 13:
                        _context2.prev = 13;
                        _context2.t0 = _context2["catch"](8);
                        downloadedSize = this.getDownloadedSize(path, indexes);
                        if (downloadedSize === totalSize) {
                            _context2.next = 18;
                            break;
                        }
                        throw _context2.t0;

                      case 18:
                        _context2.prev = 18;
                        clearInterval(interval);
                        return _context2.finish(18);

                      case 21:
                        reportProgress(totalSize);
                        _iterator4 = core, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();

                      case 23:
                        if (!_isArray4) {
                            _context2.next = 29;
                            break;
                        }
                        if (!(_i4 >= _iterator4.length)) {
                            _context2.next = 26;
                            break;
                        }
                        return _context2.abrupt("break", 41);

                      case 26:
                        _ref11 = _iterator4[_i4++];
                        _context2.next = 33;
                        break;

                      case 29:
                        _i4 = _iterator4.next();
                        if (!_i4.done) {
                            _context2.next = 32;
                            break;
                        }
                        return _context2.abrupt("break", 41);

                      case 32:
                        _ref11 = _i4.value;

                      case 33:
                        file = _ref11;
                        dest = path + "\\" + file.root;
                        zipFile = dest + "\\" + file.path;
                        id = +Math.round(1e5 * Math.random());
                        _context2.next = 39;
                        return _unzip2["default"].run7z(dest, zipFile, "", id);

                      case 39:
                        _context2.next = 23;
                        break;

                      case 41:
                        this.cleanupFiles(path, (0, _lodash.union)(coreIndexes, (0, _lodash.difference)(this.indexes, selectedIndexes)));
                        _ref12 = (0, _lodash.first)(core) || {}, root = _ref12.root, version = _ref12.version, 
                        build = _ref12.build;
                        return _context2.abrupt("return", {
                            version: version,
                            build: build,
                            path: path + "\\" + root
                        });

                      case 44:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, this, [ [ 8, 13, 18, 21 ] ]);
            }));
            return build;
        }();
        return Configurator;
    }();
    exports["default"] = new Configurator();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = {
        FSO_FOR_READING: 1,
        FSO_FOR_WRITING: 2,
        FSO_CREATE: !0,
        FSO_DONT_CREATE: !1,
        FSO_TRISTATE_TRUE: -1
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _http = __webpack_require__(73), _registry = __webpack_require__(56), _utils = __webpack_require__(19), User = function() {
        function User() {
            _classCallCheck(this, User);
        }
        User.prototype.getToken = function() {
            function getToken() {
                return _ref.apply(this, arguments);
            }
            var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                var endpoint, _ref2, body;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        endpoint = window.authEndpoint + "/api/token";
                        _context.next = 3;
                        return (0, _http.httppost)(endpoint, {});

                      case 3:
                        _ref2 = _context.sent;
                        body = _ref2.body;
                        this.token = body.token;

                      case 6:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, this);
            }));
            return getToken;
        }();
        User.prototype.authTimeoutAction = function(_ref3, waitTo) {
            var _this = this, resolve = _ref3.resolve, reject = _ref3.reject;
            return _asyncToGenerator(regeneratorRuntime.mark(function _callee2() {
                var endpoint, query, _ref5, headers, body, session;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        _context2.prev = 0;
                        endpoint = window.authEndpoint + "/api/auth/jwt";
                        query = {
                            token: _this.token
                        };
                        _context2.next = 5;
                        return (0, _http.httppost)(endpoint, query);

                      case 5:
                        _ref5 = _context2.sent;
                        headers = _ref5.headers;
                        body = _ref5.body;
                        session = headers["x-drp-session"];
                        delete _this.token;
                        Object.assign(_this, {
                            profile: body,
                            session: session
                        });
                        (0, _registry.RegWrite)("HKCU\\SOFTWARE\\drpsu\\session", session);
                        delete _this.authTimeout;
                        resolve(_this);
                        _context2.next = 19;
                        break;

                      case 16:
                        _context2.prev = 16;
                        _context2.t0 = _context2["catch"](0);
                        if (Date.now() < waitTo) _this.authTimeout = setTimeout(_this.authTimeoutAction({
                            resolve: resolve,
                            reject: reject
                        }, waitTo), 1e3); else {
                            delete _this.authTimeout;
                            reject(_context2.t0);
                        }

                      case 19:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, _this, [ [ 0, 16 ] ]);
            }));
        };
        User.prototype.authorize = function() {
            function authorize() {
                return _ref6.apply(this, arguments);
            }
            var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3() {
                var waitTo, _this2 = this;
                return regeneratorRuntime.wrap(function(_context3) {
                    for (;;) switch (_context3.prev = _context3.next) {
                      case 0:
                        if (this.authTimeout) {
                            clearTimeout(this.authTimeout);
                            delete this.authTimeout;
                        }
                        if (this.token) {
                            _context3.next = 4;
                            break;
                        }
                        _context3.next = 4;
                        return this.getToken();

                      case 4:
                        (0, _utils.goToUrl)(window.authEndpoint + "/" + window.lang + "?token=" + this.token);
                        waitTo = Date.now() + 3e5;
                        return _context3.abrupt("return", new Promise(function(resolve, reject) {
                            _this2.authTimeout = setTimeout(_this2.authTimeoutAction({
                                resolve: resolve,
                                reject: reject
                            }, waitTo), 1e3);
                        }));

                      case 7:
                      case "end":
                        return _context3.stop();
                    }
                }, _callee3, this);
            }));
            return authorize;
        }();
        User.prototype.getSession = function() {
            function getSession() {
                return _ref7.apply(this, arguments);
            }
            var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4() {
                var session;
                return regeneratorRuntime.wrap(function(_context4) {
                    for (;;) switch (_context4.prev = _context4.next) {
                      case 0:
                        session = (0, _registry.RegRead)("HKCU\\SOFTWARE\\drpsu\\session");
                        if (!session) {
                            _context4.next = 5;
                            break;
                        }
                        this.session = session;
                        _context4.next = 6;
                        break;

                      case 5:
                        throw new Error("No session found");

                      case 6:
                      case "end":
                        return _context4.stop();
                    }
                }, _callee4, this);
            }));
            return getSession;
        }();
        User.prototype.getHeaders = function() {
            if (!this.session) this.getSession();
            return {
                "x-drp-session": this.session
            };
        };
        User.prototype.getId = function() {
            return this.profile && this.profile.id;
        };
        User.prototype.fetch = function() {
            function fetch() {
                return _ref8.apply(this, arguments);
            }
            var _ref8 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5() {
                var endpoint, headers, _ref9, body;
                return regeneratorRuntime.wrap(function(_context5) {
                    for (;;) switch (_context5.prev = _context5.next) {
                      case 0:
                        endpoint = window.authEndpoint + "/api/session";
                        headers = this.getHeaders();
                        _context5.next = 4;
                        return (0, _http.httppost)(endpoint, {}, {
                            headers: headers
                        });

                      case 4:
                        _ref9 = _context5.sent;
                        body = _ref9.body;
                        Object.assign(this, {
                            profile: body
                        });

                      case 7:
                      case "end":
                        return _context5.stop();
                    }
                }, _callee5, this);
            }));
            return fetch;
        }();
        User.prototype.unauthorize = function() {
            function unauthorize() {
                return _ref10.apply(this, arguments);
            }
            var _ref10 = _asyncToGenerator(regeneratorRuntime.mark(function _callee6() {
                var endpoint, headers;
                return regeneratorRuntime.wrap(function(_context6) {
                    for (;;) switch (_context6.prev = _context6.next) {
                      case 0:
                        endpoint = window.authEndpoint + "/api/logout";
                        headers = this.getHeaders();
                        _context6.next = 4;
                        return (0, _http.httppost)(endpoint, {}, {
                            headers: headers
                        });

                      case 4:
                        delete this.profile;

                      case 5:
                      case "end":
                        return _context6.stop();
                    }
                }, _callee6, this);
            }));
            return unauthorize;
        }();
        return User;
    }();
    exports["default"] = new User();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.addEvent = function(element, type, handler) {
        if (element.addEventListener) element.addEventListener(type, handler, !1); else element.attachEvent("on" + type, handler);
    }, exports.removeEvent = function(element, type, handler) {
        if (element.removeEventListener) element.removeEventListener(type, handler, !1); else element.detachEvent("on" + type, handler);
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var hasClass = exports.hasClass = function(element, className) {
        return null !== element.className.match(new RegExp("(\\s|^)" + className + "(\\s|$)"));
    };
    exports.addClass = function(element, className) {
        if (!hasClass(element, className)) element.className = element.className.trim().replace(/\s\s+/g, " ") + " " + className;
    }, exports.removeClass = function(element, className) {
        if (hasClass(element, className)) {
            var reg = new RegExp("(\\s|^)" + className + "(\\s|$)");
            element.className = element.className.replace(reg, " ").trim().replace(/\s\s+/g, " ");
        }
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var eventListener = window.attachEvent || window.addEventListener, unloadEvent = window.attachEvent ? "onbeforeunload" : "beforeunload";
    exports.addUnloadListener = function(callback) {
        return eventListener(unloadEvent, callback);
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(delay) {
        return new Promise(function(resolve) {
            return setTimeout(resolve, delay);
        });
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    module.exports = function(module) {
        if (!module.webpackPolyfill) {
            module.deprecate = function() {};
            module.paths = [];
            if (!module.children) module.children = [];
            try {
                Object.defineProperty(module, "loaded", {
                    enumerable: !0,
                    configurable: !1,
                    get: function() {
                        return module.l;
                    }
                });
                Object.defineProperty(module, "id", {
                    enumerable: !0,
                    configurable: !1,
                    get: function() {
                        return module.i;
                    }
                });
            } catch (e) {
                module.id = module.i;
            }
            module.webpackPolyfill = !0;
        }
        return module;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function retry(handler) {
        var tries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1, timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1e3;
        return handler()["catch"](function(err) {
            if (tries > 1) return delay(timeout).then(function() {
                return retry(handler, tries - 1, timeout);
            }); else throw err;
        });
    }
    Object.defineProperty(exports, "__esModule", {
        value: !0
    });
    exports["default"] = retry;
    var delay = function(time) {
        return new Promise(function(resolve) {
            return setTimeout(resolve, time);
        });
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _logs = __webpack_require__(4), _os = __webpack_require__(14), _wmi = __webpack_require__(23), log = (0, 
    _logs.getLogger)("core:antivirus"), Antivirus = function() {
        function Antivirus() {
            _classCallCheck(this, Antivirus);
            this.scanAntiviruses = this.memoize(this.scanAntiviruses);
            this.isSecurityCenterServiceRunning = this.memoize(this.isSecurityCenterServiceRunning);
        }
        Antivirus.prototype.init = function() {
            try {
                var center = this.isSecurityCenterServiceRunning(), antiviruses = this.scanAntiviruses();
                log.info("Security Center Service is " + (center ? "" : "NOT") + " running", {
                    center: center
                }, "init:check");
                if (antiviruses.length) log.info("antiviruses", {
                    antiviruses: antiviruses
                }, "init:antiviruses"); else log.info("no antiviruses found", {}, "init:not-found");
            } catch (err) {
                log.info("init failed", {
                    err: err
                }, "init:error");
            }
        };
        Antivirus.prototype.memoize = function(func) {
            var _this = this, cache = void 0;
            return function() {
                if (cache) return cache; else {
                    cache = func.call(_this);
                    return cache;
                }
            };
        };
        Antivirus.prototype.clearUndefVar = function(varib) {
            try {
                varib += "";
                return varib.replace("null", "").replace("undefined", "");
            } catch (err) {
                return "";
            }
        };
        Antivirus.prototype.getSystemWMIScalar = function(query) {
            try {
                var colItems = _wmi.objWMIService.ExecQuery(query);
                if (colItems.count) {
                    return new Enumerator(colItems).item();
                }
            } catch (err) {}
            return null;
        };
        Antivirus.prototype.isSecurityCenterServiceRunning = function() {
            try {
                var service = this.getSystemWMIScalar('SELECT State, Name FROM Win32_Service WHERE Name="wscsvc"');
                if ("Running" !== service.State) {
                    new ActiveXObject("WScript.Shell").Run("net start wscsvc", 0, !0);
                }
                service = this.getSystemWMIScalar('SELECT State, Name FROM Win32_Service WHERE Name="wscsvc"');
                return "Running" === service.State;
            } catch (e) {
                return !1;
            }
        };
        Antivirus.prototype.scanAntiviruses = function() {
            for (var antivirus = [], objWMIServiceAntivir = _wmi.locator.ConnectServer(null, "\\root\\SecurityCenter" + (_os.OSVersion >= 6 ? "2" : "")), colItems = objWMIServiceAntivir.ExecQuery("SELECT * FROM AntiVirusProduct", "WQL"), enumItems = new Enumerator(colItems); !enumItems.atEnd(); enumItems.moveNext()) {
                var objItem = enumItems.item();
                if ("Windows Defender" !== objItem.displayName) antivirus.push({
                    companyName: this.clearUndefVar(objItem.companyName),
                    displayName: this.clearUndefVar(objItem.displayName),
                    productState: this.clearUndefVar(objItem.productState),
                    instanceGuid: this.clearUndefVar(objItem.instanceGuid),
                    onAccessScanningEnabled: this.clearUndefVar(objItem.onAccessScanningEnabled),
                    pathToSignedProductExe: this.clearUndefVar(objItem.pathToSignedProductExe),
                    productHasNotifiedUser: this.clearUndefVar(objItem.productHasNotifiedUser),
                    productUptoDate: this.clearUndefVar(objItem.productUptoDate),
                    productWantsWscNotifications: this.clearUndefVar(objItem.productWantsWscNotifications),
                    versionNumber: this.clearUndefVar(objItem.versionNumber)
                });
            }
            return antivirus;
        };
        Antivirus.prototype.hasAntiviruses = function() {
            try {
                if (!this.isSecurityCenterServiceRunning()) return 1;
                if (this.scanAntiviruses().length) return 2; else return 0;
            } catch (err) {
                return 1;
            }
        };
        Antivirus.prototype.hasFirewall = function() {
            try {
                if (!this.isSecurityCenterServiceRunning()) return !1;
                var objWMISecurityService = _wmi.locator.ConnectServer(null, "\\root\\SecurityCenter" + (_os.OSVersion >= 6 ? "2" : ""));
                return (0, _wmi.getWMIObjects)([ "displayName" ], "FirewallProduct", null, objWMISecurityService).length > 0;
            } catch (err) {
                return !1;
            }
        };
        return Antivirus;
    }();
    exports["default"] = new Antivirus();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _fso = __webpack_require__(17), _shell = __webpack_require__(16), yandexExtensionsIds = [ "lgdnilodcpljomelbbnpgdogdbmclbni", "jdfonankhfnhihdcpaagpabbaoclnjfp", "bejnpnkhfgfkcpgikiinojlmdcjimobi", "necfmkplpminfjagblfabggomdpaakan", "ablpcikjmhamjanpibkccdmpoekjigja", "hpcghcdjnehpkdecaflpedhklimnejia", "pjfkgjlnocfakoheoapicnknoglipapd", "dkekdlkmdpipihonapoleopfekmapadh", "gbjeiekahklbgbfccohipinhgaadijad", "cpegcopcfajiiibidlaelhjjblpefbjk", "bhjcgomkanpkpblokebecknhahgkcmoo", "geidjeefddhgefeplhdlegoldlgiodon", "pfigaoamnncijbgomifamkmkidnnlikl", "jkfblcbjfojmgagikhldeppgmgdpjkpl", "gdljkkmghdkckhaogaemgbgdfophkfco" ], localAppData = _shell.WshShell.ExpandEnvironmentStrings("%localappdata%"), preferencesFilePaths = [ localAppData + "\\Google\\Chrome\\User Data\\Default\\Preferences", localAppData + "\\Google\\Chrome\\User Data\\Default\\Secure Preferences" ], convertWebkitTimestamp = function(value) {
        if ("string" == typeof value) value = parseInt(value);
        return new Date(value / 1e3 - 116444736e5).valueOf();
    };
    exports["default"] = function() {
        var res = {};
        preferencesFilePaths.forEach(function(filePath) {
            if (_fso.fso.FileExists(filePath)) {
                var textStream = _fso.fso.OpenTextFile(filePath, 1, !0), text = textStream.ReadAll();
                textStream.Close();
                var data = JSON.parse(text);
                if (data.extensions && data.extensions.settings) Object.entries(data.extensions.settings).forEach(function(_ref) {
                    var id = _ref[0], params = _ref[1];
                    if (params.manifest) res[id] = {
                        name: params.manifest.name,
                        version: params.manifest.version,
                        installTime: convertWebkitTimestamp(params.install_time),
                        isEnabled: 1 === params.state,
                        meta: {
                            installedToday: convertWebkitTimestamp(params.install_time) > Date.now() - 864e5,
                            isYandexById: yandexExtensionsIds.includes(id),
                            isYandexByName: /(yandex|яндекс)/gi.test(params.manifest.name)
                        }
                    };
                });
            }
        });
        return res;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function() {
        var deviceId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
        if (/FAILURE|UNKNOWN|VID_0000/i.test(deviceId)) return "usb_connection"; else if (/ROOT\\LEGACY_.+/i.test(deviceId)) return "root_legacy"; else if (/TAP.+|PTUN.+|HAMACHI/i.test(deviceId)) return "vpn_no_need_drivers"; else if (/\*6TO4MP|BTH\\MS_.+/i.test(deviceId)) return "damaged_system_driver"; else if (deviceId.includes("WPDBUSENUMROOT\\UMB")) return "usb_unknown_vendor"; else if (deviceId.includes("HDAUDIO\\FUNC_FF&VEN_9FFF&DEV_FFFF&SUBSYS_1FFFFFFF&REV_FFFF")) return "sound_card"; else if (/\*ISATAP|\*TEREDO/i.test(deviceId)) return "unknown_problem"; else return "";
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getDrivers() {
        var drivers = (0, _wmi.getWMIObjects)([ "DeviceID", "DriverDate", "DriverVersion", "DeviceName", "InfName", "Manufacturer", "ClassGuid" ], "Win32_PnPSignedDriver"), results = [];
        drivers.forEach(function(driver) {
            if (driver.DeviceID && driver.DriverDate && driver.DriverVersion && driver.DeviceName && driver.InfName) {
                for (var dr = {
                    deviceId: driver.DeviceID,
                    date: [ driver.DriverDate.slice(0, 4), driver.DriverDate.slice(4, 6), driver.DriverDate.slice(6, 8) ].join("-"),
                    version: driver.DriverVersion,
                    name: driver.DeviceName,
                    manufacturer: driver ? driver.Manufacturer : null,
                    inf: driver.InfName
                }, regPath = "SYSTEM\\CurrentControlSet\\Control\\Class\\" + driver.ClassGuid, regData = _wmiRegistry.wmiRegistry.EnumKey(_wmiRegistry.wmiRegistry.HKLM, regPath), _iterator = regData, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                    var _ref;
                    if (_isArray) {
                        if (_i >= _iterator.length) break;
                        _ref = _iterator[_i++];
                    } else {
                        _i = _iterator.next();
                        if (_i.done) break;
                        _ref = _i.value;
                    }
                    var regSection = _ref;
                    if (_wmiRegistry.wmiRegistry.GetStringValue(_wmiRegistry.wmiRegistry.HKLM, regPath + "\\" + regSection, "InfPath") === dr.inf) {
                        var regDate = _wmiRegistry.wmiRegistry.GetStringValue(_wmiRegistry.wmiRegistry.HKLM, regPath + "\\" + regSection, "DriverDate");
                        dr.date = [ regDate.split("-")[2], ("0" + regDate.split("-")[0]).slice(-2), ("0" + regDate.split("-")[1]).slice(-2) ].join("-");
                        break;
                    }
                }
                results.push(dr);
            }
        });
        return results;
    }
    exports.__esModule = !0;
    exports.getDrivers = getDrivers;
    var _wmi = __webpack_require__(23), _wmiRegistry = __webpack_require__(130);
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var appleNotebooks = __webpack_require__(334), badNotebooks = __webpack_require__(335);
    exports.appleNotebooks = appleNotebooks;
    exports.badNotebooks = badNotebooks;
    exports["default"] = function(_ref) {
        var _ref$Vendor = _ref.Vendor, Vendor = _ref$Vendor === undefined ? "Noname" : _ref$Vendor, _ref$Name = _ref.Name, Name = _ref$Name === undefined ? "Unknown" : _ref$Name, Version = _ref.Version;
        Name = Name.trim();
        Vendor = Vendor.toLowerCase();
        var Models = [];
        switch (Vendor) {
          case "lenovo":
            Version = Version ? Version.trim() : "";
            Models = [ Version.replace(/^lenovo[\s-]*/i, "") ];
            break;

          case "sony":
            Models = [ "VAIO " + Name ];
            break;

          case "samsung":
          case "bangho":
          case "clevo":
          case "quanta":
            Models = Name.split("/");
            break;

          case "msi":
            Models = Name.split("/").map(function(name) {
                return name.replace(/^msi notebook[\s-]*/i, "");
            });
            break;

          case "apple":
            Models = appleNotebooks[Name] || [ Name ];
            break;

          case "dell":
            Models = [ Name.replace(/^dell system[\s-]*/i, "").replace(/^dell[\s-]*/i, "") ];
            break;

          case "emachines":
            Models = [ Name.replace(/^emachines[\s-]*/i, "") ];
            break;

          case "hp":
            Models = [ Name.replace(/^hp[\s-]*/i, "").replace(/[\s-]*notebook pc/i, "").replace(/notebook[\s-]*$/i, "") ];
            break;

          case "toshiba":
            Models = [ Name.replace(/^toshiba[\s-]*/i, "") ];
            break;

          case "nec":
            Models = [ Name.replace(/^nec[\s-]*/i, "") ];
            break;

          case "hcl":
            Models = [ Name.replace(/^hcl[\s-]*/i, "") ];
            break;

          case "casper":
            Models = [ Name.replace(/^casper[\s-]*/i, "").replace(/[\s-]*notebook$/i, "") ];
            break;

          case "alienware":
            Models = [ Name.replace(/^alienware[\s-]*/i, "") ];
            break;

          case "axioo":
            Models = [ Name.replace(/[\s-]*model$/i, "") ];
            break;

          case "depo":
            Models = [ Name.replace(/^depo[\s-]*/i, "") ];
            break;

          case "fujitsu":
            Models = [ Name.replace(/[\s-]*notebook[\s-]*/i, "") ];
            break;

          case "gateway":
            Models = [ Name.replace(/^gateway[\s-]*/i, "") ];
            break;

          case "positivo":
            Models = [ Name.replace(/^positivo[\s-]*/i, "") ];
            break;

          case "vestel":
            Models = [ Name.replace(/^vestel[\s-]*/i, "") ];
            break;

          case "vit":
            Models = [ Name.replace(/^vit[\s-]*/i, "") ];
            break;

          case "aquarius":
            Models = [ Name.replace(/^aquarius[\s-]*/i, "") ];
            break;

          case "archos":
            Models = [ Name.replace(/^archos[\s-]*/i, "") ];
            break;

          case "zoostorm":
            Models = [ Name.replace(/^zoostorm[\s-]*/i, "") ];
            break;

          case "zyrex":
            Models = [ Name.replace(/^zyrex[\s-]*/i, "") ];
            break;

          default:
            Models = [ Name ];
        }
        Models = Models.map(function(model) {
            if (badNotebooks[Vendor] && badNotebooks[Vendor].includes(model)) return "Unknown"; else return model;
        });
        return Models.join("/");
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _fso = __webpack_require__(17), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), toFixed = function(num) {
        return ("0" + num).slice(-2);
    }, FileWriter = function() {
        function FileWriter() {
            _classCallCheck(this, FileWriter);
            this.logFolder = _specialFolders.AppFolder + "\\Logs\\";
        }
        FileWriter.prototype.getFilename = function() {
            var timestamp = new Date();
            return "log___" + [ timestamp.getFullYear(), toFixed(timestamp.getMonth() + 1), toFixed(timestamp.getDate()), toFixed(timestamp.getHours()), toFixed(timestamp.getMinutes()), toFixed(timestamp.getSeconds()) ].join("-");
        };
        FileWriter.prototype.init = function() {
            try {
                (0, _localFiles.ensurePath)(this.logFolder);
                var filename = "" + this.logFolder + this.getFilename() + ".html";
                this.file = _fso.fso.CreateTextFile(filename, !0);
                this.file.WriteLine("<html>\n<head>\n  <meta charset='windows-1251'/>\n  <script type='text/javascript' src='http://static.drp.su/update/logs/script.js'><\/script>\n  <link rel='stylesheet' type='text/css' href='http://static.drp.su/update/logs/style.css'/>\n</head>\n<body>\n<script type=\"text/javascript\">window.data = [];<\/script>\n");
            } catch (e) {
                this.file = null;
                this.disabled = !0;
            }
        };
        FileWriter.prototype.close = function() {
            if (this.file) {
                this.file.WriteLine("\n</body>\n</html>\n");
                this.file.Close();
                this.file = null;
            }
        };
        FileWriter.prototype.write = function(message) {
            var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "info", params = arguments[2], data = arguments[3], type = arguments[4];
            if (!this.file) this.init();
            if (this.file && !this.disabled) {
                var timestamp = new Date(), time = [ toFixed(timestamp.getHours()), toFixed(timestamp.getMinutes()), toFixed(timestamp.getSeconds()) ].join(":"), json = JSON.stringify({
                    type: type,
                    data: data,
                    timestamp: timestamp.valueOf()
                }), details = "";
                if (params && Object.keys(params).length > 0) {
                    var obj = {};
                    for (var key in params) {
                        var part = params[key];
                        obj[key] = part instanceof Error ? {
                            name: part.name || "Error",
                            message: part.message
                        } : part;
                    }
                    details = '<pre class="code">' + JSON.stringify(obj, null, "\t") + "</pre>";
                }
                var ts = '<span class="timeStamp">' + time + "</span>";
                try {
                    this.file.Write(('\n        <div class="logs ' + className + '">' + ts + message + details + '</div>\n        <script type="text/javascript">window.data.push(' + json + ');<\/script>\n        <script type="application/json" class="data">' + json + "<\/script>\n      ").replace(/[^\x00-\x7F]/g, ""));
                } catch (e) {}
            }
        };
        return FileWriter;
    }();
    exports["default"] = new FileWriter();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _retry = __webpack_require__(351), _retry2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_retry), index = 0, DeloreanTransport = function() {
        function DeloreanTransport(statistics, endpoint) {
            var tries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity, timeout = arguments[3], apiVersion = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "1.1";
            _classCallCheck(this, DeloreanTransport);
            Object.assign(this, {
                statistics: statistics,
                endpoint: endpoint,
                tries: tries,
                timeout: timeout,
                apiVersion: apiVersion
            });
        }
        DeloreanTransport.prototype.postOnce = function(body, _ref) {
            var headers = _ref.headers;
            return this.endpoint ? this.statistics.adapter.request({
                method: "POST",
                uri: this.endpoint,
                body: body,
                headers: headers
            }) : Promise.resolve();
        };
        DeloreanTransport.prototype.postWithRetry = function() {
            for (var _this = this, _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
            return (0, _retry2["default"])(function() {
                return _this.postOnce.apply(_this, args);
            }, this.tries, this.timeout);
        };
        DeloreanTransport.prototype.send = function(data) {
            var _statistics = this.statistics, clientId = _statistics.clientId, computerId = _statistics.computerId, sessionId = _statistics.sessionId, options = _statistics.options, version = _statistics.version, experiment = _statistics.experiment, locale = _statistics.locale, headers = {
                "x-api-version": this.apiVersion,
                "x-drp-client-id": clientId,
                "x-drp-computer-id": computerId,
                "x-drp-session-id": sessionId,
                "x-drp-application": options.category,
                "x-drp-version": version,
                "x-drp-experiment": experiment,
                "x-drp-locale": locale,
                "x-drp-index": index++,
                "x-drp-client-time": new Date().toISOString()
            };
            return this.postWithRetry(data, {
                headers: headers
            });
        };
        return DeloreanTransport;
    }();
    exports["default"] = DeloreanTransport;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _objectWithoutProperties(obj, keys) {
        var target = {};
        for (var i in obj) if (!(keys.indexOf(i) >= 0)) if (Object.prototype.hasOwnProperty.call(obj, i)) target[i] = obj[i];
        return target;
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _ClientIdStorage = __webpack_require__(346), _ClientIdStorage2 = _interopRequireDefault(_ClientIdStorage), _GoogleAnalytics = __webpack_require__(348), _GoogleAnalytics2 = _interopRequireDefault(_GoogleAnalytics), _YaMetrika = __webpack_require__(350), _YaMetrika2 = _interopRequireDefault(_YaMetrika), _EventsAPI = __webpack_require__(347), _EventsAPI2 = _interopRequireDefault(_EventsAPI), OnlineStatistics = function() {
        function OnlineStatistics(adapter, options, _ref) {
            var _ref$version = _ref.version, version = _ref$version === undefined ? "" : _ref$version, _ref$locale = _ref.locale, locale = _ref$locale === undefined ? "" : _ref$locale;
            _classCallCheck(this, OnlineStatistics);
            this.clientId = "";
            this.computerId = "";
            this.experiment = "(not set)";
            this.options = {
                google: {},
                yandex: {},
                events: {}
            };
            this.counters = [];
            Object.assign(this, {
                adapter: adapter,
                locale: locale,
                version: version.trim()
            });
            Object.assign(this.options, options);
            this.clientIdStorage = new _ClientIdStorage2["default"](adapter);
        }
        OnlineStatistics.prototype.call = function(method) {
            var tags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [ "default" ], _this = this, data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
            this.adapter.hook(method, {
                tags: tags,
                data: data,
                override: override
            });
            return Promise.all(this.counters.filter(function(_ref2) {
                return _ref2.tags.some(function(tag) {
                    return -1 !== tags.indexOf(tag);
                });
            }).map(function() {
                var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee(_ref4) {
                    var value, name = _ref4.name, counter = _ref4.counter, type = _ref4.type, tags = _ref4.tags;
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            _context.t0 = counter[method];
                            if (!_context.t0) {
                                _context.next = 5;
                                break;
                            }
                            _context.next = 4;
                            return counter[method](_extends({}, data, override[type], override[type + "." + name]));

                          case 4:
                            _context.t0 = _context.sent;

                          case 5:
                            value = _context.t0;
                            return _context.abrupt("return", {
                                name: name,
                                type: type,
                                tags: tags,
                                value: value
                            });

                          case 7:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, _this);
                }));
                return function(_x4) {
                    return _ref3.apply(this, arguments);
                };
            }()));
        };
        OnlineStatistics.prototype._init = function() {
            function _init(_x5) {
                return _ref5.apply(this, arguments);
            }
            var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(_ref6) {
                var experiments, seed, ind, _loop, counterType, _this2 = this, clientId = _ref6.clientId, computerId = _ref6.computerId, offline = _ref6.offline;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        if (offline) this.offline = !0;
                        _context2.next = 3;
                        return this.clientIdStorage.init("clientId", clientId);

                      case 3:
                        this.clientId = _context2.sent;
                        _context2.next = 6;
                        return this.clientIdStorage.init("computerId", computerId, [ "HKLM", "HKCU" ]);

                      case 6:
                        this.computerId = _context2.sent;
                        this.sessionId = this.adapter.uuid();
                        experiments = this.options.experiments || [];
                        if (experiments.length > 0) {
                            seed = this.computerId.replace(/[^\d]/g, "").slice(-15);
                            ind = parseInt(seed, 10) % experiments.length;
                            this.experiment = this.options.experiments[ind || 0];
                            this.version += " " + this.experiment;
                        }
                        _loop = function(counterType) {
                            var Counter = OnlineStatistics.counters[counterType], _options$counterType = _this2.options[counterType], options = _options$counterType.options, counters = _objectWithoutProperties(_options$counterType, [ "options" ]);
                            for (var name in counters) {
                                var _counters$name = counters[name], _counters$name$tags = _counters$name.tags, tags = _counters$name$tags === undefined ? [] : _counters$name$tags, counterOptions = _objectWithoutProperties(_counters$name, [ "tags" ]), counter = new Counter(_this2, _extends({}, options, counterOptions));
                                tags = [ "all", name ].concat(tags);
                                _this2.counters.push({
                                    name: name,
                                    counter: counter,
                                    type: counterType,
                                    tags: tags.concat(tags.map(function(tag) {
                                        return counterType + "." + tag;
                                    }))
                                });
                            }
                        };
                        for (counterType in OnlineStatistics.counters) _loop(counterType);
                        _context2.next = 14;
                        return this.call("init", [ "all" ]);

                      case 14:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, this);
            }));
            return _init;
        }();
        OnlineStatistics.prototype.init = function() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this._initialized = this._init(options);
            return this._initialized;
        };
        OnlineStatistics.prototype.event = function() {
            function event(_x7) {
                return _ref7.apply(this, arguments);
            }
            var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(_event) {
                return regeneratorRuntime.wrap(function(_context3) {
                    for (;;) switch (_context3.prev = _context3.next) {
                      case 0:
                        if (_event.action) {
                            _context3.next = 2;
                            break;
                        }
                        throw new Error("event.action is undefined");

                      case 2:
                        if (!this._initialized) {
                            _context3.next = 7;
                            break;
                        }
                        _context3.next = 5;
                        return this._initialized;

                      case 5:
                        _context3.next = 9;
                        break;

                      case 7:
                        _context3.next = 9;
                        return this.init();

                      case 9:
                        _event = Object.assign({
                            category: this.options.category,
                            label: this.version
                        }, _event);
                        if (this.offline) _event.label += " [offline]";
                        _context3.next = 13;
                        return this.send(_event);

                      case 13:
                        return _context3.abrupt("return", _context3.sent);

                      case 14:
                      case "end":
                        return _context3.stop();
                    }
                }, _callee3, this);
            }));
            return event;
        }();
        OnlineStatistics.prototype.send = function(_ref8) {
            var counters = _ref8.counters, override = _ref8.override, data = _objectWithoutProperties(_ref8, [ "counters", "override" ]);
            return this.call("send", counters, data, override);
        };
        OnlineStatistics.prototype.userParams = function(data) {
            var _ref9 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, counters = _ref9.counters, override = _ref9.override;
            return this.call("userParams", counters, data, override);
        };
        return OnlineStatistics;
    }();
    OnlineStatistics.counters = {
        google: _GoogleAnalytics2["default"],
        yandex: _YaMetrika2["default"],
        events: _EventsAPI2["default"]
    };
    exports["default"] = OnlineStatistics;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    function _possibleConstructorReturn(self, call) {
        if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
        return call && ("object" == typeof call || "function" == typeof call) ? call : self;
    }
    function _inherits(subClass, superClass) {
        if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
        subClass.prototype = Object.create(superClass && superClass.prototype, {
            constructor: {
                value: subClass,
                enumerable: !1,
                writable: !0,
                configurable: !0
            }
        });
        if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
    }
    exports.__esModule = !0;
    var _DeloreanTransport2 = __webpack_require__(222), _DeloreanTransport3 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_DeloreanTransport2), DeferredDeloreanTransport = function(_DeloreanTransport) {
        function DeferredDeloreanTransport() {
            _classCallCheck(this, DeferredDeloreanTransport);
            for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
            return _possibleConstructorReturn(this, _DeloreanTransport.call.apply(_DeloreanTransport, [ this, null ].concat(args)));
        }
        _inherits(DeferredDeloreanTransport, _DeloreanTransport);
        DeferredDeloreanTransport.prototype.send = function() {
            var _DeloreanTransport$pr;
            if (!this.statistics) this.statistics = __webpack_require__(10);
            for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) args[_key2] = arguments[_key2];
            return (_DeloreanTransport$pr = _DeloreanTransport.prototype.send).call.apply(_DeloreanTransport$pr, [ this ].concat(args));
        };
        return DeferredDeloreanTransport;
    }(_DeloreanTransport3["default"]);
    exports["default"] = DeferredDeloreanTransport;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.runExeAsynchronously = undefined;
    var _shell = __webpack_require__(16), _fso = __webpack_require__(17), _utils = __webpack_require__(19), _logs = __webpack_require__(4), log = (0, 
    _logs.getLogger)("core:system:runExeAsynchronously");
    exports.runExeAsynchronously = function(_ref) {
        var exePath = _ref.exePath, _ref$keys = _ref.keys, keys = _ref$keys === undefined ? "" : _ref$keys, triggerFile = _ref.triggerFile, _ref$timeout = _ref.timeout, timeout = _ref$timeout === undefined ? 9e5 : _ref$timeout;
        return new Promise(function(resolve, reject) {
            var command = '"' + exePath + '" ' + keys + ' || echo Done & call echo Done %^errorLevel% > "' + triggerFile + '"', wrappedCommand = (0, 
            _utils.wrapInCmd)(command);
            log.debug("running command", {
                wrappedCommand: wrappedCommand
            }, "command");
            setTimeout(function() {
                _shell.WshShell.Run(wrappedCommand, 0, !1);
            }, 0);
            var timer = setInterval(function() {
                if (_fso.fso.FileExists(triggerFile)) try {
                    var textStream = _fso.fso.OpenTextFile(triggerFile, 1, !1);
                    if (!textStream.AtEndOfStream) {
                        clearInterval(timer);
                        var text = textStream.ReadAll(), matches = text.match(/done\s+(\d+)/i), exitCode = matches && matches[1];
                        null !== exitCode ? resolve(+exitCode) : reject(new Error("runExeAsynchronously: exitCode not found"));
                    }
                    textStream.Close();
                } catch (err) {
                    reject(new Error("runExeAsynchronously: read trigger file"));
                }
            }, 1e3);
            setTimeout(function() {
                clearInterval(timer);
                reject(new Error("runExeAsynchronously: timeout"));
            }, timeout);
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.sendImg = function(url) {
        return new Promise(function(resolve, reject) {
            var img = document.createElement("img");
            img.className = "ga-image";
            img.onload = resolve;
            img.onerror = reject;
            img.src = url;
            document.body.appendChild(img);
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _specialFolders = __webpack_require__(18), _shell = __webpack_require__(16), _fso = __webpack_require__(17), _localFiles = __webpack_require__(22), _http = __webpack_require__(73), _runCommandAsync = __webpack_require__(75), _wmi = __webpack_require__(23), _logs = __webpack_require__(4), _config = __webpack_require__(107), log = (0, 
    _logs.getLogger)("core:wget"), Wget = function() {
        function Wget(wgetPaths) {
            _classCallCheck(this, Wget);
            this.timer = null;
            this.onDownloaded = {};
            this.onDownloadFailed = {};
            this.concurrency = 5;
            this.wgetPaths = wgetPaths;
            this.wgetPath = wgetPaths.find(function(path) {
                return _fso.fso.FileExists(path);
            });
        }
        Wget.prototype.wrapInCmd = function(command) {
            return 'cmd /c "' + command + '"';
        };
        Wget.prototype.wgetRun = function(link, path, jobId) {
            var _this = this;
            log.info("downloading " + link, {
                link: link,
                jobId: jobId
            }, "run:start");
            if (!this.wgetPath) this.wgetPath = this.wgetPaths.find(function(path) {
                return _fso.fso.FileExists(path);
            });
            if (this.wgetPath) {
                var parsedUrl = link.split("/"), logFile = this.pathToLogFile(jobId), triggerFile = this.pathToTriggerFile(jobId), wgetCommand = '"' + this.wgetPath + '" --tries=3 --timeout 5 --retry-connrefused --wait=5 --timestamping --directory-prefix="' + path + '" "' + link + '" -o "' + logFile + '" & echo DONE > "' + triggerFile + '"', command = this.wrapInCmd(wgetCommand);
                log.debug("running command", {
                    command: command
                }, "run:command");
                setTimeout(function() {
                    try {
                        _shell.WshShell.Run(command, 0, !1);
                    } catch (err) {
                        log.error("running command error", {
                            command: command,
                            error: err
                        }, "run:error");
                        if (jobId in _this.onDownloaded) {
                            _this.onDownloadFailed[jobId](err);
                            _this.truncateJob(jobId);
                        }
                    }
                }, 0);
                return parsedUrl[parsedUrl.length - 1];
            } else {
                log.error("wget exe not found", {}, "run:error");
                this.onDownloadFailed[jobId](new Error("wget exe not found"));
                this.truncateJob(jobId);
            }
        };
        Wget.prototype.wgetWrapper = function(events, path, item, i, items) {
            var _this2 = this;
            return new Promise(function(resolve, reject) {
                var link = item.link, jobId = item.jobId || _this2.generateJobId();
                log.debug("downloading " + link + " to folder " + path, {
                    link: link,
                    path: path,
                    jobId: jobId
                }, "wrapper");
                events.beforeDownloading(item, i, items);
                setTimeout(function() {
                    return _this2.wgetRun(link, path, jobId);
                }, 0);
                _this2.saveJob(jobId, resolve, reject, item);
            }).then(function(val) {
                events.afterDownloading(item, i, items);
                return val;
            });
        };
        Wget.prototype.generateJobId = function() {
            return +Math.round(1e5 * Math.random());
        };
        Wget.prototype.saveJob = function(id, resolve, reject, item) {
            log.debug("saveJob", {
                jobId: id
            }, "saveJob");
            this.onDownloaded[id] = function() {
                return resolve(item);
            };
            this.onDownloadFailed[id] = function(err) {
                return reject(err);
            };
            this.start();
        };
        Wget.prototype.truncateJob = function(id) {
            delete this.onDownloaded[id];
            delete this.onDownloadFailed[id];
        };
        Wget.prototype.pathToLogFile = function(id) {
            return (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\wget_log_" + id + ".log";
        };
        Wget.prototype.pathToTriggerFile = function(id) {
            return (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\wget_finished_" + id + ".txt";
        };
        Wget.prototype.tick = function() {
            var _this3 = this, keys = Object.keys(this.onDownloaded);
            if (keys.length > 0) keys.forEach(function(jobId) {
                var triggerFile = _this3.pathToTriggerFile(jobId);
                if (_fso.fso.FileExists(triggerFile)) try {
                    var logFile = _this3.pathToLogFile(jobId), textStream = _fso.fso.OpenTextFile(logFile, 1, !1);
                    if (!textStream.AtEndOfStream) {
                        var logText = textStream.ReadAll();
                        textStream.Close();
                        if (-1 !== logText.indexOf("failed: Unknown host.") || -1 !== logText.indexOf("unable to resolve host address") || -1 !== logText.indexOf("Giving up.") || /error\s+\d+/i.test(logText)) {
                            log.error("failed job " + jobId, {
                                jobId: jobId,
                                wgetLogText: logText
                            }, "tick:fail");
                            _this3.onDownloadFailed[jobId](new Error("[new order] wget failed job " + jobId));
                        } else {
                            log.info("downloaded job " + jobId, {
                                jobId: jobId
                            }, "tick:success");
                            _this3.onDownloaded[jobId]();
                        }
                        log.debug("logText", {
                            logText: logText
                        }, "tick:logText");
                    } else {
                        textStream.Close();
                        log.info("downloaded job " + jobId, {
                            jobId: jobId,
                            AtEndOfStream: !0
                        }, "tick:success");
                        _this3.onDownloaded[jobId]();
                    }
                } catch (e) {
                    log.error("failed job " + jobId, {
                        jobId: jobId,
                        error: e
                    }, "tick:fail");
                    _this3.onDownloadFailed[jobId](new Error("[new order] wget failed job " + jobId));
                } finally {
                    _this3.truncateJob(jobId);
                }
            }); else {
                log.info("no downloads", {}, "tick:drain");
                this.stop();
            }
        };
        Wget.prototype.stop = function() {
            clearInterval(this.timer);
        };
        Wget.prototype.start = function() {
            var _this4 = this;
            this.stop();
            this.timer = setInterval(function() {
                return _this4.tick();
            }, 2e3);
        };
        Wget.prototype.getDownloadFileSize = function(link) {
            return (0, _http.httphead)(link).then(function(_ref) {
                return _ref.header["content-length"];
            });
        };
        Wget.prototype.stopDownloading = function(link, downloadJobId) {
            var _this5 = this;
            delete this.onDownloaded[downloadJobId];
            delete this.onDownloadFailed[downloadJobId];
            var commandLineLike = "%wget.exe%" + link + "%", processes = (0, _wmi.getWMIObjects)([ "ProcessId" ], "Win32_Process", 'CommandLine LIKE "' + commandLineLike + '"'), promises = [];
            processes.forEach(function(_ref2) {
                var ProcessId = _ref2.ProcessId, jobId = _this5.generateJobId(), taskkillTriggerFile = (0, 
                _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\taskkill_" + jobId + ".txt";
                promises.push((0, _runCommandAsync.runCommandAsync)({
                    command: "taskkill /f /t /pid " + ProcessId,
                    triggerFile: taskkillTriggerFile,
                    checkInterval: 200,
                    timeout: 1e4
                }));
            });
            return Promise.all(promises);
        };
        Wget.prototype.downloadFiles = function(events, path, items) {
            var _this6 = this;
            log.info("downloading " + items.length + " files", {
                files: items.length
            }, "download");
            var iterator = function(item, i) {
                return _this6.wgetWrapper(events, path, item, i, items);
            };
            if (Promise.map) return Promise.map(items, iterator, {
                concurrency: this.concurrency
            }); else return Promise.all(items.map(iterator));
        };
        return Wget;
    }();
    exports["default"] = new Wget(_config.wget.paths);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    var cof = __webpack_require__(40);
    module.exports = function(it, msg) {
        if ("number" != typeof it && "Number" != cof(it)) throw TypeError(msg);
        return +it;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var toObject = __webpack_require__(25), toIndex = __webpack_require__(80), toLength = __webpack_require__(24);
    module.exports = [].copyWithin || function(target, start) {
        var O = toObject(this), len = toLength(O.length), to = toIndex(target, len), from = toIndex(start, len), end = arguments.length > 2 ? arguments[2] : undefined, count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to), inc = 1;
        if (from < to && to < from + count) {
            inc = -1;
            from += count - 1;
            to += count - 1;
        }
        for (;count-- > 0; ) {
            if (from in O) O[to] = O[from]; else delete O[to];
            to += inc;
            from += inc;
        }
        return O;
    };
}, function(module, exports, __webpack_require__) {
    var aFunction = __webpack_require__(39), toObject = __webpack_require__(25), IObject = __webpack_require__(113), toLength = __webpack_require__(24);
    module.exports = function(that, callbackfn, aLen, memo, isRight) {
        aFunction(callbackfn);
        var O = toObject(that), self = IObject(O), length = toLength(O.length), index = isRight ? length - 1 : 0, i = isRight ? -1 : 1;
        if (aLen < 2) for (;;) {
            if (index in self) {
                memo = self[index];
                index += i;
                break;
            }
            index += i;
            if (isRight ? index < 0 : length <= index) throw TypeError("Reduce of empty array with no initial value");
        }
        for (;isRight ? index >= 0 : length > index; index += i) if (index in self) memo = callbackfn(memo, self[index], index, O);
        return memo;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var aFunction = __webpack_require__(39), isObject = __webpack_require__(12), invoke = __webpack_require__(135), arraySlice = [].slice, factories = {}, construct = function(F, len, args) {
        if (!(len in factories)) {
            for (var n = [], i = 0; i < len; i++) n[i] = "a[" + i + "]";
            factories[len] = Function("F,a", "return new F(" + n.join(",") + ")");
        }
        return factories[len](F, args);
    };
    module.exports = Function.bind || function(that) {
        var fn = aFunction(this), partArgs = arraySlice.call(arguments, 1), bound = function() {
            var args = partArgs.concat(arraySlice.call(arguments));
            return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
        };
        if (isObject(fn.prototype)) bound.prototype = fn.prototype;
        return bound;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var dP = __webpack_require__(21).f, create = __webpack_require__(77), redefineAll = __webpack_require__(115), ctx = __webpack_require__(57), anInstance = __webpack_require__(111), defined = __webpack_require__(41), forOf = __webpack_require__(134), $iterDefine = __webpack_require__(166), step = __webpack_require__(238), setSpecies = __webpack_require__(91), DESCRIPTORS = __webpack_require__(20), fastKey = __webpack_require__(90).fastKey, SIZE = DESCRIPTORS ? "_s" : "size", getEntry = function(that, key) {
        var entry, index = fastKey(key);
        if ("F" !== index) return that._i[index];
        for (entry = that._f; entry; entry = entry.n) if (entry.k == key) return entry;
    };
    module.exports = {
        getConstructor: function(wrapper, NAME, IS_MAP, ADDER) {
            var C = wrapper(function(that, iterable) {
                anInstance(that, C, NAME, "_i");
                that._i = create(null);
                that._f = undefined;
                that._l = undefined;
                that[SIZE] = 0;
                if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
            });
            redefineAll(C.prototype, {
                clear: function() {
                    for (var that = this, data = that._i, entry = that._f; entry; entry = entry.n) {
                        entry.r = !0;
                        if (entry.p) entry.p = entry.p.n = undefined;
                        delete data[entry.i];
                    }
                    that._f = that._l = undefined;
                    that[SIZE] = 0;
                },
                "delete": function(key) {
                    var that = this, entry = getEntry(that, key);
                    if (entry) {
                        var next = entry.n, prev = entry.p;
                        delete that._i[entry.i];
                        entry.r = !0;
                        if (prev) prev.n = next;
                        if (next) next.p = prev;
                        if (that._f == entry) that._f = next;
                        if (that._l == entry) that._l = prev;
                        that[SIZE]--;
                    }
                    return !!entry;
                },
                forEach: function(callbackfn) {
                    anInstance(this, C, "forEach");
                    for (var entry, f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); entry = entry ? entry.n : this._f; ) {
                        f(entry.v, entry.k, this);
                        for (;entry && entry.r; ) entry = entry.p;
                    }
                },
                has: function(key) {
                    return !!getEntry(this, key);
                }
            });
            if (DESCRIPTORS) dP(C.prototype, "size", {
                get: function() {
                    return defined(this[SIZE]);
                }
            });
            return C;
        },
        def: function(that, key, value) {
            var prev, index, entry = getEntry(that, key);
            if (entry) entry.v = value; else {
                that._l = entry = {
                    i: index = fastKey(key, !0),
                    k: key,
                    v: value,
                    p: prev = that._l,
                    n: undefined,
                    r: !1
                };
                if (!that._f) that._f = entry;
                if (prev) prev.n = entry;
                that[SIZE]++;
                if ("F" !== index) that._i[index] = entry;
            }
            return that;
        },
        getEntry: getEntry,
        setStrong: function(C, NAME, IS_MAP) {
            $iterDefine(C, NAME, function(iterated, kind) {
                this._t = iterated;
                this._k = kind;
                this._l = undefined;
            }, function() {
                for (var that = this, kind = that._k, entry = that._l; entry && entry.r; ) entry = entry.p;
                if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
                    that._t = undefined;
                    return step(1);
                }
                if ("keys" == kind) return step(0, entry.k);
                if ("values" == kind) return step(0, entry.v); else return step(0, [ entry.k, entry.v ]);
            }, IS_MAP ? "entries" : "values", !IS_MAP, !0);
            setSpecies(NAME);
        }
    };
}, function(module, exports, __webpack_require__) {
    var classof = __webpack_require__(112), from = __webpack_require__(361);
    module.exports = function(NAME) {
        return function() {
            if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic");
            return from(this);
        };
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var global = __webpack_require__(8), $export = __webpack_require__(0), redefine = __webpack_require__(35), redefineAll = __webpack_require__(115), meta = __webpack_require__(90), forOf = __webpack_require__(134), anInstance = __webpack_require__(111), isObject = __webpack_require__(12), fails = __webpack_require__(9), $iterDetect = __webpack_require__(137), setToStringTag = __webpack_require__(92), inheritIfRequired = __webpack_require__(162);
    module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
        var Base = global[NAME], C = Base, ADDER = IS_MAP ? "set" : "add", proto = C && C.prototype, O = {}, fixMethod = function(KEY) {
            var fn = proto[KEY];
            redefine(proto, KEY, "delete" == KEY ? function(a) {
                return IS_WEAK && !isObject(a) ? !1 : fn.call(this, 0 === a ? 0 : a);
            } : "has" == KEY ? function(a) {
                return IS_WEAK && !isObject(a) ? !1 : fn.call(this, 0 === a ? 0 : a);
            } : "get" == KEY ? function(a) {
                return IS_WEAK && !isObject(a) ? undefined : fn.call(this, 0 === a ? 0 : a);
            } : "add" == KEY ? function(a) {
                fn.call(this, 0 === a ? 0 : a);
                return this;
            } : function(a, b) {
                fn.call(this, 0 === a ? 0 : a, b);
                return this;
            });
        };
        if ("function" != typeof C || !(IS_WEAK || proto.forEach && !fails(function() {
            new C().entries().next();
        }))) {
            C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
            redefineAll(C.prototype, methods);
            meta.NEED = !0;
        } else {
            var instance = new C(), HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance, THROWS_ON_PRIMITIVES = fails(function() {
                instance.has(1);
            }), ACCEPT_ITERABLES = $iterDetect(function(iter) {
                new C(iter);
            }), BUGGY_ZERO = !IS_WEAK && fails(function() {
                for (var $instance = new C(), index = 5; index--; ) $instance[ADDER](index, index);
                return !$instance.has(-0);
            });
            if (!ACCEPT_ITERABLES) {
                C = wrapper(function(target, iterable) {
                    anInstance(target, C, NAME);
                    var that = inheritIfRequired(new Base(), target, C);
                    if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
                    return that;
                });
                C.prototype = proto;
                proto.constructor = C;
            }
            if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
                fixMethod("delete");
                fixMethod("has");
                IS_MAP && fixMethod("get");
            }
            if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
            if (IS_WEAK && proto.clear) delete proto.clear;
        }
        setToStringTag(C, NAME);
        O[NAME] = C;
        $export($export.G + $export.W + $export.F * (C != Base), O);
        if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
        return C;
    };
}, function(module, exports, __webpack_require__) {
    module.exports = !__webpack_require__(20) && !__webpack_require__(9)(function() {
        return 7 != Object.defineProperty(__webpack_require__(158)("div"), "a", {
            get: function() {
                return 7;
            }
        }).a;
    });
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), floor = Math.floor;
    module.exports = function(it) {
        return !isObject(it) && isFinite(it) && floor(it) === it;
    };
}, function(module, exports, __webpack_require__) {
    var anObject = __webpack_require__(11);
    module.exports = function(iterator, fn, value, entries) {
        try {
            return entries ? fn(anObject(value)[0], value[1]) : fn(value);
        } catch (e) {
            var ret = iterator["return"];
            if (ret !== undefined) anObject(ret.call(iterator));
            throw e;
        }
    };
}, function(module, exports) {
    module.exports = function(done, value) {
        return {
            value: value,
            done: !!done
        };
    };
}, function(module, exports) {
    module.exports = Math.log1p || function(x) {
        return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
    };
}, function(module, exports, __webpack_require__) {
    var global = __webpack_require__(8), macrotask = __webpack_require__(177).set, Observer = global.MutationObserver || global.WebKitMutationObserver, process = global.process, Promise = global.Promise, isNode = "process" == __webpack_require__(40)(process);
    module.exports = function() {
        var head, last, notify, flush = function() {
            var parent, fn;
            if (isNode && (parent = process.domain)) parent.exit();
            for (;head; ) {
                fn = head.fn;
                head = head.next;
                try {
                    fn();
                } catch (e) {
                    if (head) notify(); else last = undefined;
                    throw e;
                }
            }
            last = undefined;
            if (parent) parent.enter();
        };
        if (isNode) notify = function() {
            process.nextTick(flush);
        }; else if (Observer) {
            var toggle = !0, node = document.createTextNode("");
            new Observer(flush).observe(node, {
                characterData: !0
            });
            notify = function() {
                node.data = toggle = !toggle;
            };
        } else if (Promise && Promise.resolve) {
            var promise = Promise.resolve();
            notify = function() {
                promise.then(flush);
            };
        } else notify = function() {
            macrotask.call(global, flush);
        };
        return function(fn) {
            var task = {
                fn: fn,
                next: undefined
            };
            if (last) last.next = task;
            if (!head) {
                head = task;
                notify();
            }
            last = task;
        };
    };
}, function(module, exports, __webpack_require__) {
    var dP = __webpack_require__(21), anObject = __webpack_require__(11), getKeys = __webpack_require__(79);
    module.exports = __webpack_require__(20) ? Object.defineProperties : function(O, Properties) {
        anObject(O);
        for (var P, keys = getKeys(Properties), length = keys.length, i = 0; length > i; ) dP.f(O, P = keys[i++], Properties[P]);
        return O;
    };
}, function(module, exports, __webpack_require__) {
    var toIObject = __webpack_require__(32), gOPN = __webpack_require__(78).f, toString = {}.toString, windowNames = "object" == typeof window && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [], getWindowNames = function(it) {
        try {
            return gOPN(it);
        } catch (e) {
            return windowNames.slice();
        }
    };
    module.exports.f = function(it) {
        return windowNames && "[object Window]" == toString.call(it) ? getWindowNames(it) : gOPN(toIObject(it));
    };
}, function(module, exports, __webpack_require__) {
    var has = __webpack_require__(30), toIObject = __webpack_require__(32), arrayIndexOf = __webpack_require__(131)(!1), IE_PROTO = __webpack_require__(170)("IE_PROTO");
    module.exports = function(object, names) {
        var key, O = toIObject(object), i = 0, result = [];
        for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
        for (;names.length > i; ) if (has(O, key = names[i++])) ~arrayIndexOf(result, key) || result.push(key);
        return result;
    };
}, function(module, exports, __webpack_require__) {
    var getKeys = __webpack_require__(79), toIObject = __webpack_require__(32), isEnum = __webpack_require__(114).f;
    module.exports = function(isEntries) {
        return function(it) {
            for (var key, O = toIObject(it), keys = getKeys(O), length = keys.length, i = 0, result = []; length > i; ) if (isEnum.call(O, key = keys[i++])) result.push(isEntries ? [ key, O[key] ] : O[key]);
            return result;
        };
    };
}, function(module, exports, __webpack_require__) {
    var gOPN = __webpack_require__(78), gOPS = __webpack_require__(139), anObject = __webpack_require__(11), Reflect = __webpack_require__(8).Reflect;
    module.exports = Reflect && Reflect.ownKeys || function(it) {
        var keys = gOPN.f(anObject(it)), getSymbols = gOPS.f;
        return getSymbols ? keys.concat(getSymbols(it)) : keys;
    };
}, function(module, exports, __webpack_require__) {
    var $parseFloat = __webpack_require__(8).parseFloat, $trim = __webpack_require__(93).trim;
    module.exports = 1 / $parseFloat(__webpack_require__(176) + "-0") != -Infinity ? function(str) {
        var string = $trim(String(str), 3), result = $parseFloat(string);
        return 0 === result && "-" == string.charAt(0) ? -0 : result;
    } : $parseFloat;
}, function(module, exports, __webpack_require__) {
    var $parseInt = __webpack_require__(8).parseInt, $trim = __webpack_require__(93).trim, ws = __webpack_require__(176), hex = /^[\-+]?0[xX]/;
    module.exports = 8 !== $parseInt(ws + "08") || 22 !== $parseInt(ws + "0x16") ? function(str, radix) {
        var string = $trim(String(str), 3);
        return $parseInt(string, radix >>> 0 || (hex.test(string) ? 16 : 10));
    } : $parseInt;
}, function(module, exports) {
    module.exports = Object.is || function(x, y) {
        return x === y ? 0 !== x || 1 / x == 1 / y : x != x && y != y;
    };
}, function(module, exports, __webpack_require__) {
    var toLength = __webpack_require__(24), repeat = __webpack_require__(175), defined = __webpack_require__(41);
    module.exports = function(that, maxLength, fillString, left) {
        var S = String(defined(that)), stringLength = S.length, fillStr = fillString === undefined ? " " : String(fillString), intMaxLength = toLength(maxLength);
        if (intMaxLength <= stringLength || "" == fillStr) return S;
        var fillLen = intMaxLength - stringLength, stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
        if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
        return left ? stringFiller + S : S + stringFiller;
    };
}, function(module, exports, __webpack_require__) {
    var global = __webpack_require__(8), core = __webpack_require__(88), LIBRARY = __webpack_require__(76), wksExt = __webpack_require__(251), defineProperty = __webpack_require__(21).f;
    module.exports = function(name) {
        var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
        if ("_" != name.charAt(0) && !(name in $Symbol)) defineProperty($Symbol, name, {
            value: wksExt.f(name)
        });
    };
}, function(module, exports, __webpack_require__) {
    exports.f = __webpack_require__(15);
}, function(module, exports, __webpack_require__) {
    if (__webpack_require__(20) && "g" != /./g.flags) __webpack_require__(21).f(RegExp.prototype, "flags", {
        configurable: !0,
        get: __webpack_require__(133)
    });
}, function(module, exports, __webpack_require__) {
    function flatten(array, isDeep, guard) {
        var length = array ? array.length : 0;
        if (guard && isIterateeCall(array, isDeep, guard)) isDeep = !1;
        return length ? baseFlatten(array, isDeep) : [];
    }
    var baseFlatten = __webpack_require__(260), isIterateeCall = __webpack_require__(119);
    module.exports = flatten;
}, function(module, exports) {
    function last(array) {
        var length = array ? array.length : 0;
        return length ? array[length - 1] : undefined;
    }
    module.exports = last;
}, function(module, exports, __webpack_require__) {
    function debounce(func, wait, options) {
        function cancel() {
            if (timeoutId) clearTimeout(timeoutId);
            if (maxTimeoutId) clearTimeout(maxTimeoutId);
            lastCalled = 0;
            maxTimeoutId = timeoutId = trailingCall = undefined;
        }
        function complete(isCalled, id) {
            if (id) clearTimeout(id);
            maxTimeoutId = timeoutId = trailingCall = undefined;
            if (isCalled) {
                lastCalled = now();
                result = func.apply(thisArg, args);
                if (!timeoutId && !maxTimeoutId) args = thisArg = undefined;
            }
        }
        function delayed() {
            var remaining = wait - (now() - stamp);
            if (remaining <= 0 || remaining > wait) complete(trailingCall, maxTimeoutId); else timeoutId = setTimeout(delayed, remaining);
        }
        function maxDelayed() {
            complete(trailing, timeoutId);
        }
        function debounced() {
            args = arguments;
            stamp = now();
            thisArg = this;
            trailingCall = trailing && (timeoutId || !leading);
            if (!1 === maxWait) var leadingCall = leading && !timeoutId; else {
                if (!maxTimeoutId && !leading) lastCalled = stamp;
                var remaining = maxWait - (stamp - lastCalled), isCalled = remaining <= 0 || remaining > maxWait;
                if (isCalled) {
                    if (maxTimeoutId) maxTimeoutId = clearTimeout(maxTimeoutId);
                    lastCalled = stamp;
                    result = func.apply(thisArg, args);
                } else if (!maxTimeoutId) maxTimeoutId = setTimeout(maxDelayed, remaining);
            }
            if (isCalled && timeoutId) timeoutId = clearTimeout(timeoutId); else if (!timeoutId && wait !== maxWait) timeoutId = setTimeout(delayed, wait);
            if (leadingCall) {
                isCalled = !0;
                result = func.apply(thisArg, args);
            }
            if (isCalled && !timeoutId && !maxTimeoutId) args = thisArg = undefined;
            return result;
        }
        var args, maxTimeoutId, result, stamp, thisArg, timeoutId, trailingCall, lastCalled = 0, maxWait = !1, trailing = !0;
        if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
        wait = wait < 0 ? 0 : +wait || 0;
        if (!0 === options) {
            var leading = !0;
            trailing = !1;
        } else if (isObject(options)) {
            leading = !!options.leading;
            maxWait = "maxWait" in options && nativeMax(+options.maxWait || 0, wait);
            trailing = "trailing" in options ? !!options.trailing : trailing;
        }
        debounced.cancel = cancel;
        return debounced;
    }
    var isObject = __webpack_require__(28), now = __webpack_require__(536), FUNC_ERROR_TEXT = "Expected a function", nativeMax = Math.max;
    module.exports = debounce;
}, function(module, exports) {
    function restParam(func, start) {
        if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
        start = nativeMax(start === undefined ? func.length - 1 : +start || 0, 0);
        return function() {
            for (var args = arguments, index = -1, length = nativeMax(args.length - start, 0), rest = Array(length); ++index < length; ) rest[index] = args[start + index];
            switch (start) {
              case 0:
                return func.call(this, rest);

              case 1:
                return func.call(this, args[0], rest);

              case 2:
                return func.call(this, args[0], args[1], rest);
            }
            var otherArgs = Array(start + 1);
            index = -1;
            for (;++index < start; ) otherArgs[index] = args[index];
            otherArgs[start] = rest;
            return func.apply(this, otherArgs);
        };
    }
    var FUNC_ERROR_TEXT = "Expected a function", nativeMax = Math.max;
    module.exports = restParam;
}, function(module, exports) {
    function arrayCopy(source, array) {
        var index = -1, length = source.length;
        array || (array = Array(length));
        for (;++index < length; ) array[index] = source[index];
        return array;
    }
    module.exports = arrayCopy;
}, function(module, exports) {
    function arrayEach(array, iteratee) {
        for (var index = -1, length = array.length; ++index < length && !1 !== iteratee(array[index], index, array); ) ;
        return array;
    }
    module.exports = arrayEach;
}, function(module, exports) {
    function baseCopy(source, props, object) {
        object || (object = {});
        for (var index = -1, length = props.length; ++index < length; ) {
            var key = props[index];
            object[key] = source[key];
        }
        return object;
    }
    module.exports = baseCopy;
}, function(module, exports, __webpack_require__) {
    function baseFlatten(array, isDeep, isStrict, result) {
        result || (result = []);
        for (var index = -1, length = array.length; ++index < length; ) {
            var value = array[index];
            if (isObjectLike(value) && isArrayLike(value) && (isStrict || isArray(value) || isArguments(value))) if (isDeep) baseFlatten(value, isDeep, isStrict, result); else arrayPush(result, value); else if (!isStrict) result[result.length] = value;
        }
        return result;
    }
    var arrayPush = __webpack_require__(542), isArguments = __webpack_require__(96), isArray = __webpack_require__(27), isArrayLike = __webpack_require__(60), isObjectLike = __webpack_require__(46);
    module.exports = baseFlatten;
}, function(module, exports, __webpack_require__) {
    var createBaseFor = __webpack_require__(571), baseFor = createBaseFor();
    module.exports = baseFor;
}, function(module, exports, __webpack_require__) {
    function baseForIn(object, iteratee) {
        return baseFor(object, iteratee, keysIn);
    }
    var baseFor = __webpack_require__(261), keysIn = __webpack_require__(185);
    module.exports = baseForIn;
}, function(module, exports, __webpack_require__) {
    function baseForOwn(object, iteratee) {
        return baseFor(object, iteratee, keys);
    }
    var baseFor = __webpack_require__(261), keys = __webpack_require__(82);
    module.exports = baseForOwn;
}, function(module, exports, __webpack_require__) {
    function baseGet(object, path, pathKey) {
        if (null != object) {
            if (pathKey !== undefined && pathKey in toObject(object)) path = [ pathKey ];
            for (var index = 0, length = path.length; null != object && index < length; ) object = object[path[index++]];
            return index && index == length ? object : undefined;
        }
    }
    var toObject = __webpack_require__(61);
    module.exports = baseGet;
}, function(module, exports) {
    function baseProperty(key) {
        return function(object) {
            return null == object ? undefined : object[key];
        };
    }
    module.exports = baseProperty;
}, function(module, exports, __webpack_require__) {
    var baseProperty = __webpack_require__(265), getLength = baseProperty("length");
    module.exports = getLength;
}, function(module, exports, __webpack_require__) {
    function isKey(value, object) {
        var type = typeof value;
        if ("string" == type && reIsPlainProp.test(value) || "number" == type) return !0;
        if (isArray(value)) return !1; else return !reIsDeepProp.test(value) || null != object && value in toObject(object);
    }
    var isArray = __webpack_require__(27), toObject = __webpack_require__(61), reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/;
    module.exports = isKey;
}, function(module, exports, __webpack_require__) {
    function isStrictComparable(value) {
        return value === value && !isObject(value);
    }
    var isObject = __webpack_require__(28);
    module.exports = isStrictComparable;
}, function(module, exports, __webpack_require__) {
    function toPath(value) {
        if (isArray(value)) return value;
        var result = [];
        baseToString(value).replace(rePropName, function(match, number, quote, string) {
            result.push(quote ? string.replace(reEscapeChar, "$1") : number || match);
        });
        return result;
    }
    var baseToString = __webpack_require__(561), isArray = __webpack_require__(27), rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g, reEscapeChar = /\\(\\)?/g;
    module.exports = toPath;
}, function(module, exports, __webpack_require__) {
    function isEmpty(value) {
        if (null == value) return !0;
        if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || isObjectLike(value) && isFunction(value.splice))) return !value.length; else return !keys(value).length;
    }
    var isArguments = __webpack_require__(96), isArray = __webpack_require__(27), isArrayLike = __webpack_require__(60), isFunction = __webpack_require__(271), isObjectLike = __webpack_require__(46), isString = __webpack_require__(593), keys = __webpack_require__(82);
    module.exports = isEmpty;
}, function(module, exports, __webpack_require__) {
    function isFunction(value) {
        return isObject(value) && objToString.call(value) == funcTag;
    }
    var isObject = __webpack_require__(28), funcTag = "[object Function]", objectProto = Object.prototype, objToString = objectProto.toString;
    module.exports = isFunction;
}, function(module, exports, __webpack_require__) {
    var baseFlatten = __webpack_require__(260), bindCallback = __webpack_require__(117), pickByArray = __webpack_require__(583), pickByCallback = __webpack_require__(584), restParam = __webpack_require__(256), pick = restParam(function(object, props) {
        if (null == object) return {}; else return "function" == typeof props[0] ? pickByCallback(object, bindCallback(props[0], props[1], 3)) : pickByArray(object, baseFlatten(props));
    });
    module.exports = pick;
}, function(module, exports) {
    function identity(value) {
        return value;
    }
    module.exports = identity;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function prefixKey(prefix, key) {
        return prefix + key.charAt(0).toUpperCase() + key.substring(1);
    }
    var isUnitlessNumber = {
        columnCount: !0,
        fillOpacity: !0,
        flex: !0,
        flexGrow: !0,
        flexShrink: !0,
        fontWeight: !0,
        lineClamp: !0,
        lineHeight: !0,
        opacity: !0,
        order: !0,
        orphans: !0,
        widows: !0,
        zIndex: !0,
        zoom: !0
    }, prefixes = [ "Webkit", "ms", "Moz", "O" ];
    Object.keys(isUnitlessNumber).forEach(function(prop) {
        prefixes.forEach(function(prefix) {
            isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
        });
    });
    var shorthandPropertyExpansions = {
        background: {
            backgroundImage: !0,
            backgroundPosition: !0,
            backgroundRepeat: !0,
            backgroundColor: !0
        },
        border: {
            borderWidth: !0,
            borderStyle: !0,
            borderColor: !0
        },
        borderBottom: {
            borderBottomWidth: !0,
            borderBottomStyle: !0,
            borderBottomColor: !0
        },
        borderLeft: {
            borderLeftWidth: !0,
            borderLeftStyle: !0,
            borderLeftColor: !0
        },
        borderRight: {
            borderRightWidth: !0,
            borderRightStyle: !0,
            borderRightColor: !0
        },
        borderTop: {
            borderTopWidth: !0,
            borderTopStyle: !0,
            borderTopColor: !0
        },
        font: {
            fontStyle: !0,
            fontVariant: !0,
            fontWeight: !0,
            fontSize: !0,
            lineHeight: !0,
            fontFamily: !0
        }
    }, CSSProperty = {
        isUnitlessNumber: isUnitlessNumber,
        shorthandPropertyExpansions: shorthandPropertyExpansions
    };
    module.exports = CSSProperty;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var CSSProperty = __webpack_require__(274), dangerousStyleValue = __webpack_require__(652), hyphenateStyleName = __webpack_require__(658), memoizeStringOnly = __webpack_require__(299), processStyleName = memoizeStringOnly(function(styleName) {
        return hyphenateStyleName(styleName);
    }), CSSPropertyOperations = {
        createMarkupForStyles: function(styles) {
            var serialized = "";
            for (var styleName in styles) if (styles.hasOwnProperty(styleName)) {
                var styleValue = styles[styleName];
                if (null != styleValue) {
                    serialized += processStyleName(styleName) + ":";
                    serialized += dangerousStyleValue(styleName, styleValue) + ";";
                }
            }
            return serialized || null;
        },
        setValueForStyles: function(node, styles) {
            var style = node.style;
            for (var styleName in styles) if (styles.hasOwnProperty(styleName)) {
                var styleValue = dangerousStyleValue(styleName, styles[styleName]);
                if (styleValue) style[styleName] = styleValue; else {
                    var expansion = CSSProperty.shorthandPropertyExpansions[styleName];
                    if (expansion) for (var individualStyleName in expansion) style[individualStyleName] = ""; else style[styleName] = "";
                }
            }
        }
    };
    module.exports = CSSPropertyOperations;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function recomputePluginOrdering() {
        if (EventPluginOrder) for (var pluginName in namesToPlugins) {
            var PluginModule = namesToPlugins[pluginName], pluginIndex = EventPluginOrder.indexOf(pluginName);
            !0 ? invariant(pluginIndex > -1, "EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.", pluginName) : invariant(pluginIndex > -1);
            if (!EventPluginRegistry.plugins[pluginIndex]) {
                !0 ? invariant(PluginModule.extractEvents, "EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.", pluginName) : invariant(PluginModule.extractEvents);
                EventPluginRegistry.plugins[pluginIndex] = PluginModule;
                var publishedEvents = PluginModule.eventTypes;
                for (var eventName in publishedEvents) !0 ? invariant(publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName), "EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.", eventName, pluginName) : invariant(publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName));
            }
        }
    }
    function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
        !0 ? invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName), "EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.", eventName) : invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName));
        EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
        var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
        if (phasedRegistrationNames) {
            for (var phaseName in phasedRegistrationNames) if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
                var phasedRegistrationName = phasedRegistrationNames[phaseName];
                publishRegistrationName(phasedRegistrationName, PluginModule, eventName);
            }
            return !0;
        } else if (dispatchConfig.registrationName) {
            publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);
            return !0;
        }
        return !1;
    }
    function publishRegistrationName(registrationName, PluginModule, eventName) {
        !0 ? invariant(!EventPluginRegistry.registrationNameModules[registrationName], "EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.", registrationName) : invariant(!EventPluginRegistry.registrationNameModules[registrationName]);
        EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
        EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
    }
    var invariant = __webpack_require__(5), EventPluginOrder = null, namesToPlugins = {}, EventPluginRegistry = {
        plugins: [],
        eventNameDispatchConfigs: {},
        registrationNameModules: {},
        registrationNameDependencies: {},
        injectEventPluginOrder: function(InjectedEventPluginOrder) {
            !0 ? invariant(!EventPluginOrder, "EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.") : invariant(!EventPluginOrder);
            EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
            recomputePluginOrdering();
        },
        injectEventPluginsByName: function(injectedNamesToPlugins) {
            var isOrderingDirty = !1;
            for (var pluginName in injectedNamesToPlugins) if (injectedNamesToPlugins.hasOwnProperty(pluginName)) {
                var PluginModule = injectedNamesToPlugins[pluginName];
                if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
                    !0 ? invariant(!namesToPlugins[pluginName], "EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.", pluginName) : invariant(!namesToPlugins[pluginName]);
                    namesToPlugins[pluginName] = PluginModule;
                    isOrderingDirty = !0;
                }
            }
            if (isOrderingDirty) recomputePluginOrdering();
        },
        getPluginModuleForEvent: function(event) {
            var dispatchConfig = event.dispatchConfig;
            if (dispatchConfig.registrationName) return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;
            for (var phase in dispatchConfig.phasedRegistrationNames) if (dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {
                var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];
                if (PluginModule) return PluginModule;
            }
            return null;
        },
        _resetEventPlugins: function() {
            EventPluginOrder = null;
            for (var pluginName in namesToPlugins) if (namesToPlugins.hasOwnProperty(pluginName)) delete namesToPlugins[pluginName];
            EventPluginRegistry.plugins.length = 0;
            var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;
            for (var eventName in eventNameDispatchConfigs) if (eventNameDispatchConfigs.hasOwnProperty(eventName)) delete eventNameDispatchConfigs[eventName];
            var registrationNameModules = EventPluginRegistry.registrationNameModules;
            for (var registrationName in registrationNameModules) if (registrationNameModules.hasOwnProperty(registrationName)) delete registrationNameModules[registrationName];
        }
    };
    module.exports = EventPluginRegistry;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function remove(event) {
        event.remove();
    }
    var ReactBrowserEventEmitter = __webpack_require__(99), accumulate = __webpack_require__(193), forEachAccumulated = __webpack_require__(195), invariant = __webpack_require__(5), LocalEventTrapMixin = {
        trapBubbledEvent: function(topLevelType, handlerBaseName) {
            !0 ? invariant(this.isMounted(), "Must be mounted to trap events") : invariant(this.isMounted());
            var listener = ReactBrowserEventEmitter.trapBubbledEvent(topLevelType, handlerBaseName, this.getDOMNode());
            this._localEventListeners = accumulate(this._localEventListeners, listener);
        },
        componentWillUnmount: function() {
            if (this._localEventListeners) forEachAccumulated(this._localEventListeners, remove);
        }
    };
    module.exports = LocalEventTrapMixin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function assertValidProps(props) {
        if (props) {
            !0 ? invariant(null == props.children || null == props.dangerouslySetInnerHTML, "Can only set one of `children` or `props.dangerouslySetInnerHTML`.") : invariant(null == props.children || null == props.dangerouslySetInnerHTML);
            !0 ? invariant(null == props.style || "object" == typeof props.style, "The `style` prop expects a mapping from style properties to values, not a string.") : invariant(null == props.style || "object" == typeof props.style);
        }
    }
    function putListener(id, registrationName, listener, transaction) {
        var container = ReactMount.findReactContainerForID(id);
        if (container) {
            var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;
            listenTo(registrationName, doc);
        }
        transaction.getPutListenerQueue().enqueuePutListener(id, registrationName, listener);
    }
    function ReactDOMComponent(tag, omitClose) {
        this._tagOpen = "<" + tag;
        this._tagClose = omitClose ? "" : "</" + tag + ">";
        this.tagName = tag.toUpperCase();
    }
    var CSSPropertyOperations = __webpack_require__(275), DOMProperty = __webpack_require__(83), DOMPropertyOperations = __webpack_require__(97), ReactBrowserComponentMixin = __webpack_require__(47), ReactComponent = __webpack_require__(100), ReactBrowserEventEmitter = __webpack_require__(99), ReactMount = __webpack_require__(51), ReactMultiChild = __webpack_require__(281), ReactPerf = __webpack_require__(62), escapeTextForBrowser = __webpack_require__(194), invariant = __webpack_require__(5), keyOf = __webpack_require__(71), merge = __webpack_require__(37), mixInto = __webpack_require__(52), deleteListener = ReactBrowserEventEmitter.deleteListener, listenTo = ReactBrowserEventEmitter.listenTo, registrationNameModules = ReactBrowserEventEmitter.registrationNameModules, CONTENT_TYPES = {
        string: !0,
        number: !0
    }, STYLE = keyOf({
        style: null
    }), ELEMENT_NODE_TYPE = 1;
    ReactDOMComponent.Mixin = {
        mountComponent: ReactPerf.measure("ReactDOMComponent", "mountComponent", function(rootID, transaction, mountDepth) {
            ReactComponent.Mixin.mountComponent.call(this, rootID, transaction, mountDepth);
            assertValidProps(this.props);
            return this._createOpenTagMarkupAndPutListeners(transaction) + this._createContentMarkup(transaction) + this._tagClose;
        }),
        _createOpenTagMarkupAndPutListeners: function(transaction) {
            var props = this.props, ret = this._tagOpen;
            for (var propKey in props) if (props.hasOwnProperty(propKey)) {
                var propValue = props[propKey];
                if (null != propValue) if (registrationNameModules.hasOwnProperty(propKey)) putListener(this._rootNodeID, propKey, propValue, transaction); else {
                    if (propKey === STYLE) {
                        if (propValue) propValue = props.style = merge(props.style);
                        propValue = CSSPropertyOperations.createMarkupForStyles(propValue);
                    }
                    var markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
                    if (markup) ret += " " + markup;
                }
            }
            if (transaction.renderToStaticMarkup) return ret + ">"; else return ret + " " + DOMPropertyOperations.createMarkupForID(this._rootNodeID) + ">";
        },
        _createContentMarkup: function(transaction) {
            var innerHTML = this.props.dangerouslySetInnerHTML;
            if (null != innerHTML) {
                if (null != innerHTML.__html) return innerHTML.__html;
            } else {
                var contentToUse = CONTENT_TYPES[typeof this.props.children] ? this.props.children : null, childrenToUse = null != contentToUse ? null : this.props.children;
                if (null != contentToUse) return escapeTextForBrowser(contentToUse); else if (null != childrenToUse) {
                    var mountImages = this.mountChildren(childrenToUse, transaction);
                    return mountImages.join("");
                }
            }
            return "";
        },
        receiveComponent: function(nextDescriptor, transaction) {
            if (nextDescriptor !== this._descriptor || null == nextDescriptor._owner) ReactComponent.Mixin.receiveComponent.call(this, nextDescriptor, transaction);
        },
        updateComponent: ReactPerf.measure("ReactDOMComponent", "updateComponent", function(transaction, prevDescriptor) {
            assertValidProps(this._descriptor.props);
            ReactComponent.Mixin.updateComponent.call(this, transaction, prevDescriptor);
            this._updateDOMProperties(prevDescriptor.props, transaction);
            this._updateDOMChildren(prevDescriptor.props, transaction);
        }),
        _updateDOMProperties: function(lastProps, transaction) {
            var propKey, styleName, styleUpdates, nextProps = this.props;
            for (propKey in lastProps) if (!nextProps.hasOwnProperty(propKey) && lastProps.hasOwnProperty(propKey)) if (propKey === STYLE) {
                var lastStyle = lastProps[propKey];
                for (styleName in lastStyle) if (lastStyle.hasOwnProperty(styleName)) {
                    styleUpdates = styleUpdates || {};
                    styleUpdates[styleName] = "";
                }
            } else if (registrationNameModules.hasOwnProperty(propKey)) deleteListener(this._rootNodeID, propKey); else if (DOMProperty.isStandardName[propKey] || DOMProperty.isCustomAttribute(propKey)) ReactComponent.BackendIDOperations.deletePropertyByID(this._rootNodeID, propKey);
            for (propKey in nextProps) {
                var nextProp = nextProps[propKey], lastProp = lastProps[propKey];
                if (nextProps.hasOwnProperty(propKey) && nextProp !== lastProp) if (propKey === STYLE) {
                    if (nextProp) nextProp = nextProps.style = merge(nextProp);
                    if (lastProp) {
                        for (styleName in lastProp) if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
                            styleUpdates = styleUpdates || {};
                            styleUpdates[styleName] = "";
                        }
                        for (styleName in nextProp) if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
                            styleUpdates = styleUpdates || {};
                            styleUpdates[styleName] = nextProp[styleName];
                        }
                    } else styleUpdates = nextProp;
                } else if (registrationNameModules.hasOwnProperty(propKey)) putListener(this._rootNodeID, propKey, nextProp, transaction); else if (DOMProperty.isStandardName[propKey] || DOMProperty.isCustomAttribute(propKey)) ReactComponent.BackendIDOperations.updatePropertyByID(this._rootNodeID, propKey, nextProp);
            }
            if (styleUpdates) ReactComponent.BackendIDOperations.updateStylesByID(this._rootNodeID, styleUpdates);
        },
        _updateDOMChildren: function(lastProps, transaction) {
            var nextProps = this.props, lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null, nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null, lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html, nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html, lastChildren = null != lastContent ? null : lastProps.children, nextChildren = null != nextContent ? null : nextProps.children, lastHasContentOrHtml = null != lastContent || null != lastHtml, nextHasContentOrHtml = null != nextContent || null != nextHtml;
            if (null != lastChildren && null == nextChildren) this.updateChildren(null, transaction); else if (lastHasContentOrHtml && !nextHasContentOrHtml) this.updateTextContent("");
            if (null != nextContent) {
                if (lastContent !== nextContent) this.updateTextContent("" + nextContent);
            } else if (null != nextHtml) {
                if (lastHtml !== nextHtml) ReactComponent.BackendIDOperations.updateInnerHTMLByID(this._rootNodeID, nextHtml);
            } else if (null != nextChildren) this.updateChildren(nextChildren, transaction);
        },
        unmountComponent: function() {
            this.unmountChildren();
            ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);
            ReactComponent.Mixin.unmountComponent.call(this);
        }
    };
    mixInto(ReactDOMComponent, ReactComponent.Mixin);
    mixInto(ReactDOMComponent, ReactDOMComponent.Mixin);
    mixInto(ReactDOMComponent, ReactMultiChild.Mixin);
    mixInto(ReactDOMComponent, ReactBrowserComponentMixin);
    module.exports = ReactDOMComponent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getCurrentOwnerDisplayName() {
        var current = ReactCurrentOwner.current;
        return current && current.constructor.displayName || undefined;
    }
    function validateExplicitKey(component, parentType) {
        if (!component._store.validated && null == component.props.key) {
            component._store.validated = !0;
            warnAndMonitorForKeyUse("react_key_warning", 'Each child in an array should have a unique "key" prop.', component, parentType);
        }
    }
    function validatePropertyKey(name, component, parentType) {
        if (NUMERIC_PROPERTY_REGEX.test(name)) warnAndMonitorForKeyUse("react_numeric_key_warning", "Child objects should have non-numeric keys so ordering is preserved.", component, parentType);
    }
    function warnAndMonitorForKeyUse(warningID, message, component, parentType) {
        var ownerName = getCurrentOwnerDisplayName(), parentName = parentType.displayName, useName = ownerName || parentName, memoizer = ownerHasKeyUseWarning[warningID];
        if (!memoizer.hasOwnProperty(useName)) {
            memoizer[useName] = !0;
            message += ownerName ? " Check the render method of " + ownerName + "." : " Check the renderComponent call using <" + parentName + ">.";
            var childOwnerName = null;
            if (component._owner && component._owner !== ReactCurrentOwner.current) {
                childOwnerName = component._owner.constructor.displayName;
                message += " It was passed a child from " + childOwnerName + ".";
            }
            message += " See http://fb.me/react-warning-keys for more information.";
            monitorCodeUse(warningID, {
                component: useName,
                componentOwner: childOwnerName
            });
            console.warn(message);
        }
    }
    function monitorUseOfObjectMap() {
        var currentName = getCurrentOwnerDisplayName() || "";
        if (!ownerHasMonitoredObjectMap.hasOwnProperty(currentName)) {
            ownerHasMonitoredObjectMap[currentName] = !0;
            monitorCodeUse("react_object_map_children");
        }
    }
    function validateChildKeys(component, parentType) {
        if (Array.isArray(component)) for (var i = 0; i < component.length; i++) {
            var child = component[i];
            if (ReactDescriptor.isValidDescriptor(child)) validateExplicitKey(child, parentType);
        } else if (ReactDescriptor.isValidDescriptor(component)) component._store.validated = !0; else if (component && "object" == typeof component) {
            monitorUseOfObjectMap();
            for (var name in component) validatePropertyKey(name, component[name], parentType);
        }
    }
    function checkPropTypes(componentName, propTypes, props, location) {
        for (var propName in propTypes) if (propTypes.hasOwnProperty(propName)) {
            var error;
            try {
                error = propTypes[propName](props, propName, componentName, location);
            } catch (ex) {
                error = ex;
            }
            if (error instanceof Error && !(error.message in loggedTypeFailures)) {
                loggedTypeFailures[error.message] = !0;
                monitorCodeUse("react_failed_descriptor_type_check", {
                    message: error.message
                });
            }
        }
    }
    var ReactDescriptor = __webpack_require__(50), ReactPropTypeLocations = __webpack_require__(285), ReactCurrentOwner = __webpack_require__(101), monitorCodeUse = __webpack_require__(201), ownerHasKeyUseWarning = {
        react_key_warning: {},
        react_numeric_key_warning: {}
    }, ownerHasMonitoredObjectMap = {}, loggedTypeFailures = {}, NUMERIC_PROPERTY_REGEX = /^\d+$/, ReactDescriptorValidator = {
        createFactory: function(factory, propTypes, contextTypes) {
            var validatedFactory = function(props, children) {
                for (var descriptor = factory.apply(this, arguments), i = 1; i < arguments.length; i++) validateChildKeys(arguments[i], descriptor.type);
                var name = descriptor.type.displayName;
                if (propTypes) checkPropTypes(name, propTypes, descriptor.props, ReactPropTypeLocations.prop);
                if (contextTypes) checkPropTypes(name, contextTypes, descriptor._context, ReactPropTypeLocations.context);
                return descriptor;
            };
            validatedFactory.prototype = factory.prototype;
            validatedFactory.type = factory.type;
            for (var key in factory) if (factory.hasOwnProperty(key)) validatedFactory[key] = factory[key];
            return validatedFactory;
        }
    };
    module.exports = ReactDescriptorValidator;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var adler32 = __webpack_require__(647), ReactMarkupChecksum = {
        CHECKSUM_ATTR_NAME: "data-react-checksum",
        addChecksumToMarkup: function(markup) {
            var checksum = adler32(markup);
            return markup.replace(">", " " + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '">');
        },
        canReuseMarkup: function(markup, element) {
            var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
            existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
            return adler32(markup) === existingChecksum;
        }
    };
    module.exports = ReactMarkupChecksum;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function enqueueMarkup(parentID, markup, toIndex) {
        updateQueue.push({
            parentID: parentID,
            parentNode: null,
            type: ReactMultiChildUpdateTypes.INSERT_MARKUP,
            markupIndex: markupQueue.push(markup) - 1,
            textContent: null,
            fromIndex: null,
            toIndex: toIndex
        });
    }
    function enqueueMove(parentID, fromIndex, toIndex) {
        updateQueue.push({
            parentID: parentID,
            parentNode: null,
            type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
            markupIndex: null,
            textContent: null,
            fromIndex: fromIndex,
            toIndex: toIndex
        });
    }
    function enqueueRemove(parentID, fromIndex) {
        updateQueue.push({
            parentID: parentID,
            parentNode: null,
            type: ReactMultiChildUpdateTypes.REMOVE_NODE,
            markupIndex: null,
            textContent: null,
            fromIndex: fromIndex,
            toIndex: null
        });
    }
    function enqueueTextContent(parentID, textContent) {
        updateQueue.push({
            parentID: parentID,
            parentNode: null,
            type: ReactMultiChildUpdateTypes.TEXT_CONTENT,
            markupIndex: null,
            textContent: textContent,
            fromIndex: null,
            toIndex: null
        });
    }
    function processQueue() {
        if (updateQueue.length) {
            ReactComponent.BackendIDOperations.dangerouslyProcessChildrenUpdates(updateQueue, markupQueue);
            clearQueue();
        }
    }
    function clearQueue() {
        updateQueue.length = 0;
        markupQueue.length = 0;
    }
    var ReactComponent = __webpack_require__(100), ReactMultiChildUpdateTypes = __webpack_require__(282), flattenChildren = __webpack_require__(654), instantiateReactComponent = __webpack_require__(146), shouldUpdateReactComponent = __webpack_require__(202), updateDepth = 0, updateQueue = [], markupQueue = [], ReactMultiChild = {
        Mixin: {
            mountChildren: function(nestedChildren, transaction) {
                var children = flattenChildren(nestedChildren), mountImages = [], index = 0;
                this._renderedChildren = children;
                for (var name in children) {
                    var child = children[name];
                    if (children.hasOwnProperty(name)) {
                        var childInstance = instantiateReactComponent(child);
                        children[name] = childInstance;
                        var rootID = this._rootNodeID + name, mountImage = childInstance.mountComponent(rootID, transaction, this._mountDepth + 1);
                        childInstance._mountIndex = index;
                        mountImages.push(mountImage);
                        index++;
                    }
                }
                return mountImages;
            },
            updateTextContent: function(nextContent) {
                updateDepth++;
                var errorThrown = !0;
                try {
                    var prevChildren = this._renderedChildren;
                    for (var name in prevChildren) if (prevChildren.hasOwnProperty(name)) this._unmountChildByName(prevChildren[name], name);
                    this.setTextContent(nextContent);
                    errorThrown = !1;
                } finally {
                    updateDepth--;
                    if (!updateDepth) errorThrown ? clearQueue() : processQueue();
                }
            },
            updateChildren: function(nextNestedChildren, transaction) {
                updateDepth++;
                var errorThrown = !0;
                try {
                    this._updateChildren(nextNestedChildren, transaction);
                    errorThrown = !1;
                } finally {
                    updateDepth--;
                    if (!updateDepth) errorThrown ? clearQueue() : processQueue();
                }
            },
            _updateChildren: function(nextNestedChildren, transaction) {
                var nextChildren = flattenChildren(nextNestedChildren), prevChildren = this._renderedChildren;
                if (nextChildren || prevChildren) {
                    var name, lastIndex = 0, nextIndex = 0;
                    for (name in nextChildren) if (nextChildren.hasOwnProperty(name)) {
                        var prevChild = prevChildren && prevChildren[name], prevDescriptor = prevChild && prevChild._descriptor, nextDescriptor = nextChildren[name];
                        if (shouldUpdateReactComponent(prevDescriptor, nextDescriptor)) {
                            this.moveChild(prevChild, nextIndex, lastIndex);
                            lastIndex = Math.max(prevChild._mountIndex, lastIndex);
                            prevChild.receiveComponent(nextDescriptor, transaction);
                            prevChild._mountIndex = nextIndex;
                        } else {
                            if (prevChild) {
                                lastIndex = Math.max(prevChild._mountIndex, lastIndex);
                                this._unmountChildByName(prevChild, name);
                            }
                            var nextChildInstance = instantiateReactComponent(nextDescriptor);
                            this._mountChildByNameAtIndex(nextChildInstance, name, nextIndex, transaction);
                        }
                        nextIndex++;
                    }
                    for (name in prevChildren) if (prevChildren.hasOwnProperty(name) && (!nextChildren || !nextChildren[name])) this._unmountChildByName(prevChildren[name], name);
                }
            },
            unmountChildren: function() {
                var renderedChildren = this._renderedChildren;
                for (var name in renderedChildren) {
                    var renderedChild = renderedChildren[name];
                    if (renderedChild.unmountComponent) renderedChild.unmountComponent();
                }
                this._renderedChildren = null;
            },
            moveChild: function(child, toIndex, lastIndex) {
                if (child._mountIndex < lastIndex) enqueueMove(this._rootNodeID, child._mountIndex, toIndex);
            },
            createChild: function(child, mountImage) {
                enqueueMarkup(this._rootNodeID, mountImage, child._mountIndex);
            },
            removeChild: function(child) {
                enqueueRemove(this._rootNodeID, child._mountIndex);
            },
            setTextContent: function(textContent) {
                enqueueTextContent(this._rootNodeID, textContent);
            },
            _mountChildByNameAtIndex: function(child, name, index, transaction) {
                var rootID = this._rootNodeID + name, mountImage = child.mountComponent(rootID, transaction, this._mountDepth + 1);
                child._mountIndex = index;
                this.createChild(child, mountImage);
                this._renderedChildren = this._renderedChildren || {};
                this._renderedChildren[name] = child;
            },
            _unmountChildByName: function(child, name) {
                this.removeChild(child);
                child._mountIndex = null;
                child.unmountComponent();
                delete this._renderedChildren[name];
            }
        }
    };
    module.exports = ReactMultiChild;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var keyMirror = __webpack_require__(85), ReactMultiChildUpdateTypes = keyMirror({
        INSERT_MARKUP: null,
        MOVE_EXISTING: null,
        REMOVE_NODE: null,
        TEXT_CONTENT: null
    });
    module.exports = ReactMultiChildUpdateTypes;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var emptyObject = __webpack_require__(653), invariant = __webpack_require__(5), ReactOwner = {
        isValidOwner: function(object) {
            return !(!object || "function" != typeof object.attachRef || "function" != typeof object.detachRef);
        },
        addComponentAsRefTo: function(component, ref, owner) {
            !0 ? invariant(ReactOwner.isValidOwner(owner), "addComponentAsRefTo(...): Only a ReactOwner can have refs. This usually means that you're trying to add a ref to a component that doesn't have an owner (that is, was not created inside of another component's `render` method). Try rendering this component inside of a new top-level component which will hold the ref.") : invariant(ReactOwner.isValidOwner(owner));
            owner.attachRef(ref, component);
        },
        removeComponentAsRefFrom: function(component, ref, owner) {
            !0 ? invariant(ReactOwner.isValidOwner(owner), "removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This usually means that you're trying to remove a ref to a component that doesn't have an owner (that is, was not created inside of another component's `render` method). Try rendering this component inside of a new top-level component which will hold the ref.") : invariant(ReactOwner.isValidOwner(owner));
            if (owner.refs[ref] === component) owner.detachRef(ref);
        },
        Mixin: {
            construct: function() {
                this.refs = emptyObject;
            },
            attachRef: function(ref, component) {
                !0 ? invariant(component.isOwnedBy(this), "attachRef(%s, ...): Only a component's owner can store a ref to it.", ref) : invariant(component.isOwnedBy(this));
                (this.refs === emptyObject ? this.refs = {} : this.refs)[ref] = component;
            },
            detachRef: function(ref) {
                delete this.refs[ref];
            }
        }
    };
    module.exports = ReactOwner;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactPropTypeLocationNames = {};
    if (!0) ReactPropTypeLocationNames = {
        prop: "prop",
        context: "context",
        childContext: "child context"
    };
    module.exports = ReactPropTypeLocationNames;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var keyMirror = __webpack_require__(85), ReactPropTypeLocations = keyMirror({
        prop: null,
        context: null,
        childContext: null
    });
    module.exports = ReactPropTypeLocations;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createChainableTypeChecker(validate) {
        function checkType(isRequired, props, propName, componentName, location) {
            componentName = componentName || ANONYMOUS;
            if (null == props[propName]) {
                var locationName = ReactPropTypeLocationNames[location];
                if (isRequired) return new Error("Required " + locationName + " `" + propName + "` was not specified in `" + componentName + "`.");
            } else return validate(props, propName, componentName, location);
        }
        var chainedCheckType = checkType.bind(null, !1);
        chainedCheckType.isRequired = checkType.bind(null, !0);
        return chainedCheckType;
    }
    function createPrimitiveTypeChecker(expectedType) {
        function validate(props, propName, componentName, location) {
            var propValue = props[propName];
            if (getPropType(propValue) !== expectedType) {
                var locationName = ReactPropTypeLocationNames[location], preciseType = getPreciseType(propValue);
                return new Error("Invalid " + locationName + " `" + propName + "` of type `" + preciseType + "` supplied to `" + componentName + "`, expected `" + expectedType + "`.");
            }
        }
        return createChainableTypeChecker(validate);
    }
    function createArrayOfTypeChecker(typeChecker) {
        function validate(props, propName, componentName, location) {
            var propValue = props[propName];
            if (!Array.isArray(propValue)) {
                var locationName = ReactPropTypeLocationNames[location], propType = getPropType(propValue);
                return new Error("Invalid " + locationName + " `" + propName + "` of type `" + propType + "` supplied to `" + componentName + "`, expected an array.");
            }
            for (var i = 0; i < propValue.length; i++) {
                var error = typeChecker(propValue, i, componentName, location);
                if (error instanceof Error) return error;
            }
        }
        return createChainableTypeChecker(validate);
    }
    function createInstanceTypeChecker(expectedClass) {
        function validate(props, propName, componentName, location) {
            if (!(props[propName] instanceof expectedClass)) {
                var locationName = ReactPropTypeLocationNames[location], expectedClassName = expectedClass.name || ANONYMOUS;
                return new Error("Invalid " + locationName + " `" + propName + "` supplied to `" + componentName + "`, expected instance of `" + expectedClassName + "`.");
            }
        }
        return createChainableTypeChecker(validate);
    }
    function createEnumTypeChecker(expectedValues) {
        function validate(props, propName, componentName, location) {
            for (var propValue = props[propName], i = 0; i < expectedValues.length; i++) if (propValue === expectedValues[i]) return;
            var locationName = ReactPropTypeLocationNames[location], valuesString = JSON.stringify(expectedValues);
            return new Error("Invalid " + locationName + " `" + propName + "` of value `" + propValue + "` supplied to `" + componentName + "`, expected one of " + valuesString + ".");
        }
        return createChainableTypeChecker(validate);
    }
    function createObjectOfTypeChecker(typeChecker) {
        function validate(props, propName, componentName, location) {
            var propValue = props[propName], propType = getPropType(propValue);
            if ("object" !== propType) {
                var locationName = ReactPropTypeLocationNames[location];
                return new Error("Invalid " + locationName + " `" + propName + "` of type `" + propType + "` supplied to `" + componentName + "`, expected an object.");
            }
            for (var key in propValue) if (propValue.hasOwnProperty(key)) {
                var error = typeChecker(propValue, key, componentName, location);
                if (error instanceof Error) return error;
            }
        }
        return createChainableTypeChecker(validate);
    }
    function createUnionTypeChecker(arrayOfTypeCheckers) {
        function validate(props, propName, componentName, location) {
            for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
                if (null == (0, arrayOfTypeCheckers[i])(props, propName, componentName, location)) return;
            }
            var locationName = ReactPropTypeLocationNames[location];
            return new Error("Invalid " + locationName + " `" + propName + "` supplied to `" + componentName + "`.");
        }
        return createChainableTypeChecker(validate);
    }
    function createShapeTypeChecker(shapeTypes) {
        function validate(props, propName, componentName, location) {
            var propValue = props[propName], propType = getPropType(propValue);
            if ("object" !== propType) {
                var locationName = ReactPropTypeLocationNames[location];
                return new Error("Invalid " + locationName + " `" + propName + "` of type `" + propType + "` supplied to `" + componentName + "`, expected `object`.");
            }
            for (var key in shapeTypes) {
                var checker = shapeTypes[key];
                if (checker) {
                    var error = checker(propValue, key, componentName, location);
                    if (error) return error;
                }
            }
        }
        return createChainableTypeChecker(validate, "expected `object`");
    }
    function isRenderable(propValue) {
        switch (typeof propValue) {
          case "number":
          case "string":
            return !0;

          case "boolean":
            return !propValue;

          case "object":
            if (Array.isArray(propValue)) return propValue.every(isRenderable);
            if (ReactDescriptor.isValidDescriptor(propValue)) return !0;
            for (var k in propValue) if (!isRenderable(propValue[k])) return !1;
            return !0;

          default:
            return !1;
        }
    }
    function getPropType(propValue) {
        var propType = typeof propValue;
        if (Array.isArray(propValue)) return "array";
        if (propValue instanceof RegExp) return "object"; else return propType;
    }
    function getPreciseType(propValue) {
        var propType = getPropType(propValue);
        if ("object" === propType) if (propValue instanceof Date) return "date"; else if (propValue instanceof RegExp) return "regexp";
        return propType;
    }
    var ReactDescriptor = __webpack_require__(50), ReactPropTypeLocationNames = __webpack_require__(284), emptyFunction = __webpack_require__(63), ANONYMOUS = "<<anonymous>>", ReactPropTypes = {
        array: createPrimitiveTypeChecker("array"),
        bool: createPrimitiveTypeChecker("boolean"),
        func: createPrimitiveTypeChecker("function"),
        number: createPrimitiveTypeChecker("number"),
        object: createPrimitiveTypeChecker("object"),
        string: createPrimitiveTypeChecker("string"),
        any: function() {
            return createChainableTypeChecker(emptyFunction.thatReturns());
        }(),
        arrayOf: createArrayOfTypeChecker,
        component: function() {
            function validate(props, propName, componentName, location) {
                if (!ReactDescriptor.isValidDescriptor(props[propName])) {
                    var locationName = ReactPropTypeLocationNames[location];
                    return new Error("Invalid " + locationName + " `" + propName + "` supplied to `" + componentName + "`, expected a React component.");
                }
            }
            return createChainableTypeChecker(validate);
        }(),
        instanceOf: createInstanceTypeChecker,
        objectOf: createObjectOfTypeChecker,
        oneOf: createEnumTypeChecker,
        oneOfType: createUnionTypeChecker,
        renderable: function() {
            function validate(props, propName, componentName, location) {
                if (!isRenderable(props[propName])) {
                    var locationName = ReactPropTypeLocationNames[location];
                    return new Error("Invalid " + locationName + " `" + propName + "` supplied to `" + componentName + "`, expected a renderable prop.");
                }
            }
            return createChainableTypeChecker(validate);
        }(),
        shape: createShapeTypeChecker
    };
    module.exports = ReactPropTypes;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function ReactPutListenerQueue() {
        this.listenersToPut = [];
    }
    var PooledClass = __webpack_require__(70), ReactBrowserEventEmitter = __webpack_require__(99);
    __webpack_require__(52)(ReactPutListenerQueue, {
        enqueuePutListener: function(rootNodeID, propKey, propValue) {
            this.listenersToPut.push({
                rootNodeID: rootNodeID,
                propKey: propKey,
                propValue: propValue
            });
        },
        putListeners: function() {
            for (var i = 0; i < this.listenersToPut.length; i++) {
                var listenerToPut = this.listenersToPut[i];
                ReactBrowserEventEmitter.putListener(listenerToPut.rootNodeID, listenerToPut.propKey, listenerToPut.propValue);
            }
        },
        reset: function() {
            this.listenersToPut.length = 0;
        },
        destructor: function() {
            this.reset();
        }
    });
    PooledClass.addPoolingTo(ReactPutListenerQueue);
    module.exports = ReactPutListenerQueue;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactRootIndexInjection = {
        injectCreateReactRootIndex: function(_createReactRootIndex) {
            ReactRootIndex.createReactRootIndex = _createReactRootIndex;
        }
    }, ReactRootIndex = {
        createReactRootIndex: null,
        injection: ReactRootIndexInjection
    };
    module.exports = ReactRootIndex;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var DOMPropertyOperations = __webpack_require__(97), ReactBrowserComponentMixin = __webpack_require__(47), ReactComponent = __webpack_require__(100), ReactDescriptor = __webpack_require__(50), escapeTextForBrowser = __webpack_require__(194), mixInto = __webpack_require__(52), ReactTextComponent = function(descriptor) {
        this.construct(descriptor);
    };
    mixInto(ReactTextComponent, ReactComponent.Mixin);
    mixInto(ReactTextComponent, ReactBrowserComponentMixin);
    mixInto(ReactTextComponent, {
        mountComponent: function(rootID, transaction, mountDepth) {
            ReactComponent.Mixin.mountComponent.call(this, rootID, transaction, mountDepth);
            var escapedText = escapeTextForBrowser(this.props);
            if (transaction.renderToStaticMarkup) return escapedText; else return "<span " + DOMPropertyOperations.createMarkupForID(rootID) + ">" + escapedText + "</span>";
        },
        receiveComponent: function(nextComponent, transaction) {
            var nextProps = nextComponent.props;
            if (nextProps !== this.props) {
                this.props = nextProps;
                ReactComponent.BackendIDOperations.updateTextContentByID(this._rootNodeID, nextProps);
            }
        }
    });
    module.exports = ReactDescriptor.createFactory(ReactTextComponent);
}, function(module, exports, __webpack_require__) {
    "use strict";
    var getUnboundedScrollPosition = __webpack_require__(296), ViewportMetrics = {
        currentScrollLeft: 0,
        currentScrollTop: 0,
        refreshScrollValues: function() {
            var scrollPosition = getUnboundedScrollPosition(window);
            ViewportMetrics.currentScrollLeft = scrollPosition.x;
            ViewportMetrics.currentScrollTop = scrollPosition.y;
        }
    };
    module.exports = ViewportMetrics;
}, function(module, exports, __webpack_require__) {
    function containsNode(outerNode, innerNode) {
        if (!outerNode || !innerNode) return !1; else if (outerNode === innerNode) return !0; else if (isTextNode(outerNode)) return !1; else if (isTextNode(innerNode)) return containsNode(outerNode, innerNode.parentNode); else if (outerNode.contains) return outerNode.contains(innerNode); else if (outerNode.compareDocumentPosition) return !!(16 & outerNode.compareDocumentPosition(innerNode)); else return !1;
    }
    var isTextNode = __webpack_require__(660);
    module.exports = containsNode;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function focusNode(node) {
        if (!node.disabled) node.focus();
    }
    module.exports = focusNode;
}, function(module, exports) {
    function getActiveElement() {
        try {
            return document.activeElement || document.body;
        } catch (e) {
            return document.body;
        }
    }
    module.exports = getActiveElement;
}, function(module, exports, __webpack_require__) {
    function getMarkupWrap(nodeName) {
        !0 ? invariant(!!dummyNode, "Markup wrapping node not initialized") : invariant(!!dummyNode);
        if (!markupWrap.hasOwnProperty(nodeName)) nodeName = "*";
        if (!shouldWrap.hasOwnProperty(nodeName)) {
            if ("*" === nodeName) dummyNode.innerHTML = "<link />"; else dummyNode.innerHTML = "<" + nodeName + "></" + nodeName + ">";
            shouldWrap[nodeName] = !dummyNode.firstChild;
        }
        return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
    }
    var ExecutionEnvironment = __webpack_require__(26), invariant = __webpack_require__(5), dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement("div") : null, shouldWrap = {
        circle: !0,
        defs: !0,
        ellipse: !0,
        g: !0,
        line: !0,
        linearGradient: !0,
        path: !0,
        polygon: !0,
        polyline: !0,
        radialGradient: !0,
        rect: !0,
        stop: !0,
        text: !0
    }, selectWrap = [ 1, '<select multiple="true">', "</select>" ], tableWrap = [ 1, "<table>", "</table>" ], trWrap = [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], svgWrap = [ 1, "<svg>", "</svg>" ], markupWrap = {
        "*": [ 1, "?<div>", "</div>" ],
        area: [ 1, "<map>", "</map>" ],
        col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
        legend: [ 1, "<fieldset>", "</fieldset>" ],
        param: [ 1, "<object>", "</object>" ],
        tr: [ 2, "<table><tbody>", "</tbody></table>" ],
        optgroup: selectWrap,
        option: selectWrap,
        caption: tableWrap,
        colgroup: tableWrap,
        tbody: tableWrap,
        tfoot: tableWrap,
        thead: tableWrap,
        td: trWrap,
        th: trWrap,
        circle: svgWrap,
        defs: svgWrap,
        ellipse: svgWrap,
        g: svgWrap,
        line: svgWrap,
        linearGradient: svgWrap,
        path: svgWrap,
        polygon: svgWrap,
        polyline: svgWrap,
        radialGradient: svgWrap,
        rect: svgWrap,
        stop: svgWrap,
        text: svgWrap
    };
    module.exports = getMarkupWrap;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getReactRootElementInContainer(container) {
        if (!container) return null;
        if (container.nodeType === DOC_NODE_TYPE) return container.documentElement; else return container.firstChild;
    }
    var DOC_NODE_TYPE = 9;
    module.exports = getReactRootElementInContainer;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getUnboundedScrollPosition(scrollable) {
        if (scrollable === window) return {
            x: window.pageXOffset || document.documentElement.scrollLeft,
            y: window.pageYOffset || document.documentElement.scrollTop
        }; else return {
            x: scrollable.scrollLeft,
            y: scrollable.scrollTop
        };
    }
    module.exports = getUnboundedScrollPosition;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isTextInputElement(elem) {
        return elem && ("INPUT" === elem.nodeName && supportedInputTypes[elem.type] || "TEXTAREA" === elem.nodeName);
    }
    var supportedInputTypes = {
        color: !0,
        date: !0,
        datetime: !0,
        "datetime-local": !0,
        email: !0,
        month: !0,
        number: !0,
        password: !0,
        range: !0,
        search: !0,
        tel: !0,
        text: !0,
        time: !0,
        url: !0,
        week: !0
    };
    module.exports = isTextInputElement;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function mapObject(obj, func, context) {
        if (!obj) return null;
        var i = 0, ret = {};
        for (var key in obj) if (obj.hasOwnProperty(key)) ret[key] = func.call(context, obj[key], key, i++);
        return ret;
    }
    module.exports = mapObject;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function memoizeStringOnly(callback) {
        var cache = {};
        return function(string) {
            if (cache.hasOwnProperty(string)) return cache[string]; else return cache[string] = callback.call(this, string);
        };
    }
    module.exports = memoizeStringOnly;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ExecutionEnvironment = __webpack_require__(26), setInnerHTML = function(node, html) {
        node.innerHTML = html;
    };
    if (ExecutionEnvironment.canUseDOM) {
        var testElement = document.createElement("div");
        testElement.innerHTML = " ";
        if ("" === testElement.innerHTML) setInnerHTML = function(node, html) {
            if (node.parentNode) node.parentNode.replaceChild(node, node);
            if (html.match(/^[ \r\n\t\f]/) || "<" === html.charAt(0) && (-1 !== html.indexOf("<noscript") || -1 !== html.indexOf("<script") || -1 !== html.indexOf("<style") || -1 !== html.indexOf("<meta") || -1 !== html.indexOf("<link"))) {
                node.innerHTML = "\ufeff" + html;
                var textNode = node.firstChild;
                if (1 === textNode.data.length) node.removeChild(textNode); else textNode.deleteData(0, 1);
            } else node.innerHTML = html;
        };
    }
    module.exports = setInnerHTML;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function shallowEqual(objA, objB) {
        if (objA === objB) return !0;
        var key;
        for (key in objA) if (objA.hasOwnProperty(key) && (!objB.hasOwnProperty(key) || objA[key] !== objB[key])) return !1;
        for (key in objB) if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) return !1;
        return !0;
    }
    module.exports = shallowEqual;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function userProvidedKeyEscaper(match) {
        return userProvidedKeyEscaperLookup[match];
    }
    function getComponentKey(component, index) {
        if (component && component.props && null != component.props.key) return wrapUserProvidedKey(component.props.key); else return index.toString(36);
    }
    function escapeUserProvidedKey(text) {
        return ("" + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);
    }
    function wrapUserProvidedKey(key) {
        return "$" + escapeUserProvidedKey(key);
    }
    function traverseAllChildren(children, callback, traverseContext) {
        if (null == children) return 0; else return traverseAllChildrenImpl(children, "", 0, callback, traverseContext);
    }
    var ReactInstanceHandles = __webpack_require__(102), ReactTextComponent = __webpack_require__(289), invariant = __webpack_require__(5), SEPARATOR = ReactInstanceHandles.SEPARATOR, userProvidedKeyEscaperLookup = {
        "=": "=0",
        ".": "=1",
        ":": "=2"
    }, userProvidedKeyEscapeRegex = /[=.:]/g, traverseAllChildrenImpl = function(children, nameSoFar, indexSoFar, callback, traverseContext) {
        var subtreeCount = 0;
        if (Array.isArray(children)) for (var i = 0; i < children.length; i++) {
            var child = children[i], nextName = nameSoFar + (nameSoFar ? ":" : SEPARATOR) + getComponentKey(child, i), nextIndex = indexSoFar + subtreeCount;
            subtreeCount += traverseAllChildrenImpl(child, nextName, nextIndex, callback, traverseContext);
        } else {
            var type = typeof children, isOnlyChild = "" === nameSoFar, storageName = isOnlyChild ? SEPARATOR + getComponentKey(children, 0) : nameSoFar;
            if (null == children || "boolean" === type) {
                callback(traverseContext, null, storageName, indexSoFar);
                subtreeCount = 1;
            } else if (children.type && children.type.prototype && children.type.prototype.mountComponentIntoNode) {
                callback(traverseContext, children, storageName, indexSoFar);
                subtreeCount = 1;
            } else if ("object" === type) {
                !0 ? invariant(!children || 1 !== children.nodeType, "traverseAllChildren(...): Encountered an invalid child; DOM elements are not valid children of React components.") : invariant(!children || 1 !== children.nodeType);
                for (var key in children) if (children.hasOwnProperty(key)) subtreeCount += traverseAllChildrenImpl(children[key], nameSoFar + (nameSoFar ? ":" : SEPARATOR) + wrapUserProvidedKey(key) + ":" + getComponentKey(children[key], 0), indexSoFar + subtreeCount, callback, traverseContext);
            } else if ("string" === type) {
                var normalizedText = ReactTextComponent(children);
                callback(traverseContext, normalizedText, storageName, indexSoFar);
                subtreeCount += 1;
            } else if ("number" === type) {
                var normalizedNumber = ReactTextComponent("" + children);
                callback(traverseContext, normalizedNumber, storageName, indexSoFar);
                subtreeCount += 1;
            }
        }
        return subtreeCount;
    };
    module.exports = traverseAllChildren;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createStoreShape(PropTypes) {
        return PropTypes.shape({
            subscribe: PropTypes.func.isRequired,
            dispatch: PropTypes.func.isRequired,
            getState: PropTypes.func.isRequired
        });
    }
    exports.__esModule = !0;
    exports["default"] = createStoreShape;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _invariant = __webpack_require__(181), _invariant2 = _interopRequireDefault(_invariant), _utilsIsPlainObject = __webpack_require__(676), _utilsIsPlainObject2 = _interopRequireDefault(_utilsIsPlainObject), ActionTypes = {
        INIT: "@@redux/INIT"
    };
    exports.ActionTypes = ActionTypes;
    var Store = function() {
        function Store(reducer, initialState) {
            _classCallCheck(this, Store);
            _invariant2["default"]("function" == typeof reducer, "Expected the reducer to be a function.");
            this.state = initialState;
            this.listeners = [];
            this.replaceReducer(reducer);
        }
        Store.prototype.getReducer = function() {
            return this.reducer;
        };
        Store.prototype.replaceReducer = function(nextReducer) {
            this.reducer = nextReducer;
            this.dispatch({
                type: ActionTypes.INIT
            });
        };
        Store.prototype.dispatch = function(action) {
            _invariant2["default"](_utilsIsPlainObject2["default"](action), "Actions must be plain objects. Use custom middleware for async actions.");
            var reducer = this.reducer;
            this.state = reducer(this.state, action);
            this.listeners.forEach(function(listener) {
                return listener();
            });
            return action;
        };
        Store.prototype.getState = function() {
            return this.state;
        };
        Store.prototype.subscribe = function(listener) {
            var listeners = this.listeners;
            listeners.push(listener);
            return function() {
                var index = listeners.indexOf(listener);
                listeners.splice(index, 1);
            };
        };
        return Store;
    }();
    exports["default"] = Store;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _createStore = __webpack_require__(672), _createStore2 = _interopRequireDefault(_createStore), _utilsCompose = __webpack_require__(203), _utilsCompose2 = _interopRequireDefault(_utilsCompose), _utilsCombineReducers = __webpack_require__(675), _utilsCombineReducers2 = _interopRequireDefault(_utilsCombineReducers), _utilsBindActionCreators = __webpack_require__(674), _utilsBindActionCreators2 = _interopRequireDefault(_utilsBindActionCreators), _utilsApplyMiddleware = __webpack_require__(673), _utilsApplyMiddleware2 = _interopRequireDefault(_utilsApplyMiddleware), _utilsComposeMiddleware = __webpack_require__(306), _utilsComposeMiddleware2 = _interopRequireDefault(_utilsComposeMiddleware);
    exports.createStore = _createStore2["default"];
    exports.compose = _utilsCompose2["default"];
    exports.combineReducers = _utilsCombineReducers2["default"];
    exports.bindActionCreators = _utilsBindActionCreators2["default"];
    exports.applyMiddleware = _utilsApplyMiddleware2["default"];
    exports.composeMiddleware = _utilsComposeMiddleware2["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function composeMiddleware() {
        for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) middlewares[_key] = arguments[_key];
        return function(methods) {
            return function(next) {
                return _compose2["default"].apply(undefined, middlewares.map(function(m) {
                    return m(methods);
                }).concat([ next ]));
            };
        };
    }
    exports.__esModule = !0;
    exports["default"] = composeMiddleware;
    var _compose = __webpack_require__(203), _compose2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_compose);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function mapValues(obj, fn) {
        return Object.keys(obj).reduce(function(result, key) {
            result[key] = fn(obj[key], key);
            return result;
        }, {});
    }
    exports.__esModule = !0;
    exports["default"] = mapValues;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = function(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }(_react);
        __webpack_require__(812);
        exports["default"] = _react2["default"].createClass({
            displayName: "ActivateRecommendations",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                handler: _react.PropTypes.func.isRequired
            },
            getTitleText: function(page) {
                switch (page) {
                  case "PROGRAMS":
                    return l("activate_recommendations_title_programs");

                  case "PROTECT":
                    return l("activate_recommendations_title_protect");
                }
            },
            getButtonText: function(page) {
                switch (page) {
                  case "PROGRAMS":
                    return l("activate_recommendations_button_programs");

                  case "PROTECT":
                    return l("activate_recommendations_button_protect");
                }
            },
            render: function() {
                var _props = this.props, page = _props.page, handler = _props.handler;
                return _react2["default"].DOM.table({
                    className: "activate-recommendations"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "activate-recommendations-centered"
                }, _react2["default"].DOM.div({
                    className: "activate-recommendations-text"
                }, this.getTitleText(page)), _react2["default"].DOM.a({
                    className: "activate-recommendations-button cta-blue-btn",
                    href: "#",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        handler();
                    }
                }, this.getButtonText(page)))));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                currentLanguage: state.lang.currentLanguage,
                screenName: state.onboarding.screenName,
                shownScreens: state.onboarding.shownScreens,
                tempShownScreens: state.onboarding.tempShownScreens
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _onboardingActions = __webpack_require__(86), _menuActions = __webpack_require__(38), _appActions = __webpack_require__(55), _utils = __webpack_require__(19), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), _screens = __webpack_require__(310), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _Screen = __webpack_require__(727), _Screen2 = _interopRequireDefault(_Screen);
        __webpack_require__(330);
        var internetExplorerVersion = (0, _getInternetExplorerVersion2["default"])(), OnboardingPopup = _react2["default"].createClass({
            displayName: "OnboardingPopup",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                currentLanguage: _react.PropTypes.string.isRequired,
                screenName: _react.PropTypes.string.isRequired,
                isPopup: _react.PropTypes.bool
            },
            getInitialState: function() {
                var _this = this, _props = this.props, isPopup = _props.isPopup, screenName = _props.screenName;
                if (!isPopup) {
                    screenName = "ANTIVIRUS";
                    this.doTransition();
                }
                if (screenName) this.changeScreen(screenName);
                var getWinHeight = function() {
                    return (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) > 908;
                };
                this.oldCallback = window.onresize;
                window.onresize = function() {
                    _this.oldCallback();
                    _this.setState({
                        largeHeight: getWinHeight()
                    });
                };
                return {
                    largeHeight: getWinHeight()
                };
            },
            componentWillUnmount: function() {
                clearInterval(this.interval);
                window.onresize = this.oldCallback;
            },
            handleAuthorizeClick: function() {
                (0, this.props.authorize)();
            },
            renderOnboardingScreen: function(screenName, currentLanguage) {
                var _this2 = this, _props2 = this.props, closeOnboardingPopup = _props2.closeOnboardingPopup, navigate = _props2.navigate, isRussian = "ru" === currentLanguage, socialText = l("onboarding_screen_social_caption_text"), socialLink = _react2["default"].DOM.a({
                    href: "",
                    className: "onboarding-link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)(isRussian ? "https://vk.com/driverpacksolution" : "https://ru-ru.facebook.com/DriverPack.Solution/");
                    }
                }, isRussian ? "Вконтакте" : "Facebook"), _socialText$replace$s = socialText.replace(/{{.+?}}/g, "|").split("|"), firstText = _socialText$replace$s[0], lastText = _socialText$replace$s[1], socialTextFinal = _react2["default"].DOM.span(null, firstText, socialLink, lastText);
                switch (screenName) {
                  case "ANTIVIRUS":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_antivirus_title"),
                        caption: l("onboarding_screen_antivirus_caption"),
                        mark: l("onboarding_screen_antivirus_mark"),
                        markClass: "color-light-blue",
                        imgName: "antiviruses",
                        imgFormat: ".gif",
                        currentLanguage: currentLanguage,
                        screenName: screenName,
                        hasLikes: "true"
                    });

                  case "SETTINGS":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_settings_title"),
                        caption: l("onboarding_screen_settings_caption"),
                        mark: l("onboarding_screen_settings_mark"),
                        imgName: "settings",
                        payload: _react2["default"].DOM.button({
                            onClick: function(e) {
                                e.stopPropagation();
                                e.preventDefault();
                                closeOnboardingPopup();
                                navigate("SETTINGS");
                            },
                            className: "restart-popup_button onboarding-btn"
                        }, l("onboarding_screen_settings_button_text")),
                        currentLanguage: currentLanguage,
                        screenName: screenName
                    });

                  case "SOFT":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_soft_title"),
                        caption: l("onboarding_screen_soft_caption"),
                        mark: l("onboarding_screen_soft_mark"),
                        imgName: "soft",
                        payload: _react2["default"].DOM.button({
                            onClick: function(e) {
                                e.stopPropagation();
                                e.preventDefault();
                                closeOnboardingPopup();
                                _this2.handleAuthorizeClick();
                            },
                            className: "restart-popup_button onboarding-btn"
                        }, l("onboarding_screen_soft_button_text")),
                        currentLanguage: currentLanguage,
                        screenName: screenName
                    });

                  case "SOCIAL":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_social_title"),
                        caption: "",
                        mark: l("onboarding_screen_social_mark"),
                        imgName: "social",
                        currentLanguage: currentLanguage,
                        screenName: screenName,
                        payload: _react2["default"].DOM.div({
                            className: "onboarding_caption"
                        }, socialTextFinal)
                    });

                  case "SERVICE_MODE":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_service_mode_title"),
                        caption: "",
                        mark: l("onboarding_screen_service_mode_mark"),
                        markClass: "color-green",
                        currentLanguage: currentLanguage,
                        screenName: screenName,
                        hasLikes: "true",
                        payload: _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                            className: "onboarding_caption onboarding_caption-service-mode"
                        }, _react2["default"].DOM.ol(null, _react2["default"].DOM.li(null, _react2["default"].DOM.span({
                            className: "num"
                        }, "1"), l("onboarding_screen_soft_caption_text_1")), _react2["default"].DOM.li(null, _react2["default"].DOM.span({
                            className: "num"
                        }, "2"), l("onboarding_screen_soft_caption_text_2")), _react2["default"].DOM.li(null, _react2["default"].DOM.span({
                            className: "num"
                        }, "3"), l("onboarding_screen_soft_caption_text_3")))))
                    });

                  case "AUTOSTART":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_autostart_title"),
                        caption: l("onboarding_screen_autostart_caption"),
                        mark: l("onboarding_screen_autostart_mark"),
                        markClass: "color-red",
                        imgName: "autostart",
                        currentLanguage: currentLanguage,
                        screenName: screenName,
                        hasLikes: "true"
                    });

                  case "CLEANING":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_cleaning_title"),
                        caption: l("onboarding_screen_cleaning_caption"),
                        mark: l("onboarding_screen_cleaning_mark"),
                        markClass: "color-blue",
                        imgName: "cleaning",
                        currentLanguage: currentLanguage,
                        screenName: screenName,
                        hasLikes: "true"
                    });

                  case "BLOCKED":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_blocked_title"),
                        caption: l("onboarding_screen_blocked_caption"),
                        mark: l("onboarding_screen_blocked_mark"),
                        markClass: "color-brown",
                        imgName: "blocked",
                        currentLanguage: currentLanguage,
                        screenName: screenName,
                        hasLikes: "true"
                    });

                  case "CHECKING":
                    return (0, _Screen2["default"])({
                        title: l("onboarding_screen_checking_title"),
                        caption: l("onboarding_screen_checking_caption"),
                        mark: l("onboarding_screen_checking_mark"),
                        markClass: "color-light-blue",
                        imgName: "checking",
                        currentLanguage: currentLanguage,
                        screenName: screenName,
                        hasLikes: "true"
                    });

                  default:
                    return _react2["default"].DOM.div(null);
                }
            },
            changeScreen: function(key) {
                this.props.setActiveScreen({
                    screenName: key
                });
            },
            doTransition: function() {
                var _this3 = this;
                this.interval = setInterval(function() {
                    var screenIndex = 0;
                    _screens.onBoardingScreensInstallation.forEach(function(type, index) {
                        if (type === _this3.props.screenName) screenIndex = index + 1;
                    });
                    if (screenIndex > _screens.onBoardingScreensInstallation.length - 1) screenIndex = 0;
                    _this3.changeScreen(_screens.onBoardingScreensInstallation[screenIndex]);
                }, 45e3);
            },
            renderContent: function() {
                var _this4 = this, _props3 = this.props, screenName = _props3.screenName, currentLanguage = _props3.currentLanguage, shownScreens = _props3.shownScreens, tempShownScreens = _props3.tempShownScreens, isPopup = _props3.isPopup, doNotShowOnboardingPopups = _props3.doNotShowOnboardingPopups, screens = isPopup ? _screens.onBoardingScreens : _screens.onBoardingScreensInstallation, largeHeight = this.state.largeHeight, screenNames = {
                    SETTINGS: l("onboarding_screen_settings_name"),
                    SOFT: l("onboarding_screen_soft_name"),
                    SOCIAL: l("onboarding_screen_social_name"),
                    ANTIVIRUS: l("onboarding_screen_antivirus_name"),
                    SERVICE_MODE: l("onboarding_screen_service_name"),
                    AUTOSTART: l("onboarding_screen_autostart_name"),
                    CLEANING: l("onboarding_screen_cleaning_name"),
                    BLOCKED: l("onboarding_screen_blocked_name"),
                    CHECKING: l("onboarding_screen_checking_name")
                };
                return _react2["default"].DOM.div({
                    className: "onboarding-wrapper ie-" + internetExplorerVersion + " " + (largeHeight ? "onboarding-fix_large-height" : "")
                }, _react2["default"].DOM.div({
                    className: "onboarding-navigation"
                }, _react2["default"].DOM.ul(null, screens.map(function(type, key) {
                    var shown = shownScreens.includes(type) || tempShownScreens.includes(type);
                    return _react2["default"].DOM.li({
                        key: key,
                        className: (shown ? "lined" : "") + " " + (screenName === type ? "highlighted" : ""),
                        onClick: function(e) {
                            return _this4.changeScreen(type);
                        }
                    }, (0, _Img2["default"])({
                        src: "img/onboarding/done.png",
                        className: "done-img"
                    }), "  ", _react2["default"].DOM.span(null, screenNames[type]), "  ");
                })), !isPopup || _react2["default"].DOM.div({
                    className: "tips-no-show",
                    onClick: doNotShowOnboardingPopups
                }, l("onboarding_screen_do_not_show_popups"))), _react2["default"].DOM.div({
                    className: "onboarding-content"
                }, _react2["default"].DOM.div({
                    className: "onboarding-offsetter"
                }, this.renderOnboardingScreen(screenName, currentLanguage))));
            },
            render: function() {
                var _props4 = this.props, closeOnboardingPopup = _props4.closeOnboardingPopup;
                return _props4.isPopup ? _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                    className: "semi-transparent-overlay"
                }), _react2["default"].DOM.table({
                    className: "restart-popup_popup",
                    onClick: function(e) {
                        if (e.target.className.search("restart-popup_wrapper") > -1) closeOnboardingPopup();
                    }
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "restart-popup_wrapper"
                }, _react2["default"].DOM.div({
                    className: "restart-popup_inner-full"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "restart-popup_close icons-controls",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        closeOnboardingPopup();
                    }
                }, "✖"), this.renderContent())))))) : this.renderContent();
            }
        }), actions = {
            authorize: _appActions.authorize,
            closeOnboardingPopup: _onboardingActions.closeOnboardingPopup,
            navigate: _menuActions.navigate,
            setActiveScreen: _onboardingActions.setActiveScreen,
            doNotShowOnboardingPopups: _onboardingActions.doNotShowOnboardingPopups
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(OnboardingPopup);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.onBoardingScreens = [ "SETTINGS", "SOFT", "SOCIAL" ], exports.onBoardingScreensInstallation = [ "ANTIVIRUS", "SERVICE_MODE", "AUTOSTART", "CLEANING", "BLOCKED", "CHECKING" ];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function _asyncToGenerator(fn) {
            return function() {
                var gen = fn.apply(this, arguments);
                return new Promise(function(resolve, reject) {
                    function step(key, arg) {
                        try {
                            var info = gen[key](arg), value = info.value;
                        } catch (error) {
                            reject(error);
                            return;
                        }
                        if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                            step("next", value);
                        }, function(err) {
                            step("throw", err);
                        });
                    }
                    return step("next");
                });
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _utils = __webpack_require__(19), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(835);
        exports["default"] = _react2["default"].createClass({
            displayName: "ProgramRow",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                program: _react.PropTypes.object.isRequired,
                index: _react.PropTypes.number,
                toggleProgram: _react.PropTypes.func.isRequired,
                installPrograms: _react.PropTypes.func.isRequired,
                confirmProgramInstallation: _react.PropTypes.func,
                zone: _react.PropTypes.string.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            componentDidMount: function() {
                var _this = this;
                setTimeout(function() {
                    if (_this.refs["program-row_icon-img"]) {
                        var rowIconImgNode = _this.refs["program-row_icon-img"].getDOMNode();
                        if (rowIconImgNode && 0 === rowIconImgNode.naturalWidth) rowIconImgNode.src = "img/programs/default-soft.png";
                    }
                }, 1e3);
            },
            render: function() {
                var _props = this.props, program = _props.program, index = _props.index, toggleProgram = _props.toggleProgram, zone = _props.zone, currentLanguage = _props.currentLanguage, isInstalled = program.isInstalled, isPartner = program.isPartner, icon = program.icon, publisher = program.publisher, rating = program.rating, description = program.description, localizedName = program.localizedName, eula = program.eula, policy = program.policy, about = program.about, localizedDescription = void 0, lang = "ru" === currentLanguage ? "ru" : "en";
                localizedDescription = description[lang];
                var isChecked = this.getChecked(program), checkboxId = zone + "-program" + index, checkboxAction = "PROTECT_SECURITY_PROGRAMS" === zone ? "protect checkbox used install " + program.name : "soft checkbox used";
                return _react2["default"].DOM.tr({
                    className: "program-row"
                }, _react2["default"].DOM.td({
                    className: "program-row_checkbox"
                }, _react2["default"].DOM.span(null, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input",
                    id: checkboxId,
                    checked: isChecked,
                    onChange: function(e) {
                        toggleProgram(program.ID, e.target.checked, zone, {
                            eventAction: checkboxAction
                        });
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: checkboxId,
                    className: "custom-control_checkbox-input-label"
                }))), _react2["default"].DOM.td({
                    className: "program-row_icon program-row_icon-is-hidden"
                }, (0, _Img2["default"])({
                    src: icon,
                    width: "40",
                    height: "40",
                    className: "program-row_icon-img",
                    ref: "program-row_icon-img"
                })), _react2["default"].DOM.td({
                    className: "program-row_name",
                    onClick: function(e) {
                        toggleProgram(program.ID, !isChecked, zone);
                    }
                }, _react2["default"].DOM.div({
                    title: program.URL,
                    htmlFor: "program" + index,
                    className: "program-row_name-name"
                }, localizedName ? localizedName[lang] : program.name, window.isAppEsteem && isPartner ? _react2["default"].DOM.sup({
                    className: "program-name-sup-offer bold"
                }, "offer") : null), _react2["default"].DOM.div({
                    className: "program-row_name-publisher"
                }, publisher)), _react2["default"].DOM.td({
                    className: "program-row_rating"
                }, this.renderStars(rating)), _react2["default"].DOM.td({
                    className: "program-row_description"
                }, _react2["default"].DOM.div({
                    className: "program-row_description-text"
                }, localizedDescription, window.isAppEsteem && about ? _react2["default"].DOM.a({
                    href: "#",
                    className: "program-row_description-inline-link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)(about);
                    }
                }, " " + l("programs_about")) : null)), _react2["default"].DOM.td({
                    className: "program-row_license"
                }, eula ? _react2["default"].DOM.a({
                    href: "#",
                    className: "program-row_description-link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)(eula);
                    }
                }, l("programs_eula")) : null, policy ? _react2["default"].DOM.a({
                    href: "#",
                    className: "program-row_description-link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)(policy);
                    }
                }, l("programs_policy")) : null), _react2["default"].DOM.td({
                    className: "program-row_btn"
                }, !isInstalled ? _react2["default"].DOM.button({
                    className: "installed-program_uninstall-single",
                    onClick: this.handleInstallSingleClick
                }, _react2["default"].DOM.span({
                    className: "installed-program_install-single-icon icons-controls"
                }, ""), l("programs_btn_install_single")) : _react2["default"].DOM.div({
                    className: "installed-program_uninstall-single-btn-filler"
                }, _react2["default"].DOM.span({
                    className: "installed-program_install-single-icon icons-controls",
                    style: {
                        fontSize: "12px",
                        color: "#00b4a8"
                    }
                }, "✓"), l("programs_btn_installed_single"))));
            },
            getChecked: function() {
                var _props2 = this.props, program = _props2.program, zone = _props2.zone, isChecked = program.isChecked, isCheckedForProtect = program.isCheckedForProtect;
                return "PROTECT_SECURITY_PROGRAMS" === zone ? isCheckedForProtect : isChecked;
            },
            handleInstallSingleClick: function() {
                var _this2 = this;
                return _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                    var _props3, program, installPrograms, confirmProgramInstallation, zone, onProtect, confirmResult;
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            _props3 = _this2.props, program = _props3.program, installPrograms = _props3.installPrograms, 
                            confirmProgramInstallation = _props3.confirmProgramInstallation, zone = _props3.zone;
                            onProtect = "PROTECT_SECURITY_PROGRAMS" === zone;
                            if (onProtect) _statistics2["default"].event({
                                action: "protect install clicked " + program.name,
                                counters: [ "default", "google.shared" ]
                            }); else _statistics2["default"].event({
                                action: "soft install clicked " + program.name,
                                counters: [ "default", "google.shared" ]
                            });
                            confirmResult = !0;
                            if (!program.confirmPopup) {
                                _context.next = 8;
                                break;
                            }
                            _context.next = 7;
                            return confirmProgramInstallation(program, zone);

                          case 7:
                            confirmResult = _context.sent;

                          case 8:
                            if (confirmResult) installPrograms([ program ], {
                                isSingle: !0
                            });

                          case 9:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, _this2);
                }))();
            },
            renderStars: function(starsCount) {
                for (var stars = [], i = 0; i < 5; i++) stars.push((0, _Img2["default"])({
                    className: "drivers-screen_caption-star-icon",
                    src: i < starsCount ? "img/programs/star-full.png" : "img/programs/star-empty.png"
                }));
                return stars;
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = undefined;
    var _StartFooter = __webpack_require__(747), _StartFooter2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_StartFooter);
    exports["default"] = _StartFooter2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _logs = __webpack_require__(4), _system = __webpack_require__(6), _runExeAsynchronously = __webpack_require__(225), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _driverAllow = __webpack_require__(794), _driverAllow2 = _interopRequireDefault(_driverAllow), _getRandomFromInterval = __webpack_require__(151), _getRandomFromInterval2 = _interopRequireDefault(_getRandomFromInterval), log = (0, 
    _logs.getLogger)("devcon"), Devcon = function() {
        function Devcon() {
            _classCallCheck(this, Devcon);
        }
        Devcon.prototype.tempDir = function() {
            return _system.WshShell.ExpandEnvironmentStrings("%temp%\\drp\\unzip\\drp");
        };
        Devcon.prototype.update = function(is64, deviceId, driver, jobId) {
            if (driver.fake) return new Promise(function(resolve, reject) {
                setTimeout(function() {
                    return resolve(0);
                }, 1e3 * (0, _getRandomFromInterval2["default"])(10, 20));
            });
            var exec = is64 ? "devcon64.exe" : "devcon.exe", inf = this.tempDir() + "\\" + driver.pack + "\\" + driver.directory + driver.inf, re = /^.*(?:(?:VEN|VID).*(?:DEV|PID)|\*|ACPI\\|ROOT\\).*?(?=\\|$)/, match = re.exec(deviceId), hwid = match ? match[0] : deviceId, triggerFile = (0, 
            _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\devcon_" + jobId + ".txt", keys = 'update "' + inf + '" "' + hwid + '"';
            log.info("update: tools\\" + exec + " " + keys, {
                version: exec,
                inf: inf,
                hwid: hwid
            }, "update:tools");
            var driverAllowInterval = setInterval(_driverAllow2["default"], 1e3);
            return (0, _runExeAsynchronously.runExeAsynchronously)({
                exePath: "tools\\" + exec,
                keys: keys,
                triggerFile: triggerFile
            }).then(function(exitCode) {
                clearInterval(driverAllowInterval);
                return exitCode;
            }).caught(function(err) {
                clearInterval(driverAllowInterval);
                log.error("update: failed", {
                    err: err
                }, "update:failed");
                throw err;
            });
        };
        return Devcon;
    }();
    exports["default"] = window.devcon = new Devcon();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _logs = __webpack_require__(4), _aria = __webpack_require__(104), _aria2 = _interopRequireDefault(_aria), _unzip = __webpack_require__(124), _unzip2 = _interopRequireDefault(_unzip), _systemScanner = __webpack_require__(65), _systemScanner2 = _interopRequireDefault(_systemScanner), _download = __webpack_require__(150), log = (0, 
    _logs.getLogger)("external"), External = function() {
        function External(_ref) {
            var url = _ref.url, downloadPath = _ref.downloadPath, dirPath = _ref.dirPath, exePath = _ref.exePath;
            _classCallCheck(this, External);
            this.url = url;
            this.filename = url.split("/").slice(-1)[0];
            this.downloadPath = downloadPath;
            this.zipPath = this.downloadPath + "\\" + this.filename;
            this.dirPath = dirPath;
            this.exePath = this.dirPath + "\\" + exePath;
        }
        External.prototype.Download = function() {
            var exePath = this.exePath, url = this.url, zipPath = this.zipPath, dirPath = this.dirPath, downloadPath = this.downloadPath;
            if (_system.fso.FileExists(exePath)) {
                log.info("already exists " + exePath, {
                    exePath: exePath
                }, "exists");
                return Promise.resolve();
            }
            log.info("downloading " + url, {
                url: url
            }, "downloading");
            return _systemScanner2["default"].waitFor("binaries").then(function() {
                return (0, _download.ensure)({
                    name: "aria2c.exe"
                });
            }).then(function() {
                return _aria2["default"].downloadFiles(downloadPath, [ {
                    link: url
                } ]);
            }).then(function() {
                return (0, _download.ensure)({
                    name: "driverpack-7za.exe",
                    aliases: [ "7za.exe" ]
                });
            }).then(function() {
                log.info("unpacking " + zipPath, {
                    zipPath: zipPath
                }, "unpacking");
                return _unzip2["default"].run7z(dirPath, zipPath);
            }).caught(function(error) {
                log.error("error", {
                    error: error
                }, "error");
            });
        };
        return External;
    }();
    exports["default"] = External;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(str, nstr, count) {
        if (!window.language) return str;
        var ind = Number("function" == typeof window.language.plural && window.language.plural(count) || 0), key = str + "_" + ind, bkey = str + "_1";
        return window.language[key] || window.language[bkey] || key;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function setDriverId(driver) {
        return _extends({}, driver, {
            id: driver.link
        });
    }
    function currentDriverIdDefault(currentDriver) {
        var manufacturer = currentDriver.manufacturer;
        return currentDriver.version.startsWith(_os.OSVersionS) && /microsoft|standard/i.test(manufacturer);
    }
    function updateState(driver, currentDriver) {
        if (!currentDriver || _os.OSVersion < 10 && currentDriverIdDefault(currentDriver)) return _extends({}, driver, {
            state: "install"
        }); else if (currentDriver.date === driver.date || currentDriver.version === driver.version) return _extends({}, driver, {
            state: "installed"
        }); else if (currentDriver.date < driver.date) return _extends({}, driver, {
            state: "update"
        }); else return _extends({}, driver, {
            state: "rollback"
        });
    }
    function compareDrivers(a, b) {
        var diff = states[a.recommendedDriver.state] - states[b.recommendedDriver.state];
        if (0 !== diff) return diff;
        if (a.recommendedDriver["class"] > b.recommendedDriver["class"]) return 1;
        if (a.recommendedDriver["class"] < b.recommendedDriver["class"]) return -1;
        if (a.recommendedDriver.name > b.recommendedDriver.name) return 1;
        if (a.recommendedDriver.name < b.recommendedDriver.name) return -1; else return 0;
    }
    function shouldInstall(recommendedDriver) {
        var hasErrorDevices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;
        if (!(arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1) && [ "chipset" ].includes(recommendedDriver["class"]) && [ 0, 22 ].includes(recommendedDriver.statusCode)) return !1;
        if ("install" === recommendedDriver.state) return !0;
        if ("update" === recommendedDriver.state && !hasErrorDevices) return !0;
        if ("installed" !== recommendedDriver.state && ![ 0, 22 ].includes(recommendedDriver.statusCode)) return !0; else return !1;
    }
    function checkDownloaded(driver) {
        var path = "..\\drivers\\" + driver.pack + ".7z";
        if (!_system.fso.FileExists(path)) driver = Object.assign({}, driver, {
            name: "[Not downloaded] " + driver.name
        });
        return driver;
    }
    function constructDeviceItem(_ref) {
        var item = _ref.item, index = _ref.index, hasErrorDevices = _ref.hasErrorDevices, isLowRanked = (_ref.chosenDriversOnly, 
        _ref.isLowRanked), drpDrivers = item[0], currentDriver = item[1];
        drpDrivers = (0, _uniq2["default"])(drpDrivers, function(driver) {
            return [ driver.link, driver.inf ].join(":");
        });
        drpDrivers = drpDrivers.map(function(driver) {
            return updateState(setDriverId(driver), currentDriver);
        });
        if (!0) drpDrivers = drpDrivers.map(checkDownloaded);
        var recommendedDriver = drpDrivers[0], otherDrivers = drpDrivers;
        recommendedDriver.isRecommended = !isLowRanked;
        recommendedDriver.isChecked = !0;
        var isCheckedByDefault = !isLowRanked && shouldInstall(recommendedDriver, hasErrorDevices);
        currentDriver = currentDriver && _extends({}, currentDriver, {
            id: "current_" + recommendedDriver.id,
            isCurrent: !0
        });
        return {
            id: (isLowRanked ? "low_ranked_" : "") + index + "__" + recommendedDriver.fullDeviceId,
            deviceId: recommendedDriver.fullDeviceId,
            isCheckedByDefault: isCheckedByDefault,
            isChecked: isCheckedByDefault && !_settings2["default"].get("general.selectDriversByDefault").value,
            currentDriver: currentDriver,
            recommendedDriver: recommendedDriver,
            otherDrivers: otherDrivers
        };
    }
    exports.__esModule = !0;
    exports.checkIfDangerous = exports.checkIfRecommended = exports.checkIfCritical = exports.checkIfChosen = undefined;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _system = __webpack_require__(6), _os = __webpack_require__(14), _uniq = __webpack_require__(141), _uniq2 = _interopRequireDefault(_uniq), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), _driversPrograms = __webpack_require__(29), initialState = {
        zeroDriversVisible: !0,
        isAdminMode: !1,
        isNotRecommendedVisible: !1,
        viewOptionsDropdownIsVisible: !1,
        viewOptionsDropdownIsExpanded: !1,
        viewOptions: {
            vendor: !1,
            version: !0,
            date: !0,
            deviceId: !0,
            inf: !1,
            section: !1,
            os: !1
        },
        devices: []
    }, states = {
        install: 1,
        update: 2,
        installed: 3,
        rollback: 4
    }, checkIfChosen = exports.checkIfChosen = function(d) {
        return !!d.recommendedDriver.isChosen;
    }, checkIfCritical = exports.checkIfCritical = function(d) {
        return ![ 0, 22 ].includes(d.recommendedDriver.statusCode);
    }, checkIfRecommended = exports.checkIfRecommended = function(d, hasErrorDevices) {
        return shouldInstall(d.recommendedDriver, hasErrorDevices);
    }, checkIfDangerous = exports.checkIfDangerous = function(d, hasErrorDevices) {
        return shouldInstall(d.recommendedDriver, hasErrorDevices, !0) && !checkIfRecommended(d, hasErrorDevices);
    }, applyMode = function(device, mode, hasErrorDevices) {
        switch (mode) {
          case "none":
            return _extends({}, device, {
                isChecked: !1
            });

          case "chosen":
            return _extends({}, device, {
                isChecked: checkIfChosen(device)
            });

          case "chosen-critical":
            return _extends({}, device, {
                isChecked: checkIfChosen(device) || checkIfCritical(device)
            });

          case "critical":
            return _extends({}, device, {
                isChecked: checkIfCritical(device)
            });

          case "recommended":
            return _extends({}, device, {
                isChecked: checkIfRecommended(device, hasErrorDevices)
            });

          case "all":
            return _extends({}, device, {
                isChecked: checkIfRecommended(device, hasErrorDevices) || checkIfDangerous(device, hasErrorDevices)
            });

          default:
            return device;
        }
    }, devices = void 0, lowRankedDevices = void 0, brokenDevices = void 0, drivers = void 0;
    exports["default"] = function() {
        var _extends2, state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState, action = arguments[1];
        switch (action.type) {
          case "DRIVERS_SCAN_SUCCESS":
          case "DRIVERS_SCAN_FAKE":
            var _action$payload = action.payload, normalDevices = _action$payload.devices, chosenDriversOnly = _action$payload.chosenDriversOnly, lowRanked = _action$payload.lowRanked, broken = _action$payload.broken, hasErrorDevices = normalDevices.some(function(_ref2) {
                return ![ 0, 22 ].includes(_ref2[0][0].statusCode);
            });
            devices = normalDevices.map(function(item, index) {
                return constructDeviceItem({
                    item: item,
                    index: index,
                    hasErrorDevices: hasErrorDevices,
                    chosenDriversOnly: chosenDriversOnly
                });
            }).sort(compareDrivers);
            lowRankedDevices = lowRanked.map(function(item, index) {
                return constructDeviceItem({
                    item: item,
                    index: index,
                    hasErrorDevices: hasErrorDevices,
                    isLowRanked: !0
                });
            }).sort(compareDrivers);
            brokenDevices = broken.map(function(device, index) {
                return _extends({}, device, {
                    id: "broken_" + index + "_" + device.fullDeviceId
                });
            });
            return _extends({}, state, {
                devices: devices,
                lowRankedDevices: lowRankedDevices,
                brokenDevices: brokenDevices
            });

          case "START_SCREEN_TOGGLE_ALL_APPESTEEM_DRIVERS":
            devices = state.devices.map(function(item) {
                if ((0, _driversPrograms.isAppEsteemDriver)(item)) return _extends({}, item, {
                    isChecked: action.payload.isChecked
                }); else return item;
            });
            return _extends({}, state, {
                devices: devices
            });

          case "DRIVERS_EXPAND_DEVICE":
            devices = state.devices.map(function(item) {
                if (item.deviceId === action.id) return _extends({}, item, {
                    isExpanded: action.expanded
                }); else return item;
            });
            brokenDevices = state.brokenDevices.map(function(item) {
                if (item.deviceId === action.id) return _extends({}, item, {
                    isExpanded: action.expanded
                }); else return item;
            });
            lowRankedDevices = state.lowRankedDevices.map(function(item) {
                if (item.deviceId === action.id) return _extends({}, item, {
                    isExpanded: action.expanded
                }); else return item;
            });
            return _extends({}, state, {
                devices: devices,
                brokenDevices: brokenDevices,
                lowRankedDevices: lowRankedDevices
            });

          case "DRIVERS_INFO_OPEN":
            devices = state.devices.map(function(item) {
                if (item.deviceId === action.id) return _extends({}, item, {
                    isInfoOpened: action.index
                }); else if (!1 !== item.isInfoOpened) return _extends({}, item, {
                    isInfoOpened: !1
                }); else return item;
            });
            return _extends({}, state, {
                devices: devices
            });

          case "DRIVERS_DEVICE_DRIVER_SELECTED":
            devices = state.devices.map(function(item) {
                if (item.id === action._deviceId) return _extends({}, item, {
                    otherDrivers: item.otherDrivers.map(function(driver) {
                        return _extends({}, driver, {
                            isChecked: driver.id === action.driverId
                        });
                    })
                }); else return item;
            });
            lowRankedDevices = state.lowRankedDevices.map(function(item) {
                if (item.id === action._deviceId) return _extends({}, item, {
                    otherDrivers: item.otherDrivers.map(function(driver) {
                        return _extends({}, driver, {
                            isChecked: driver.id === action.driverId
                        });
                    })
                }); else return item;
            });
            return _extends({}, state, {
                devices: devices,
                lowRankedDevices: lowRankedDevices
            });

          case "DRIVERS_TOGGLE_DEVICE":
            devices = state.devices.map(function(item) {
                if (item.deviceId === action.id) return _extends({}, item, {
                    isChecked: action.checked
                }); else return item;
            });
            lowRankedDevices = state.lowRankedDevices.map(function(item) {
                if (item.deviceId === action.id) return _extends({}, item, {
                    isChecked: action.checked
                }); else return item;
            });
            return _extends({}, state, {
                devices: devices,
                lowRankedDevices: lowRankedDevices
            });

          case "DRIVERS_TOGGLE_NOT_INSTALLED":
            devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: (0, _driversPrograms.isDeviceDriverNotInstalled)(item) ? action.payload.isChecked : item.isChecked
                });
            });
            return _extends({}, state, {
                devices: devices
            });

          case "DRIVERS_TOGGLE_NOT_UPDATED":
            devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: (0, _driversPrograms.isDeviceDriverNotUpdated)(item) ? action.payload.isChecked : item.isChecked
                });
            });
            return _extends({}, state, {
                devices: devices
            });

          case "DRIVERS_TOGGLE_NOT_RECOMMENDED_VISIBILITY":
            return _extends({}, state, {
                isNotRecommendedVisible: !state.isNotRecommendedVisible
            });

          case "DRIVERS_CHECK_ALL_TOGGLED":
            devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: action.payload.isChecked
                });
            });
            return _extends({}, state, {
                devices: devices
            });

          case "DRIVERS_HIDE_ZERO_DRIVERS":
            return _extends({}, state, {
                zeroDriversVisible: !1
            });

          case "NAVIGATE":
            return _extends({}, state, {
                zeroDriversVisible: !0
            });

          case "DRIVERS_TOGGLE_ADMIN_MODE":
            devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isExpanded: !state.isAdminMode
                });
            });
            brokenDevices = state.brokenDevices.map(function(item) {
                return _extends({}, item, {
                    isExpanded: !state.isAdminMode
                });
            });
            lowRankedDevices = state.lowRankedDevices.map(function(item) {
                return _extends({}, item, {
                    isExpanded: !state.isAdminMode
                });
            });
            return _extends({}, state, {
                isAdminMode: !state.isAdminMode,
                viewOptionsDropdownIsVisible: !state.viewOptionsDropdownIsVisible,
                devices: devices,
                brokenDevices: brokenDevices,
                lowRankedDevices: lowRankedDevices
            });

          case "DRIVERS_EXPAND_VIEW_OPTIONS_DROPDOWN":
            return _extends({}, state, {
                viewOptionsDropdownIsExpanded: action.payload.isExpanded
            });

          case "DRIVERS_TOGGLE_VIEW_OPTION":
            return _extends({}, state, {
                viewOptions: _extends({}, state.viewOptions, (_extends2 = {}, _extends2[action.payload.optionName] = !state.viewOptions[action.payload.optionName], 
                _extends2))
            });

          case "DRIVERS_OPEN_DRIVER_MENU":
            devices = state.devices.map(function(item) {
                drivers = item.otherDrivers.map(function(driver) {
                    return _extends({}, driver, {
                        menuIsOpened: action.payload._deviceId === item.id && driver.id === action.payload.id && action.payload.isOpened
                    });
                });
                return _extends({}, item, {
                    otherDrivers: drivers
                });
            });
            lowRankedDevices = state.lowRankedDevices.map(function(item) {
                drivers = item.otherDrivers.map(function(driver) {
                    return _extends({}, driver, {
                        menuIsOpened: action.payload._deviceId === item.id && driver.id === action.payload.id && action.payload.isOpened
                    });
                });
                return _extends({}, item, {
                    otherDrivers: drivers
                });
            });
            return _extends({}, state, {
                devices: devices,
                lowRankedDevices: lowRankedDevices
            });

          case "SETTINGS_SET_SETTING":
            devices = state.devices;
            if ("general.selectDriversByDefault" === action.payload.keyPath) devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: !action.payload.data.value ? item.isCheckedByDefault : !1
                });
            });
            return _extends({}, state, {
                devices: devices
            });

          case "NEW_ORDER_DRIVERS_INSTALL_ALL_SUCCESS":
          case "NEW_ORDER_PROGRAMS_INSTALL_ALL_SUCCESS":
            return _extends({}, state, {
                isAdminMode: !1
            });

          case "START_SCREEN_INSTALLATION_OPTION_TOGGLED":
            if (!action.payload.defaultFlag) devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: action.payload.deviceSelection[item.deviceId] && !_settings2["default"].get("general.selectDriversByDefault").value
                });
            }); else devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: action.payload.defaultFlag && item.isCheckedByDefault && !_settings2["default"].get("general.selectDriversByDefault").value
                });
            });
            return _extends({}, state, {
                devices: devices
            });

          case "START_SCREEN_SET_INSTALLATION_MODE":
            devices = state.devices.map(function(item) {
                return applyMode(item, action.payload.mode, hasErrorDevices);
            });
            return _extends({}, state, {
                devices: devices
            });

          case "GAMING_ALL_SOFT_NO_DRIVERS":
            devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: !1
                });
            });
            return _extends({}, state, {
                devices: devices
            });

          case "GAMING_DRIVERS_NO_SOFT":
            devices = state.devices.map(function(item) {
                return _extends({}, item, {
                    isChecked: item.isCheckedByDefault && !_settings2["default"].get("general.selectDriversByDefault").value
                });
            });
            return _extends({}, state, {
                devices: devices
            });

          default:
            return state;
        }
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.getModesData = undefined;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _drivers = __webpack_require__(316), initialState = {
        isAppEsteemDriversSelectAllChecked: !0,
        driversIsExpanded: !1,
        programsIsExpanded: !1,
        driversPopoverIsOpened: !1,
        programsPopoverIsOpened: !1,
        diagnosticsPopoverIsOpened: !1
    };
    exports.getModesData = function(devices) {
        var modes = void 0, initialMode = void 0, chosenClass = void 0, chosen = devices.filter(_drivers.checkIfChosen), critical = devices.filter(_drivers.checkIfCritical), hasErrorDevices = critical.length > 0, recommended = devices.filter(function(d) {
            return (0, _drivers.checkIfRecommended)(d, hasErrorDevices);
        }), dangerous = devices.filter(function(d) {
            return (0, _drivers.checkIfDangerous)(d, hasErrorDevices);
        });
        if (chosen.length) {
            chosenClass = chosen[0].recommendedDriver["class"];
            modes = critical.length ? [ "chosen", "chosen-critical" ] : [ "chosen" ];
            initialMode = critical.length ? "chosen-critical" : "chosen";
        } else {
            modes = critical.length ? [ "critical" ] : [];
            initialMode = critical.length ? "critical" : "none";
        }
        if (recommended.length) modes.push("recommended");
        if (dangerous.length) modes.push("all");
        return {
            modeList: [ "none" ].concat(modes),
            initialMode: initialMode,
            chosenClass: chosenClass
        };
    };
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState, action = arguments[1];
        switch (action.type) {
          case "START_SCREEN_TOGGLE_ALL_APPESTEEM_DRIVERS":
            return _extends({}, state, {
                isAppEsteemDriversSelectAllChecked: action.payload.isChecked
            });

          case "START_SCREEN_DRIVERS_POPOVER_OPENED":
            return _extends({}, state, {
                driversPopoverIsOpened: !0,
                programsPopoverIsOpened: !1,
                diagnosticsPopoverIsOpened: !1
            });

          case "START_SCREEN_PROGRAMS_POPOVER_OPENED":
            return _extends({}, state, {
                driversPopoverIsOpened: !1,
                programsPopoverIsOpened: !0,
                diagnosticsPopoverIsOpened: !1
            });

          case "START_SCREEN_DIAGNOSTICS_POPOVER_OPENED":
            return _extends({}, state, {
                driversPopoverIsOpened: !1,
                programsPopoverIsOpened: !1,
                diagnosticsPopoverIsOpened: !0
            });

          case "START_SCREEN_POPOVERS_CLOSED":
            return _extends({}, state, {
                driversPopoverIsOpened: !1,
                programsPopoverIsOpened: !1,
                diagnosticsPopoverIsOpened: !1
            });

          case "START_SCREEN_DRIVERS_EXPANDED":
            return _extends({}, state, {
                driversIsExpanded: !0
            });

          case "START_SCREEN_PROGRAMS_EXPANDED":
            return _extends({}, state, {
                programsIsExpanded: !0
            });

          default:
            return state;
        }
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _SettingsData = __webpack_require__(851), _SettingsData2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_SettingsData);
    exports["default"] = function(l) {
        var res = {};
        Object.entries(_SettingsData2["default"]).forEach(function(_ref) {
            var sectionId = _ref[0], section = _ref[1], sectionTitle = void 0;
            switch (sectionId) {
              case "general":
                sectionTitle = l("settings_common-settings");
                break;

              case "errors":
                sectionTitle = l("settings_error");
                break;

              case "driverSelection":
                sectionTitle = l("settings_algorithm");
            }
            var sectionSettings = {};
            Object.entries(section.settings).forEach(function(_ref2) {
                var settingId = _ref2[0], setting = _ref2[1];
                switch (settingId) {
                  case "language":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_language-title"),
                        caption: l("settings_language-caption"),
                        anchor: l("settings_language-anchor"),
                        href: l("settings_language-href")
                    });
                    break;

                  case "enableLogging":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_logging-title"),
                        caption: l("settings_logging-caption"),
                        href: "custom"
                    });
                    break;

                  case "activateFirebug":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_firebug-title"),
                        caption: l("settings_firebug-caption")
                    });
                    break;

                  case "removeIntallationTempFiles":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_cleanup-title"),
                        caption: l("settings_cleanup-caption")
                    });
                    break;

                  case "enableSoftAndDriverUtilities":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_soft-and-utilities-title"),
                        caption: l("settings_soft-and-utilities-caption"),
                        anchor: l("settings_soft-and-utilities-anchor"),
                        href: l("settings_soft-and-utilities-href")
                    });
                    break;

                  case "enableProtect":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_protect-title"),
                        caption: l("settings_protect-caption"),
                        anchor: l("settings_protect-anchor"),
                        href: l("settings_protect-href")
                    });
                    break;

                  case "enableDiagnostics":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_diagnostics-title"),
                        caption: l("settings_diagnostics-caption")
                    });
                    break;

                  case "startOnExpertMode":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_expert-mode-title"),
                        caption: l("settings_expert-mode-caption")
                    });
                    break;

                  case "minifyMenu":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_minify-menu-title"),
                        caption: l("settings_minify-menu-caption")
                    });
                    break;

                  case "enableAuthorization":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_authorization-title"),
                        caption: l("settings_authorization-caption")
                    });
                    break;

                  case "enableNews":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_news-title"),
                        caption: l("settings_news-caption")
                    });
                    break;

                  case "selectDriversByDefault":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_drivers-title"),
                        caption: l("settings_drivers-caption")
                    });
                    break;

                  case "selectSoftByDefault":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_soft-title"),
                        caption: l("settings_soft-caption")
                    });
                    break;

                  case "hideInstallationBanners":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_banners-title"),
                        caption: l("settings_banners-caption")
                    });
                    break;

                  case "installNotifier":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_notifier-title"),
                        caption: l("settings_notifier-caption"),
                        anchor: l("settings_notifier-anchor"),
                        href: l("settings_notifier-href")
                    });
                    break;

                  case "showBugReport":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_bug-report-title"),
                        caption: l("settings_bug-report-caption"),
                        anchor: l("settings_bug-report-anchor"),
                        href: l("settings_bug-report-href")
                    });
                    break;

                  case "createRestorePoint":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_restore-point-title"),
                        caption: l("settings_restore-point-caption")
                    });
                    break;

                  case "createDriversBackup":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_drivers-backup-title"),
                        caption: l("settings_drivers-backup-caption")
                    });
                    break;

                  case "enableSystemCheck":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_system-check-title"),
                        caption: l("settings_system-check-caption"),
                        anchor: l("settings_system-check-anchor"),
                        href: l("settings_system-check-href")
                    });
                    break;

                  case "sendStatistics":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_statistics-title"),
                        caption: l("settings_statistics-caption"),
                        anchor: l("settings_statistics-anchor"),
                        href: l("settings_statistics-href")
                    });
                    break;

                  case "useMachineLearning":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_machine-learning-title"),
                        caption: l("settings_machine-learning-caption"),
                        anchor: l("settings_machine-learning-anchor"),
                        href: l("settings_machine-learning-href")
                    });
                    break;

                  case "analyzeBsods":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_bsods-title"),
                        caption: l("settings_bsods-caption"),
                        anchor: l("settings_bsods-anchor"),
                        href: l("settings_bsods-href")
                    });
                    break;

                  case "collectUserDrivers":
                    sectionSettings[settingId] = _extends({}, setting, {
                        title: l("settings_collect-drivers-title"),
                        caption: l("settings_collect-drivers-caption"),
                        anchor: l("settings_collect-drivers-anchor"),
                        href: l("settings_collect-drivers-href")
                    });
                    break;

                  case "onboarding":
                    sectionSettings[settingId] = setting;
                }
            });
            var sectionData = _extends({}, section, {
                sectionTitle: sectionTitle,
                settings: sectionSettings
            });
            res[sectionId] = sectionData;
        });
        return res;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _utils = __webpack_require__(19);
    exports["default"] = function() {
        if (!window.Firebug) {
            var prevOnKeyDown = document.onkeydown;
            document.onkeydown = function(e) {
                e = e || window.event;
                if (123 === (e.keyCode ? e.keyCode : e.which)) (0, _utils.inc)("http://update.drp.su/firebug/firebug-lite-debug.js");
                prevOnKeyDown(e);
                document.onkeydown = prevOnKeyDown;
            };
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var usaLocales = [ "US", "CA" ], euLocales = [ "AT", "BE", "BG", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HR", "HU", "IE", "IT", "LT", "LU", "LV", "MT", "NL", "PL", "PT", "RO", "SE", "SI", "SK" ];
    exports["default"] = function() {
        if (window.geoip && window.geoip.geoip_country_code) {
            var countryCode = window.geoip.geoip_country_code.toUpperCase();
            return [].concat(usaLocales, euLocales).includes(countryCode);
        } else return !1;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        exports.__esModule = !0;
        var _getModel = __webpack_require__(153);
        exports["default"] = function() {
            var model = (0, _getModel.getModel)();
            if ("Notebook" !== model.type || "Noname" === model.vendor || "Unknown" === model.name) return l("start_title_default_model"); else return model.vendor + " " + model.name;
        };
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    var _http = __webpack_require__(73), _common = __webpack_require__(105), getContentLength = function(url) {
        return (0, _http.httphead)(url).then(function(_ref) {
            var header = _ref.header;
            return parseInt(header["content-length"]);
        });
    };
    exports["default"] = function() {
        var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee(url) {
            var res;
            return regeneratorRuntime.wrap(function(_context) {
                for (;;) switch (_context.prev = _context.next) {
                  case 0:
                    _context.prev = 0;
                    _context.next = 3;
                    return getContentLength(url);

                  case 3:
                    res = _context.sent;
                    if (!Number.isNaN(res)) {
                        _context.next = 8;
                        break;
                    }
                    throw new Error("Size is NaN");

                  case 8:
                    return _context.abrupt("return", res);

                  case 9:
                    _context.next = 14;
                    break;

                  case 11:
                    _context.prev = 11;
                    _context.t0 = _context["catch"](0);
                    return _context.abrupt("return", (0, _common.makeFailover)(_context.t0, getContentLength, url));

                  case 14:
                  case "end":
                    return _context.stop();
                }
            }, _callee, undefined, [ [ 0, 11 ] ]);
        }));
        return function(_x) {
            return _ref2.apply(this, arguments);
        };
    }();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.fitApplicationWindow = function() {
        try {
            var windowWidth = window.screen.availWidth, windowHeight = window.screen.availHeight;
            window.resizeTo(windowWidth - 1, windowHeight - 1);
            window.resizeTo(windowWidth, windowHeight);
            window.moveTo(0, 0);
        } catch (e) {}
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _utils = __webpack_require__(19);
    exports["default"] = function(path) {
        var command = (0, _utils.wrapInCmd)('explorer "' + path + '"');
        setTimeout(function() {
            _system.WshShell.Run(command, 0, !1);
        }, 0);
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _getModelName = __webpack_require__(321), _getModelName2 = _interopRequireDefault(_getModelName), _prepareDiagDataParam = __webpack_require__(807), _prepareDiagDataParam2 = _interopRequireDefault(_prepareDiagDataParam);
    exports["default"] = function() {
        var params = {
            modelName: (0, _getModelName2["default"])()
        }, metrikaParams = Object.assign({}, params);
        try {
            var diagnosticsData = window.store.getState().diagnostics.data;
            params.diagnostics = diagnosticsData;
            metrikaParams.diagnostics = (0, _prepareDiagDataParam2["default"])(diagnosticsData);
        } catch (error) {
            _logs2["default"].error("Error getting diagnostics data", {
                error: error
            }, "diagnostics:error");
        }
        return {
            params: params,
            metrikaParams: metrikaParams
        };
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.performNotifierAction = exports.getNotifierSource = undefined;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _system = __webpack_require__(6), _menuActions = __webpack_require__(38), _programsActions = __webpack_require__(64), folders = [ _system.AppData + "\\DriverPack Notifier\\temp", _system.AppData + "\\DriverPack Cloud\\temp" ], data = void 0, fileIsChecked = void 0, readFile = function(filePath) {
        var result = void 0;
        if (_system.fso.FileExists(filePath)) try {
            if (Date.now() - _system.fso.GetFile(filePath).DateCreated < 6e5) {
                var stream = _system.fso.OpenTextFile(filePath, 1, !1), text = stream.ReadAll();
                stream.Close();
                result = JSON.parse(text);
            }
            _system.fso.DeleteFile(filePath);
        } catch (err) {}
        return result;
    }, getData = function() {
        if (!fileIsChecked) {
            for (var _iterator = folders, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                var _ref;
                if (_isArray) {
                    if (_i >= _iterator.length) break;
                    _ref = _iterator[_i++];
                } else {
                    _i = _iterator.next();
                    if (_i.done) break;
                    _ref = _i.value;
                }
                data = readFile(_ref + "\\driverpack.json");
                if (data) break;
            }
            fileIsChecked = !0;
        }
        return data;
    };
    exports.getNotifierSource = function() {
        var json = getData();
        return json && json.source;
    }, exports.performNotifierAction = function() {
        var json = getData();
        if (json) if ("open_protect" === json.action) window.store.dispatch((0, _menuActions.navigate)("PROTECT")); else if ("open_programs" === json.action) window.store.dispatch((0, 
        _menuActions.navigate)("PROGRAMS")); else if ("uninstall_single_program" === json.action && json.program) {
            var _json$program = json.program, Program = _json$program.Program, Version = _json$program.Version, state = window.store.getState(), protect = state.protect, apiData = protect.apiData;
            if (apiData) {
                var installedProgram = apiData.find(function(program) {
                    var name = program.name, version = program.version;
                    return name === Program && version === Version;
                });
                if (installedProgram) {
                    window.store.dispatch((0, _menuActions.navigate)("PROTECT"));
                    setTimeout(function() {
                        window.store.dispatch((0, _programsActions.removeInstalledProgram)(_extends({}, installedProgram)));
                    }, 2e3);
                }
            }
        }
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    exports.recoverWifiProfile = exports.saveWifiProfile = undefined;
    var _fso = __webpack_require__(17), _shell = __webpack_require__(16), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _checkInternet = __webpack_require__(155), _ps = __webpack_require__(72), _ps2 = _interopRequireDefault(_ps), _os = __webpack_require__(14), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), internetPath = _specialFolders.AppData + "\\DRPSu\\Internet\\", wifiIntefaceFullPath = internetPath + "WifiInterface.txt", wifiProfileName = "", wifiIntefaceName = "", wifiAdapterGUID = "";
    exports.saveWifiProfile = function() {
        if (_os.OSVersion >= 6) setTimeout(function() {
            try {
                (0, _localFiles.ensurePath)(internetPath);
                _shell.WshShell.Run('cmd /c chcp 65001 | netsh wlan show interface > "' + wifiIntefaceFullPath + '"', 0, !1);
            } catch (err) {}
            setTimeout(function() {
                if (_fso.fso.FileExists(wifiIntefaceFullPath)) {
                    var textStream = void 0, text = void 0;
                    try {
                        textStream = _fso.fso.OpenTextFile(wifiIntefaceFullPath, 1, !0);
                        text = textStream.ReadAll();
                        textStream.Close();
                    } catch (err) {}
                    try {
                        wifiProfileName = text.match(/Profile\s+:\s(.*)/i)[1];
                        wifiIntefaceName = text.match(/Name\s+:\s(.*)/i)[1];
                        wifiAdapterGUID = text.match(/GUID\s+:\s(.*)/i)[1];
                        _shell.WshShell.Run("cmd /c chcp 65001 | netsh wlan export profile name=" + wifiProfileName + " folder=" + internetPath, 0, !1);
                    } catch (err) {}
                }
            }, 3e3);
        }, 0);
    }, exports.recoverWifiProfile = function() {
        if (_os.OSVersion >= 6) (0, _checkInternet.checkInternet)().then(function(internetOn) {
            if (!internetOn && wifiProfileName.length) {
                _statistics2["default"].event({
                    action: "wifi connection lost"
                });
                setTimeout(function() {
                    if (_fso.fso.FileExists(wifiIntefaceFullPath)) {
                        if (_os.OSVersion >= 6) {
                            _ps2["default"].init();
                            if (_os.OSVersion >= 6.2) _ps2["default"].send('$wifi = Get-WmiObject -ComputerName "." -Namespace Root\\StandardCimv2 -class MSFT_NetAdapter | Where-Object {$_.DeviceID -eq "{' + wifiAdapterGUID + '}"}'); else _ps2["default"].send('$wifi = Get-WmiObject -ComputerName "." -Namespace Root\\CIMV2 -class Win32_NetworkAdapter | Where-Object {$_.DeviceID -eq "{' + wifiAdapterGUID + '}"}');
                            _ps2["default"].send("$wifi.Enable()");
                        }
                        setTimeout(function() {
                            _shell.WshShell.Run('netsh interface set interface "' + wifiIntefaceName + '" enabled', 0, !1);
                            _shell.WshShell.Run("netsh wlan add profile filename=" + wifiIntefaceFullPath + "\\" + wifiProfileName, 0, !1);
                            _shell.WshShell.Run("netsh wlan connect name=" + wifiProfileName, 0, !1);
                        }, 3e3);
                        setTimeout(function() {
                            (0, _checkInternet.checkInternet)().then(function(internetOn) {
                                if (internetOn) _statistics2["default"].event({
                                    action: "wifi connection recovered"
                                }); else _statistics2["default"].event({
                                    action: "wifi connection was not recovered"
                                });
                            });
                        }, 1e4);
                    }
                }, 0);
            }
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _statistics = __webpack_require__(10), _statistics2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_statistics);
    _statistics2["default"].allCounters = _statistics2["default"].counters;
    exports["default"] = function(sendStatistics) {
        _statistics2["default"].counters = sendStatistics ? [].concat(_statistics2["default"].allCounters) : _statistics2["default"].allCounters.filter(function(_ref) {
            return "events" === _ref.type;
        });
    };
    module.exports = exports["default"];
}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {
    module.exports = [ {
        id: "bluetooth",
        idAliases: []
    }, {
        id: "cardreader",
        idAliases: []
    }, {
        id: "chipset",
        idAliases: [ "xusb" ]
    }, {
        id: "inputdev",
        idAliases: [ "touchpad" ]
    }, {
        id: "lan",
        idAliases: []
    }, {
        id: "massstorage",
        idAliases: []
    }, {
        id: "modem",
        idAliases: []
    }, {
        id: "monitor",
        idAliases: []
    }, {
        id: "phone",
        idAliases: [ "telephone" ]
    }, {
        id: "printer",
        idAliases: []
    }, {
        id: "sound",
        idAliases: [ "sounds" ]
    }, {
        id: "tvtuner",
        idAliases: [ "tv" ]
    }, {
        id: "video",
        idAliases: [ "videos" ]
    }, {
        id: "webcamera",
        idAliases: [ "webcam" ]
    }, {
        id: "wifi",
        idAliases: [ "wlan-wifi", "wwan-4g" ]
    }, {
        id: "other",
        idAliases: []
    } ];
}, function(module, exports) {
    module.exports = {
        "{4D36E96E-E325-11CE-BFC1-08002BE10318}": [ [ {
            systems: [ "6.1x64" ],
            rank: 3,
            strict: !1,
            sectionId: "none",
            device: {
                id: "MonitorDeviceId",
                vendorId: "MonitorVendorId"
            },
            section: "none",
            dependencies: [],
            deviceId: "MONITOR\\Default_monitor",
            "class": "monitor",
            manufacturer: "Generic driver",
            name: "Generic monitor driver",
            directory: "none",
            version: "6.10.6233.224",
            type: "default",
            pack: "none",
            inf: "none",
            installationHooks: null,
            allow: [],
            disallow: [],
            fullDeviceId: "MonitorFullDeviceId",
            hardwareId: [ "MonitorHWID" ],
            statusCode: 0,
            link: "none",
            date: "2018-01-15",
            fake: !0
        } ], {
            deviceId: "MonitorDeviceId",
            date: "2015-11-19",
            version: "6.1.8601.17514",
            name: "Generic driver",
            manufacturer: "Generic driver",
            inf: "none"
        } ],
        "{4D36E967-E325-11CE-BFC1-08002BE10318}": [ [ {
            systems: [ "6.1x64" ],
            rank: 3,
            strict: !1,
            sectionId: "none",
            device: {
                id: "MassstorageDeviceId",
                vendorId: "MassstorageVendorId"
            },
            section: "none",
            dependencies: [],
            deviceId: "SCSI\\HARDDISK",
            "class": "massstorage",
            manufacturer: "Generic massstorage",
            name: "Generic disk driver",
            directory: "none",
            version: "10.0.10594.0",
            type: "default",
            pack: "none",
            inf: "none",
            installationHooks: null,
            allow: [],
            disallow: [],
            fullDeviceId: "MassstorageFullDeviceId",
            hardwareId: [ "MassstorageHWID" ],
            statusCode: 0,
            link: "none",
            date: "2018-03-05",
            fake: !0
        } ], {
            deviceId: "MassstorageDeviceId",
            date: "2017-02-21",
            version: "10.0.00502.0",
            name: "Generic driver",
            manufacturer: "Generic driver",
            inf: "none"
        } ]
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    __webpack_require__(762);
    __webpack_require__(755);
    __webpack_require__(353);
    __webpack_require__(805);
    __webpack_require__(152);
    __webpack_require__(790);
    __webpack_require__(759);
    var _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _shell = __webpack_require__(16), _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _storeCreator = __webpack_require__(781), _storeCreator2 = _interopRequireDefault(_storeCreator), _Provider = __webpack_require__(778), _Provider2 = _interopRequireDefault(_Provider), _App = __webpack_require__(688), _App2 = _interopRequireDefault(_App), _onboardingActions = __webpack_require__(86), _scanAction = __webpack_require__(686), _onunload = __webpack_require__(212);
    __webpack_require__(758);
    __webpack_require__(753);
    __webpack_require__(783);
    __webpack_require__(754);
    try {
        (0, _onunload.addUnloadListener)(function() {
            try {
                var events = [];
                if (!window.store.getState().app.isActivated) events.push(_logs2["default"].info({
                    action: "application bounced"
                }, {}, "driverPackSolution:bounced"));
                window.store.dispatch((0, _onboardingActions.saveOnboardingSettings)());
                events.push(_logs2["default"].info({
                    action: "application closed"
                }, {}, "driverPackSolution:closed"));
                Promise.all(events)["finally"](function() {
                    _logs2["default"].onunload();
                });
                _shell.WshShell.Run("ping -n 3 127.0.0.1", 0, !0);
            } catch (e) {}
        });
    } catch (e) {}
    window.addUnloadListener = _onunload.addUnloadListener;
    var store = (0, _storeCreator2["default"])();
    window.store = store;
    if (!1) require("./debug")(store);
    var run = function() {
        var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
            var reactRender;
            return regeneratorRuntime.wrap(function(_context) {
                for (;;) switch (_context.prev = _context.next) {
                  case 0:
                    _context.next = 2;
                    return window.loadLanguage();

                  case 2:
                    store.dispatch({
                        type: "CURRENT_LANGUAGE_UPDATED",
                        payload: window.lang
                    });
                    store.dispatch((0, _scanAction.startSystemScan)());
                    reactRender = !1 ? _react2["default"].render : _react2["default"].renderComponent;
                    reactRender((0, _Provider2["default"])({
                        store: store
                    }, function() {
                        return (0, _App2["default"])(null);
                    }), document.getElementById("app"));

                  case 6:
                  case "end":
                    return _context.stop();
                }
            }, _callee, undefined);
        }));
        return function() {
            return _ref.apply(this, arguments);
        };
    }();
    setTimeout(function() {
        run().done();
    }, 100);
}, function(module, exports) {
    module.exports = {
        "MacBook1,1": [ "MacBook" ],
        "MacBook2,1": [ 'MacBook (13" Mid 2007)' ],
        "MacBook3,1": [ 'MacBook (13" Late 2007)' ],
        "MacBook4,1": [ 'MacBook (13" Early 2008)', 'MacBook (13" Late 2008)' ],
        "MacBook5,1": [ 'MacBook (13" Late 2008)' ],
        "MacBook5,2": [ 'MacBook (13" Early 2009)', 'MacBook (13" Mid 2009)' ],
        "MacBook6,1": [ 'MacBook (13" Late 2009)' ],
        "MacBook7,1": [ 'MacBook (13" Mid 2010)' ],
        "MacBook8,1": [ 'MacBook (12" Early 2015)' ],
        "MacBook9,1": [ 'MacBook (12" Early 2016)' ],
        "MacBookAir1,1": [ "MacBook Air (Early 2008)" ],
        "MacBookAir2,1": [ "MacBook Air (Late 2008)", "MacBook Air (Mid 2009)" ],
        "MacBookAir3,1": [ 'MacBook Air (11" Late 2010)' ],
        "MacBookAir3,2": [ 'MacBook Air (13" Late 2010)' ],
        "MacBookAir4,1": [ 'MacBook Air (11" Mid 2011)' ],
        "MacBookAir4,2": [ 'MacBook Air (13" Mid 2011)' ],
        "MacBookAir5,1": [ 'MacBook Air (11" Mid 2012)' ],
        "MacBookAir5,2": [ 'MacBook Air (13" Mid 2012)' ],
        "MacBookAir6,1": [ 'MacBook Air (11" Mid 2013)', 'MacBook Air (11" Early 2014)' ],
        "MacBookAir6,2": [ 'MacBook Air (13" Mid 2013)', 'MacBook Air (13" Early 2014)' ],
        "MacBookAir7,1": [ 'MacBook Air (11" Early 2015)' ],
        "MacBookAir7,2": [ 'MacBook Air (13" Early 2015)' ],
        "MacBookPro1,1": [ 'MacBook Pro (15" Early 2006)' ],
        "MacBookPro1,2": [ 'MacBook Pro (17" Early 2006)' ],
        "MacBookPro2,1": [ 'MacBook Pro (17" Late 2006)' ],
        "MacBookPro2,2": [ 'MacBook Pro (15" Late 2006)' ],
        "MacBookPro3,1": [ 'MacBook Pro (15" Mid 2007)', 'MacBook Pro (17" Late 2007)' ],
        "MacBookPro4,1": [ 'MacBook Pro (17" Early 2008)', 'MacBook Pro (17" Late 2008)' ],
        "MacBookPro5,1": [ 'MacBook Pro (15" Late 2008)', 'MacBook Pro (15" Early 2009)', 'MacBook Pro (15" Mid 2009)' ],
        "MacBookPro5,2": [ 'MacBook Pro (17" Early 2009)', 'MacBook Pro (17" Mid 2009)' ],
        "MacBookPro5,3": [ 'MacBook Pro (15" Mid 2009)' ],
        "MacBookPro5,4": [ 'MacBook Pro (15" Mid 2009)' ],
        "MacBookPro5,5": [ 'MacBook Pro (13" Mid 2009)' ],
        "MacBookPro6,1": [ 'MacBook Pro (17" Mid 2010)' ],
        "MacBookPro6,2": [ 'MacBook Pro (15" Mid 2010)' ],
        "MacBookPro7,1": [ 'MacBook Pro (13" Mid 2010)' ],
        "MacBookPro8,1": [ 'MacBook Pro (13" Early 2011)', 'MacBook Pro (13" Late 2011)' ],
        "MacBookPro8,2": [ 'MacBook Pro (15" Early 2011)', 'MacBook Pro (15" Late 2011)' ],
        "MacBookPro8,3": [ 'MacBook Pro (17" Early 2011)', 'MacBook Pro (17" Late 2011)' ],
        "MacBookPro9,1": [ 'MacBook Pro (15" Mid 2012)' ],
        "MacBookPro9,2": [ 'MacBook Pro (13" Mid 2012)' ],
        "MacBookPro10,1": [ 'MacBook Pro (15" Mid 2012)', 'MacBook Pro (15" Early 2013)' ],
        "MacBookPro10,2": [ 'MacBook Pro (13" Late 2012)', 'MacBook Pro (13" Early 2013)' ],
        "MacBookPro11,1": [ 'MacBook Pro (13" Late 2013)', 'MacBook Pro (13" Mid 2014)' ],
        "MacBookPro11,2": [ 'MacBook Pro (15" Late 2013)', 'MacBook Pro (15" Mid 2014)' ],
        "MacBookPro11,3": [ 'MacBook Pro (15" Late 2013)', 'MacBook Pro (15" Mid 2014)' ],
        "MacBookPro12,1": [ 'MacBook Pro (13" Early 2015)' ],
        "MacBookPro11,4": [ 'MacBook Pro (15 " Mid 2015)' ],
        "MacBookPro11,5": [ 'MacBook Pro (15" Mid 2015)' ]
    };
}, function(module, exports) {
    module.exports = {
        acer: [ "Aspier XXXX", "Aspire XXXX", "Aspire xxxx", "AS XXXX", "ChiefRiver Platform", "Columbia", "Sabine Platform", "None", "T", "Tahoe", "YYpire 5600", "YYpire 5920G", "YYTÿÿÿÿÿÿÿÿÿÿÿÿ", "YYÿÿÿÿÿÿÿÿÿÿÿÿÿ" ],
        advance: [ "Default", "Modelo A" ],
        aquarius: [ "Cmp NS735", "Pro, Std, Elt Series", "Intel powered classmate PC", "NE405" ],
        bgh: [ "BGH e-Nova", "e-Nova", "POSITIVO BGH" ],
        bytespeed: [ "V10IS" ],
        cce: [ "Capella & IbexPeak-M Chipset" ],
        czc: [ "czc" ],
        dell: [ "Vostro 3558tion" ],
        digitron: [ "B14HM21" ],
        dixonsxp: [ "00000000000000000", "Calistoga & ICH7M Chipset", "Crestline+ICH8M" ],
        dns: [ "ChiefRiver Platform" ],
        "epson-direct": [ "Endeavor NJ2100" ],
        fujitsu: [ "00000000", "0000000000", "00000000000000000" ],
        giada: [ "CedarTrail Platform" ],
        goclever: [ "INSIGNIA 800 WIN" ],
        google: [ "Falco", "Peppy" ],
        hasee: [ "Calistoga & ICH7M Chipset" ],
        "high-tech": [ "Shift" ],
        hp: [ "0", "000", "00000000000000000000000000000000", "1000", "Pavilion dvxxxx", "ProBook -----" ],
        hyrican: [ "VN800" ],
        iball: [ "V8T" ],
        intel: [ "Calpella Platform", "CedarTrail", "Cedar Trail", "CedarTrail Platform", "ChiefRiver Platform", "HuronRiver Platform", "OakTrail Platform", "Pine Trail - M", "Pine Trail - M CRB", "SandyBridge Platform", "SharkBay Platform", "Skylake Platform" ],
        isonic: [ "ISO-91010", "ISO-A1005" ],
        "jp-sa-couto": [ "Intel powered classmate PC" ],
        jumper: [ "JUMPER" ],
        "k-systems": [ "1234", "Crestline+ICH8M" ],
        kraftway: [ "GEG" ],
        lenovo: [ "00000000000000000000000000000000", "0.1", "C-Notebook XXXX", "Convertible", "INVALID", "Product", "Rev 1", "Rev 1.0", 'ThinkPad Edge 13""IAL#', "ÿÿÿÿÿÿÿU410ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ", "ÿÿÿÿÿÿÿZ580ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" ],
        "llc-avangard": [ "Expertline notebook" ],
        maguay: [ "MYWAY" ],
        medion: [ "To be filled by O.E.M." ],
        microboard: [ "Cantiga & ICH9M Chipset", "T100" ],
        mipi: [ "Mini PC" ],
        msi: [ "Calpella platform", "To be filled by O.E.M." ],
        mugen: [ "mugen" ],
        nec: [ "00000000000000000000000" ],
        neo: [ "Basic", "Elan L5750 Series", "NeoNBK" ],
        noname: [ "223 Series", "255/259 Series", "A01 platform", "BayTrail", "BONEFISH", "C93i", "CherryTrail", "ChiefRiver Platform", "Default string", "E450", "EM200", "Generic", "H34", "KENNEX", "KN1", "LM1W", "M31EI Series", "Nobilis", "None", "Notebook", "N/A", "ODM", "oem", "Parallels Virtual Platform", "Patriot", "PCSMART", "Positivo BGH", "Pro Tab 7", "PS-3315", "PS-3316", "S16", "S62H", "S96S", "Spring Peak", "To Be Filled By O.E.M.", "To Be Filled by O.E.M.", "To be filled by O.E.M.", "Turbo X", "V5", "W115", "X20IA Series", "Z96FM", "Z96J", "Z96JS", "Z97V" ],
        "notion-ink": [ "CN8I8955G" ],
        "packard-bell": [ "00000000000000000000000" ],
        "pc-smart": [ "LAPTOP" ],
        philco: [ "TO be filled by O.E.M" ],
        positivo: [ "POS" ],
        quanta: [ "00000000000000000" ],
        render: [ "Pinetrail", "Pine trail" ],
        rm: [ "RM" ],
        samsung: [ "3", "Aquila Slim Platform", "Galaxy TabPro S", "Mobile System" ],
        sony: [ "VAIO Reserved" ],
        tcl: [ "T51" ],
        topstar: [ "Cantiga & ICH9M Chipset" ],
        toshiba: [ "000000", "00000000000000000000", "SandyBridge Platform", "To Be Filled By O.E.M.", "To be filled by O.E.M." ],
        vestel: [ "Calistoga & ICH7M Chipset" ],
        yekani: [ "Intel (R) Education Tablet" ],
        zet: [ "To be filled by O.E.M." ],
        zoostorm: [ "Cantiga & ICH9M Chipset" ]
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _os = __webpack_require__(14), _registry = __webpack_require__(56), _getNotebookVendor = __webpack_require__(127), _getNotebookVendor2 = _interopRequireDefault(_getNotebookVendor), _getNotebookModel = __webpack_require__(220), _getNotebookModel2 = _interopRequireDefault(_getNotebookModel);
    (0, _registry.RegWrite)("HKLM\\SYSTEM\\CurrentControlSet\\services\\eventlog\\Microsoft-Windows-Diagnostics-Performance/Operational\\", "");
    var parseWinDate = function(date) {
        return new Date(parseInt(date.slice(0, 4), 10), parseInt(date.slice(4, 6), 10) - 1, parseInt(date.slice(6, 8), 10), parseInt(date.slice(8, 10), 10), parseInt(date.slice(10, 12), 10), parseInt(date.slice(12, 14), 10));
    }, convertToWinDate = function(date) {
        return date.getFullYear() + "" + ("0" + (date.getMonth() + 1)).slice(-2) + ("0" + date.getDate()).slice(-2) + ("0" + date.getHours()).slice(-2) + ("0" + date.getMinutes()).slice(-2) + ("0" + date.getSeconds()).slice(-2) + "." + ("00000" + date.getMilliseconds()).slice(-6) + "+" + date.getTimezoneOffset();
    };
    exports["default"] = {
        Computer: {
            Summary: {
                type: "object",
                targets: [ "diagnostics", "dashboard" ],
                groups: [ {
                    name: "Computer",
                    fields: [ {
                        name: "Manufacturer",
                        wmi: {
                            source: "Win32_ComputerSystemProduct",
                            fields: [ "Vendor" ]
                        },
                        format: function(_ref) {
                            var Vendor = _ref.Vendor;
                            return (0, _getNotebookVendor2["default"])(Vendor);
                        }
                    }, {
                        name: "Model",
                        wmi: {
                            source: "Win32_ComputerSystemProduct",
                            fields: [ "Vendor", "Name", "Version" ]
                        },
                        format: function(_ref2) {
                            var Vendor = _ref2.Vendor, Name = _ref2.Name, Version = _ref2.Version;
                            return (0, _getNotebookModel2["default"])({
                                Vendor: (0, _getNotebookVendor2["default"])(Vendor),
                                Name: Name,
                                Version: Version
                            });
                        }
                    }, {
                        name: "Computer Type",
                        wmi: {
                            source: "Win32_ComputerSystem",
                            fields: [ "SystemType" ]
                        }
                    }, {
                        name: "Operating System",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "Caption" ]
                        }
                    }, {
                        name: "OS Service Pack",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "CSDVersion" ]
                        }
                    }, {
                        name: "Internet Explorer",
                        reg: {
                            source: [ "HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\svcVersion", "HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\Version" ]
                        }
                    }, {
                        name: "Computer Name",
                        wmi: {
                            source: "Win32_ComputerSystem",
                            fields: [ "Caption" ]
                        }
                    }, {
                        name: "User Name",
                        wmi: {
                            source: "Win32_ComputerSystem",
                            fields: [ "UserName" ]
                        }
                    }, {
                        name: "Logon Domain",
                        wmi: {
                            source: "Win32_ComputerSystem",
                            fields: [ "Domain" ]
                        }
                    }, {
                        name: "Date / Time",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "LocalDateTime" ]
                        },
                        format: function(_ref3) {
                            var LocalDateTime = _ref3.LocalDateTime;
                            return parseWinDate(LocalDateTime).toString();
                        }
                    } ]
                }, {
                    name: "Temperature",
                    fields: [ {
                        name: "CPU Temperature",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "ROOT\\OpenHardwareMonitor:Sensor",
                            fields: [ "Value", "Identifier" ],
                            filter: function(_ref4) {
                                return /\/(intel|amd|generic)cpu\/.*?\/temperature\/.*?/.test(_ref4.Identifier);
                            }
                        },
                        format: function(_ref5) {
                            var Value = _ref5.Value, formatedValue = Math.ceil(Value);
                            if (formatedValue >= 0) return formatedValue + " °C"; else return null;
                        }
                    }, {
                        name: "GPU Temperature",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "ROOT\\OpenHardwareMonitor:Sensor",
                            fields: [ "Value", "Name", "SensorType" ],
                            filter: function(_ref6) {
                                var Name = _ref6.Name, SensorType = _ref6.SensorType;
                                return 0 === Name.indexOf("GPU") && "Temperature" === SensorType;
                            }
                        },
                        format: function(_ref7) {
                            var Value = _ref7.Value, formatedValue = Math.ceil(Value);
                            if (formatedValue >= 0) return formatedValue + " °C"; else return null;
                        }
                    }, {
                        name: "Motherboard Temperature",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "ROOT\\OpenHardwareMonitor:Sensor",
                            fields: [ "Value", "Name", "SensorType" ],
                            filter: function(_ref8) {
                                var Name = _ref8.Name, SensorType = _ref8.SensorType;
                                return 0 === Name.indexOf("System") && "Temperature" === SensorType;
                            }
                        },
                        format: function(_ref9) {
                            var Value = _ref9.Value, formatedValue = Math.ceil(Value);
                            if (formatedValue >= 0) return formatedValue + " °C"; else return null;
                        }
                    }, {
                        name: "HDD Temperature",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "ROOT\\OpenHardwareMonitor:Sensor",
                            fields: [ "Value", "Name", "SensorType" ],
                            filter: function(_ref10) {
                                var Name = _ref10.Name, SensorType = _ref10.SensorType;
                                return 0 === Name.indexOf("Temperature") && "Temperature" === SensorType;
                            }
                        },
                        format: function(_ref11) {
                            var Value = _ref11.Value, formatedValue = Math.ceil(Value);
                            if (formatedValue >= 0) return formatedValue + " °C"; else return null;
                        }
                    } ]
                }, {
                    name: "Motherboard",
                    fields: [ {
                        name: "CPU Type",
                        wmi: {
                            source: "Win32_Processor",
                            fields: [ "Name", "MaxClockSpeed", "NumberOfCores" ]
                        },
                        format: function(_ref12) {
                            return _ref12.Name + ", " + _ref12.MaxClockSpeed + " MHz, " + _ref12.NumberOfCores + "-core";
                        }
                    }, {
                        name: "Motherboard Name",
                        wmi: {
                            source: "Win32_BaseBoard",
                            fields: [ "Name" ]
                        }
                    }, {
                        name: "System Memory",
                        wmi: {
                            source: "Win32_ComputerSystem",
                            fields: [ "TotalPhysicalMemory" ]
                        },
                        format: function(_ref13) {
                            var TotalPhysicalMemory = _ref13.TotalPhysicalMemory;
                            return Math.ceil(parseFloat(TotalPhysicalMemory) / 1024 / 1024) + " MB";
                        }
                    }, {
                        name: "BIOS Type",
                        wmi: {
                            source: "Win32_BIOS",
                            fields: [ "SMBIOSBIOSVersion", "ReleaseDate" ]
                        },
                        format: function(_ref14) {
                            var SMBIOSBIOSVersion = (_ref14.Manufacturer, _ref14.SMBIOSBIOSVersion), ReleaseDate = _ref14.ReleaseDate;
                            return SMBIOSBIOSVersion + " (" + [ ReleaseDate.slice(0, 4), ReleaseDate.slice(4, 6), ReleaseDate.slice(6, 8) ].join(".") + ")";
                        }
                    } ]
                }, {
                    name: "Display",
                    fields: [ {
                        name: "Video Adapter",
                        targets: [ "check" ],
                        multi: !0,
                        wmi: {
                            source: "Win32_VideoController",
                            fields: [ "Name", "AdapterRAM", "ConfigManagerErrorCode" ]
                        },
                        format: function(_ref15) {
                            var Name = _ref15.Name, AdapterRAM = _ref15.AdapterRAM, ConfigManagerErrorCode = _ref15.ConfigManagerErrorCode, res = Name;
                            if (AdapterRAM > 0) res += " (" + Math.ceil(parseFloat(AdapterRAM) / 1024 / 1024) + " MB)";
                            if (ConfigManagerErrorCode) res += " (Status: ERROR)";
                            return res;
                        }
                    }, {
                        name: "Monitor",
                        multi: !0,
                        wmi: {
                            source: "Win32_DesktopMonitor",
                            fields: [ "Name", "MonitorType" ]
                        },
                        format: function(_ref16) {
                            var Name = _ref16.Name;
                            return _ref16.MonitorType + " " + Name;
                        }
                    } ]
                }, {
                    name: "Multimedia",
                    fields: [ {
                        name: "Audio Adapter",
                        targets: [ "check" ],
                        multi: !0,
                        wmi: {
                            source: "Win32_SoundDevice",
                            fields: [ "Name", "ConfigManagerErrorCode" ]
                        },
                        format: function(_ref17) {
                            var Name = _ref17.Name, ConfigManagerErrorCode = _ref17.ConfigManagerErrorCode, res = Name;
                            if (ConfigManagerErrorCode) res += " (Status: ERROR)";
                            return res;
                        }
                    } ]
                }, {
                    name: "Storage",
                    fields: [ {
                        name: "IDE Controller",
                        multi: !0,
                        wmi: {
                            source: "Win32_IDEController",
                            fields: [ "Caption" ]
                        }
                    }, {
                        name: "Disk Drive",
                        multi: !0,
                        wmi: {
                            source: "Win32_DiskDrive",
                            fields: [ "Caption", "Status" ]
                        },
                        format: function(_ref18) {
                            return _ref18.Caption + " (SMART " + _ref18.Status + ")";
                        }
                    }, {
                        name: "Optical Drive",
                        multi: !0,
                        wmi: {
                            source: "Win32_CDROMDrive",
                            fields: [ "Caption" ]
                        }
                    } ]
                }, {
                    name: "Partitions",
                    fields: [ {
                        name: "Partition",
                        targets: [ "targeting" ],
                        multi: !0,
                        wmi: {
                            source: "Win32_LogicalDisk",
                            fields: [ "Name", "FileSystem", "Size", "FreeSpace" ]
                        },
                        format: function(_ref19) {
                            var Name = _ref19.Name, FileSystem = _ref19.FileSystem, Size = _ref19.Size, FreeSpace = _ref19.FreeSpace;
                            return Name + " (" + FileSystem + ") " + Math.ceil(parseFloat(Size) / 1024 / 1024 / 1024 * 100) / 100 + " GB (" + Math.ceil(parseFloat(FreeSpace) / 1024 / 1024 / 1024 * 100) / 100 + " GB free)";
                        }
                    } ]
                }, {
                    name: "Input",
                    fields: [ {
                        name: "Keyboard",
                        multi: !0,
                        wmi: {
                            source: "Win32_Keyboard",
                            fields: [ "Description" ]
                        }
                    }, {
                        name: "Mouse",
                        multi: !0,
                        wmi: {
                            source: "Win32_PointingDevice",
                            fields: [ "Description" ]
                        }
                    } ]
                }, {
                    name: "Network",
                    fields: [ {
                        name: "Network Adapter",
                        targets: [ "check" ],
                        multi: !0,
                        wmi: {
                            source: "Win32_NetworkAdapter",
                            fields: [ "Description", "MACAddress", "PhysicalAdapter", "ConfigManagerErrorCode" ],
                            filter: function(_ref20) {
                                return !1 !== _ref20.PhysicalAdapter;
                            }
                        },
                        format: function(_ref21) {
                            var Description = _ref21.Description, MACAddress = _ref21.MACAddress, ConfigManagerErrorCode = _ref21.ConfigManagerErrorCode, res = Description;
                            if (MACAddress) res += " (MAC " + MACAddress + ")";
                            if (ConfigManagerErrorCode && 22 !== ConfigManagerErrorCode) res += " (Status: ERROR)";
                            return res;
                        }
                    } ]
                }, {
                    name: "Peripherals",
                    fields: [ {
                        name: "Printer",
                        multi: !0,
                        wmi: {
                            source: "Win32_Printer",
                            fields: [ "Name" ]
                        }
                    }, {
                        name: "USB Controller",
                        multi: !0,
                        wmi: {
                            source: "Win32_USBController",
                            fields: [ "Name" ]
                        }
                    }, {
                        name: "Battery",
                        multi: !0,
                        wmi: {
                            source: "Win32_Battery",
                            fields: [ "Name" ]
                        }
                    } ]
                }, {
                    name: "DMI",
                    fields: [ {
                        name: "DMI BIOS Vendor",
                        wmi: {
                            source: "Win32_BIOS",
                            fields: [ "Manufacturer" ]
                        }
                    }, {
                        name: "DMI BIOS Version",
                        wmi: {
                            source: "Win32_BIOS",
                            fields: [ "SMBIOSBIOSVersion" ]
                        }
                    }, {
                        name: "DMI System Manufacturer",
                        wmi: {
                            source: "Win32_ComputerSystemProduct",
                            fields: [ "Vendor" ]
                        }
                    }, {
                        name: "DMI System Product",
                        wmi: {
                            source: "Win32_ComputerSystemProduct",
                            fields: [ "Name" ]
                        }
                    }, {
                        name: "DMI System Version",
                        wmi: {
                            source: "Win32_ComputerSystemProduct",
                            fields: [ "Version" ]
                        }
                    }, {
                        name: "DMI System Serial Number",
                        wmi: {
                            source: "Win32_ComputerSystemProduct",
                            fields: [ "IdentifyingNumber" ]
                        }
                    }, {
                        name: "DMI System UUID",
                        wmi: {
                            source: "Win32_ComputerSystemProduct",
                            fields: [ "UUID" ]
                        }
                    }, {
                        name: "DMI Motherboard Manufacturer",
                        wmi: {
                            source: "Win32_Baseboard",
                            fields: [ "Manufacturer" ]
                        }
                    }, {
                        name: "DMI Motherboard Product",
                        wmi: {
                            source: "Win32_Baseboard",
                            fields: [ "Product" ]
                        }
                    }, {
                        name: "DMI Motherboard Version",
                        wmi: {
                            source: "Win32_Baseboard",
                            fields: [ "Version" ]
                        }
                    }, {
                        name: "DMI Motherboard Serial Number",
                        wmi: {
                            source: "Win32_Baseboard",
                            fields: [ "SerialNumber" ]
                        }
                    }, {
                        name: "DMI Chassis Manufacturer",
                        wmi: {
                            source: "Win32_SystemEnclosure",
                            fields: [ "Manufacturer" ]
                        }
                    }, {
                        name: "DMI Chassis Version",
                        wmi: {
                            source: "Win32_SystemEnclosure",
                            fields: [ "Version" ]
                        }
                    }, {
                        name: "DMI Chassis Serial Number",
                        wmi: {
                            source: "Win32_SystemEnclosure",
                            fields: [ "SerialNumber" ]
                        }
                    }, {
                        name: "DMI Chassis Asset Tag",
                        wmi: {
                            source: "Win32_SystemEnclosure",
                            fields: [ "SMBIOSAssetTag" ]
                        }
                    }, {
                        name: "DMI Chassis Type",
                        wmi: {
                            source: "Win32_SystemEnclosure",
                            fields: [ "ChassisTypes" ]
                        },
                        format: function(_ref22) {
                            var ChassisTypes = _ref22.ChassisTypes;
                            if (ChassisTypes) switch (ChassisTypes[0]) {
                              case 1:
                                return "Other";

                              case 2:
                                return "Unknown";

                              case 3:
                                return "Desktop";

                              case 4:
                                return "Low Profile Desktop";

                              case 5:
                                return "Pizza Box";

                              case 6:
                                return "Mini Tower";

                              case 7:
                                return "Tower";

                              case 8:
                                return "Portable";

                              case 9:
                                return "Laptop";

                              case 10:
                                return "Notebook";

                              case 11:
                                return "Hand Held";

                              case 12:
                                return "Docking Station";

                              case 13:
                                return "All in One";

                              case 14:
                                return "Sub Notebook";

                              case 15:
                                return "Space-Saving";

                              case 16:
                                return "Lunch Box";

                              case 17:
                                return "Main System Chassis";

                              case 18:
                                return "Expansion Chassis";

                              case 19:
                                return "SubChassis";

                              case 20:
                                return "Bus Expansion Chassis";

                              case 21:
                                return "Peripheral Chassis";

                              case 22:
                                return "Storage Chassis";

                              case 23:
                                return "Rack Mount Chassis";

                              case 24:
                                return "Sealed-Case PC";
                            }
                            return "";
                        }
                    } ]
                } ]
            },
            "Power Management": {
                type: "object",
                targets: [ "diagnostics", "dashboard" ],
                groups: [ {
                    name: "Power Management Properties",
                    fields: [ {
                        name: "Current Power Source",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "ROOT\\wmi:BatteryStatus",
                            fields: [ "PowerOnline" ]
                        },
                        format: function(_ref23) {
                            return !1 === _ref23.PowerOnline ? "Battery" : "AC Line";
                        }
                    }, {
                        name: "Battery Status",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "Win32_Battery",
                            fields: [ "EstimatedChargeRemaining", "BatteryStatus" ]
                        },
                        format: function(_ref24) {
                            var EstimatedChargeRemaining = _ref24.EstimatedChargeRemaining, BatteryStatus = _ref24.BatteryStatus, res = EstimatedChargeRemaining + "%";
                            switch (BatteryStatus) {
                              case 1:
                                return res + " (Other)";

                              case 2:
                                return res + " (Unknown)";

                              case 3:
                                return res + " (Fully Charged)";

                              case 4:
                                return res + " (Low)";

                              case 5:
                                return res + " (Critical)";

                              case 6:
                                return res + " (Charging)";

                              case 7:
                                return res + " (Charging and High)";

                              case 8:
                                return res + " (Charging and Low)";

                              case 9:
                                return res + " (Charging and Critical)";

                              case 10:
                                return res + " (Undefined)";

                              case 11:
                                return res + " (Partially Charged)";
                            }
                            return res;
                        }
                    }, {
                        name: "Remaining Battery Lifetime",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "Win32_Battery",
                            fields: [ "EstimatedRunTime" ]
                        },
                        format: function(_ref25) {
                            var EstimatedRunTime = _ref25.EstimatedRunTime;
                            if (parseInt(EstimatedRunTime, 10) > 7200) return "Unknown"; else return EstimatedRunTime + " minutes";
                        }
                    } ]
                }, {
                    name: "Battery Properties",
                    fields: [ {
                        name: "Device Name",
                        wmi: {
                            source: "Win32_Battery",
                            fields: [ "Name" ]
                        }
                    }, {
                        name: "Manufacturer",
                        wmi: {
                            source: "Win32_PortableBattery",
                            fields: [ "Manufacturer" ]
                        }
                    }, {
                        name: "Unique ID",
                        wmi: {
                            source: "Win32_Battery",
                            fields: [ "DeviceID" ]
                        }
                    }, {
                        name: "Battery Type",
                        wmi: {
                            source: "Win32_Battery",
                            fields: [ "Chemistry" ]
                        },
                        format: function(_ref26) {
                            switch (_ref26.Chemistry) {
                              case 1:
                                return "Other";

                              case 2:
                                return "Unknown";

                              case 3:
                                return "Lead Acid";

                              case 4:
                                return "Nickel Cadmium";

                              case 5:
                                return "Nickel Metal Hydride";

                              case 6:
                                return "Lithium-ion";

                              case 7:
                                return "Zinc air";

                              case 8:
                                return "Lithium Polymer";
                            }
                            return "";
                        }
                    }, {
                        name: "Designed Capacity",
                        wmi: {
                            source: "ROOT\\wmi:BatteryStaticData",
                            fields: [ "DesignedCapacity" ]
                        },
                        format: function(_ref27) {
                            return _ref27.DesignedCapacity + " mWh";
                        }
                    }, {
                        name: "Fully Charged Capacity",
                        wmi: {
                            source: "ROOT\\wmi:BatteryFullChargedCapacity",
                            fields: [ "FullChargedCapacity" ]
                        },
                        format: function(_ref28) {
                            return _ref28.FullChargedCapacity + " mWh";
                        }
                    }, {
                        name: "Current Capacity",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "ROOT\\wmi:BatteryStatus",
                            fields: [ "RemainingCapacity" ]
                        },
                        format: function(_ref29) {
                            return _ref29.RemainingCapacity + " mWh";
                        }
                    }, {
                        name: "Battery Voltage",
                        wmi: {
                            source: "ROOT\\wmi:BatteryStatus",
                            fields: [ "Voltage" ]
                        },
                        format: function(_ref30) {
                            var Voltage = _ref30.Voltage;
                            return parseInt(Voltage, 10) / 1e3 + " V";
                        }
                    }, {
                        name: "Power State",
                        wmi: {
                            source: "ROOT\\wmi:BatteryStatus",
                            fields: [ "PowerOnline", "Charging", "Discharging" ]
                        },
                        format: function(_ref31) {
                            var PowerOnline = _ref31.PowerOnline, Charging = _ref31.Charging, Discharging = _ref31.Discharging, res = [];
                            if (PowerOnline) res.push("AC Line");
                            if (Charging) res.push("Charging");
                            if (Discharging) res.push("Discharging");
                            return res.join(", ");
                        }
                    } ]
                } ]
            }
        },
        "Operating System": {
            "Operating System": {
                type: "object",
                targets: [ "diagnostics", "dashboard" ],
                groups: [ {
                    name: "Operating System Properties",
                    fields: [ {
                        name: "OS Name",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "Caption" ]
                        }
                    }, {
                        name: "OS Language",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "MUILanguages" ]
                        },
                        format: function(_ref32) {
                            return _ref32.MUILanguages.join(",");
                        }
                    }, {
                        name: "OS Kernel Type",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "BuildType", "OSArchitecture" ]
                        },
                        format: function(_ref33) {
                            return _ref33.BuildType + " (" + _ref33.OSArchitecture + ")";
                        }
                    }, {
                        name: "OS Version",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "Version" ]
                        }
                    }, {
                        name: "OS Service Pack",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "CSDVersion" ]
                        }
                    }, {
                        name: "OS Installation Date",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "InstallDate" ]
                        },
                        format: function(_ref34) {
                            var InstallDate = _ref34.InstallDate;
                            return parseWinDate(InstallDate).toString();
                        }
                    }, {
                        name: "OS Root",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "WindowsDirectory" ]
                        }
                    } ]
                }, {
                    name: "License Information",
                    fields: [ {
                        name: "Registered Owner",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "RegisteredUser" ]
                        }
                    }, {
                        name: "Registered Organization",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "Organization" ]
                        }
                    }, {
                        name: "Product ID",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "SerialNumber" ]
                        }
                    } ]
                }, {
                    name: "Current Session",
                    fields: [ {
                        name: "Computer Name",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "CSName" ]
                        }
                    }, {
                        name: "User Name",
                        wmi: {
                            source: "Win32_ComputerSystem",
                            fields: [ "UserName" ]
                        }
                    }, {
                        name: "Logon Domain",
                        wmi: {
                            source: "Win32_ComputerSystem",
                            fields: [ "Domain" ]
                        }
                    }, {
                        name: "UpTime",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "LastBootUpTime", "LocalDateTime" ]
                        },
                        format: function(_ref35) {
                            var LastBootUpTime = _ref35.LastBootUpTime, LocalDateTime = _ref35.LocalDateTime, total = Math.ceil((parseWinDate(LocalDateTime) - parseWinDate(LastBootUpTime)) / 1e3), days = Math.floor(total / 86400), hours = Math.floor((total - 86400 * days) / 3600), minutes = Math.floor((total - 86400 * days - 3600 * hours) / 60);
                            return total + " sec (" + days + " d, " + hours + " h, " + minutes + " m, " + (total - 86400 * days - 3600 * hours - 60 * minutes) + " s)";
                        }
                    }, {
                        name: "Last Reboot Reason",
                        wmi: {
                            source: 'Win32_NTLogEvent WHERE Logfile = "System" AND (EventCode = 1074 OR EventCode = 1001 OR EventCode = 6008)',
                            fields: [ "EventCode", "Message" ]
                        },
                        format: function(_ref36) {
                            var EventCode = _ref36.EventCode, Message = _ref36.Message;
                            switch (EventCode) {
                              case 1074:
                                return "CORRECT: " + Message;

                              case 6008:
                                return "UNEXPECTED: " + Message;

                              case 1001:
                                return "BSOD: " + Message;

                              default:
                                return "UNKNOWN: " + Message;
                            }
                        }
                    } ]
                }, {
                    name: "Last Boot Speed",
                    fields: [ {
                        name: "Type",
                        wmi: {
                            source: 'Win32_NTLogEvent WHERE Logfile = "Microsoft-Windows-Diagnostics-Performance/Operational" AND EventCode = 100',
                            fields: [ "Type" ]
                        }
                    }, {
                        name: "Boot Time",
                        wmi: {
                            source: 'Win32_NTLogEvent WHERE Logfile = "Microsoft-Windows-Diagnostics-Performance/Operational" AND EventCode = 100',
                            fields: [ "InsertionStrings" ]
                        },
                        format: function(_ref37) {
                            return _ref37.InsertionStrings[5];
                        }
                    }, {
                        name: "Boot User Profile Processing Time",
                        wmi: {
                            source: 'Win32_NTLogEvent WHERE Logfile = "Microsoft-Windows-Diagnostics-Performance/Operational" AND EventCode = 100',
                            fields: [ "InsertionStrings" ]
                        },
                        format: function(_ref38) {
                            return _ref38.InsertionStrings[15];
                        }
                    }, {
                        name: "Boot Post Boot Time",
                        wmi: {
                            source: 'Win32_NTLogEvent WHERE Logfile = "Microsoft-Windows-Diagnostics-Performance/Operational" AND EventCode = 100',
                            fields: [ "InsertionStrings" ]
                        },
                        format: function(_ref39) {
                            return _ref39.InsertionStrings[19];
                        }
                    }, {
                        name: "Main Path Boot Time",
                        wmi: {
                            source: 'Win32_NTLogEvent WHERE Logfile = "Microsoft-Windows-Diagnostics-Performance/Operational" AND EventCode = 100',
                            fields: [ "InsertionStrings" ]
                        },
                        format: function(_ref40) {
                            return _ref40.InsertionStrings[6];
                        }
                    }, {
                        name: "Boot Num Startup Apps",
                        wmi: {
                            source: 'Win32_NTLogEvent WHERE Logfile = "Microsoft-Windows-Diagnostics-Performance/Operational" AND EventCode = 100',
                            fields: [ "InsertionStrings" ]
                        },
                        format: function(_ref41) {
                            return _ref41.InsertionStrings[18];
                        }
                    } ]
                } ]
            },
            Processes: {
                type: "array",
                targets: [],
                wmi: {
                    source: "Win32_Process",
                    fields: [ {
                        name: "Process Name",
                        field: "Caption"
                    }, {
                        name: "Process File Name",
                        field: "ExecutablePath"
                    }, {
                        name: "Used Memory",
                        field: "WorkingSetSize",
                        format: function(v) {
                            return Math.ceil(parseFloat(v) / 1024) + " KB";
                        }
                    }, {
                        name: "Used Swap",
                        field: "VirtualSize",
                        format: function(v) {
                            return Math.ceil(parseFloat(v) / 1024) + " KB";
                        }
                    } ]
                }
            },
            Services: {
                type: "array",
                targets: [],
                wmi: {
                    source: "Win32_Service",
                    fields: [ {
                        name: "Service Name",
                        field: "Name"
                    }, {
                        name: "Service Description",
                        field: "Description"
                    }, {
                        name: "Path Name",
                        field: "PathName"
                    }, {
                        name: "Type",
                        field: "ServiceType"
                    }, {
                        name: "State",
                        field: "State"
                    }, {
                        name: "Account",
                        field: "StartName"
                    } ]
                }
            },
            UpTime: {
                type: "object",
                targets: [ "diagnostics", "dashboard" ],
                groups: [ {
                    name: "Current Session",
                    fields: [ {
                        name: "Last Boot Time",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "LastBootUpTime" ]
                        },
                        format: function(_ref42) {
                            var LastBootUpTime = _ref42.LastBootUpTime;
                            return parseWinDate(LastBootUpTime).toString();
                        }
                    }, {
                        name: "Current Time",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "LocalDateTime" ]
                        },
                        format: function(_ref43) {
                            var LocalDateTime = _ref43.LocalDateTime;
                            return parseWinDate(LocalDateTime).toString();
                        }
                    }, {
                        name: "UpTime",
                        targets: [ "temporary" ],
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "LastBootUpTime", "LocalDateTime" ]
                        },
                        format: function(_ref44) {
                            var LastBootUpTime = _ref44.LastBootUpTime, LocalDateTime = _ref44.LocalDateTime, total = Math.ceil((parseWinDate(LocalDateTime) - parseWinDate(LastBootUpTime)) / 1e3), days = Math.floor(total / 86400), hours = Math.floor((total - 86400 * days) / 3600), minutes = Math.floor((total - 86400 * days - 3600 * hours) / 60);
                            return total + " sec (" + days + " d, " + hours + " h, " + minutes + " m, " + (total - 86400 * days - 3600 * hours - 60 * minutes) + " s)";
                        }
                    } ]
                } ]
            },
            "Weekly Errors": {
                type: "array",
                targets: [ "dashboard" ],
                wmi: {
                    source: 'Win32_NTLogEvent WHERE (Type = "Critical" OR Type = "Критический") AND TimeGenerated > "' + convertToWinDate(new Date(Date.now() - 6048e5)) + '"',
                    fields: [ {
                        name: "Level",
                        field: "LogFile"
                    }, {
                        name: "Source",
                        field: "SourceName"
                    }, {
                        name: "Code",
                        field: "EventCode"
                    }, {
                        name: "Message",
                        field: "Message"
                    } ]
                },
                format: function(events) {
                    var res = {};
                    events.forEach(function(_ref45) {
                        var Level = _ref45.Level, Source = _ref45.Source, Code = _ref45.Code, Message = _ref45.Message, id = [ Level, Source, Code ].join(":");
                        if (res[id]) res[id].Count += 1; else res[id] = {
                            Level: Level,
                            Source: Source,
                            Code: Code,
                            Message: Message,
                            Count: 1
                        };
                    });
                    return Object.values(res);
                }
            },
            "Daily Errors": {
                type: "array",
                targets: [ "dashboard" ],
                wmi: {
                    source: 'Win32_NTLogEvent WHERE (Type = "Critical" OR Type = "Критический" OR Type = "Error" OR Type = "Ошибка") AND TimeGenerated > "' + convertToWinDate(new Date(Date.now() - 864e5)) + '"',
                    fields: [ {
                        name: "Type",
                        field: "Type"
                    }, {
                        name: "Level",
                        field: "LogFile"
                    }, {
                        name: "Source",
                        field: "SourceName"
                    }, {
                        name: "Code",
                        field: "EventCode"
                    }, {
                        name: "Message",
                        field: "Message"
                    } ]
                },
                format: function(events) {
                    var res = {};
                    events.forEach(function(_ref46) {
                        var Type = _ref46.Type, Level = _ref46.Level, Source = _ref46.Source, Code = _ref46.Code, Message = _ref46.Message, id = [ Type, Level, Source, Code ].join(":");
                        if (res[id]) res[id].Count += 1; else res[id] = {
                            Type: Type,
                            Level: Level,
                            Source: Source,
                            Code: Code,
                            Message: Message,
                            Count: 1
                        };
                    });
                    return Object.values(res);
                }
            }
        },
        Display: {
            "Windows Video": {
                type: "array",
                targets: [ "diagnostics", "dashboard" ],
                wmi: {
                    source: "Win32_VideoController",
                    fields: [ {
                        name: "Description",
                        field: "Description"
                    }, {
                        name: "Memory Size",
                        field: "AdapterRAM",
                        format: function(v) {
                            if (v >= 0) return Math.ceil(parseFloat(v) / 1024 / 1024) + " MB"; else return null;
                        }
                    }, {
                        name: "Video Mode",
                        field: "VideoModeDescription"
                    }, {
                        name: "Driver Name",
                        field: "infSection"
                    }, {
                        name: "Driver Version",
                        field: "DriverVersion"
                    }, {
                        name: "Driver Date",
                        field: "DriverDate",
                        format: function(v) {
                            return parseWinDate(v).toString();
                        }
                    }, {
                        name: "Status",
                        field: "Status"
                    } ]
                }
            },
            Monitor: {
                type: "array",
                targets: [ "diagnostics", "dashboard" ],
                wmi: {
                    source: "Win32_DesktopMonitor",
                    fields: [ {
                        name: "Monitor Name",
                        field: "Description"
                    }, {
                        name: "Monitor ID",
                        field: "DeviceID"
                    }, {
                        name: "Manufacturer",
                        field: "MonitorManufacturer"
                    }, {
                        name: "Monitor Type",
                        field: "MonitorType"
                    }, {
                        name: "Status",
                        field: "Status"
                    }, {
                        name: "Screen Height",
                        field: "ScreenHeight"
                    }, {
                        name: "Screen Width",
                        field: "ScreenWidth"
                    } ]
                }
            }
        },
        Multimedia: {
            "Windows Audio": {
                type: "array",
                targets: [ "diagnostics", "dashboard" ],
                wmi: {
                    source: "Win32_SoundDevice",
                    fields: [ {
                        name: "Description",
                        field: "Description"
                    }, {
                        name: "Manufacturer",
                        field: "Manufacturer"
                    }, {
                        name: "Status",
                        field: "Status"
                    } ]
                }
            }
        },
        Software: {
            "Installed Software": {
                type: "array",
                targets: [ "soft" ],
                reg: {
                    source: _os.is64 ? [ "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\", "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\", "HKLM64\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\", "HKCU64\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" ] : [ "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\", "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" ],
                    fields: [ {
                        name: "Program",
                        field: "DisplayName"
                    }, {
                        name: "Version",
                        field: "DisplayVersion"
                    }, {
                        name: "Publisher",
                        field: "Publisher"
                    }, {
                        name: "Install Date",
                        field: "InstallDate"
                    }, {
                        name: "Location",
                        field: "InstallLocation"
                    }, {
                        name: "Icon",
                        field: "DisplayIcon"
                    }, {
                        name: "Uninstaller",
                        field: "UninstallString"
                    }, {
                        name: "Registry Path",
                        field: "RegPath"
                    } ],
                    filter: function(_ref47) {
                        return _ref47.Program;
                    }
                }
            }
        },
        Security: {
            "Windows Security": {
                type: "object",
                targets: [ "diagnostics", "dashboard" ],
                groups: [ {
                    name: "Operating System Properties",
                    fields: [ {
                        name: "OS Name",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "Caption" ]
                        }
                    }, {
                        name: "OS Service Pack",
                        wmi: {
                            source: "Win32_OperatingSystem",
                            fields: [ "CSDVersion" ]
                        }
                    }, {
                        name: "Winlogon Shell",
                        reg: {
                            source: "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\Shell"
                        }
                    }, {
                        name: "User Account Control (UAC)",
                        targets: [ "temporary" ],
                        reg: {
                            source: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\EnableLUA"
                        },
                        format: function(v) {
                            if (0 === v) return "Disabled";
                            if (1 === v) return "Enabled"; else return "";
                        }
                    }, {
                        name: "System Restore",
                        targets: [ "temporary" ],
                        reg: {
                            source: _os.OSVersion < 6 ? "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\\DisableSR" : "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\\RPSessionInterval"
                        },
                        format: function(v) {
                            if (_os.OSVersion < 6) return v ? "Disabled" : "Enabled"; else return v ? "Enabled" : "Disabled";
                        }
                    } ]
                } ]
            },
            "Anti-Virus": {
                type: "array",
                targets: [ "diagnostics", "dashboard", "temporary" ],
                wmi: {
                    source: _os.OSVersion < 6 ? "ROOT\\SecurityCenter:AntiVirusProduct" : "ROOT\\SecurityCenter2:AntiVirusProduct",
                    fields: [ {
                        name: "Name",
                        field: "displayName"
                    }, {
                        name: "Active",
                        field: _os.OSVersion < 6 ? "onAccessScanningEnabled" : "productState",
                        format: function(v) {
                            if (_os.OSVersion < 6) return "false" !== v;
                            var state = parseInt(v, 10).toString(16);
                            state = state.substring(state.length - 4, state.length - 2);
                            return "10" === state || "11" === state ? "Yes" : "No";
                        }
                    }, {
                        name: "UpToDate",
                        field: _os.OSVersion < 6 ? "productUptoDate" : "productState",
                        format: function(v) {
                            if (_os.OSVersion < 6) return "false" !== v;
                            var state = parseInt(v, 10).toString(16);
                            state = state.substring(state.length - 2, state.length);
                            return "00" === state ? "Yes" : "No";
                        }
                    } ]
                }
            },
            Firewall: {
                type: "array",
                targets: [ "diagnostics", "dashboard", "temporary" ],
                wmi: {
                    source: _os.OSVersion < 6 ? "ROOT\\SecurityCenter:FirewallProduct" : "ROOT\\SecurityCenter2:FirewallProduct",
                    fields: [ {
                        name: "Name",
                        field: "displayName"
                    }, {
                        name: "Active",
                        field: _os.OSVersion < 6 ? "enabled" : "productState",
                        format: function(v) {
                            if (_os.OSVersion < 6) return "false" !== v;
                            var state = parseInt(v, 10).toString(16);
                            state = state.substring(state.length - 4, state.length - 2);
                            return "10" === state || "11" === state ? "Yes" : "No";
                        }
                    } ]
                }
            },
            "Anti-Spyware": {
                type: "array",
                targets: [ "diagnostics", "dashboard", "temporary" ],
                wmi: {
                    source: _os.OSVersion < 6 ? "ROOT\\SecurityCenter:AntiSpywareProduct" : "ROOT\\SecurityCenter2:AntiSpywareProduct",
                    fields: [ {
                        name: "Name",
                        field: "displayName"
                    }, {
                        name: "Active",
                        field: _os.OSVersion < 6 ? "productEnabled" : "productState",
                        format: function(v) {
                            if (_os.OSVersion < 6) return "false" !== v;
                            var state = parseInt(v, 10).toString(16);
                            state = state.substring(state.length - 4, state.length - 2);
                            return "10" === state || "11" === state ? "Yes" : "No";
                        }
                    }, {
                        name: "UpToDate",
                        field: _os.OSVersion < 6 ? "productUptoDate" : "productState",
                        format: function(v) {
                            if (_os.OSVersion < 6) return "false" !== v;
                            var state = parseInt(v, 10).toString(16);
                            state = state.substring(state.length - 2, state.length);
                            return "00" === state ? "Yes" : "No";
                        }
                    } ]
                }
            }
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _wmi = __webpack_require__(23), _trimVendorName = __webpack_require__(109), _trimVendorName2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_trimVendorName);
    exports["default"] = function(_ref) {
        var _ref$Vendor = _ref.Vendor, Vendor = _ref$Vendor === undefined ? "Noname" : _ref$Vendor, _ref$Name = _ref.Name, Name = _ref$Name === undefined ? "Unknown" : _ref$Name, chassis = (0, 
        _wmi.getWMIObjects)([ "ChassisTypes" ], "Win32_SystemEnclosure"), type = void 0;
        if (!(chassis && chassis[0] && chassis[0].ChassisTypes && chassis[0].ChassisTypes[0])) type = "Other"; else switch (chassis[0].ChassisTypes[0]) {
          case 3:
          case 4:
          case 5:
          case 6:
          case 7:
          case 13:
          case 15:
          case 16:
            type = "Desktop";
            break;

          case 8:
          case 9:
          case 10:
          case 11:
          case 14:
            return "Notebook";

          default:
            type = "Other";
        }
        if ([ /virtualbox/i, /vmware/i ].some(function(reg) {
            return reg.test(Name);
        })) return type;
        if (0 === (0, _wmi.getWMIObjects)([ "Name" ], "Win32_Battery").length) return type;
        if ("Other" === type) return "Notebook";
        if ("Desktop" === type && "micro-star" === (0, _trimVendorName2["default"])(Vendor)) return "Notebook"; else return type;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    exports.getChromeExtensions = exports.getNotebookVendor = exports.checkSoft = exports.sendPartnerSoftChanges = exports.getModel = exports.getDrivers = exports.getHardware = exports.getSoftChanges = exports.getDiagnostics = undefined;
    var _getDiagnostics = __webpack_require__(108), _getDiagnostics2 = _interopRequireDefault(_getDiagnostics), _getSoftChanges = __webpack_require__(154), _getSoftChanges2 = _interopRequireDefault(_getSoftChanges), _getHardware = __webpack_require__(126), _getDrivers = __webpack_require__(219), _getModel = __webpack_require__(153), _sendPartnerSoftChanges = __webpack_require__(340), _sendPartnerSoftChanges2 = _interopRequireDefault(_sendPartnerSoftChanges), _checkSoft = __webpack_require__(125), checkSoft = function(obj) {
        if (obj && obj.__esModule) return obj; else {
            var newObj = {};
            if (null != obj) for (var key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
            newObj["default"] = obj;
            return newObj;
        }
    }(_checkSoft), _getNotebookVendor = __webpack_require__(127), _getNotebookVendor2 = _interopRequireDefault(_getNotebookVendor), _getChromeExtensions = __webpack_require__(217), _getChromeExtensions2 = _interopRequireDefault(_getChromeExtensions);
    exports.getDiagnostics = _getDiagnostics2["default"];
    exports.getSoftChanges = _getSoftChanges2["default"];
    exports.getHardware = _getHardware.getHardware;
    exports.getDrivers = _getDrivers.getDrivers;
    exports.getModel = _getModel.getModel;
    exports.sendPartnerSoftChanges = _sendPartnerSoftChanges2["default"];
    exports.checkSoft = checkSoft;
    exports.getNotebookVendor = _getNotebookVendor2["default"];
    exports.getChromeExtensions = _getChromeExtensions2["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _fso = __webpack_require__(17), _specialFolders = __webpack_require__(18), _iterate = __webpack_require__(110), _iterate2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_iterate), parseClidsFile = function(filePath, reg) {
        var clids = [];
        try {
            for (var fStream = _fso.fso.OpenTextFile(filePath, 1); !fStream.AtEndOfStream; ) {
                var line = fStream.ReadLine(), parsed = reg.exec(line);
                if (parsed && parsed[1]) clids.push(parsed[1]);
            }
            fStream.Close();
        } catch (e) {
            return clids;
        }
        return clids;
    };
    exports["default"] = [ {
        title: "Yandex",
        nameReg: /^Yandex$|YandexBrowser/i,
        getClids: function() {
            var clidsFilePath = _specialFolders.AppData + "\\Yandex\\clids-yabrowser.xml";
            return parseClidsFile(clidsFilePath, /vendor\s+name=['"](.*?)['"]/);
        },
        clidsReg: /drpsu/i
    }, {
        title: "Opera",
        nameReg: /Opera/i,
        getClids: function() {
            var clids = [], reg = /['"]partner_id['"]\s*:\s*['"](.*?)['"]/, operaFolder = _specialFolders.ProgramFiles + "\\Opera";
            if (!_fso.fso.FolderExists(operaFolder)) {
                operaFolder = _specialFolders.AppData + "\\Opera Software\\Opera Stable";
                var clidsFilePath = operaFolder + "\\tracking_user_agent.json";
                clids = clids.concat(parseClidsFile(clidsFilePath, reg));
            } else try {
                (0, _iterate2["default"])(_fso.fso.GetFolder(operaFolder).SubFolders, function(subFolder) {
                    if (/^\d+/.test(subFolder.Name)) {
                        var _clidsFilePath = operaFolder + "\\" + subFolder.Name + "\\resources\\tracking_user_agent.json";
                        clids = clids.concat(parseClidsFile(_clidsFilePath, reg));
                    }
                });
            } catch (e) {
                return clids;
            }
            return clids;
        },
        clidsReg: /Campaign\s+34/i
    }, {
        title: "Firefox",
        nameReg: /Mozilla\s?Firefox/i
    } ];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _getSoftChanges = __webpack_require__(154), _getSoftChanges2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_getSoftChanges), _logs = __webpack_require__(4), _checkSoft = __webpack_require__(125), log = (0, 
    _logs.getLogger)("core:diagnostics:soft-changes");
    exports["default"] = function(changes) {
        try {
            if (!changes) changes = (0, _getSoftChanges2["default"])();
            log.debug("soft changes", {
                changes: changes
            }, "changes");
            [ "installed", "uninstalled", "updated" ].forEach(function(action) {
                changes[action].forEach(function(soft) {
                    var pInfo = (0, _checkSoft.getPartnerInfo)(soft);
                    if (pInfo.isPartner) log.info({
                        action: pInfo.title + " " + action,
                        category: "partner soft",
                        important: !0
                    }, {}, action);
                });
            });
        } catch (err) {}
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireWildcard(obj) {
        if (obj && obj.__esModule) return obj; else {
            var newObj = {};
            if (null != obj) for (var key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
            newObj["default"] = obj;
            return newObj;
        }
    }
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    exports.diagnostics = exports.os = exports.wmi = exports.system = exports.statistics = exports.logs = exports.config = undefined;
    var _config = __webpack_require__(107), _config2 = _interopRequireDefault(_config), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _system = __webpack_require__(6), system = _interopRequireWildcard(_system), _wmi = __webpack_require__(23), wmi = _interopRequireWildcard(_wmi), _os = __webpack_require__(14), os = _interopRequireWildcard(_os), _diagnostics = __webpack_require__(338), diagnostics = _interopRequireWildcard(_diagnostics);
    exports.config = _config2["default"];
    exports.logs = _logs2["default"];
    exports.statistics = _statistics2["default"];
    exports.system = system;
    exports.wmi = wmi;
    exports.os = os;
    exports.diagnostics = diagnostics;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _wmi = __webpack_require__(23), Registry = function() {
        function Registry(is64) {
            _classCallCheck(this, Registry);
            this.is64 = is64;
            this.HKCR = 2147483648;
            this.HKCU = 2147483649;
            this.HKLM = 2147483650;
            this.HKUS = 2147483651;
            this.HKCC = 2147483653;
            this.REG_SZ = 1;
            this.REG_EXPAND_SZ = 2;
            this.REG_BINARY = 3;
            this.REG_DWORD = 4;
            this.REG_MULTI_SZ = 7;
            this.connect(is64);
        }
        Registry.prototype.connect = function() {
            var context = this.is64 ? {
                __ProviderArchitecture: 64,
                __RequiredArchitecture: !0
            } : null;
            this.stdregprov = (0, _wmi.ConnectServer)("root\\default", context).Get("StdRegProv");
        };
        Registry.prototype._exec = function(methodName, hkey, key, valueName) {
            var inParameters = this.stdregprov.Methods_.Item(methodName).InParameters.SpawnInstance_();
            inParameters.hDefKey = hkey;
            inParameters.sSubKeyName = key;
            if (valueName) inParameters.sValueName = valueName;
            return this.stdregprov.ExecMethod_(methodName, inParameters);
        };
        Registry.prototype.exec = function() {
            try {
                return this._exec.apply(this, arguments);
            } catch (err) {
                this.connect();
                return this._exec.apply(this, arguments);
            }
        };
        Registry.prototype.EnumKey = function(hkey, key) {
            var outParameters = this.exec("EnumKey", hkey, key), names = [];
            if (null != outParameters.sNames && outParameters.sNames.toArray) names = outParameters.sNames.toArray();
            return names;
        };
        Registry.prototype.EnumValues = function(hkey, key) {
            var outParameters = this.exec("EnumValues", hkey, key), valueNames = [];
            if (null != outParameters.sNames && outParameters.sNames.toArray) valueNames = outParameters.sNames.toArray();
            var valueTypes = [];
            if (null != outParameters.sNames && outParameters.Types.toArray) valueTypes = outParameters.Types.toArray();
            return {
                Names: valueNames,
                Types: valueTypes
            };
        };
        Registry.prototype.GetStringValue = function(hkey, key, name) {
            return this.exec("GetStringValue", hkey, key, name).sValue;
        };
        Registry.prototype.GetExpandedStringValue = function(hkey, key, name) {
            return this.exec("GetExpandedStringValue", hkey, key, name).sValue;
        };
        Registry.prototype.GetDWORDValue = function(hkey, key, name) {
            return this.exec("GetDWORDValue", hkey, key, name).uValue;
        };
        return Registry;
    }();
    exports["default"] = Registry;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _objectWithoutProperties(obj, keys) {
        var target = {};
        for (var i in obj) if (!(keys.indexOf(i) >= 0)) if (Object.prototype.hasOwnProperty.call(obj, i)) target[i] = obj[i];
        return target;
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    function _possibleConstructorReturn(self, call) {
        if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
        return call && ("object" == typeof call || "function" == typeof call) ? call : self;
    }
    function _inherits(subClass, superClass) {
        if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
        subClass.prototype = Object.create(superClass && superClass.prototype, {
            constructor: {
                value: subClass,
                enumerable: !1,
                writable: !0,
                configurable: !0
            }
        });
        if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
        return typeof obj;
    } : function(obj) {
        return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    }, _DeloreanTransport = __webpack_require__(224), _DeloreanTransport2 = _interopRequireDefault(_DeloreanTransport), _ScopedLogger2 = __webpack_require__(344), _ScopedLogger3 = _interopRequireDefault(_ScopedLogger2), _fileWriter = __webpack_require__(221), _fileWriter2 = _interopRequireDefault(_fileWriter), Logger = function(_ScopedLogger) {
        function Logger(_ref) {
            var logging = _ref.logging, endpoint = _ref.endpoint;
            _classCallCheck(this, Logger);
            var _this = _possibleConstructorReturn(this, _ScopedLogger.call(this, null, "")), transport = new _DeloreanTransport2["default"](endpoint);
            Object.assign(_this, {
                logging: logging,
                transport: transport
            });
            return _this;
        }
        _inherits(Logger, _ScopedLogger);
        Logger.prototype.buildMessage = function(_ref2) {
            for (var message = _ref2.message, action = _ref2.action, _ref2$namespace = _ref2.namespace, namespace = _ref2$namespace === undefined ? "" : _ref2$namespace, _ref2$tags = _ref2.tags, tags = _ref2$tags === undefined ? [] : _ref2$tags, res = "[" + namespace + "] " + (message || action), _iterator = tags, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                var _ref3;
                if (_isArray) {
                    if (_i >= _iterator.length) break;
                    _ref3 = _iterator[_i++];
                } else {
                    _i = _iterator.next();
                    if (_i.done) break;
                    _ref3 = _i.value;
                }
                res += " #" + _ref3;
            }
            return res;
        };
        Logger.prototype.toObject = function(lvl, message) {
            var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, namespace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
            return {
                lvl: lvl,
                tags: arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [],
                namespace: namespace,
                message: message,
                params: params
            };
        };
        Logger.prototype.send = function() {
            var data = this.toObject.apply(this, arguments);
            if ("debug" !== data.lvl) return this.transport.send(data);
        };
        Logger.prototype._write = function(_ref4) {
            var type = _ref4.type, data = _ref4.data, _ref4$params = _ref4.params, params = _ref4$params === undefined ? data : _ref4$params, _ref4$message = _ref4.message, message = _ref4$message === undefined ? this.buildMessage(data) : _ref4$message;
            if ("error" === data.lvl || "warn" === data.lvl) console[data.lvl](message); else console.log(message);
            if (this.logging) _fileWriter2["default"].write(message, data.lvl, params, data, type);
        };
        Logger.prototype.write = function() {
            var data = this.toObject.apply(this, arguments);
            this._write({
                type: "log",
                data: data,
                params: data.params
            });
        };
        Logger.prototype.onunload = function() {
            _fileWriter2["default"].close();
        };
        Logger.prototype.log = function(lvl, opts) {
            var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : opts.params, namespace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : opts.namespace, tags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : opts.tags;
            if ("object" !== (void 0 === opts ? "undefined" : _typeof(opts))) opts = {
                message: opts
            };
            var _opts = opts, message = _opts.message, event = _objectWithoutProperties(_opts, [ "message" ]), args = [ lvl, message, params, namespace, tags ];
            if (event.action) {
                var data = this.toObject.apply(this, args);
                return __webpack_require__(10).event(_extends({}, event, data));
            } else return Promise.all([ this.send.apply(this, args), this.write.apply(this, args) ]);
        };
        return Logger;
    }(_ScopedLogger3["default"]);
    exports["default"] = Logger;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var ScopedLogger = function() {
        function ScopedLogger(parent, prefix) {
            var tags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
            _classCallCheck(this, ScopedLogger);
            Object.assign(this, {
                parent: parent,
                prefix: prefix,
                tags: tags
            });
        }
        ScopedLogger.prototype.log = function(lvl, msg, params) {
            var namespace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : msg.namespace || "", tags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : msg.tags || [];
            if (this.prefix) namespace = this.prefix + ":" + namespace;
            return this.parent.log(lvl, msg, params, namespace, tags.concat(this.tags));
        };
        ScopedLogger.prototype.debug = function() {
            for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
            return this.log.apply(this, [ "debug" ].concat(args));
        };
        ScopedLogger.prototype.info = function() {
            for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) args[_key2] = arguments[_key2];
            return this.log.apply(this, [ "info" ].concat(args));
        };
        ScopedLogger.prototype.warn = function() {
            for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) args[_key3] = arguments[_key3];
            return this.log.apply(this, [ "warn" ].concat(args));
        };
        ScopedLogger.prototype.error = function() {
            for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];
            return this.log.apply(this, [ "error" ].concat(args));
        };
        ScopedLogger.prototype.scope = function(namespace, tags) {
            return new ScopedLogger(this, namespace, tags);
        };
        return ScopedLogger;
    }();
    exports["default"] = ScopedLogger;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var methodsList = [ "log", "uuid", "request", "getClientId", "generateClientId", "getRegValue", "putRegValue" ], Adapter = function() {
        function Adapter(_ref) {
            var _ref$methods = _ref.methods, methods = _ref$methods === undefined ? {} : _ref$methods, _ref$hooks = _ref.hooks, hooks = _ref$hooks === undefined ? {} : _ref$hooks, _ref$props = _ref.props, props = _ref$props === undefined ? {} : _ref$props;
            _classCallCheck(this, Adapter);
            Object.assign(this, {
                methods: methods,
                hooks: hooks,
                props: props
            });
        }
        Adapter.prototype.call = function(name) {
            if (name in this.methods) {
                for (var _methods, _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key];
                return (_methods = this.methods)[name].apply(_methods, args);
            } else throw new Error("Adapter method " + name + " is not implemented");
        };
        Adapter.prototype.hook = function(name) {
            if (name in this.hooks) {
                for (var _hooks, _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];
                return (_hooks = this.hooks)[name].apply(_hooks, args);
            }
        };
        Adapter.prototype.get = function(key) {
            if (key in this.props) return this.props[key]; else throw new Error("Adapter propery " + key + " is not provided");
        };
        return Adapter;
    }();
    exports["default"] = Adapter;
    for (var _iterator = methodsList, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
        var _ref2;
        if ("break" === function() {
            if (_isArray) {
                if (_i >= _iterator.length) return "break";
                _ref2 = _iterator[_i++];
            } else {
                _i = _iterator.next();
                if (_i.done) return "break";
                _ref2 = _i.value;
            }
            var name = _ref2;
            Adapter.prototype[name] = function() {
                for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) args[_key3] = arguments[_key3];
                return this.call.apply(this, [ name ].concat(args));
            };
        }()) break;
    }
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _RegistryStore = __webpack_require__(349), _RegistryStore2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_RegistryStore), ClientIdStorage = function() {
        function ClientIdStorage(adapter) {
            var _this = this;
            _classCallCheck(this, ClientIdStorage);
            Object.assign(this, {
                adapter: adapter
            });
            this.stores = {
                External: {
                    get: function(key) {
                        return _this.adapter.getClientId(key);
                    },
                    set: function() {
                        return null;
                    }
                },
                HKCU: new _RegistryStore2["default"](adapter, "HKCU\\SOFTWARE\\drpsu"),
                HKLM: new _RegistryStore2["default"](adapter, "HKLM\\SOFTWARE\\drpsu")
            };
        }
        ClientIdStorage.prototype.get = function() {
            function get(_x, _x2) {
                return _ref.apply(this, arguments);
            }
            var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(key, stores) {
                var res, _iterator, _isArray, _i, _ref2, name;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        res = void 0;
                        _iterator = stores, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                      case 2:
                        if (!_isArray) {
                            _context.next = 8;
                            break;
                        }
                        if (!(_i >= _iterator.length)) {
                            _context.next = 5;
                            break;
                        }
                        return _context.abrupt("break", 21);

                      case 5:
                        _ref2 = _iterator[_i++];
                        _context.next = 12;
                        break;

                      case 8:
                        _i = _iterator.next();
                        if (!_i.done) {
                            _context.next = 11;
                            break;
                        }
                        return _context.abrupt("break", 21);

                      case 11:
                        _ref2 = _i.value;

                      case 12:
                        name = _ref2;
                        _context.next = 15;
                        return this.stores[name].get(key);

                      case 15:
                        res = _context.sent;
                        if (!res) {
                            _context.next = 19;
                            break;
                        }
                        this.adapter.log("got " + key + " from " + name + ": " + res, {
                            key: key,
                            store: name,
                            value: res
                        }, "clientIdStorage:get");
                        return _context.abrupt("break", 21);

                      case 19:
                        _context.next = 2;
                        break;

                      case 21:
                        if (!res) {
                            res = this.adapter.generateClientId();
                            this.adapter.log("generated " + key + ": " + res, {
                                key: key,
                                value: res
                            }, "clientIdStorage:generate");
                        }
                        return _context.abrupt("return", res);

                      case 23:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, this);
            }));
            return get;
        }();
        ClientIdStorage.prototype.set = function() {
            function set(_x3, _x4, _x5) {
                return _ref3.apply(this, arguments);
            }
            var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(key, value, stores) {
                var _iterator2, _isArray2, _i2, _ref4, name;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        _iterator2 = stores, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();

                      case 1:
                        if (!_isArray2) {
                            _context2.next = 7;
                            break;
                        }
                        if (!(_i2 >= _iterator2.length)) {
                            _context2.next = 4;
                            break;
                        }
                        return _context2.abrupt("break", 16);

                      case 4:
                        _ref4 = _iterator2[_i2++];
                        _context2.next = 11;
                        break;

                      case 7:
                        _i2 = _iterator2.next();
                        if (!_i2.done) {
                            _context2.next = 10;
                            break;
                        }
                        return _context2.abrupt("break", 16);

                      case 10:
                        _ref4 = _i2.value;

                      case 11:
                        name = _ref4;
                        _context2.next = 14;
                        return this.stores[name].set(key, value);

                      case 14:
                        _context2.next = 1;
                        break;

                      case 16:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, this);
            }));
            return set;
        }();
        ClientIdStorage.prototype.init = function() {
            function init() {
                return _ref5.apply(this, arguments);
            }
            var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3() {
                var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "clientId", value = arguments[1], stores = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [ "External", "HKCU", "HKLM" ];
                return regeneratorRuntime.wrap(function(_context3) {
                    for (;;) switch (_context3.prev = _context3.next) {
                      case 0:
                        if (!value) {
                            _context3.next = 5;
                            break;
                        }
                        this.adapter.log("got " + key + " from init(): " + value, {
                            key: key,
                            value: value
                        }, "clientIdStorage:init");
                        this[key] = value;
                        _context3.next = 12;
                        break;

                      case 5:
                        if (!this[key]) {
                            _context3.next = 9;
                            break;
                        }
                        return _context3.abrupt("return", this[key]);

                      case 9:
                        _context3.next = 11;
                        return this.get(key, stores);

                      case 11:
                        this[key] = _context3.sent;

                      case 12:
                        _context3.next = 14;
                        return this.set(key, this[key], stores);

                      case 14:
                        return _context3.abrupt("return", this[key]);

                      case 15:
                      case "end":
                        return _context3.stop();
                    }
                }, _callee3, this);
            }));
            return init;
        }();
        return ClientIdStorage;
    }();
    exports["default"] = ClientIdStorage;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _DeloreanTransport = __webpack_require__(222), _DeloreanTransport2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_DeloreanTransport), EventsAPI = function() {
        function EventsAPI(parent, _ref) {
            var url = _ref.url;
            _classCallCheck(this, EventsAPI);
            Object.assign(this, {
                parent: parent,
                adapter: parent.adapter,
                transport: new _DeloreanTransport2["default"](parent, url)
            });
        }
        EventsAPI.prototype.send = function(event) {
            var _this = this, endpoint = this.transport && this.transport.endpoint;
            if (endpoint) return this.transport.send(event).then(function() {
                _this.adapter.log("Send event to MongoDB API " + endpoint + ": " + event.action, {
                    event: event,
                    endpoint: endpoint
                }, "api:send");
            }, function(_ref2) {
                var response = _ref2.response;
                _this.adapter.log("Failed to send event to MongoDB API " + endpoint + ": " + event.action, {
                    event: event,
                    endpoint: endpoint,
                    response: response
                }, "api:fail");
            });
        };
        return EventsAPI;
    }();
    exports["default"] = EventsAPI;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, endpoint = exports.endpoint = "http://www.google-analytics.com/collect", defaultDimensions = exports.defaultDimensions = {
        cd1: "userIdDimension",
        cd2: "versionDimension",
        cd3: "osDimension",
        cd4: "spDimension",
        cd5: "captionDimension",
        cd6: "experimentDimension"
    }, GoogleAnalytics = function() {
        function GoogleAnalytics(parent, _ref) {
            var id = _ref.id, session = _ref.session, source = _ref.source, identifier = _ref.identifier, dimensions = _ref.dimensions;
            _classCallCheck(this, GoogleAnalytics);
            Object.assign(this, {
                parent: parent,
                id: id,
                session: session,
                source: source,
                identifier: identifier,
                dimensions: _extends({}, defaultDimensions, dimensions),
                adapter: parent.adapter
            });
        }
        GoogleAnalytics.prototype.getCID = function() {
            if ("computerId" === this.identifier) return this.parent.computerId; else return this.parent.clientId;
        };
        GoogleAnalytics.prototype.getDimensions = function(params) {
            var res = [];
            for (var id in this.dimensions) {
                var key = this.dimensions[id];
                if (key in params) res.push([ id, params[key] ]);
            }
            return res;
        };
        GoogleAnalytics.prototype.send = function(event) {
            if (this.id) {
                var cid = this.getCID(), _adapter$get = this.adapter.get("os"), arch = _adapter$get.arch, OSName = _adapter$get.OSName, OSVersionSP = _adapter$get.OSVersionSP, OSCaption = _adapter$get.OSCaption, dimensions = this.getDimensions(_extends({}, event.params, {
                    userIdDimension: cid,
                    versionDimension: this.parent.version.trim(),
                    osDimension: OSName + " x" + arch,
                    spDimension: "SP " + OSVersionSP,
                    captionDimension: OSCaption,
                    experimentDimension: this.parent.experiment
                })), url = this._compileUrl(cid, event, dimensions);
                this.adapter.log("Send event " + this.id + " GA: " + event.action, {
                    event: event,
                    dimensions: dimensions,
                    url: url
                }, "ga:send");
                return this.adapter.request({
                    uri: url
                });
            }
        };
        GoogleAnalytics.prototype._compileUrl = function(cid, event, dimensions) {
            var params = {
                v: 1,
                ds: this.source || "app",
                tid: this.id,
                cid: cid,
                t: "event",
                ec: event.category.toLowerCase(),
                ea: event.action.toLowerCase(),
                el: event.label.toLowerCase(),
                ul: this.parent.locale,
                z: Math.random().toString().slice(2)
            };
            if (event.session) {
                this.session = event.session + "ed";
                params.sc = event.session;
            } else if (!this.session) {
                this.session = "started";
                params.sc = "start";
            }
            var parts = Object.entries(params).concat(dimensions);
            return endpoint + "?" + parts.map(function(pair) {
                return pair.map(encodeURIComponent).join("=");
            }).join("&");
        };
        return GoogleAnalytics;
    }();
    exports["default"] = GoogleAnalytics;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var RegistryStore = function() {
        function RegistryStore(adapter, reg) {
            _classCallCheck(this, RegistryStore);
            Object.assign(this, {
                adapter: adapter,
                reg: reg
            });
        }
        RegistryStore.prototype.get = function(key) {
            return this.adapter.getRegValue(this.reg, key);
        };
        RegistryStore.prototype.set = function(key, clientId) {
            return this.adapter.putRegValue(this.reg, key, clientId);
        };
        return RegistryStore;
    }();
    exports["default"] = RegistryStore;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, loaded = !1, loadYaMetrika = function() {
        if (!loaded) {
            if (!window.yandex_metrika_callbacks) window.yandex_metrika_callbacks = [];
            loaded = new Promise(function(resolve, reject) {
                window.yandex_metrika_callbacks.push(resolve);
                var neighbor = document.getElementsByTagName("script")[0], script = document.createElement("script");
                script.type = "text/javascript";
                script.async = !0;
                script.src = "https://mc.yandex.ru/metrika/watch.js";
                script.onerror = function() {
                    return reject(new Error("failed to load watch.js script"));
                };
                neighbor.parentNode.insertBefore(script, neighbor);
            });
        }
        return loaded;
    }, createYaCounter = function(id) {
        var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0, uid = arguments[2];
        if (id) try {
            var counter = new window.Ya.Metrika({
                id: id,
                clickmap: active,
                trackLinks: active,
                accurateTrackBounce: active,
                ut: "noindex",
                defer: !0,
                webvisor: !1
            });
            if (uid) counter.setUserID(uid);
            return counter;
        } catch (e) {}
    }, YaMetrika = function() {
        function YaMetrika(parent, _ref) {
            var id = _ref.id, url = _ref.url, identifier = _ref.identifier;
            _classCallCheck(this, YaMetrika);
            Object.assign(this, {
                parent: parent,
                id: id,
                url: url,
                identifier: identifier,
                adapter: parent.adapter
            });
        }
        YaMetrika.prototype.getCID = function() {
            if ("computerId" === this.identifier) return this.parent.computerId; else return this.parent.clientId;
        };
        YaMetrika.prototype.init = function() {
            var _this = this;
            this.loaded = loadYaMetrika().then(function() {
                var active = !_this.parent.offline;
                _this.metrika = createYaCounter(_this.id, active, _this.getCID());
            });
        };
        YaMetrika.prototype.send = function(event) {
            var _this2 = this, url = this.url + [ event.category, event.action, event.label ].join("/").replace(/\s/g, "_").toLowerCase(), params = _extends({}, event.params, {
                clientId: String(this.parent.clientId),
                computerId: String(this.parent.computerId),
                experimentNumber: this.parent.experiment,
                language: this.parent.locale
            });
            return this.loaded.then(function() {
                _this2.adapter.log("Send event: " + event.action, {
                    event: event,
                    url: url,
                    params: params
                }, "metrika:send");
                return _this2._sendHit(url, params);
            });
        };
        YaMetrika.prototype.userParams = function(data) {
            var _this3 = this;
            return this.loaded.then(function() {
                if (_this3.metrika) {
                    _this3.adapter.log("Send user params", data, "metrika:userParams");
                    _this3.metrika.userParams(data);
                }
            });
        };
        YaMetrika.prototype._sendHit = function(url, params) {
            var _this4 = this;
            return this.metrika ? new Promise(function(resolve) {
                _this4.metrika.hit(url, {
                    title: document.title,
                    referer: null,
                    params: params,
                    callback: function() {
                        return resolve();
                    }
                });
            }) : !1;
        };
        return YaMetrika;
    }();
    exports["default"] = YaMetrika;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function retry(handler) {
        var tries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1, timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1e3;
        return handler()["catch"](function(err) {
            if (tries > 1) return delay(timeout).then(function() {
                return retry(handler, tries - 1, timeout);
            }); else throw err;
        });
    }
    Object.defineProperty(exports, "__esModule", {
        value: !0
    });
    exports["default"] = retry;
    var delay = function(time) {
        return new Promise(function(resolve) {
            return setTimeout(resolve, time);
        });
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(global) {
        __webpack_require__(531);
        __webpack_require__(530);
        __webpack_require__(491);
        __webpack_require__(429);
        __webpack_require__(431);
        __webpack_require__(430);
        __webpack_require__(433);
        __webpack_require__(435);
        __webpack_require__(440);
        __webpack_require__(434);
        __webpack_require__(432);
        __webpack_require__(442);
        __webpack_require__(441);
        __webpack_require__(437);
        __webpack_require__(438);
        __webpack_require__(436);
        __webpack_require__(428);
        __webpack_require__(439);
        __webpack_require__(443);
        __webpack_require__(444);
        __webpack_require__(395);
        __webpack_require__(397);
        __webpack_require__(396);
        __webpack_require__(446);
        __webpack_require__(445);
        __webpack_require__(416);
        __webpack_require__(426);
        __webpack_require__(427);
        __webpack_require__(417);
        __webpack_require__(418);
        __webpack_require__(419);
        __webpack_require__(420);
        __webpack_require__(421);
        __webpack_require__(422);
        __webpack_require__(423);
        __webpack_require__(424);
        __webpack_require__(425);
        __webpack_require__(399);
        __webpack_require__(400);
        __webpack_require__(401);
        __webpack_require__(402);
        __webpack_require__(403);
        __webpack_require__(404);
        __webpack_require__(405);
        __webpack_require__(406);
        __webpack_require__(407);
        __webpack_require__(408);
        __webpack_require__(409);
        __webpack_require__(410);
        __webpack_require__(411);
        __webpack_require__(412);
        __webpack_require__(413);
        __webpack_require__(414);
        __webpack_require__(415);
        __webpack_require__(478);
        __webpack_require__(483);
        __webpack_require__(490);
        __webpack_require__(481);
        __webpack_require__(473);
        __webpack_require__(474);
        __webpack_require__(479);
        __webpack_require__(484);
        __webpack_require__(486);
        __webpack_require__(469);
        __webpack_require__(470);
        __webpack_require__(471);
        __webpack_require__(472);
        __webpack_require__(475);
        __webpack_require__(476);
        __webpack_require__(477);
        __webpack_require__(480);
        __webpack_require__(482);
        __webpack_require__(485);
        __webpack_require__(487);
        __webpack_require__(488);
        __webpack_require__(489);
        __webpack_require__(390);
        __webpack_require__(392);
        __webpack_require__(391);
        __webpack_require__(394);
        __webpack_require__(393);
        __webpack_require__(379);
        __webpack_require__(377);
        __webpack_require__(383);
        __webpack_require__(380);
        __webpack_require__(386);
        __webpack_require__(388);
        __webpack_require__(376);
        __webpack_require__(382);
        __webpack_require__(373);
        __webpack_require__(387);
        __webpack_require__(371);
        __webpack_require__(385);
        __webpack_require__(384);
        __webpack_require__(378);
        __webpack_require__(381);
        __webpack_require__(370);
        __webpack_require__(372);
        __webpack_require__(375);
        __webpack_require__(374);
        __webpack_require__(389);
        __webpack_require__(180);
        __webpack_require__(462);
        __webpack_require__(467);
        __webpack_require__(252);
        __webpack_require__(463);
        __webpack_require__(464);
        __webpack_require__(465);
        __webpack_require__(466);
        __webpack_require__(447);
        __webpack_require__(398);
        __webpack_require__(468);
        __webpack_require__(492);
        __webpack_require__(493);
        __webpack_require__(498);
        __webpack_require__(501);
        __webpack_require__(502);
        __webpack_require__(496);
        __webpack_require__(499);
        __webpack_require__(497);
        __webpack_require__(500);
        __webpack_require__(494);
        __webpack_require__(495);
        __webpack_require__(448);
        __webpack_require__(449);
        __webpack_require__(450);
        __webpack_require__(451);
        __webpack_require__(452);
        __webpack_require__(455);
        __webpack_require__(453);
        __webpack_require__(454);
        __webpack_require__(456);
        __webpack_require__(457);
        __webpack_require__(458);
        __webpack_require__(459);
        __webpack_require__(461);
        __webpack_require__(460);
        __webpack_require__(503);
        __webpack_require__(519);
        __webpack_require__(522);
        __webpack_require__(521);
        __webpack_require__(523);
        __webpack_require__(524);
        __webpack_require__(520);
        __webpack_require__(525);
        __webpack_require__(514);
        __webpack_require__(517);
        __webpack_require__(513);
        __webpack_require__(511);
        __webpack_require__(512);
        __webpack_require__(515);
        __webpack_require__(516);
        __webpack_require__(506);
        __webpack_require__(518);
        __webpack_require__(526);
        __webpack_require__(505);
        __webpack_require__(507);
        __webpack_require__(509);
        __webpack_require__(508);
        __webpack_require__(510);
        __webpack_require__(504);
        __webpack_require__(529);
        __webpack_require__(528);
        __webpack_require__(527);
        __webpack_require__(678);
        try {
            window.undefined = window.undefined;
        } catch (e) {}
        if (global._drpPolyfill) throw new Error("only one instance of drp-core/polyfill is allowed");
        global._drpPolyfill = !0;
    }).call(exports, __webpack_require__(54));
}, function(module, exports, __webpack_require__) {
    "use strict";
    var _ = __webpack_require__(341);
    Object.assign(window, _.wmi, _.os, _.system);
    Object.assign(window, {
        logs: _.logs,
        statistics: _.statistics,
        wmi: _.wmi,
        log: _.logs.log,
        os: _.os,
        system: _.system,
        diagnostics: _.diagnostics,
        wget: _.wget
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _OnlineStatistics = __webpack_require__(223), _OnlineStatistics2 = _interopRequireDefault(_OnlineStatistics), _specialFolders = __webpack_require__(18), _fso = __webpack_require__(17), _localFiles = __webpack_require__(22), _logs = __webpack_require__(4), _iterate = __webpack_require__(110), _iterate2 = _interopRequireDefault(_iterate), log = (0, 
    _logs.getLogger)("core:statistics:offline"), readLine = function(file) {
        return JSON.parse(file.ReadLine());
    }, OfflineStore = function() {
        function OfflineStore(_ref2) {
            var options = _ref2.options, version = _ref2.version, locale = _ref2.locale, clientId = _ref2.clientId, computerId = _ref2.computerId;
            _classCallCheck(this, OfflineStore);
            var filename = this._name = [ "e", Date.now(), options.category || "drp" ].join("-").replace(/[\s\.]/g, "-").toLowerCase(), filepath = OfflineStore.getFilepath() + "\\" + filename;
            this._file = _fso.fso.CreateTextFile(filepath, !0);
            this._save({
                clientId: clientId,
                computerId: computerId,
                constructor: [ options, {
                    version: version,
                    locale: locale
                } ]
            });
        }
        OfflineStore.getFilepath = function() {
            return (0, _localFiles.ensurePath)(_specialFolders.AppData + "\\DRPSu\\events");
        };
        OfflineStore.dispatchFile = function(adapter, _ref) {
            var Path = _ref.Path, Name = _ref.Name;
            log.debug("Processing file: " + Name, {
                file: Name
            }, "dispatch");
            var promises = [];
            try {
                var file = _fso.fso.OpenTextFile(Path, 1, !1), _readLine = readLine(file), clientId = _readLine.clientId, computerId = _readLine.computerId, _constructor = _readLine.constructor, stat = new (Function.prototype.bind.apply(_OnlineStatistics2["default"], [ null ].concat([ adapter ], _constructor)))();
                stat.init({
                    clientId: clientId,
                    computerId: computerId,
                    offline: !0
                });
                for (;!file.AtEndOfStream; ) try {
                    var _readLine2 = readLine(file), event = _readLine2.event;
                    promises.push(stat.event.apply(stat, event)["catch"](function() {
                        return null;
                    }));
                } catch (err) {}
                file.Close();
            } catch (err) {}
            var timeout = new Promise(function(resolve) {
                return setTimeout(resolve, 3e3);
            });
            return Promise.race([ Promise.all(promises), timeout ]).then(function() {
                _fso.fso.DeleteFile(Path, !0);
            })["catch"](function() {
                return null;
            });
        };
        OfflineStore.dispatch = function(adapter) {
            var filepath = OfflineStore.getFilepath(), folder = _fso.fso.GetFolder(filepath), promise = Promise.resolve();
            (0, _iterate2["default"])(folder.Files, function(file) {
                promise = promise.then(function() {
                    return OfflineStore.dispatchFile(adapter, file);
                });
            });
            return promise;
        };
        OfflineStore.prototype.event = function(_event) {
            log.debug("Send event: " + _event.action, {
                event: _event
            }, "send");
            this._save({
                event: [ _event ]
            });
        };
        OfflineStore.prototype._save = function(data) {
            this._file.WriteLine(JSON.stringify(data));
        };
        return OfflineStore;
    }();
    exports["default"] = OfflineStore;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    function _possibleConstructorReturn(self, call) {
        if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
        return call && ("object" == typeof call || "function" == typeof call) ? call : self;
    }
    function _inherits(subClass, superClass) {
        if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
        subClass.prototype = Object.create(superClass && superClass.prototype, {
            constructor: {
                value: subClass,
                enumerable: !1,
                writable: !0,
                configurable: !0
            }
        });
        if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _OnlineStatistics2 = __webpack_require__(223), _OnlineStatistics3 = _interopRequireDefault(_OnlineStatistics2), _OfflineStore = __webpack_require__(354), _OfflineStore2 = _interopRequireDefault(_OfflineStore), Statistics = function(_OnlineStatistics) {
        function Statistics() {
            _classCallCheck(this, Statistics);
            return _possibleConstructorReturn(this, _OnlineStatistics.apply(this, arguments));
        }
        _inherits(Statistics, _OnlineStatistics);
        Statistics.prototype.init = function(opts) {
            var _this2 = this, promise = _OnlineStatistics.prototype.init.call(this, opts);
            this._initialized = this._initialized.then(function() {
                return _this2.checkConnection();
            }).then(function(isOnline) {
                if (isOnline) return _OfflineStore2["default"].dispatch(_this2.adapter).then(function() {
                    return !0;
                }); else {
                    _this2._offlineStore = new _OfflineStore2["default"](_this2);
                    return !1;
                }
            });
            return promise;
        };
        Statistics.prototype.checkConnection = function() {
            return this.adapter.request({
                uri: "http://update.drp.su"
            }).then(function() {
                return !0;
            }, function() {
                return !1;
            });
        };
        Statistics.prototype.send = function(event) {
            var _this3 = this;
            return this._initialized.then(function(isOnline) {
                if (!isOnline && _this3._offlineStore) _this3._offlineStore.event(event); else return _OnlineStatistics.prototype.send.call(_this3, event);
            });
        };
        Statistics.prototype.sendOpenedEvent = function(event) {
            return this.event(_extends({
                lvl: "info",
                action: "application opened",
                label: this.version,
                namespace: "application:opened"
            }, event), [], !0);
        };
        return Statistics;
    }(_OnlineStatistics3["default"]);
    exports["default"] = Statistics;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _utils = __webpack_require__(19), _cmd = __webpack_require__(129), _fso = __webpack_require__(17), parseClientIdJs = function(text) {
        var start = text.indexOf('"') + 1, end = text.indexOf('"', start), filename = text.substr(start, end - start);
        return (0, _utils.ParseSFXName)(filename).slice(-1)[0];
    }, parseFromCMD = function(key) {
        if ("clientId" === key) {
            return (0, _cmd.ParseCMD)(decodeURIComponent(window.location.hash))[1];
        }
    }, parseFromFile = function(key) {
        var file = "tools\\modules\\" + key.toLowerCase() + ".js";
        if (_fso.fso.FileExists(file)) {
            var text = _fso.fso.GetFile(file);
            if (text.Size > 0) {
                var textStream = text.OpenAsTextStream(1), contents = "";
                if (!textStream.AtEndOfStream) contents = textStream.ReadAll();
                return parseClientIdJs(contents);
            }
        }
    };
    exports["default"] = function(key) {
        return parseFromCMD(key) || parseFromFile(key);
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    var _Adapter = __webpack_require__(345), _Adapter2 = _interopRequireDefault(_Adapter), _registry = __webpack_require__(56), _http = __webpack_require__(73), _sendImg = __webpack_require__(226), _os = __webpack_require__(14), os = function(obj) {
        if (obj && obj.__esModule) return obj; else {
            var newObj = {};
            if (null != obj) for (var key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
            newObj["default"] = obj;
            return newObj;
        }
    }(_os), _getClientId = __webpack_require__(356), _getClientId2 = _interopRequireDefault(_getClientId), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), logger = (0, 
    _logs.getLogger)("core:statistics"), methods = {
        log: function(msg) {
            var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, namespace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
            logger.debug(msg, params, namespace);
        },
        uuid: function() {
            var d = new Date().getTime();
            return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
                var r = (d + 16 * Math.random()) % 16 | 0;
                d = Math.floor(d / 16);
                return ("x" === c ? r : 3 & r | 8).toString(16);
            });
        },
        request: function(_ref) {
            var _ref$method = _ref.method, method = _ref$method === undefined ? "GET" : _ref$method, uri = _ref.uri, body = _ref.body, headers = _ref.headers;
            switch (method) {
              case "GET":
                return (0, _sendImg.sendImg)(uri)["catch"](function() {
                    return (0, _http.httpget)(uri);
                });

              case "POST":
                return (0, _http.httppost)(uri, body, {
                    headers: headers
                });

              default:
                throw new Error("Invalid method " + method);
            }
        },
        getClientId: _getClientId2["default"],
        generateClientId: function() {
            var d = new Date().getTime();
            return "xxxxxxxxx.xxxxxxxxxx".replace(/[xy]/g, function(c) {
                var r = (d + 10 * Math.random()) % 10 | 0;
                return ("x" === c ? r : 7 & r | 8).toString();
            });
        },
        getRegValue: function(path, name) {
            var _this = this;
            return _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        return _context.abrupt("return", (0, _registry.RegRead)(path + "\\" + name));

                      case 1:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, _this);
            }))();
        },
        putRegValue: function(path, name, value) {
            var _this2 = this, type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "REG_SZ";
            return _asyncToGenerator(regeneratorRuntime.mark(function _callee2() {
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        return _context2.abrupt("return", (0, _registry.RegWrite)(path + "\\" + name, value, type));

                      case 1:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, _this2);
            }))();
        }
    }, hooks = {
        send: function(_ref2) {
            var data = _ref2.data;
            _logs2["default"]._write({
                type: "event",
                data: data
            });
        }
    }, props = {
        os: os
    };
    exports["default"] = new _Adapter2["default"]({
        methods: methods,
        hooks: hooks,
        props: props
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    (function(process, global, setImmediate) {
        !function(e) {
            if (!0) module.exports = e(); else if ("function" == typeof define && define.amd) define([], e); else {
                var f;
                "undefined" != typeof window ? f = window : void 0 !== global ? f = global : "undefined" != typeof self && (f = self), 
                f.Promise = e();
            }
        }(function() {
            var define, module, exports;
            return function e(t, n, r) {
                function s(o, u) {
                    if (!n[o]) {
                        if (!t[o]) {
                            var a = "function" == typeof _dereq_ && _dereq_;
                            if (!u && a) return a(o, !0);
                            if (i) return i(o, !0);
                            var f = new Error("Cannot find module '" + o + "'");
                            throw f.code = "MODULE_NOT_FOUND", f;
                        }
                        var l = n[o] = {
                            exports: {}
                        };
                        t[o][0].call(l.exports, function(e) {
                            var n = t[o][1][e];
                            return s(n ? n : e);
                        }, l, l.exports, e, t, n, r);
                    }
                    return n[o].exports;
                }
                for (var i = "function" == typeof _dereq_ && _dereq_, o = 0; o < r.length; o++) s(r[o]);
                return s;
            }({
                1: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise) {
                        function any(promises) {
                            var ret = new SomePromiseArray(promises), promise = ret.promise();
                            ret.setHowMany(1);
                            ret.setUnwrap();
                            ret.init();
                            return promise;
                        }
                        var SomePromiseArray = Promise._SomePromiseArray;
                        Promise.any = function(promises) {
                            return any(promises);
                        };
                        Promise.prototype.any = function() {
                            return any(this);
                        };
                    };
                }, {} ],
                2: [ function(_dereq_, module, exports) {
                    "use strict";
                    function Async() {
                        this._isTickUsed = !1;
                        this._lateQueue = new Queue(16);
                        this._normalQueue = new Queue(16);
                        this._trampolineEnabled = !0;
                        var self = this;
                        this.drainQueues = function() {
                            self._drainQueues();
                        };
                        this._schedule = schedule.isStatic ? schedule(this.drainQueues) : schedule;
                    }
                    function AsyncInvokeLater(fn, receiver, arg) {
                        this._lateQueue.push(fn, receiver, arg);
                        this._queueTick();
                    }
                    function AsyncInvoke(fn, receiver, arg) {
                        this._normalQueue.push(fn, receiver, arg);
                        this._queueTick();
                    }
                    function AsyncSettlePromises(promise) {
                        this._normalQueue._pushOne(promise);
                        this._queueTick();
                    }
                    var firstLineError;
                    try {
                        throw new Error();
                    } catch (e) {
                        firstLineError = e;
                    }
                    var schedule = _dereq_("./schedule.js"), Queue = _dereq_("./queue.js"), util = _dereq_("./util.js");
                    Async.prototype.disableTrampolineIfNecessary = function() {
                        if (util.hasDevTools) this._trampolineEnabled = !1;
                    };
                    Async.prototype.enableTrampoline = function() {
                        if (!this._trampolineEnabled) {
                            this._trampolineEnabled = !0;
                            this._schedule = function(fn) {
                                setTimeout(fn, 0);
                            };
                        }
                    };
                    Async.prototype.haveItemsQueued = function() {
                        return this._normalQueue.length() > 0;
                    };
                    Async.prototype.throwLater = function(fn, arg) {
                        if (1 === arguments.length) {
                            arg = fn;
                            fn = function() {
                                throw arg;
                            };
                        }
                        if ("undefined" != typeof setTimeout) setTimeout(function() {
                            fn(arg);
                        }, 0); else try {
                            this._schedule(function() {
                                fn(arg);
                            });
                        } catch (e) {
                            throw new Error("No async scheduler available\n\n    See http://goo.gl/m3OTXk\n");
                        }
                    };
                    if (!util.hasDevTools) {
                        Async.prototype.invokeLater = AsyncInvokeLater;
                        Async.prototype.invoke = AsyncInvoke;
                        Async.prototype.settlePromises = AsyncSettlePromises;
                    } else {
                        if (schedule.isStatic) schedule = function(fn) {
                            setTimeout(fn, 0);
                        };
                        Async.prototype.invokeLater = function(fn, receiver, arg) {
                            if (this._trampolineEnabled) AsyncInvokeLater.call(this, fn, receiver, arg); else this._schedule(function() {
                                setTimeout(function() {
                                    fn.call(receiver, arg);
                                }, 100);
                            });
                        };
                        Async.prototype.invoke = function(fn, receiver, arg) {
                            if (this._trampolineEnabled) AsyncInvoke.call(this, fn, receiver, arg); else this._schedule(function() {
                                fn.call(receiver, arg);
                            });
                        };
                        Async.prototype.settlePromises = function(promise) {
                            if (this._trampolineEnabled) AsyncSettlePromises.call(this, promise); else this._schedule(function() {
                                promise._settlePromises();
                            });
                        };
                    }
                    Async.prototype.invokeFirst = function(fn, receiver, arg) {
                        this._normalQueue.unshift(fn, receiver, arg);
                        this._queueTick();
                    };
                    Async.prototype._drainQueue = function(queue) {
                        for (;queue.length() > 0; ) {
                            var fn = queue.shift();
                            if ("function" == typeof fn) {
                                var receiver = queue.shift(), arg = queue.shift();
                                fn.call(receiver, arg);
                            } else fn._settlePromises();
                        }
                    };
                    Async.prototype._drainQueues = function() {
                        this._drainQueue(this._normalQueue);
                        this._reset();
                        this._drainQueue(this._lateQueue);
                    };
                    Async.prototype._queueTick = function() {
                        if (!this._isTickUsed) {
                            this._isTickUsed = !0;
                            this._schedule(this.drainQueues);
                        }
                    };
                    Async.prototype._reset = function() {
                        this._isTickUsed = !1;
                    };
                    module.exports = new Async();
                    module.exports.firstLineError = firstLineError;
                }, {
                    "./queue.js": 28,
                    "./schedule.js": 31,
                    "./util.js": 38
                } ],
                3: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL, tryConvertToPromise) {
                        var rejectThis = function(_, e) {
                            this._reject(e);
                        }, targetRejected = function(e, context) {
                            context.promiseRejectionQueued = !0;
                            context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
                        }, bindingResolved = function(thisArg, context) {
                            if (this._isPending()) this._resolveCallback(context.target);
                        }, bindingRejected = function(e, context) {
                            if (!context.promiseRejectionQueued) this._reject(e);
                        };
                        Promise.prototype.bind = function(thisArg) {
                            var maybePromise = tryConvertToPromise(thisArg), ret = new Promise(INTERNAL);
                            ret._propagateFrom(this, 1);
                            var target = this._target();
                            ret._setBoundTo(maybePromise);
                            if (maybePromise instanceof Promise) {
                                var context = {
                                    promiseRejectionQueued: !1,
                                    promise: ret,
                                    target: target,
                                    bindingPromise: maybePromise
                                };
                                target._then(INTERNAL, targetRejected, ret._progress, ret, context);
                                maybePromise._then(bindingResolved, bindingRejected, ret._progress, ret, context);
                            } else ret._resolveCallback(target);
                            return ret;
                        };
                        Promise.prototype._setBoundTo = function(obj) {
                            if (obj !== undefined) {
                                this._bitField = 131072 | this._bitField;
                                this._boundTo = obj;
                            } else this._bitField = -131073 & this._bitField;
                        };
                        Promise.prototype._isBound = function() {
                            return 131072 == (131072 & this._bitField);
                        };
                        Promise.bind = function(thisArg, value) {
                            var maybePromise = tryConvertToPromise(thisArg), ret = new Promise(INTERNAL);
                            ret._setBoundTo(maybePromise);
                            if (maybePromise instanceof Promise) maybePromise._then(function() {
                                ret._resolveCallback(value);
                            }, ret._reject, ret._progress, ret, null); else ret._resolveCallback(value);
                            return ret;
                        };
                    };
                }, {} ],
                4: [ function(_dereq_, module, exports) {
                    "use strict";
                    function noConflict() {
                        try {
                            if (Promise === bluebird) Promise = old;
                        } catch (e) {}
                        return bluebird;
                    }
                    var old;
                    if ("undefined" != typeof Promise) old = Promise;
                    var bluebird = _dereq_("./promise.js")();
                    bluebird.noConflict = noConflict;
                    module.exports = bluebird;
                }, {
                    "./promise.js": 23
                } ],
                5: [ function(_dereq_, module, exports) {
                    "use strict";
                    var cr = Object.create;
                    if (cr) {
                        var callerCache = cr(null), getterCache = cr(null);
                        callerCache[" size"] = getterCache[" size"] = 0;
                    }
                    module.exports = function(Promise) {
                        function ensureMethod(obj, methodName) {
                            var fn;
                            if (null != obj) fn = obj[methodName];
                            if ("function" != typeof fn) {
                                var message = "Object " + util.classString(obj) + " has no method '" + util.toString(methodName) + "'";
                                throw new Promise.TypeError(message);
                            }
                            return fn;
                        }
                        function caller(obj) {
                            return ensureMethod(obj, this.pop()).apply(obj, this);
                        }
                        function namedGetter(obj) {
                            return obj[this];
                        }
                        function indexedGetter(obj) {
                            var index = +this;
                            if (index < 0) index = Math.max(0, index + obj.length);
                            return obj[index];
                        }
                        var getMethodCaller, getGetter, util = _dereq_("./util.js"), canEvaluate = util.canEvaluate, isIdentifier = util.isIdentifier;
                        if (!1) {
                            var makeMethodCaller = function(methodName) {
                                return new Function("ensureMethod", "                                    \n        return function(obj) {                                               \n            'use strict'                                                     \n            var len = this.length;                                           \n            ensureMethod(obj, 'methodName');                                 \n            switch(len) {                                                    \n                case 1: return obj.methodName(this[0]);                      \n                case 2: return obj.methodName(this[0], this[1]);             \n                case 3: return obj.methodName(this[0], this[1], this[2]);    \n                case 0: return obj.methodName();                             \n                default:                                                     \n                    return obj.methodName.apply(obj, this);                  \n            }                                                                \n        };                                                                   \n        ".replace(/methodName/g, methodName))(ensureMethod);
                            }, makeGetter = function(propertyName) {
                                return new Function("obj", "                                             \n        'use strict';                                                        \n        return obj.propertyName;                                             \n        ".replace("propertyName", propertyName));
                            }, getCompiled = function(name, compiler, cache) {
                                var ret = cache[name];
                                if ("function" != typeof ret) {
                                    if (!isIdentifier(name)) return null;
                                    ret = compiler(name);
                                    cache[name] = ret;
                                    cache[" size"]++;
                                    if (cache[" size"] > 512) {
                                        for (var keys = Object.keys(cache), i = 0; i < 256; ++i) delete cache[keys[i]];
                                        cache[" size"] = keys.length - 256;
                                    }
                                }
                                return ret;
                            };
                            getMethodCaller = function(name) {
                                return getCompiled(name, makeMethodCaller, callerCache);
                            };
                            getGetter = function(name) {
                                return getCompiled(name, makeGetter, getterCache);
                            };
                        }
                        Promise.prototype.call = function(methodName) {
                            for (var $_len = arguments.length, args = new Array($_len - 1), $_i = 1; $_i < $_len; ++$_i) args[$_i - 1] = arguments[$_i];
                            if (!1) if (canEvaluate) {
                                var maybeCaller = getMethodCaller(methodName);
                                if (null !== maybeCaller) return this._then(maybeCaller, undefined, undefined, args, undefined);
                            }
                            args.push(methodName);
                            return this._then(caller, undefined, undefined, args, undefined);
                        };
                        Promise.prototype.get = function(propertyName) {
                            var getter, isIndex = "number" == typeof propertyName;
                            if (!isIndex) if (canEvaluate) {
                                var maybeGetter = getGetter(propertyName);
                                getter = null !== maybeGetter ? maybeGetter : namedGetter;
                            } else getter = namedGetter; else getter = indexedGetter;
                            return this._then(getter, undefined, undefined, propertyName, undefined);
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                6: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise) {
                        var errors = _dereq_("./errors.js"), async = _dereq_("./async.js"), CancellationError = errors.CancellationError;
                        Promise.prototype._cancel = function(reason) {
                            if (!this.isCancellable()) return this;
                            for (var parent, promiseToReject = this; (parent = promiseToReject._cancellationParent) !== undefined && parent.isCancellable(); ) promiseToReject = parent;
                            this._unsetCancellable();
                            promiseToReject._target()._rejectCallback(reason, !1, !0);
                        };
                        Promise.prototype.cancel = function(reason) {
                            if (!this.isCancellable()) return this;
                            if (reason === undefined) reason = new CancellationError();
                            async.invokeLater(this._cancel, this, reason);
                            return this;
                        };
                        Promise.prototype.cancellable = function() {
                            if (this._cancellable()) return this;
                            async.enableTrampoline();
                            this._setCancellable();
                            this._cancellationParent = undefined;
                            return this;
                        };
                        Promise.prototype.uncancellable = function() {
                            var ret = this.then();
                            ret._unsetCancellable();
                            return ret;
                        };
                        Promise.prototype.fork = function(didFulfill, didReject, didProgress) {
                            var ret = this._then(didFulfill, didReject, didProgress, undefined, undefined);
                            ret._setCancellable();
                            ret._cancellationParent = undefined;
                            return ret;
                        };
                    };
                }, {
                    "./async.js": 2,
                    "./errors.js": 13
                } ],
                7: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function() {
                        function CapturedTrace(parent) {
                            this._parent = parent;
                            var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
                            captureStackTrace(this, CapturedTrace);
                            if (length > 32) this.uncycle();
                        }
                        function reconstructStack(message, stacks) {
                            for (var i = 0; i < stacks.length - 1; ++i) {
                                stacks[i].push("From previous event:");
                                stacks[i] = stacks[i].join("\n");
                            }
                            if (i < stacks.length) stacks[i] = stacks[i].join("\n");
                            return message + "\n" + stacks.join("\n");
                        }
                        function removeDuplicateOrEmptyJumps(stacks) {
                            for (var i = 0; i < stacks.length; ++i) if (0 === stacks[i].length || i + 1 < stacks.length && stacks[i][0] === stacks[i + 1][0]) {
                                stacks.splice(i, 1);
                                i--;
                            }
                        }
                        function removeCommonRoots(stacks) {
                            for (var current = stacks[0], i = 1; i < stacks.length; ++i) {
                                for (var prev = stacks[i], currentLastIndex = current.length - 1, currentLastLine = current[currentLastIndex], commonRootMeetPoint = -1, j = prev.length - 1; j >= 0; --j) if (prev[j] === currentLastLine) {
                                    commonRootMeetPoint = j;
                                    break;
                                }
                                for (var j = commonRootMeetPoint; j >= 0; --j) {
                                    var line = prev[j];
                                    if (current[currentLastIndex] === line) {
                                        current.pop();
                                        currentLastIndex--;
                                    } else break;
                                }
                                current = prev;
                            }
                        }
                        function cleanStack(stack) {
                            for (var ret = [], i = 0; i < stack.length; ++i) {
                                var line = stack[i], isTraceLine = stackFramePattern.test(line) || "    (No stack trace)" === line, isInternalFrame = isTraceLine && shouldIgnore(line);
                                if (isTraceLine && !isInternalFrame) {
                                    if (indentStackFrames && " " !== line.charAt(0)) line = "    " + line;
                                    ret.push(line);
                                }
                            }
                            return ret;
                        }
                        function stackFramesAsArray(error) {
                            for (var stack = error.stack.replace(/\s+$/g, "").split("\n"), i = 0; i < stack.length; ++i) {
                                var line = stack[i];
                                if ("    (No stack trace)" === line || stackFramePattern.test(line)) break;
                            }
                            if (i > 0) stack = stack.slice(i);
                            return stack;
                        }
                        function formatNonError(obj) {
                            var str;
                            if ("function" == typeof obj) str = "[function " + (obj.name || "anonymous") + "]"; else {
                                str = obj.toString();
                                if (/\[object [a-zA-Z0-9$_]+\]/.test(str)) try {
                                    str = JSON.stringify(obj);
                                } catch (e) {}
                                if (0 === str.length) str = "(empty array)";
                            }
                            return "(<" + snip(str) + ">, no stack trace)";
                        }
                        function snip(str) {
                            if (str.length < 41) return str; else return str.substr(0, 38) + "...";
                        }
                        function parseLineInfo(line) {
                            var matches = line.match(parseLineInfoRegex);
                            if (matches) return {
                                fileName: matches[1],
                                line: parseInt(matches[2], 10)
                            };
                        }
                        var warn, async = _dereq_("./async.js"), util = _dereq_("./util.js"), bluebirdFramePattern = /[\\\/]bluebird[\\\/]js[\\\/](main|debug|zalgo|instrumented)/, stackFramePattern = null, formatStack = null, indentStackFrames = !1;
                        util.inherits(CapturedTrace, Error);
                        CapturedTrace.prototype.uncycle = function() {
                            var length = this._length;
                            if (!(length < 2)) {
                                for (var nodes = [], stackToIndex = {}, i = 0, node = this; node !== undefined; ++i) {
                                    nodes.push(node);
                                    node = node._parent;
                                }
                                length = this._length = i;
                                for (var i = length - 1; i >= 0; --i) {
                                    var stack = nodes[i].stack;
                                    if (stackToIndex[stack] === undefined) stackToIndex[stack] = i;
                                }
                                for (var i = 0; i < length; ++i) {
                                    var currentStack = nodes[i].stack, index = stackToIndex[currentStack];
                                    if (index !== undefined && index !== i) {
                                        if (index > 0) {
                                            nodes[index - 1]._parent = undefined;
                                            nodes[index - 1]._length = 1;
                                        }
                                        nodes[i]._parent = undefined;
                                        nodes[i]._length = 1;
                                        var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;
                                        if (index < length - 1) {
                                            cycleEdgeNode._parent = nodes[index + 1];
                                            cycleEdgeNode._parent.uncycle();
                                            cycleEdgeNode._length = cycleEdgeNode._parent._length + 1;
                                        } else {
                                            cycleEdgeNode._parent = undefined;
                                            cycleEdgeNode._length = 1;
                                        }
                                        for (var currentChildLength = cycleEdgeNode._length + 1, j = i - 2; j >= 0; --j) {
                                            nodes[j]._length = currentChildLength;
                                            currentChildLength++;
                                        }
                                        return;
                                    }
                                }
                            }
                        };
                        CapturedTrace.prototype.parent = function() {
                            return this._parent;
                        };
                        CapturedTrace.prototype.hasParent = function() {
                            return this._parent !== undefined;
                        };
                        CapturedTrace.prototype.attachExtraTrace = function(error) {
                            if (!error.__stackCleaned__) {
                                this.uncycle();
                                for (var parsed = CapturedTrace.parseStackAndMessage(error), message = parsed.message, stacks = [ parsed.stack ], trace = this; trace !== undefined; ) {
                                    stacks.push(cleanStack(trace.stack.split("\n")));
                                    trace = trace._parent;
                                }
                                removeCommonRoots(stacks);
                                removeDuplicateOrEmptyJumps(stacks);
                                util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
                                util.notEnumerableProp(error, "__stackCleaned__", !0);
                            }
                        };
                        CapturedTrace.parseStackAndMessage = function(error) {
                            var stack = error.stack, message = error.toString();
                            stack = "string" == typeof stack && stack.length > 0 ? stackFramesAsArray(error) : [ "    (No stack trace)" ];
                            return {
                                message: message,
                                stack: cleanStack(stack)
                            };
                        };
                        CapturedTrace.formatAndLogError = function(error, title) {
                            if ("undefined" != typeof console) {
                                var message;
                                if ("object" == typeof error || "function" == typeof error) {
                                    var stack = error.stack;
                                    message = title + formatStack(stack, error);
                                } else message = title + String(error);
                                if ("function" == typeof warn) warn(message); else if ("function" == typeof console.log || "object" == typeof console.log) console.log(message);
                            }
                        };
                        CapturedTrace.unhandledRejection = function(reason) {
                            CapturedTrace.formatAndLogError(reason, "^--- With additional stack trace: ");
                        };
                        CapturedTrace.isSupported = function() {
                            return "function" == typeof captureStackTrace;
                        };
                        CapturedTrace.fireRejectionEvent = function(name, localHandler, reason, promise) {
                            var localEventFired = !1;
                            try {
                                if ("function" == typeof localHandler) {
                                    localEventFired = !0;
                                    if ("rejectionHandled" === name) localHandler(promise); else localHandler(reason, promise);
                                }
                            } catch (e) {
                                async.throwLater(e);
                            }
                            var globalEventFired = !1;
                            try {
                                globalEventFired = fireGlobalEvent(name, reason, promise);
                            } catch (e) {
                                globalEventFired = !0;
                                async.throwLater(e);
                            }
                            var domEventFired = !1;
                            if (fireDomEvent) try {
                                domEventFired = fireDomEvent(name.toLowerCase(), {
                                    reason: reason,
                                    promise: promise
                                });
                            } catch (e) {
                                domEventFired = !0;
                                async.throwLater(e);
                            }
                            if (!globalEventFired && !localEventFired && !domEventFired && "unhandledRejection" === name) CapturedTrace.formatAndLogError(reason, "Unhandled rejection ");
                        };
                        var shouldIgnore = function() {
                            return !1;
                        }, parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;
                        CapturedTrace.setBounds = function(firstLineError, lastLineError) {
                            if (CapturedTrace.isSupported()) {
                                for (var firstFileName, lastFileName, firstStackLines = firstLineError.stack.split("\n"), lastStackLines = lastLineError.stack.split("\n"), firstIndex = -1, lastIndex = -1, i = 0; i < firstStackLines.length; ++i) {
                                    var result = parseLineInfo(firstStackLines[i]);
                                    if (result) {
                                        firstFileName = result.fileName;
                                        firstIndex = result.line;
                                        break;
                                    }
                                }
                                for (var i = 0; i < lastStackLines.length; ++i) {
                                    var result = parseLineInfo(lastStackLines[i]);
                                    if (result) {
                                        lastFileName = result.fileName;
                                        lastIndex = result.line;
                                        break;
                                    }
                                }
                                if (!(firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || firstFileName !== lastFileName || firstIndex >= lastIndex)) shouldIgnore = function(line) {
                                    if (bluebirdFramePattern.test(line)) return !0;
                                    var info = parseLineInfo(line);
                                    if (info) if (info.fileName === firstFileName && firstIndex <= info.line && info.line <= lastIndex) return !0;
                                    return !1;
                                };
                            }
                        };
                        var fireDomEvent, captureStackTrace = function() {
                            var v8stackFramePattern = /^\s*at\s*/, v8stackFormatter = function(stack, error) {
                                if ("string" == typeof stack) return stack;
                                if (error.name !== undefined && error.message !== undefined) return error.toString(); else return formatNonError(error);
                            };
                            if ("number" == typeof Error.stackTraceLimit && "function" == typeof Error.captureStackTrace) {
                                Error.stackTraceLimit = Error.stackTraceLimit + 6;
                                stackFramePattern = v8stackFramePattern;
                                formatStack = v8stackFormatter;
                                var captureStackTrace = Error.captureStackTrace;
                                shouldIgnore = function(line) {
                                    return bluebirdFramePattern.test(line);
                                };
                                return function(receiver, ignoreUntil) {
                                    Error.stackTraceLimit = Error.stackTraceLimit + 6;
                                    captureStackTrace(receiver, ignoreUntil);
                                    Error.stackTraceLimit = Error.stackTraceLimit - 6;
                                };
                            }
                            var err = new Error();
                            if ("string" == typeof err.stack && err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
                                stackFramePattern = /@/;
                                formatStack = v8stackFormatter;
                                indentStackFrames = !0;
                                return function(o) {
                                    o.stack = new Error().stack;
                                };
                            }
                            var hasStackAfterThrow;
                            try {
                                throw new Error();
                            } catch (e) {
                                hasStackAfterThrow = "stack" in e;
                            }
                            if (!("stack" in err) && hasStackAfterThrow && "number" == typeof Error.stackTraceLimit) {
                                stackFramePattern = v8stackFramePattern;
                                formatStack = v8stackFormatter;
                                return function(o) {
                                    Error.stackTraceLimit = Error.stackTraceLimit + 6;
                                    try {
                                        throw new Error();
                                    } catch (e) {
                                        o.stack = e.stack;
                                    }
                                    Error.stackTraceLimit = Error.stackTraceLimit - 6;
                                };
                            }
                            formatStack = function(stack, error) {
                                if ("string" == typeof stack) return stack;
                                if (("object" == typeof error || "function" == typeof error) && error.name !== undefined && error.message !== undefined) return error.toString(); else return formatNonError(error);
                            };
                            return null;
                        }(), fireGlobalEvent = function() {
                            if (util.isNode) return function(name, reason, promise) {
                                if ("rejectionHandled" === name) return process.emit(name, promise); else return process.emit(name, reason, promise);
                            }; else {
                                var customEventWorks = !1, anyEventWorks = !0;
                                try {
                                    var ev = new self.CustomEvent("test");
                                    customEventWorks = ev instanceof CustomEvent;
                                } catch (e) {}
                                if (!customEventWorks) try {
                                    var event = document.createEvent("CustomEvent");
                                    event.initCustomEvent("testingtheevent", !1, !0, {});
                                    self.dispatchEvent(event);
                                } catch (e) {
                                    anyEventWorks = !1;
                                }
                                if (anyEventWorks) fireDomEvent = function(type, detail) {
                                    var event;
                                    if (customEventWorks) event = new self.CustomEvent(type, {
                                        detail: detail,
                                        bubbles: !1,
                                        cancelable: !0
                                    }); else if (self.dispatchEvent) {
                                        event = document.createEvent("CustomEvent");
                                        event.initCustomEvent(type, !1, !0, detail);
                                    }
                                    return event ? !self.dispatchEvent(event) : !1;
                                };
                                var toWindowMethodNameMap = {};
                                toWindowMethodNameMap.unhandledRejection = "onunhandledRejection".toLowerCase();
                                toWindowMethodNameMap.rejectionHandled = "onrejectionHandled".toLowerCase();
                                return function(name, reason, promise) {
                                    var methodName = toWindowMethodNameMap[name], method = self[methodName];
                                    if (!method) return !1;
                                    if ("rejectionHandled" === name) method.call(self, promise); else method.call(self, reason, promise);
                                    return !0;
                                };
                            }
                        }();
                        if ("undefined" != typeof console && "undefined" != typeof console.warn) {
                            warn = function(message) {
                                console.warn(message);
                            };
                            if (util.isNode && process.stderr.isTTY) warn = function(message) {
                                process.stderr.write("[31m" + message + "[39m\n");
                            }; else if (!util.isNode && "string" == typeof new Error().stack) warn = function(message) {
                                console.warn("%c" + message, "color: red");
                            };
                        }
                        return CapturedTrace;
                    };
                }, {
                    "./async.js": 2,
                    "./util.js": 38
                } ],
                8: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(NEXT_FILTER) {
                        function CatchFilter(instances, callback, promise) {
                            this._instances = instances;
                            this._callback = callback;
                            this._promise = promise;
                        }
                        function safePredicate(predicate, e) {
                            var safeObject = {}, retfilter = tryCatch(predicate).call(safeObject, e);
                            if (retfilter === errorObj) return retfilter;
                            if (keys(safeObject).length) {
                                errorObj.e = new TypeError("Catch filter must inherit from Error or be a simple predicate function\n\n    See http://goo.gl/o84o68\n");
                                return errorObj;
                            }
                            return retfilter;
                        }
                        var util = _dereq_("./util.js"), errors = _dereq_("./errors.js"), tryCatch = util.tryCatch, errorObj = util.errorObj, keys = _dereq_("./es5.js").keys, TypeError = errors.TypeError;
                        CatchFilter.prototype.doFilter = function(e) {
                            for (var cb = this._callback, promise = this._promise, boundTo = promise._boundValue(), i = 0, len = this._instances.length; i < len; ++i) {
                                var item = this._instances[i], itemIsErrorType = item === Error || null != item && item.prototype instanceof Error;
                                if (itemIsErrorType && e instanceof item) {
                                    var ret = tryCatch(cb).call(boundTo, e);
                                    if (ret === errorObj) {
                                        NEXT_FILTER.e = ret.e;
                                        return NEXT_FILTER;
                                    }
                                    return ret;
                                } else if ("function" == typeof item && !itemIsErrorType) {
                                    var shouldHandle = safePredicate(item, e);
                                    if (shouldHandle === errorObj) {
                                        e = errorObj.e;
                                        break;
                                    } else if (shouldHandle) {
                                        var ret = tryCatch(cb).call(boundTo, e);
                                        if (ret === errorObj) {
                                            NEXT_FILTER.e = ret.e;
                                            return NEXT_FILTER;
                                        }
                                        return ret;
                                    }
                                }
                            }
                            NEXT_FILTER.e = e;
                            return NEXT_FILTER;
                        };
                        return CatchFilter;
                    };
                }, {
                    "./errors.js": 13,
                    "./es5.js": 14,
                    "./util.js": 38
                } ],
                9: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, CapturedTrace, isDebugging) {
                        function Context() {
                            this._trace = new CapturedTrace(peekContext());
                        }
                        function createContext() {
                            if (isDebugging()) return new Context();
                        }
                        function peekContext() {
                            var lastIndex = contextStack.length - 1;
                            if (lastIndex >= 0) return contextStack[lastIndex]; else return undefined;
                        }
                        var contextStack = [];
                        Context.prototype._pushContext = function() {
                            if (isDebugging()) if (this._trace !== undefined) contextStack.push(this._trace);
                        };
                        Context.prototype._popContext = function() {
                            if (isDebugging()) if (this._trace !== undefined) contextStack.pop();
                        };
                        Promise.prototype._peekContext = peekContext;
                        Promise.prototype._pushContext = Context.prototype._pushContext;
                        Promise.prototype._popContext = Context.prototype._popContext;
                        return createContext;
                    };
                }, {} ],
                10: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, CapturedTrace) {
                        var unhandledRejectionHandled, possiblyUnhandledRejection, getDomain = Promise._getDomain, async = _dereq_("./async.js"), Warning = _dereq_("./errors.js").Warning, util = _dereq_("./util.js"), canAttachTrace = util.canAttachTrace, debugging = util.isNode && (!!process.env.BLUEBIRD_DEBUG || !0);
                        if (util.isNode && 0 == process.env.BLUEBIRD_DEBUG) debugging = !1;
                        if (debugging) async.disableTrampolineIfNecessary();
                        Promise.prototype._ignoreRejections = function() {
                            this._unsetRejectionIsUnhandled();
                            this._bitField = 16777216 | this._bitField;
                        };
                        Promise.prototype._ensurePossibleRejectionHandled = function() {
                            if (0 == (16777216 & this._bitField)) {
                                this._setRejectionIsUnhandled();
                                async.invokeLater(this._notifyUnhandledRejection, this, undefined);
                            }
                        };
                        Promise.prototype._notifyUnhandledRejectionIsHandled = function() {
                            CapturedTrace.fireRejectionEvent("rejectionHandled", unhandledRejectionHandled, undefined, this);
                        };
                        Promise.prototype._notifyUnhandledRejection = function() {
                            if (this._isRejectionUnhandled()) {
                                var reason = this._getCarriedStackTrace() || this._settledValue;
                                this._setUnhandledRejectionIsNotified();
                                CapturedTrace.fireRejectionEvent("unhandledRejection", possiblyUnhandledRejection, reason, this);
                            }
                        };
                        Promise.prototype._setUnhandledRejectionIsNotified = function() {
                            this._bitField = 524288 | this._bitField;
                        };
                        Promise.prototype._unsetUnhandledRejectionIsNotified = function() {
                            this._bitField = -524289 & this._bitField;
                        };
                        Promise.prototype._isUnhandledRejectionNotified = function() {
                            return (524288 & this._bitField) > 0;
                        };
                        Promise.prototype._setRejectionIsUnhandled = function() {
                            this._bitField = 2097152 | this._bitField;
                        };
                        Promise.prototype._unsetRejectionIsUnhandled = function() {
                            this._bitField = -2097153 & this._bitField;
                            if (this._isUnhandledRejectionNotified()) {
                                this._unsetUnhandledRejectionIsNotified();
                                this._notifyUnhandledRejectionIsHandled();
                            }
                        };
                        Promise.prototype._isRejectionUnhandled = function() {
                            return (2097152 & this._bitField) > 0;
                        };
                        Promise.prototype._setCarriedStackTrace = function(capturedTrace) {
                            this._bitField = 1048576 | this._bitField;
                            this._fulfillmentHandler0 = capturedTrace;
                        };
                        Promise.prototype._isCarryingStackTrace = function() {
                            return (1048576 & this._bitField) > 0;
                        };
                        Promise.prototype._getCarriedStackTrace = function() {
                            return this._isCarryingStackTrace() ? this._fulfillmentHandler0 : undefined;
                        };
                        Promise.prototype._captureStackTrace = function() {
                            if (debugging) this._trace = new CapturedTrace(this._peekContext());
                            return this;
                        };
                        Promise.prototype._attachExtraTrace = function(error, ignoreSelf) {
                            if (debugging && canAttachTrace(error)) {
                                var trace = this._trace;
                                if (trace !== undefined) if (ignoreSelf) trace = trace._parent;
                                if (trace !== undefined) trace.attachExtraTrace(error); else if (!error.__stackCleaned__) {
                                    var parsed = CapturedTrace.parseStackAndMessage(error);
                                    util.notEnumerableProp(error, "stack", parsed.message + "\n" + parsed.stack.join("\n"));
                                    util.notEnumerableProp(error, "__stackCleaned__", !0);
                                }
                            }
                        };
                        Promise.prototype._warn = function(message) {
                            var warning = new Warning(message), ctx = this._peekContext();
                            if (ctx) ctx.attachExtraTrace(warning); else {
                                var parsed = CapturedTrace.parseStackAndMessage(warning);
                                warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
                            }
                            CapturedTrace.formatAndLogError(warning, "");
                        };
                        Promise.onPossiblyUnhandledRejection = function(fn) {
                            var domain = getDomain();
                            possiblyUnhandledRejection = "function" == typeof fn ? null === domain ? fn : domain.bind(fn) : undefined;
                        };
                        Promise.onUnhandledRejectionHandled = function(fn) {
                            var domain = getDomain();
                            unhandledRejectionHandled = "function" == typeof fn ? null === domain ? fn : domain.bind(fn) : undefined;
                        };
                        Promise.longStackTraces = function() {
                            if (async.haveItemsQueued() && !1 === debugging) throw new Error("cannot enable long stack traces after promises have been created\n\n    See http://goo.gl/DT1qyG\n");
                            debugging = CapturedTrace.isSupported();
                            if (debugging) async.disableTrampolineIfNecessary();
                        };
                        Promise.hasLongStackTraces = function() {
                            return debugging && CapturedTrace.isSupported();
                        };
                        if (!CapturedTrace.isSupported()) {
                            Promise.longStackTraces = function() {};
                            debugging = !1;
                        }
                        return function() {
                            return debugging;
                        };
                    };
                }, {
                    "./async.js": 2,
                    "./errors.js": 13,
                    "./util.js": 38
                } ],
                11: [ function(_dereq_, module, exports) {
                    "use strict";
                    var util = _dereq_("./util.js"), isPrimitive = util.isPrimitive;
                    module.exports = function(Promise) {
                        var returner = function() {
                            return this;
                        }, thrower = function() {
                            throw this;
                        }, returnUndefined = function() {}, throwUndefined = function() {
                            throw undefined;
                        }, wrapper = function(value, action) {
                            if (1 === action) return function() {
                                throw value;
                            }; else if (2 === action) return function() {
                                return value;
                            };
                        };
                        Promise.prototype["return"] = Promise.prototype.thenReturn = function(value) {
                            if (value === undefined) return this.then(returnUndefined);
                            if (isPrimitive(value)) return this._then(wrapper(value, 2), undefined, undefined, undefined, undefined); else if (value instanceof Promise) value._ignoreRejections();
                            return this._then(returner, undefined, undefined, value, undefined);
                        };
                        Promise.prototype["throw"] = Promise.prototype.thenThrow = function(reason) {
                            if (reason === undefined) return this.then(throwUndefined);
                            if (isPrimitive(reason)) return this._then(wrapper(reason, 1), undefined, undefined, undefined, undefined); else return this._then(thrower, undefined, undefined, reason, undefined);
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                12: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL) {
                        var PromiseReduce = Promise.reduce;
                        Promise.prototype.each = function(fn) {
                            return PromiseReduce(this, fn, null, INTERNAL);
                        };
                        Promise.each = function(promises, fn) {
                            return PromiseReduce(promises, fn, null, INTERNAL);
                        };
                    };
                }, {} ],
                13: [ function(_dereq_, module, exports) {
                    "use strict";
                    function subError(nameProperty, defaultMessage) {
                        function SubError(message) {
                            if (!(this instanceof SubError)) return new SubError(message);
                            notEnumerableProp(this, "message", "string" == typeof message ? message : defaultMessage);
                            notEnumerableProp(this, "name", nameProperty);
                            if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor); else Error.call(this);
                        }
                        inherits(SubError, Error);
                        return SubError;
                    }
                    function OperationalError(message) {
                        if (!(this instanceof OperationalError)) return new OperationalError(message);
                        notEnumerableProp(this, "name", "OperationalError");
                        notEnumerableProp(this, "message", message);
                        this.cause = message;
                        this.isOperational = !0;
                        if (message instanceof Error) {
                            notEnumerableProp(this, "message", message.message);
                            notEnumerableProp(this, "stack", message.stack);
                        } else if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
                    }
                    var _TypeError, _RangeError, es5 = _dereq_("./es5.js"), Objectfreeze = es5.freeze, util = _dereq_("./util.js"), inherits = util.inherits, notEnumerableProp = util.notEnumerableProp, Warning = subError("Warning", "warning"), CancellationError = subError("CancellationError", "cancellation error"), TimeoutError = subError("TimeoutError", "timeout error"), AggregateError = subError("AggregateError", "aggregate error");
                    try {
                        _TypeError = TypeError;
                        _RangeError = RangeError;
                    } catch (e) {
                        _TypeError = subError("TypeError", "type error");
                        _RangeError = subError("RangeError", "range error");
                    }
                    for (var methods = "join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "), i = 0; i < methods.length; ++i) if ("function" == typeof Array.prototype[methods[i]]) AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];
                    es5.defineProperty(AggregateError.prototype, "length", {
                        value: 0,
                        configurable: !1,
                        writable: !0,
                        enumerable: !0
                    });
                    AggregateError.prototype.isOperational = !0;
                    var level = 0;
                    AggregateError.prototype.toString = function() {
                        var indent = Array(4 * level + 1).join(" "), ret = "\n" + indent + "AggregateError of:\n";
                        level++;
                        indent = Array(4 * level + 1).join(" ");
                        for (var i = 0; i < this.length; ++i) {
                            for (var str = this[i] === this ? "[Circular AggregateError]" : this[i] + "", lines = str.split("\n"), j = 0; j < lines.length; ++j) lines[j] = indent + lines[j];
                            str = lines.join("\n");
                            ret += str + "\n";
                        }
                        level--;
                        return ret;
                    };
                    inherits(OperationalError, Error);
                    var errorTypes = Error.__BluebirdErrorTypes__;
                    if (!errorTypes) {
                        errorTypes = Objectfreeze({
                            CancellationError: CancellationError,
                            TimeoutError: TimeoutError,
                            OperationalError: OperationalError,
                            RejectionError: OperationalError,
                            AggregateError: AggregateError
                        });
                        notEnumerableProp(Error, "__BluebirdErrorTypes__", errorTypes);
                    }
                    module.exports = {
                        Error: Error,
                        TypeError: _TypeError,
                        RangeError: _RangeError,
                        CancellationError: errorTypes.CancellationError,
                        OperationalError: errorTypes.OperationalError,
                        TimeoutError: errorTypes.TimeoutError,
                        AggregateError: errorTypes.AggregateError,
                        Warning: Warning
                    };
                }, {
                    "./es5.js": 14,
                    "./util.js": 38
                } ],
                14: [ function(_dereq_, module, exports) {
                    var isES5 = function() {
                        "use strict";
                        return this === undefined;
                    }();
                    if (isES5) module.exports = {
                        freeze: Object.freeze,
                        defineProperty: Object.defineProperty,
                        getDescriptor: Object.getOwnPropertyDescriptor,
                        keys: Object.keys,
                        names: Object.getOwnPropertyNames,
                        getPrototypeOf: Object.getPrototypeOf,
                        isArray: Array.isArray,
                        isES5: isES5,
                        propertyIsWritable: function(obj, prop) {
                            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
                            return !(descriptor && !descriptor.writable && !descriptor.set);
                        }
                    }; else {
                        var has = {}.hasOwnProperty, str = {}.toString, proto = {}.constructor.prototype, ObjectKeys = function(o) {
                            var ret = [];
                            for (var key in o) if (has.call(o, key)) ret.push(key);
                            return ret;
                        }, ObjectGetDescriptor = function(o, key) {
                            return {
                                value: o[key]
                            };
                        }, ObjectDefineProperty = function(o, key, desc) {
                            o[key] = desc.value;
                            return o;
                        }, ObjectFreeze = function(obj) {
                            return obj;
                        }, ObjectGetPrototypeOf = function(obj) {
                            try {
                                return Object(obj).constructor.prototype;
                            } catch (e) {
                                return proto;
                            }
                        }, ArrayIsArray = function(obj) {
                            try {
                                return "[object Array]" === str.call(obj);
                            } catch (e) {
                                return !1;
                            }
                        };
                        module.exports = {
                            isArray: ArrayIsArray,
                            keys: ObjectKeys,
                            names: ObjectKeys,
                            defineProperty: ObjectDefineProperty,
                            getDescriptor: ObjectGetDescriptor,
                            freeze: ObjectFreeze,
                            getPrototypeOf: ObjectGetPrototypeOf,
                            isES5: isES5,
                            propertyIsWritable: function() {
                                return !0;
                            }
                        };
                    }
                }, {} ],
                15: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL) {
                        var PromiseMap = Promise.map;
                        Promise.prototype.filter = function(fn, options) {
                            return PromiseMap(this, fn, options, INTERNAL);
                        };
                        Promise.filter = function(promises, fn, options) {
                            return PromiseMap(promises, fn, options, INTERNAL);
                        };
                    };
                }, {} ],
                16: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {
                        function returnThis() {
                            return this;
                        }
                        function throwThis() {
                            throw this;
                        }
                        function return$(r) {
                            return function() {
                                return r;
                            };
                        }
                        function throw$(r) {
                            return function() {
                                throw r;
                            };
                        }
                        function promisedFinally(ret, reasonOrValue, isFulfilled) {
                            var then;
                            if (isPrimitive(reasonOrValue)) then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue); else then = isFulfilled ? returnThis : throwThis;
                            return ret._then(then, thrower, undefined, reasonOrValue, undefined);
                        }
                        function finallyHandler(reasonOrValue) {
                            var promise = this.promise, handler = this.handler, ret = promise._isBound() ? handler.call(promise._boundValue()) : handler();
                            if (ret !== undefined) {
                                var maybePromise = tryConvertToPromise(ret, promise);
                                if (maybePromise instanceof Promise) {
                                    maybePromise = maybePromise._target();
                                    return promisedFinally(maybePromise, reasonOrValue, promise.isFulfilled());
                                }
                            }
                            if (promise.isRejected()) {
                                NEXT_FILTER.e = reasonOrValue;
                                return NEXT_FILTER;
                            } else return reasonOrValue;
                        }
                        function tapHandler(value) {
                            var promise = this.promise, handler = this.handler, ret = promise._isBound() ? handler.call(promise._boundValue(), value) : handler(value);
                            if (ret !== undefined) {
                                var maybePromise = tryConvertToPromise(ret, promise);
                                if (maybePromise instanceof Promise) {
                                    maybePromise = maybePromise._target();
                                    return promisedFinally(maybePromise, value, !0);
                                }
                            }
                            return value;
                        }
                        var util = _dereq_("./util.js"), isPrimitive = util.isPrimitive, thrower = util.thrower;
                        Promise.prototype._passThroughHandler = function(handler, isFinally) {
                            if ("function" != typeof handler) return this.then();
                            var promiseAndHandler = {
                                promise: this,
                                handler: handler
                            };
                            return this._then(isFinally ? finallyHandler : tapHandler, isFinally ? finallyHandler : undefined, undefined, promiseAndHandler, undefined);
                        };
                        Promise.prototype.lastly = Promise.prototype["finally"] = function(handler) {
                            return this._passThroughHandler(handler, !0);
                        };
                        Promise.prototype.tap = function(handler) {
                            return this._passThroughHandler(handler, !1);
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                17: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, apiRejection, INTERNAL, tryConvertToPromise) {
                        function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
                            for (var i = 0; i < yieldHandlers.length; ++i) {
                                traceParent._pushContext();
                                var result = tryCatch(yieldHandlers[i])(value);
                                traceParent._popContext();
                                if (result === errorObj) {
                                    traceParent._pushContext();
                                    var ret = Promise.reject(errorObj.e);
                                    traceParent._popContext();
                                    return ret;
                                }
                                var maybePromise = tryConvertToPromise(result, traceParent);
                                if (maybePromise instanceof Promise) return maybePromise;
                            }
                            return null;
                        }
                        function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
                            (this._promise = new Promise(INTERNAL))._captureStackTrace();
                            this._stack = stack;
                            this._generatorFunction = generatorFunction;
                            this._receiver = receiver;
                            this._generator = undefined;
                            this._yieldHandlers = "function" == typeof yieldHandler ? [ yieldHandler ].concat(yieldHandlers) : yieldHandlers;
                        }
                        var errors = _dereq_("./errors.js"), TypeError = errors.TypeError, util = _dereq_("./util.js"), errorObj = util.errorObj, tryCatch = util.tryCatch, yieldHandlers = [];
                        PromiseSpawn.prototype.promise = function() {
                            return this._promise;
                        };
                        PromiseSpawn.prototype._run = function() {
                            this._generator = this._generatorFunction.call(this._receiver);
                            this._receiver = this._generatorFunction = undefined;
                            this._next(undefined);
                        };
                        PromiseSpawn.prototype._continue = function(result) {
                            if (result === errorObj) return this._promise._rejectCallback(result.e, !1, !0);
                            var value = result.value;
                            if (!0 === result.done) this._promise._resolveCallback(value); else {
                                var maybePromise = tryConvertToPromise(value, this._promise);
                                if (!(maybePromise instanceof Promise)) {
                                    maybePromise = promiseFromYieldHandler(maybePromise, this._yieldHandlers, this._promise);
                                    if (null === maybePromise) {
                                        this._throw(new TypeError("A value %s was yielded that could not be treated as a promise\n\n    See http://goo.gl/4Y4pDk\n\n".replace("%s", value) + "From coroutine:\n" + this._stack.split("\n").slice(1, -7).join("\n")));
                                        return;
                                    }
                                }
                                maybePromise._then(this._next, this._throw, undefined, this, null);
                            }
                        };
                        PromiseSpawn.prototype._throw = function(reason) {
                            this._promise._attachExtraTrace(reason);
                            this._promise._pushContext();
                            var result = tryCatch(this._generator["throw"]).call(this._generator, reason);
                            this._promise._popContext();
                            this._continue(result);
                        };
                        PromiseSpawn.prototype._next = function(value) {
                            this._promise._pushContext();
                            var result = tryCatch(this._generator.next).call(this._generator, value);
                            this._promise._popContext();
                            this._continue(result);
                        };
                        Promise.coroutine = function(generatorFunction, options) {
                            if ("function" != typeof generatorFunction) throw new TypeError("generatorFunction must be a function\n\n    See http://goo.gl/6Vqhm0\n");
                            var yieldHandler = Object(options).yieldHandler, PromiseSpawn$ = PromiseSpawn, stack = new Error().stack;
                            return function() {
                                var generator = generatorFunction.apply(this, arguments), spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, stack);
                                spawn._generator = generator;
                                spawn._next(undefined);
                                return spawn.promise();
                            };
                        };
                        Promise.coroutine.addYieldHandler = function(fn) {
                            if ("function" != typeof fn) throw new TypeError("fn must be a function\n\n    See http://goo.gl/916lJJ\n");
                            yieldHandlers.push(fn);
                        };
                        Promise.spawn = function(generatorFunction) {
                            if ("function" != typeof generatorFunction) return apiRejection("generatorFunction must be a function\n\n    See http://goo.gl/6Vqhm0\n");
                            var spawn = new PromiseSpawn(generatorFunction, this), ret = spawn.promise();
                            spawn._run(Promise.spawn);
                            return ret;
                        };
                    };
                }, {
                    "./errors.js": 13,
                    "./util.js": 38
                } ],
                18: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) {
                        var reject, util = _dereq_("./util.js"), canEvaluate = util.canEvaluate, tryCatch = util.tryCatch, errorObj = util.errorObj;
                        if (!1) if (canEvaluate) {
                            for (var thenCallbacks = [], callers = [ undefined ], i = 1; i <= 5; ++i) {
                                thenCallbacks.push(function(i) {
                                    return new Function("value", "holder", "                             \n            'use strict';                                                    \n            holder.pIndex = value;                                           \n            holder.checkFulfillment(this);                                   \n            ".replace(/Index/g, i));
                                }(i));
                                callers.push(function(count) {
                                    for (var values = [], i = 1; i <= count; ++i) values.push("holder.p" + i);
                                    return new Function("holder", "                                      \n            'use strict';                                                    \n            var callback = holder.fn;                                        \n            return callback(values);                                         \n            ".replace(/values/g, values.join(", ")));
                                }(i));
                            }
                            var Holder = function(total, fn) {
                                this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null;
                                this.fn = fn;
                                this.total = total;
                                this.now = 0;
                            };
                            Holder.prototype.callers = callers;
                            Holder.prototype.checkFulfillment = function(promise) {
                                var now = this.now;
                                now++;
                                var total = this.total;
                                if (now >= total) {
                                    var handler = this.callers[total];
                                    promise._pushContext();
                                    var ret = tryCatch(handler)(this);
                                    promise._popContext();
                                    if (ret === errorObj) promise._rejectCallback(ret.e, !1, !0); else promise._resolveCallback(ret);
                                } else this.now = now;
                            };
                            var reject = function(reason) {
                                this._reject(reason);
                            };
                        }
                        Promise.join = function() {
                            var fn, last = arguments.length - 1;
                            if (last > 0 && "function" == typeof arguments[last]) {
                                fn = arguments[last];
                                if (!1) if (last < 6 && canEvaluate) {
                                    var ret = new Promise(INTERNAL);
                                    ret._captureStackTrace();
                                    for (var holder = new Holder(last, fn), callbacks = thenCallbacks, i = 0; i < last; ++i) {
                                        var maybePromise = tryConvertToPromise(arguments[i], ret);
                                        if (maybePromise instanceof Promise) {
                                            maybePromise = maybePromise._target();
                                            if (maybePromise._isPending()) maybePromise._then(callbacks[i], reject, undefined, ret, holder); else if (maybePromise._isFulfilled()) callbacks[i].call(ret, maybePromise._value(), holder); else ret._reject(maybePromise._reason());
                                        } else callbacks[i].call(ret, maybePromise, holder);
                                    }
                                    return ret;
                                }
                            }
                            for (var $_len = arguments.length, args = new Array($_len), $_i = 0; $_i < $_len; ++$_i) args[$_i] = arguments[$_i];
                            if (fn) args.pop();
                            var ret = new PromiseArray(args).promise();
                            return fn !== undefined ? ret.spread(fn) : ret;
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                19: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL) {
                        function MappingPromiseArray(promises, fn, limit, _filter) {
                            this.constructor$(promises);
                            this._promise._captureStackTrace();
                            var domain = getDomain();
                            this._callback = null === domain ? fn : domain.bind(fn);
                            this._preservedValues = _filter === INTERNAL ? new Array(this.length()) : null;
                            this._limit = limit;
                            this._inFlight = 0;
                            this._queue = limit >= 1 ? [] : EMPTY_ARRAY;
                            async.invoke(init, this, undefined);
                        }
                        function init() {
                            this._init$(undefined, -2);
                        }
                        function map(promises, fn, options, _filter) {
                            var limit = "object" == typeof options && null !== options ? options.concurrency : 0;
                            limit = "number" == typeof limit && isFinite(limit) && limit >= 1 ? limit : 0;
                            return new MappingPromiseArray(promises, fn, limit, _filter);
                        }
                        var getDomain = Promise._getDomain, async = _dereq_("./async.js"), util = _dereq_("./util.js"), tryCatch = util.tryCatch, errorObj = util.errorObj, PENDING = {}, EMPTY_ARRAY = [];
                        util.inherits(MappingPromiseArray, PromiseArray);
                        MappingPromiseArray.prototype._init = function() {};
                        MappingPromiseArray.prototype._promiseFulfilled = function(value, index) {
                            var values = this._values, length = this.length(), preservedValues = this._preservedValues, limit = this._limit;
                            if (values[index] === PENDING) {
                                values[index] = value;
                                if (limit >= 1) {
                                    this._inFlight--;
                                    this._drainQueue();
                                    if (this._isResolved()) return;
                                }
                            } else {
                                if (limit >= 1 && this._inFlight >= limit) {
                                    values[index] = value;
                                    this._queue.push(index);
                                    return;
                                }
                                if (null !== preservedValues) preservedValues[index] = value;
                                var callback = this._callback, receiver = this._promise._boundValue();
                                this._promise._pushContext();
                                var ret = tryCatch(callback).call(receiver, value, index, length);
                                this._promise._popContext();
                                if (ret === errorObj) return this._reject(ret.e);
                                var maybePromise = tryConvertToPromise(ret, this._promise);
                                if (maybePromise instanceof Promise) {
                                    maybePromise = maybePromise._target();
                                    if (maybePromise._isPending()) {
                                        if (limit >= 1) this._inFlight++;
                                        values[index] = PENDING;
                                        return maybePromise._proxyPromiseArray(this, index);
                                    } else if (maybePromise._isFulfilled()) ret = maybePromise._value(); else return this._reject(maybePromise._reason());
                                }
                                values[index] = ret;
                            }
                            if (++this._totalResolved >= length) if (null !== preservedValues) this._filter(values, preservedValues); else this._resolve(values);
                        };
                        MappingPromiseArray.prototype._drainQueue = function() {
                            for (var queue = this._queue, limit = this._limit, values = this._values; queue.length > 0 && this._inFlight < limit; ) {
                                if (this._isResolved()) return;
                                var index = queue.pop();
                                this._promiseFulfilled(values[index], index);
                            }
                        };
                        MappingPromiseArray.prototype._filter = function(booleans, values) {
                            for (var len = values.length, ret = new Array(len), j = 0, i = 0; i < len; ++i) if (booleans[i]) ret[j++] = values[i];
                            ret.length = j;
                            this._resolve(ret);
                        };
                        MappingPromiseArray.prototype.preservedValues = function() {
                            return this._preservedValues;
                        };
                        Promise.prototype.map = function(fn, options) {
                            if ("function" != typeof fn) return apiRejection("fn must be a function\n\n    See http://goo.gl/916lJJ\n"); else return map(this, fn, options, null).promise();
                        };
                        Promise.map = function(promises, fn, options, _filter) {
                            if ("function" != typeof fn) return apiRejection("fn must be a function\n\n    See http://goo.gl/916lJJ\n"); else return map(promises, fn, options, _filter).promise();
                        };
                    };
                }, {
                    "./async.js": 2,
                    "./util.js": 38
                } ],
                20: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL, tryConvertToPromise, apiRejection) {
                        var util = _dereq_("./util.js"), tryCatch = util.tryCatch;
                        Promise.method = function(fn) {
                            if ("function" != typeof fn) throw new Promise.TypeError("fn must be a function\n\n    See http://goo.gl/916lJJ\n");
                            return function() {
                                var ret = new Promise(INTERNAL);
                                ret._captureStackTrace();
                                ret._pushContext();
                                var value = tryCatch(fn).apply(this, arguments);
                                ret._popContext();
                                ret._resolveFromSyncValue(value);
                                return ret;
                            };
                        };
                        Promise.attempt = Promise["try"] = function(fn, args, ctx) {
                            if ("function" != typeof fn) return apiRejection("fn must be a function\n\n    See http://goo.gl/916lJJ\n");
                            var ret = new Promise(INTERNAL);
                            ret._captureStackTrace();
                            ret._pushContext();
                            var value = util.isArray(args) ? tryCatch(fn).apply(ctx, args) : tryCatch(fn).call(ctx, args);
                            ret._popContext();
                            ret._resolveFromSyncValue(value);
                            return ret;
                        };
                        Promise.prototype._resolveFromSyncValue = function(value) {
                            if (value === util.errorObj) this._rejectCallback(value.e, !1, !0); else this._resolveCallback(value, !0);
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                21: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise) {
                        function spreadAdapter(val, nodeback) {
                            var promise = this;
                            if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);
                            var ret = tryCatch(nodeback).apply(promise._boundValue(), [ null ].concat(val));
                            if (ret === errorObj) async.throwLater(ret.e);
                        }
                        function successAdapter(val, nodeback) {
                            var promise = this, receiver = promise._boundValue(), ret = val === undefined ? tryCatch(nodeback).call(receiver, null) : tryCatch(nodeback).call(receiver, null, val);
                            if (ret === errorObj) async.throwLater(ret.e);
                        }
                        function errorAdapter(reason, nodeback) {
                            var promise = this;
                            if (!reason) {
                                var target = promise._target(), newReason = target._getCarriedStackTrace();
                                newReason.cause = reason;
                                reason = newReason;
                            }
                            var ret = tryCatch(nodeback).call(promise._boundValue(), reason);
                            if (ret === errorObj) async.throwLater(ret.e);
                        }
                        var util = _dereq_("./util.js"), async = _dereq_("./async.js"), tryCatch = util.tryCatch, errorObj = util.errorObj;
                        Promise.prototype.asCallback = Promise.prototype.nodeify = function(nodeback, options) {
                            if ("function" == typeof nodeback) {
                                var adapter = successAdapter;
                                if (options !== undefined && Object(options).spread) adapter = spreadAdapter;
                                this._then(adapter, errorAdapter, undefined, this, nodeback);
                            }
                            return this;
                        };
                    };
                }, {
                    "./async.js": 2,
                    "./util.js": 38
                } ],
                22: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, PromiseArray) {
                        var util = _dereq_("./util.js"), async = _dereq_("./async.js"), tryCatch = util.tryCatch, errorObj = util.errorObj;
                        Promise.prototype.progressed = function(handler) {
                            return this._then(undefined, undefined, handler, undefined, undefined);
                        };
                        Promise.prototype._progress = function(progressValue) {
                            if (!this._isFollowingOrFulfilledOrRejected()) this._target()._progressUnchecked(progressValue);
                        };
                        Promise.prototype._progressHandlerAt = function(index) {
                            return 0 === index ? this._progressHandler0 : this[(index << 2) + index - 5 + 2];
                        };
                        Promise.prototype._doProgressWith = function(progression) {
                            var progressValue = progression.value, handler = progression.handler, promise = progression.promise, receiver = progression.receiver, ret = tryCatch(handler).call(receiver, progressValue);
                            if (ret === errorObj) {
                                if (null != ret.e && "StopProgressPropagation" !== ret.e.name) {
                                    var trace = util.canAttachTrace(ret.e) ? ret.e : new Error(util.toString(ret.e));
                                    promise._attachExtraTrace(trace);
                                    promise._progress(ret.e);
                                }
                            } else if (ret instanceof Promise) ret._then(promise._progress, null, null, promise, undefined); else promise._progress(ret);
                        };
                        Promise.prototype._progressUnchecked = function(progressValue) {
                            for (var len = this._length(), progress = this._progress, i = 0; i < len; i++) {
                                var handler = this._progressHandlerAt(i), promise = this._promiseAt(i);
                                if (promise instanceof Promise) if ("function" == typeof handler) async.invoke(this._doProgressWith, this, {
                                    handler: handler,
                                    promise: promise,
                                    receiver: this._receiverAt(i),
                                    value: progressValue
                                }); else async.invoke(progress, promise, progressValue); else {
                                    var receiver = this._receiverAt(i);
                                    if ("function" == typeof handler) handler.call(receiver, progressValue, promise); else if (receiver instanceof PromiseArray && !receiver._isResolved()) receiver._promiseProgressed(progressValue, promise);
                                }
                            }
                        };
                    };
                }, {
                    "./async.js": 2,
                    "./util.js": 38
                } ],
                23: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function() {
                        function Promise(resolver) {
                            if ("function" != typeof resolver) throw new TypeError("the promise constructor requires a resolver function\n\n    See http://goo.gl/EC22Yn\n");
                            if (this.constructor !== Promise) throw new TypeError("the promise constructor cannot be invoked directly\n\n    See http://goo.gl/KsIlge\n");
                            this._bitField = 0;
                            this._fulfillmentHandler0 = undefined;
                            this._rejectionHandler0 = undefined;
                            this._progressHandler0 = undefined;
                            this._promise0 = undefined;
                            this._receiver0 = undefined;
                            this._settledValue = undefined;
                            if (resolver !== INTERNAL) this._resolveFromResolver(resolver);
                        }
                        function fillTypes(value) {
                            var p = new Promise(INTERNAL);
                            p._fulfillmentHandler0 = value;
                            p._rejectionHandler0 = value;
                            p._progressHandler0 = value;
                            p._promise0 = value;
                            p._receiver0 = value;
                            p._settledValue = value;
                        }
                        var getDomain, makeSelfResolutionError = function() {
                            return new TypeError("circular promise resolution chain\n\n    See http://goo.gl/LhFpo0\n");
                        }, reflect = function() {
                            return new Promise.PromiseInspection(this._target());
                        }, apiRejection = function(msg) {
                            return Promise.reject(new TypeError(msg));
                        }, util = _dereq_("./util.js");
                        if (util.isNode) getDomain = function() {
                            var ret = process.domain;
                            if (ret === undefined) ret = null;
                            return ret;
                        }; else getDomain = function() {
                            return null;
                        };
                        util.notEnumerableProp(Promise, "_getDomain", getDomain);
                        var UNDEFINED_BINDING = {}, async = _dereq_("./async.js"), errors = _dereq_("./errors.js"), TypeError = Promise.TypeError = errors.TypeError;
                        Promise.RangeError = errors.RangeError;
                        Promise.CancellationError = errors.CancellationError;
                        Promise.TimeoutError = errors.TimeoutError;
                        Promise.OperationalError = errors.OperationalError;
                        Promise.RejectionError = errors.OperationalError;
                        Promise.AggregateError = errors.AggregateError;
                        var INTERNAL = function() {}, APPLY = {}, NEXT_FILTER = {
                            e: null
                        }, tryConvertToPromise = _dereq_("./thenables.js")(Promise, INTERNAL), PromiseArray = _dereq_("./promise_array.js")(Promise, INTERNAL, tryConvertToPromise, apiRejection), CapturedTrace = _dereq_("./captured_trace.js")(), isDebugging = _dereq_("./debuggability.js")(Promise, CapturedTrace), createContext = _dereq_("./context.js")(Promise, CapturedTrace, isDebugging), CatchFilter = _dereq_("./catch_filter.js")(NEXT_FILTER), PromiseResolver = _dereq_("./promise_resolver.js"), nodebackForPromise = PromiseResolver._nodebackForPromise, errorObj = util.errorObj, tryCatch = util.tryCatch;
                        Promise.prototype.toString = function() {
                            return "[object Promise]";
                        };
                        Promise.prototype.caught = Promise.prototype["catch"] = function(fn) {
                            var len = arguments.length;
                            if (len > 1) {
                                var i, catchInstances = new Array(len - 1), j = 0;
                                for (i = 0; i < len - 1; ++i) {
                                    var item = arguments[i];
                                    if ("function" == typeof item) catchInstances[j++] = item; else return Promise.reject(new TypeError("Catch filter must inherit from Error or be a simple predicate function\n\n    See http://goo.gl/o84o68\n"));
                                }
                                catchInstances.length = j;
                                fn = arguments[i];
                                var catchFilter = new CatchFilter(catchInstances, fn, this);
                                return this._then(undefined, catchFilter.doFilter, undefined, catchFilter, undefined);
                            }
                            return this._then(undefined, fn, undefined, undefined, undefined);
                        };
                        Promise.prototype.reflect = function() {
                            return this._then(reflect, reflect, undefined, this, undefined);
                        };
                        Promise.prototype.then = function(didFulfill, didReject, didProgress) {
                            if (isDebugging() && arguments.length > 0 && "function" != typeof didFulfill && "function" != typeof didReject) {
                                var msg = ".then() only accepts functions but was passed: " + util.classString(didFulfill);
                                if (arguments.length > 1) msg += ", " + util.classString(didReject);
                                this._warn(msg);
                            }
                            return this._then(didFulfill, didReject, didProgress, undefined, undefined);
                        };
                        Promise.prototype.done = function(didFulfill, didReject, didProgress) {
                            this._then(didFulfill, didReject, didProgress, undefined, undefined)._setIsFinal();
                        };
                        Promise.prototype.spread = function(didFulfill, didReject) {
                            return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined);
                        };
                        Promise.prototype.isCancellable = function() {
                            return !this.isResolved() && this._cancellable();
                        };
                        Promise.prototype.toJSON = function() {
                            var ret = {
                                isFulfilled: !1,
                                isRejected: !1,
                                fulfillmentValue: undefined,
                                rejectionReason: undefined
                            };
                            if (this.isFulfilled()) {
                                ret.fulfillmentValue = this.value();
                                ret.isFulfilled = !0;
                            } else if (this.isRejected()) {
                                ret.rejectionReason = this.reason();
                                ret.isRejected = !0;
                            }
                            return ret;
                        };
                        Promise.prototype.all = function() {
                            return new PromiseArray(this).promise();
                        };
                        Promise.prototype.error = function(fn) {
                            return this.caught(util.originatesFromRejection, fn);
                        };
                        Promise.getNewLibraryCopy = module.exports;
                        Promise.is = function(val) {
                            return val instanceof Promise;
                        };
                        Promise.fromNode = function(fn) {
                            var ret = new Promise(INTERNAL), result = tryCatch(fn)(nodebackForPromise(ret));
                            if (result === errorObj) ret._rejectCallback(result.e, !0, !0);
                            return ret;
                        };
                        Promise.all = function(promises) {
                            return new PromiseArray(promises).promise();
                        };
                        Promise.defer = Promise.pending = function() {
                            var promise = new Promise(INTERNAL);
                            return new PromiseResolver(promise);
                        };
                        Promise.cast = function(obj) {
                            var ret = tryConvertToPromise(obj);
                            if (!(ret instanceof Promise)) {
                                var val = ret;
                                ret = new Promise(INTERNAL);
                                ret._fulfillUnchecked(val);
                            }
                            return ret;
                        };
                        Promise.resolve = Promise.fulfilled = Promise.cast;
                        Promise.reject = Promise.rejected = function(reason) {
                            var ret = new Promise(INTERNAL);
                            ret._captureStackTrace();
                            ret._rejectCallback(reason, !0);
                            return ret;
                        };
                        Promise.setScheduler = function(fn) {
                            if ("function" != typeof fn) throw new TypeError("fn must be a function\n\n    See http://goo.gl/916lJJ\n");
                            var prev = async._schedule;
                            async._schedule = fn;
                            return prev;
                        };
                        Promise.prototype._then = function(didFulfill, didReject, didProgress, receiver, internalData) {
                            var haveInternalData = internalData !== undefined, ret = haveInternalData ? internalData : new Promise(INTERNAL);
                            if (!haveInternalData) {
                                ret._propagateFrom(this, 5);
                                ret._captureStackTrace();
                            }
                            var target = this._target();
                            if (target !== this) {
                                if (receiver === undefined) receiver = this._boundTo;
                                if (!haveInternalData) ret._setIsMigrated();
                            }
                            var callbackIndex = target._addCallbacks(didFulfill, didReject, didProgress, ret, receiver, getDomain());
                            if (target._isResolved() && !target._isSettlePromisesQueued()) async.invoke(target._settlePromiseAtPostResolution, target, callbackIndex);
                            return ret;
                        };
                        Promise.prototype._settlePromiseAtPostResolution = function(index) {
                            if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled();
                            this._settlePromiseAt(index);
                        };
                        Promise.prototype._length = function() {
                            return 131071 & this._bitField;
                        };
                        Promise.prototype._isFollowingOrFulfilledOrRejected = function() {
                            return (939524096 & this._bitField) > 0;
                        };
                        Promise.prototype._isFollowing = function() {
                            return 536870912 == (536870912 & this._bitField);
                        };
                        Promise.prototype._setLength = function(len) {
                            this._bitField = -131072 & this._bitField | 131071 & len;
                        };
                        Promise.prototype._setFulfilled = function() {
                            this._bitField = 268435456 | this._bitField;
                        };
                        Promise.prototype._setRejected = function() {
                            this._bitField = 134217728 | this._bitField;
                        };
                        Promise.prototype._setFollowing = function() {
                            this._bitField = 536870912 | this._bitField;
                        };
                        Promise.prototype._setIsFinal = function() {
                            this._bitField = 33554432 | this._bitField;
                        };
                        Promise.prototype._isFinal = function() {
                            return (33554432 & this._bitField) > 0;
                        };
                        Promise.prototype._cancellable = function() {
                            return (67108864 & this._bitField) > 0;
                        };
                        Promise.prototype._setCancellable = function() {
                            this._bitField = 67108864 | this._bitField;
                        };
                        Promise.prototype._unsetCancellable = function() {
                            this._bitField = -67108865 & this._bitField;
                        };
                        Promise.prototype._setIsMigrated = function() {
                            this._bitField = 4194304 | this._bitField;
                        };
                        Promise.prototype._unsetIsMigrated = function() {
                            this._bitField = -4194305 & this._bitField;
                        };
                        Promise.prototype._isMigrated = function() {
                            return (4194304 & this._bitField) > 0;
                        };
                        Promise.prototype._receiverAt = function(index) {
                            var ret = 0 === index ? this._receiver0 : this[5 * index - 5 + 4];
                            if (ret === UNDEFINED_BINDING) return undefined; else if (ret === undefined && this._isBound()) return this._boundValue();
                            return ret;
                        };
                        Promise.prototype._promiseAt = function(index) {
                            return 0 === index ? this._promise0 : this[5 * index - 5 + 3];
                        };
                        Promise.prototype._fulfillmentHandlerAt = function(index) {
                            return 0 === index ? this._fulfillmentHandler0 : this[5 * index - 5 + 0];
                        };
                        Promise.prototype._rejectionHandlerAt = function(index) {
                            return 0 === index ? this._rejectionHandler0 : this[5 * index - 5 + 1];
                        };
                        Promise.prototype._boundValue = function() {
                            var ret = this._boundTo;
                            if (ret !== undefined) if (ret instanceof Promise) if (ret.isFulfilled()) return ret.value(); else return undefined;
                            return ret;
                        };
                        Promise.prototype._migrateCallbacks = function(follower, index) {
                            var fulfill = follower._fulfillmentHandlerAt(index), reject = follower._rejectionHandlerAt(index), progress = follower._progressHandlerAt(index), promise = follower._promiseAt(index), receiver = follower._receiverAt(index);
                            if (promise instanceof Promise) promise._setIsMigrated();
                            if (receiver === undefined) receiver = UNDEFINED_BINDING;
                            this._addCallbacks(fulfill, reject, progress, promise, receiver, null);
                        };
                        Promise.prototype._addCallbacks = function(fulfill, reject, progress, promise, receiver, domain) {
                            var index = this._length();
                            if (index >= 131066) {
                                index = 0;
                                this._setLength(0);
                            }
                            if (0 === index) {
                                this._promise0 = promise;
                                if (receiver !== undefined) this._receiver0 = receiver;
                                if ("function" == typeof fulfill && !this._isCarryingStackTrace()) this._fulfillmentHandler0 = null === domain ? fulfill : domain.bind(fulfill);
                                if ("function" == typeof reject) this._rejectionHandler0 = null === domain ? reject : domain.bind(reject);
                                if ("function" == typeof progress) this._progressHandler0 = null === domain ? progress : domain.bind(progress);
                            } else {
                                var base = 5 * index - 5;
                                this[base + 3] = promise;
                                this[base + 4] = receiver;
                                if ("function" == typeof fulfill) this[base + 0] = null === domain ? fulfill : domain.bind(fulfill);
                                if ("function" == typeof reject) this[base + 1] = null === domain ? reject : domain.bind(reject);
                                if ("function" == typeof progress) this[base + 2] = null === domain ? progress : domain.bind(progress);
                            }
                            this._setLength(index + 1);
                            return index;
                        };
                        Promise.prototype._setProxyHandlers = function(receiver, promiseSlotValue) {
                            var index = this._length();
                            if (index >= 131066) {
                                index = 0;
                                this._setLength(0);
                            }
                            if (0 === index) {
                                this._promise0 = promiseSlotValue;
                                this._receiver0 = receiver;
                            } else {
                                var base = 5 * index - 5;
                                this[base + 3] = promiseSlotValue;
                                this[base + 4] = receiver;
                            }
                            this._setLength(index + 1);
                        };
                        Promise.prototype._proxyPromiseArray = function(promiseArray, index) {
                            this._setProxyHandlers(promiseArray, index);
                        };
                        Promise.prototype._resolveCallback = function(value, shouldBind) {
                            if (!this._isFollowingOrFulfilledOrRejected()) {
                                if (value === this) return this._rejectCallback(makeSelfResolutionError(), !1, !0);
                                var maybePromise = tryConvertToPromise(value, this);
                                if (!(maybePromise instanceof Promise)) return this._fulfill(value);
                                var propagationFlags = 1 | (shouldBind ? 4 : 0);
                                this._propagateFrom(maybePromise, propagationFlags);
                                var promise = maybePromise._target();
                                if (promise._isPending()) {
                                    for (var len = this._length(), i = 0; i < len; ++i) promise._migrateCallbacks(this, i);
                                    this._setFollowing();
                                    this._setLength(0);
                                    this._setFollowee(promise);
                                } else if (promise._isFulfilled()) this._fulfillUnchecked(promise._value()); else this._rejectUnchecked(promise._reason(), promise._getCarriedStackTrace());
                            }
                        };
                        Promise.prototype._rejectCallback = function(reason, synchronous, shouldNotMarkOriginatingFromRejection) {
                            if (!shouldNotMarkOriginatingFromRejection) util.markAsOriginatingFromRejection(reason);
                            var trace = util.ensureErrorObject(reason), hasStack = trace === reason;
                            this._attachExtraTrace(trace, synchronous ? hasStack : !1);
                            this._reject(reason, hasStack ? undefined : trace);
                        };
                        Promise.prototype._resolveFromResolver = function(resolver) {
                            var promise = this;
                            this._captureStackTrace();
                            this._pushContext();
                            var synchronous = !0, r = tryCatch(resolver)(function(value) {
                                if (null !== promise) {
                                    promise._resolveCallback(value);
                                    promise = null;
                                }
                            }, function(reason) {
                                if (null !== promise) {
                                    promise._rejectCallback(reason, synchronous);
                                    promise = null;
                                }
                            });
                            synchronous = !1;
                            this._popContext();
                            if (r !== undefined && r === errorObj && null !== promise) {
                                promise._rejectCallback(r.e, !0, !0);
                                promise = null;
                            }
                        };
                        Promise.prototype._settlePromiseFromHandler = function(handler, receiver, value, promise) {
                            if (!promise._isRejected()) {
                                promise._pushContext();
                                var x;
                                if (receiver === APPLY && !this._isRejected()) x = tryCatch(handler).apply(this._boundValue(), value); else x = tryCatch(handler).call(receiver, value);
                                promise._popContext();
                                if (x === errorObj || x === promise || x === NEXT_FILTER) {
                                    var err = x === promise ? makeSelfResolutionError() : x.e;
                                    promise._rejectCallback(err, !1, !0);
                                } else promise._resolveCallback(x);
                            }
                        };
                        Promise.prototype._target = function() {
                            for (var ret = this; ret._isFollowing(); ) ret = ret._followee();
                            return ret;
                        };
                        Promise.prototype._followee = function() {
                            return this._rejectionHandler0;
                        };
                        Promise.prototype._setFollowee = function(promise) {
                            this._rejectionHandler0 = promise;
                        };
                        Promise.prototype._cleanValues = function() {
                            if (this._cancellable()) this._cancellationParent = undefined;
                        };
                        Promise.prototype._propagateFrom = function(parent, flags) {
                            if ((1 & flags) > 0 && parent._cancellable()) {
                                this._setCancellable();
                                this._cancellationParent = parent;
                            }
                            if ((4 & flags) > 0 && parent._isBound()) this._setBoundTo(parent._boundTo);
                        };
                        Promise.prototype._fulfill = function(value) {
                            if (!this._isFollowingOrFulfilledOrRejected()) this._fulfillUnchecked(value);
                        };
                        Promise.prototype._reject = function(reason, carriedStackTrace) {
                            if (!this._isFollowingOrFulfilledOrRejected()) this._rejectUnchecked(reason, carriedStackTrace);
                        };
                        Promise.prototype._settlePromiseAt = function(index) {
                            var promise = this._promiseAt(index), isPromise = promise instanceof Promise;
                            if (isPromise && promise._isMigrated()) {
                                promise._unsetIsMigrated();
                                return async.invoke(this._settlePromiseAt, this, index);
                            }
                            var handler = this._isFulfilled() ? this._fulfillmentHandlerAt(index) : this._rejectionHandlerAt(index), carriedStackTrace = this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined, value = this._settledValue, receiver = this._receiverAt(index);
                            this._clearCallbackDataAtIndex(index);
                            if ("function" == typeof handler) if (!isPromise) handler.call(receiver, value, promise); else this._settlePromiseFromHandler(handler, receiver, value, promise); else if (receiver instanceof PromiseArray) {
                                if (!receiver._isResolved()) if (this._isFulfilled()) receiver._promiseFulfilled(value, promise); else receiver._promiseRejected(value, promise);
                            } else if (isPromise) if (this._isFulfilled()) promise._fulfill(value); else promise._reject(value, carriedStackTrace);
                            if (index >= 4 && 4 == (31 & index)) async.invokeLater(this._setLength, this, 0);
                        };
                        Promise.prototype._clearCallbackDataAtIndex = function(index) {
                            if (0 === index) {
                                if (!this._isCarryingStackTrace()) this._fulfillmentHandler0 = undefined;
                                this._rejectionHandler0 = this._progressHandler0 = this._receiver0 = this._promise0 = undefined;
                            } else {
                                var base = 5 * index - 5;
                                this[base + 3] = this[base + 4] = this[base + 0] = this[base + 1] = this[base + 2] = undefined;
                            }
                        };
                        Promise.prototype._isSettlePromisesQueued = function() {
                            return -1073741824 == (-1073741824 & this._bitField);
                        };
                        Promise.prototype._setSettlePromisesQueued = function() {
                            this._bitField = -1073741824 | this._bitField;
                        };
                        Promise.prototype._unsetSettlePromisesQueued = function() {
                            this._bitField = 1073741823 & this._bitField;
                        };
                        Promise.prototype._queueSettlePromises = function() {
                            async.settlePromises(this);
                            this._setSettlePromisesQueued();
                        };
                        Promise.prototype._fulfillUnchecked = function(value) {
                            if (value === this) {
                                var err = makeSelfResolutionError();
                                this._attachExtraTrace(err);
                                return this._rejectUnchecked(err, undefined);
                            }
                            this._setFulfilled();
                            this._settledValue = value;
                            this._cleanValues();
                            if (this._length() > 0) this._queueSettlePromises();
                        };
                        Promise.prototype._rejectUncheckedCheckError = function(reason) {
                            var trace = util.ensureErrorObject(reason);
                            this._rejectUnchecked(reason, trace === reason ? undefined : trace);
                        };
                        Promise.prototype._rejectUnchecked = function(reason, trace) {
                            if (reason === this) {
                                var err = makeSelfResolutionError();
                                this._attachExtraTrace(err);
                                return this._rejectUnchecked(err);
                            }
                            this._setRejected();
                            this._settledValue = reason;
                            this._cleanValues();
                            if (!this._isFinal()) {
                                if (trace !== undefined && trace !== reason) this._setCarriedStackTrace(trace);
                                if (this._length() > 0) this._queueSettlePromises(); else this._ensurePossibleRejectionHandled();
                            } else async.throwLater(function(e) {
                                if ("stack" in e) async.invokeFirst(CapturedTrace.unhandledRejection, undefined, e);
                                throw e;
                            }, trace === undefined ? reason : trace);
                        };
                        Promise.prototype._settlePromises = function() {
                            this._unsetSettlePromisesQueued();
                            for (var len = this._length(), i = 0; i < len; i++) this._settlePromiseAt(i);
                        };
                        util.notEnumerableProp(Promise, "_makeSelfResolutionError", makeSelfResolutionError);
                        _dereq_("./progress.js")(Promise, PromiseArray);
                        _dereq_("./method.js")(Promise, INTERNAL, tryConvertToPromise, apiRejection);
                        _dereq_("./bind.js")(Promise, INTERNAL, tryConvertToPromise);
                        _dereq_("./finally.js")(Promise, NEXT_FILTER, tryConvertToPromise);
                        _dereq_("./direct_resolve.js")(Promise);
                        _dereq_("./synchronous_inspection.js")(Promise);
                        _dereq_("./join.js")(Promise, PromiseArray, tryConvertToPromise, INTERNAL);
                        Promise.version = "2.11.0";
                        Promise.Promise = Promise;
                        _dereq_("./map.js")(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);
                        _dereq_("./cancel.js")(Promise);
                        _dereq_("./using.js")(Promise, apiRejection, tryConvertToPromise, createContext);
                        _dereq_("./generators.js")(Promise, apiRejection, INTERNAL, tryConvertToPromise);
                        _dereq_("./nodeify.js")(Promise);
                        _dereq_("./call_get.js")(Promise);
                        _dereq_("./props.js")(Promise, PromiseArray, tryConvertToPromise, apiRejection);
                        _dereq_("./race.js")(Promise, INTERNAL, tryConvertToPromise, apiRejection);
                        _dereq_("./reduce.js")(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);
                        _dereq_("./settle.js")(Promise, PromiseArray);
                        _dereq_("./some.js")(Promise, PromiseArray, apiRejection);
                        _dereq_("./promisify.js")(Promise, INTERNAL);
                        _dereq_("./any.js")(Promise);
                        _dereq_("./each.js")(Promise, INTERNAL);
                        _dereq_("./timers.js")(Promise, INTERNAL);
                        _dereq_("./filter.js")(Promise, INTERNAL);
                        util.toFastProperties(Promise);
                        util.toFastProperties(Promise.prototype);
                        fillTypes({
                            a: 1
                        });
                        fillTypes({
                            b: 2
                        });
                        fillTypes({
                            c: 3
                        });
                        fillTypes(1);
                        fillTypes(function() {});
                        fillTypes(undefined);
                        fillTypes(!1);
                        fillTypes(new Promise(INTERNAL));
                        CapturedTrace.setBounds(async.firstLineError, util.lastLineError);
                        return Promise;
                    };
                }, {
                    "./any.js": 1,
                    "./async.js": 2,
                    "./bind.js": 3,
                    "./call_get.js": 5,
                    "./cancel.js": 6,
                    "./captured_trace.js": 7,
                    "./catch_filter.js": 8,
                    "./context.js": 9,
                    "./debuggability.js": 10,
                    "./direct_resolve.js": 11,
                    "./each.js": 12,
                    "./errors.js": 13,
                    "./filter.js": 15,
                    "./finally.js": 16,
                    "./generators.js": 17,
                    "./join.js": 18,
                    "./map.js": 19,
                    "./method.js": 20,
                    "./nodeify.js": 21,
                    "./progress.js": 22,
                    "./promise_array.js": 24,
                    "./promise_resolver.js": 25,
                    "./promisify.js": 26,
                    "./props.js": 27,
                    "./race.js": 29,
                    "./reduce.js": 30,
                    "./settle.js": 32,
                    "./some.js": 33,
                    "./synchronous_inspection.js": 34,
                    "./thenables.js": 35,
                    "./timers.js": 36,
                    "./using.js": 37,
                    "./util.js": 38
                } ],
                24: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL, tryConvertToPromise, apiRejection) {
                        function toResolutionValue(val) {
                            switch (val) {
                              case -2:
                                return [];

                              case -3:
                                return {};
                            }
                        }
                        function PromiseArray(values) {
                            var parent, promise = this._promise = new Promise(INTERNAL);
                            if (values instanceof Promise) {
                                parent = values;
                                promise._propagateFrom(parent, 5);
                            }
                            this._values = values;
                            this._length = 0;
                            this._totalResolved = 0;
                            this._init(undefined, -2);
                        }
                        var util = _dereq_("./util.js"), isArray = util.isArray;
                        PromiseArray.prototype.length = function() {
                            return this._length;
                        };
                        PromiseArray.prototype.promise = function() {
                            return this._promise;
                        };
                        PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {
                            var values = tryConvertToPromise(this._values, this._promise);
                            if (values instanceof Promise) {
                                values = values._target();
                                this._values = values;
                                if (values._isFulfilled()) {
                                    values = values._value();
                                    if (!isArray(values)) {
                                        var err = new Promise.TypeError("expecting an array, a promise or a thenable\n\n    See http://goo.gl/s8MMhc\n");
                                        this.__hardReject__(err);
                                        return;
                                    }
                                } else if (values._isPending()) {
                                    values._then(init, this._reject, undefined, this, resolveValueIfEmpty);
                                    return;
                                } else {
                                    this._reject(values._reason());
                                    return;
                                }
                            } else if (!isArray(values)) {
                                this._promise._reject(apiRejection("expecting an array, a promise or a thenable\n\n    See http://goo.gl/s8MMhc\n")._reason());
                                return;
                            }
                            if (0 !== values.length) {
                                var len = this.getActualLength(values.length);
                                this._length = len;
                                this._values = this.shouldCopyValues() ? new Array(len) : this._values;
                                for (var promise = this._promise, i = 0; i < len; ++i) {
                                    var isResolved = this._isResolved(), maybePromise = tryConvertToPromise(values[i], promise);
                                    if (maybePromise instanceof Promise) {
                                        maybePromise = maybePromise._target();
                                        if (isResolved) maybePromise._ignoreRejections(); else if (maybePromise._isPending()) maybePromise._proxyPromiseArray(this, i); else if (maybePromise._isFulfilled()) this._promiseFulfilled(maybePromise._value(), i); else this._promiseRejected(maybePromise._reason(), i);
                                    } else if (!isResolved) this._promiseFulfilled(maybePromise, i);
                                }
                            } else if (-5 === resolveValueIfEmpty) this._resolveEmptyArray(); else this._resolve(toResolutionValue(resolveValueIfEmpty));
                        };
                        PromiseArray.prototype._isResolved = function() {
                            return null === this._values;
                        };
                        PromiseArray.prototype._resolve = function(value) {
                            this._values = null;
                            this._promise._fulfill(value);
                        };
                        PromiseArray.prototype.__hardReject__ = PromiseArray.prototype._reject = function(reason) {
                            this._values = null;
                            this._promise._rejectCallback(reason, !1, !0);
                        };
                        PromiseArray.prototype._promiseProgressed = function(progressValue, index) {
                            this._promise._progress({
                                index: index,
                                value: progressValue
                            });
                        };
                        PromiseArray.prototype._promiseFulfilled = function(value, index) {
                            this._values[index] = value;
                            if (++this._totalResolved >= this._length) this._resolve(this._values);
                        };
                        PromiseArray.prototype._promiseRejected = function(reason, index) {
                            this._totalResolved++;
                            this._reject(reason);
                        };
                        PromiseArray.prototype.shouldCopyValues = function() {
                            return !0;
                        };
                        PromiseArray.prototype.getActualLength = function(len) {
                            return len;
                        };
                        return PromiseArray;
                    };
                }, {
                    "./util.js": 38
                } ],
                25: [ function(_dereq_, module, exports) {
                    "use strict";
                    function isUntypedError(obj) {
                        return obj instanceof Error && es5.getPrototypeOf(obj) === Error.prototype;
                    }
                    function wrapAsOperationalError(obj) {
                        var ret;
                        if (isUntypedError(obj)) {
                            ret = new OperationalError(obj);
                            ret.name = obj.name;
                            ret.message = obj.message;
                            ret.stack = obj.stack;
                            for (var keys = es5.keys(obj), i = 0; i < keys.length; ++i) {
                                var key = keys[i];
                                if (!rErrorKey.test(key)) ret[key] = obj[key];
                            }
                            return ret;
                        }
                        util.markAsOriginatingFromRejection(obj);
                        return obj;
                    }
                    function nodebackForPromise(promise) {
                        return function(err, value) {
                            if (null !== promise) {
                                if (err) {
                                    var wrapped = wrapAsOperationalError(maybeWrapAsError(err));
                                    promise._attachExtraTrace(wrapped);
                                    promise._reject(wrapped);
                                } else if (arguments.length > 2) {
                                    for (var $_len = arguments.length, args = new Array($_len - 1), $_i = 1; $_i < $_len; ++$_i) args[$_i - 1] = arguments[$_i];
                                    promise._fulfill(args);
                                } else promise._fulfill(value);
                                promise = null;
                            }
                        };
                    }
                    var PromiseResolver, util = _dereq_("./util.js"), maybeWrapAsError = util.maybeWrapAsError, errors = _dereq_("./errors.js"), TimeoutError = errors.TimeoutError, OperationalError = errors.OperationalError, haveGetters = util.haveGetters, es5 = _dereq_("./es5.js"), rErrorKey = /^(?:name|message|stack|cause)$/;
                    if (!haveGetters) PromiseResolver = function(promise) {
                        this.promise = promise;
                        this.asCallback = nodebackForPromise(promise);
                        this.callback = this.asCallback;
                    }; else PromiseResolver = function(promise) {
                        this.promise = promise;
                    };
                    if (haveGetters) {
                        var prop = {
                            get: function() {
                                return nodebackForPromise(this.promise);
                            }
                        };
                        es5.defineProperty(PromiseResolver.prototype, "asCallback", prop);
                        es5.defineProperty(PromiseResolver.prototype, "callback", prop);
                    }
                    PromiseResolver._nodebackForPromise = nodebackForPromise;
                    PromiseResolver.prototype.toString = function() {
                        return "[object PromiseResolver]";
                    };
                    PromiseResolver.prototype.resolve = PromiseResolver.prototype.fulfill = function(value) {
                        if (!(this instanceof PromiseResolver)) throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n    See http://goo.gl/sdkXL9\n");
                        this.promise._resolveCallback(value);
                    };
                    PromiseResolver.prototype.reject = function(reason) {
                        if (!(this instanceof PromiseResolver)) throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n    See http://goo.gl/sdkXL9\n");
                        this.promise._rejectCallback(reason);
                    };
                    PromiseResolver.prototype.progress = function(value) {
                        if (!(this instanceof PromiseResolver)) throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n    See http://goo.gl/sdkXL9\n");
                        this.promise._progress(value);
                    };
                    PromiseResolver.prototype.cancel = function(err) {
                        this.promise.cancel(err);
                    };
                    PromiseResolver.prototype.timeout = function() {
                        this.reject(new TimeoutError("timeout"));
                    };
                    PromiseResolver.prototype.isResolved = function() {
                        return this.promise.isResolved();
                    };
                    PromiseResolver.prototype.toJSON = function() {
                        return this.promise.toJSON();
                    };
                    module.exports = PromiseResolver;
                }, {
                    "./errors.js": 13,
                    "./es5.js": 14,
                    "./util.js": 38
                } ],
                26: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL) {
                        function propsFilter(key) {
                            return !noCopyPropsPattern.test(key);
                        }
                        function isPromisified(fn) {
                            try {
                                return !0 === fn.__isPromisified__;
                            } catch (e) {
                                return !1;
                            }
                        }
                        function hasPromisified(obj, key, suffix) {
                            var val = util.getDataPropertyOrDefault(obj, key + suffix, defaultPromisified);
                            return val ? isPromisified(val) : !1;
                        }
                        function checkValid(ret, suffix, suffixRegexp) {
                            for (var i = 0; i < ret.length; i += 2) {
                                var key = ret[i];
                                if (suffixRegexp.test(key)) for (var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""), j = 0; j < ret.length; j += 2) if (ret[j] === keyWithoutAsyncSuffix) throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\n\n    See http://goo.gl/iWrZbw\n".replace("%s", suffix));
                            }
                        }
                        function promisifiableMethods(obj, suffix, suffixRegexp, filter) {
                            for (var keys = util.inheritedDataKeys(obj), ret = [], i = 0; i < keys.length; ++i) {
                                var key = keys[i], value = obj[key], passesDefaultFilter = filter === defaultFilter ? !0 : defaultFilter(key, value, obj);
                                if ("function" == typeof value && !isPromisified(value) && !hasPromisified(obj, key, suffix) && filter(key, value, obj, passesDefaultFilter)) ret.push(key, value);
                            }
                            checkValid(ret, suffix, suffixRegexp);
                            return ret;
                        }
                        function makeNodePromisifiedClosure(callback, receiver, _, fn) {
                            function promisified() {
                                var _receiver = receiver;
                                if (receiver === THIS) _receiver = this;
                                var promise = new Promise(INTERNAL);
                                promise._captureStackTrace();
                                var cb = "string" == typeof method && this !== defaultThis ? this[method] : callback, fn = nodebackForPromise(promise);
                                try {
                                    cb.apply(_receiver, withAppended(arguments, fn));
                                } catch (e) {
                                    promise._rejectCallback(maybeWrapAsError(e), !0, !0);
                                }
                                return promise;
                            }
                            var defaultThis = function() {
                                return this;
                            }(), method = callback;
                            if ("string" == typeof method) callback = fn;
                            util.notEnumerableProp(promisified, "__isPromisified__", !0);
                            return promisified;
                        }
                        function promisifyAll(obj, suffix, filter, promisifier) {
                            for (var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"), methods = promisifiableMethods(obj, suffix, suffixRegexp, filter), i = 0, len = methods.length; i < len; i += 2) {
                                var key = methods[i], fn = methods[i + 1], promisifiedKey = key + suffix;
                                if (promisifier === makeNodePromisified) obj[promisifiedKey] = makeNodePromisified(key, THIS, key, fn, suffix); else {
                                    var promisified = promisifier(fn, function() {
                                        return makeNodePromisified(key, THIS, key, fn, suffix);
                                    });
                                    util.notEnumerableProp(promisified, "__isPromisified__", !0);
                                    obj[promisifiedKey] = promisified;
                                }
                            }
                            util.toFastProperties(obj);
                            return obj;
                        }
                        function promisify(callback, receiver) {
                            return makeNodePromisified(callback, receiver, undefined, callback);
                        }
                        var makeNodePromisifiedEval, THIS = {}, util = _dereq_("./util.js"), nodebackForPromise = _dereq_("./promise_resolver.js")._nodebackForPromise, withAppended = util.withAppended, maybeWrapAsError = util.maybeWrapAsError, canEvaluate = util.canEvaluate, TypeError = _dereq_("./errors").TypeError, defaultPromisified = {
                            __isPromisified__: !0
                        }, noCopyProps = [ "arity", "length", "name", "arguments", "caller", "callee", "prototype", "__isPromisified__" ], noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"), defaultFilter = function(name) {
                            return util.isIdentifier(name) && "_" !== name.charAt(0) && "constructor" !== name;
                        }, escapeIdentRegex = function(str) {
                            return str.replace(/([$])/, "\\$");
                        };
                        if (!1) {
                            var switchCaseArgumentOrder = function(likelyArgumentCount) {
                                for (var ret = [ likelyArgumentCount ], min = Math.max(0, likelyArgumentCount - 1 - 3), i = likelyArgumentCount - 1; i >= min; --i) ret.push(i);
                                for (var i = likelyArgumentCount + 1; i <= 3; ++i) ret.push(i);
                                return ret;
                            }, argumentSequence = function(argumentCount) {
                                return util.filledRange(argumentCount, "_arg", "");
                            }, parameterDeclaration = function(parameterCount) {
                                return util.filledRange(Math.max(parameterCount, 3), "_arg", "");
                            }, parameterCount = function(fn) {
                                if ("number" == typeof fn.length) return Math.max(Math.min(fn.length, 1024), 0); else return 0;
                            };
                            makeNodePromisifiedEval = function(callback, receiver, originalName, fn) {
                                function generateCallForArgumentCount(count) {
                                    var ret, args = argumentSequence(count).join(", "), comma = count > 0 ? ", " : "";
                                    if (shouldProxyThis) ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; else ret = receiver === undefined ? "ret = callback({{args}}, nodeback); break;\n" : "ret = callback.call(receiver, {{args}}, nodeback); break;\n";
                                    return ret.replace("{{args}}", args).replace(", ", comma);
                                }
                                var newParameterCount = Math.max(0, parameterCount(fn) - 1), argumentOrder = switchCaseArgumentOrder(newParameterCount), shouldProxyThis = "string" == typeof callback || receiver === THIS, getFunctionCode = "string" == typeof callback ? "this != null ? this['" + callback + "'] : fn" : "fn";
                                return new Function("Promise", "fn", "receiver", "withAppended", "maybeWrapAsError", "nodebackForPromise", "tryCatch", "errorObj", "notEnumerableProp", "INTERNAL", "'use strict';                            \n        var ret = function (Parameters) {                                    \n            'use strict';                                                    \n            var len = arguments.length;                                      \n            var promise = new Promise(INTERNAL);                             \n            promise._captureStackTrace();                                    \n            var nodeback = nodebackForPromise(promise);                      \n            var ret;                                                         \n            var callback = tryCatch([GetFunctionCode]);                      \n            switch(len) {                                                    \n                [CodeForSwitchCase]                                          \n            }                                                                \n            if (ret === errorObj) {                                          \n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n            }                                                                \n            return promise;                                                  \n        };                                                                   \n        notEnumerableProp(ret, '__isPromisified__', true);                   \n        return ret;                                                          \n        ".replace("Parameters", parameterDeclaration(newParameterCount)).replace("[CodeForSwitchCase]", function() {
                                    for (var ret = "", i = 0; i < argumentOrder.length; ++i) ret += "case " + argumentOrder[i] + ":" + generateCallForArgumentCount(argumentOrder[i]);
                                    ret += "                                                             \n        default:                                                             \n            var args = new Array(len + 1);                                   \n            var i = 0;                                                       \n            for (var i = 0; i < len; ++i) {                                  \n               args[i] = arguments[i];                                       \n            }                                                                \n            args[i] = nodeback;                                              \n            [CodeForCall]                                                    \n            break;                                                           \n        ".replace("[CodeForCall]", shouldProxyThis ? "ret = callback.apply(this, args);\n" : "ret = callback.apply(receiver, args);\n");
                                    return ret;
                                }()).replace("[GetFunctionCode]", getFunctionCode))(Promise, fn, receiver, withAppended, maybeWrapAsError, nodebackForPromise, util.tryCatch, util.errorObj, util.notEnumerableProp, INTERNAL);
                            };
                        }
                        var makeNodePromisified = canEvaluate ? makeNodePromisifiedEval : makeNodePromisifiedClosure;
                        Promise.promisify = function(fn, receiver) {
                            if ("function" != typeof fn) throw new TypeError("fn must be a function\n\n    See http://goo.gl/916lJJ\n");
                            if (isPromisified(fn)) return fn;
                            var ret = promisify(fn, arguments.length < 2 ? THIS : receiver);
                            util.copyDescriptors(fn, ret, propsFilter);
                            return ret;
                        };
                        Promise.promisifyAll = function(target, options) {
                            if ("function" != typeof target && "object" != typeof target) throw new TypeError("the target of promisifyAll must be an object or a function\n\n    See http://goo.gl/9ITlV0\n");
                            options = Object(options);
                            var suffix = options.suffix;
                            if ("string" != typeof suffix) suffix = "Async";
                            var filter = options.filter;
                            if ("function" != typeof filter) filter = defaultFilter;
                            var promisifier = options.promisifier;
                            if ("function" != typeof promisifier) promisifier = makeNodePromisified;
                            if (!util.isIdentifier(suffix)) throw new RangeError("suffix must be a valid identifier\n\n    See http://goo.gl/8FZo5V\n");
                            for (var keys = util.inheritedDataKeys(target), i = 0; i < keys.length; ++i) {
                                var value = target[keys[i]];
                                if ("constructor" !== keys[i] && util.isClass(value)) {
                                    promisifyAll(value.prototype, suffix, filter, promisifier);
                                    promisifyAll(value, suffix, filter, promisifier);
                                }
                            }
                            return promisifyAll(target, suffix, filter, promisifier);
                        };
                    };
                }, {
                    "./errors": 13,
                    "./promise_resolver.js": 25,
                    "./util.js": 38
                } ],
                27: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, PromiseArray, tryConvertToPromise, apiRejection) {
                        function PropertiesPromiseArray(obj) {
                            for (var keys = es5.keys(obj), len = keys.length, values = new Array(2 * len), i = 0; i < len; ++i) {
                                var key = keys[i];
                                values[i] = obj[key];
                                values[i + len] = key;
                            }
                            this.constructor$(values);
                        }
                        function props(promises) {
                            var ret, castValue = tryConvertToPromise(promises);
                            if (!isObject(castValue)) return apiRejection("cannot await properties of a non-object\n\n    See http://goo.gl/OsFKC8\n"); else if (castValue instanceof Promise) ret = castValue._then(Promise.props, undefined, undefined, undefined, undefined); else ret = new PropertiesPromiseArray(castValue).promise();
                            if (castValue instanceof Promise) ret._propagateFrom(castValue, 4);
                            return ret;
                        }
                        var util = _dereq_("./util.js"), isObject = util.isObject, es5 = _dereq_("./es5.js");
                        util.inherits(PropertiesPromiseArray, PromiseArray);
                        PropertiesPromiseArray.prototype._init = function() {
                            this._init$(undefined, -3);
                        };
                        PropertiesPromiseArray.prototype._promiseFulfilled = function(value, index) {
                            this._values[index] = value;
                            if (++this._totalResolved >= this._length) {
                                for (var val = {}, keyOffset = this.length(), i = 0, len = this.length(); i < len; ++i) val[this._values[i + keyOffset]] = this._values[i];
                                this._resolve(val);
                            }
                        };
                        PropertiesPromiseArray.prototype._promiseProgressed = function(value, index) {
                            this._promise._progress({
                                key: this._values[index + this.length()],
                                value: value
                            });
                        };
                        PropertiesPromiseArray.prototype.shouldCopyValues = function() {
                            return !1;
                        };
                        PropertiesPromiseArray.prototype.getActualLength = function(len) {
                            return len >> 1;
                        };
                        Promise.prototype.props = function() {
                            return props(this);
                        };
                        Promise.props = function(promises) {
                            return props(promises);
                        };
                    };
                }, {
                    "./es5.js": 14,
                    "./util.js": 38
                } ],
                28: [ function(_dereq_, module, exports) {
                    "use strict";
                    function arrayMove(src, srcIndex, dst, dstIndex, len) {
                        for (var j = 0; j < len; ++j) {
                            dst[j + dstIndex] = src[j + srcIndex];
                            src[j + srcIndex] = void 0;
                        }
                    }
                    function Queue(capacity) {
                        this._capacity = capacity;
                        this._length = 0;
                        this._front = 0;
                    }
                    Queue.prototype._willBeOverCapacity = function(size) {
                        return this._capacity < size;
                    };
                    Queue.prototype._pushOne = function(arg) {
                        var length = this.length();
                        this._checkCapacity(length + 1);
                        this[this._front + length & this._capacity - 1] = arg;
                        this._length = length + 1;
                    };
                    Queue.prototype._unshiftOne = function(value) {
                        var capacity = this._capacity;
                        this._checkCapacity(this.length() + 1);
                        var front = this._front, i = (front - 1 & capacity - 1 ^ capacity) - capacity;
                        this[i] = value;
                        this._front = i;
                        this._length = this.length() + 1;
                    };
                    Queue.prototype.unshift = function(fn, receiver, arg) {
                        this._unshiftOne(arg);
                        this._unshiftOne(receiver);
                        this._unshiftOne(fn);
                    };
                    Queue.prototype.push = function(fn, receiver, arg) {
                        var length = this.length() + 3;
                        if (!this._willBeOverCapacity(length)) {
                            var j = this._front + length - 3;
                            this._checkCapacity(length);
                            var wrapMask = this._capacity - 1;
                            this[j + 0 & wrapMask] = fn;
                            this[j + 1 & wrapMask] = receiver;
                            this[j + 2 & wrapMask] = arg;
                            this._length = length;
                        } else {
                            this._pushOne(fn);
                            this._pushOne(receiver);
                            this._pushOne(arg);
                        }
                    };
                    Queue.prototype.shift = function() {
                        var front = this._front, ret = this[front];
                        this[front] = undefined;
                        this._front = front + 1 & this._capacity - 1;
                        this._length--;
                        return ret;
                    };
                    Queue.prototype.length = function() {
                        return this._length;
                    };
                    Queue.prototype._checkCapacity = function(size) {
                        if (this._capacity < size) this._resizeTo(this._capacity << 1);
                    };
                    Queue.prototype._resizeTo = function(capacity) {
                        var oldCapacity = this._capacity;
                        this._capacity = capacity;
                        arrayMove(this, 0, this, oldCapacity, this._front + this._length & oldCapacity - 1);
                    };
                    module.exports = Queue;
                }, {} ],
                29: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL, tryConvertToPromise, apiRejection) {
                        function race(promises, parent) {
                            var maybePromise = tryConvertToPromise(promises);
                            if (maybePromise instanceof Promise) return raceLater(maybePromise); else if (!isArray(promises)) return apiRejection("expecting an array, a promise or a thenable\n\n    See http://goo.gl/s8MMhc\n");
                            var ret = new Promise(INTERNAL);
                            if (parent !== undefined) ret._propagateFrom(parent, 5);
                            for (var fulfill = ret._fulfill, reject = ret._reject, i = 0, len = promises.length; i < len; ++i) {
                                var val = promises[i];
                                if (val !== undefined || i in promises) Promise.cast(val)._then(fulfill, reject, undefined, ret, null);
                            }
                            return ret;
                        }
                        var isArray = _dereq_("./util.js").isArray, raceLater = function(promise) {
                            return promise.then(function(array) {
                                return race(array, promise);
                            });
                        };
                        Promise.race = function(promises) {
                            return race(promises, undefined);
                        };
                        Promise.prototype.race = function() {
                            return race(this, undefined);
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                30: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL) {
                        function ReductionPromiseArray(promises, fn, accum, _each) {
                            this.constructor$(promises);
                            this._promise._captureStackTrace();
                            this._preservedValues = _each === INTERNAL ? [] : null;
                            this._zerothIsAccum = accum === undefined;
                            this._gotAccum = !1;
                            this._reducingIndex = this._zerothIsAccum ? 1 : 0;
                            this._valuesPhase = undefined;
                            var maybePromise = tryConvertToPromise(accum, this._promise), rejected = !1, isPromise = maybePromise instanceof Promise;
                            if (isPromise) {
                                maybePromise = maybePromise._target();
                                if (maybePromise._isPending()) maybePromise._proxyPromiseArray(this, -1); else if (maybePromise._isFulfilled()) {
                                    accum = maybePromise._value();
                                    this._gotAccum = !0;
                                } else {
                                    this._reject(maybePromise._reason());
                                    rejected = !0;
                                }
                            }
                            if (!isPromise && !this._zerothIsAccum) this._gotAccum = !0;
                            var domain = getDomain();
                            this._callback = null === domain ? fn : domain.bind(fn);
                            this._accum = accum;
                            if (!rejected) async.invoke(init, this, undefined);
                        }
                        function init() {
                            this._init$(undefined, -5);
                        }
                        function reduce(promises, fn, initialValue, _each) {
                            if ("function" != typeof fn) return apiRejection("fn must be a function\n\n    See http://goo.gl/916lJJ\n"); else return new ReductionPromiseArray(promises, fn, initialValue, _each).promise();
                        }
                        var getDomain = Promise._getDomain, async = _dereq_("./async.js"), util = _dereq_("./util.js"), tryCatch = util.tryCatch, errorObj = util.errorObj;
                        util.inherits(ReductionPromiseArray, PromiseArray);
                        ReductionPromiseArray.prototype._init = function() {};
                        ReductionPromiseArray.prototype._resolveEmptyArray = function() {
                            if (this._gotAccum || this._zerothIsAccum) this._resolve(null !== this._preservedValues ? [] : this._accum);
                        };
                        ReductionPromiseArray.prototype._promiseFulfilled = function(value, index) {
                            var values = this._values;
                            values[index] = value;
                            var valuesPhaseIndex, length = this.length(), preservedValues = this._preservedValues, isEach = null !== preservedValues, gotAccum = this._gotAccum, valuesPhase = this._valuesPhase;
                            if (!valuesPhase) {
                                valuesPhase = this._valuesPhase = new Array(length);
                                for (valuesPhaseIndex = 0; valuesPhaseIndex < length; ++valuesPhaseIndex) valuesPhase[valuesPhaseIndex] = 0;
                            }
                            valuesPhaseIndex = valuesPhase[index];
                            if (0 === index && this._zerothIsAccum) {
                                this._accum = value;
                                this._gotAccum = gotAccum = !0;
                                valuesPhase[index] = 0 === valuesPhaseIndex ? 1 : 2;
                            } else if (-1 === index) {
                                this._accum = value;
                                this._gotAccum = gotAccum = !0;
                            } else if (0 === valuesPhaseIndex) valuesPhase[index] = 1; else {
                                valuesPhase[index] = 2;
                                this._accum = value;
                            }
                            if (gotAccum) {
                                for (var ret, callback = this._callback, receiver = this._promise._boundValue(), i = this._reducingIndex; i < length; ++i) {
                                    valuesPhaseIndex = valuesPhase[i];
                                    if (2 !== valuesPhaseIndex) {
                                        if (1 !== valuesPhaseIndex) return;
                                        value = values[i];
                                        this._promise._pushContext();
                                        if (isEach) {
                                            preservedValues.push(value);
                                            ret = tryCatch(callback).call(receiver, value, i, length);
                                        } else ret = tryCatch(callback).call(receiver, this._accum, value, i, length);
                                        this._promise._popContext();
                                        if (ret === errorObj) return this._reject(ret.e);
                                        var maybePromise = tryConvertToPromise(ret, this._promise);
                                        if (maybePromise instanceof Promise) {
                                            maybePromise = maybePromise._target();
                                            if (maybePromise._isPending()) {
                                                valuesPhase[i] = 4;
                                                return maybePromise._proxyPromiseArray(this, i);
                                            } else if (maybePromise._isFulfilled()) ret = maybePromise._value(); else return this._reject(maybePromise._reason());
                                        }
                                        this._reducingIndex = i + 1;
                                        this._accum = ret;
                                    } else this._reducingIndex = i + 1;
                                }
                                this._resolve(isEach ? preservedValues : this._accum);
                            }
                        };
                        Promise.prototype.reduce = function(fn, initialValue) {
                            return reduce(this, fn, initialValue, null);
                        };
                        Promise.reduce = function(promises, fn, initialValue, _each) {
                            return reduce(promises, fn, initialValue, _each);
                        };
                    };
                }, {
                    "./async.js": 2,
                    "./util.js": 38
                } ],
                31: [ function(_dereq_, module, exports) {
                    "use strict";
                    var schedule, util = _dereq_("./util"), noAsyncScheduler = function() {
                        throw new Error("No async scheduler available\n\n    See http://goo.gl/m3OTXk\n");
                    };
                    if (util.isNode && "undefined" == typeof MutationObserver) {
                        var GlobalSetImmediate = global.setImmediate, ProcessNextTick = process.nextTick;
                        schedule = util.isRecentNode ? function(fn) {
                            GlobalSetImmediate.call(global, fn);
                        } : function(fn) {
                            ProcessNextTick.call(process, fn);
                        };
                    } else if (!("undefined" == typeof MutationObserver || "undefined" != typeof window && window.navigator && window.navigator.standalone)) {
                        schedule = function(fn) {
                            var div = document.createElement("div");
                            new MutationObserver(fn).observe(div, {
                                attributes: !0
                            });
                            return function() {
                                div.classList.toggle("foo");
                            };
                        };
                        schedule.isStatic = !0;
                    } else if (void 0 !== setImmediate) schedule = function(fn) {
                        setImmediate(fn);
                    }; else if ("undefined" != typeof setTimeout) schedule = function(fn) {
                        setTimeout(fn, 0);
                    }; else schedule = noAsyncScheduler;
                    module.exports = schedule;
                }, {
                    "./util": 38
                } ],
                32: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, PromiseArray) {
                        function SettledPromiseArray(values) {
                            this.constructor$(values);
                        }
                        var PromiseInspection = Promise.PromiseInspection;
                        _dereq_("./util.js").inherits(SettledPromiseArray, PromiseArray);
                        SettledPromiseArray.prototype._promiseResolved = function(index, inspection) {
                            this._values[index] = inspection;
                            if (++this._totalResolved >= this._length) this._resolve(this._values);
                        };
                        SettledPromiseArray.prototype._promiseFulfilled = function(value, index) {
                            var ret = new PromiseInspection();
                            ret._bitField = 268435456;
                            ret._settledValue = value;
                            this._promiseResolved(index, ret);
                        };
                        SettledPromiseArray.prototype._promiseRejected = function(reason, index) {
                            var ret = new PromiseInspection();
                            ret._bitField = 134217728;
                            ret._settledValue = reason;
                            this._promiseResolved(index, ret);
                        };
                        Promise.settle = function(promises) {
                            return new SettledPromiseArray(promises).promise();
                        };
                        Promise.prototype.settle = function() {
                            return new SettledPromiseArray(this).promise();
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                33: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, PromiseArray, apiRejection) {
                        function SomePromiseArray(values) {
                            this.constructor$(values);
                            this._howMany = 0;
                            this._unwrap = !1;
                            this._initialized = !1;
                        }
                        function some(promises, howMany) {
                            if ((0 | howMany) !== howMany || howMany < 0) return apiRejection("expecting a positive integer\n\n    See http://goo.gl/1wAmHx\n");
                            var ret = new SomePromiseArray(promises), promise = ret.promise();
                            ret.setHowMany(howMany);
                            ret.init();
                            return promise;
                        }
                        var util = _dereq_("./util.js"), RangeError = _dereq_("./errors.js").RangeError, AggregateError = _dereq_("./errors.js").AggregateError, isArray = util.isArray;
                        util.inherits(SomePromiseArray, PromiseArray);
                        SomePromiseArray.prototype._init = function() {
                            if (this._initialized) if (0 !== this._howMany) {
                                this._init$(undefined, -5);
                                var isArrayResolved = isArray(this._values);
                                if (!this._isResolved() && isArrayResolved && this._howMany > this._canPossiblyFulfill()) this._reject(this._getRangeError(this.length()));
                            } else this._resolve([]);
                        };
                        SomePromiseArray.prototype.init = function() {
                            this._initialized = !0;
                            this._init();
                        };
                        SomePromiseArray.prototype.setUnwrap = function() {
                            this._unwrap = !0;
                        };
                        SomePromiseArray.prototype.howMany = function() {
                            return this._howMany;
                        };
                        SomePromiseArray.prototype.setHowMany = function(count) {
                            this._howMany = count;
                        };
                        SomePromiseArray.prototype._promiseFulfilled = function(value) {
                            this._addFulfilled(value);
                            if (this._fulfilled() === this.howMany()) {
                                this._values.length = this.howMany();
                                if (1 === this.howMany() && this._unwrap) this._resolve(this._values[0]); else this._resolve(this._values);
                            }
                        };
                        SomePromiseArray.prototype._promiseRejected = function(reason) {
                            this._addRejected(reason);
                            if (this.howMany() > this._canPossiblyFulfill()) {
                                for (var e = new AggregateError(), i = this.length(); i < this._values.length; ++i) e.push(this._values[i]);
                                this._reject(e);
                            }
                        };
                        SomePromiseArray.prototype._fulfilled = function() {
                            return this._totalResolved;
                        };
                        SomePromiseArray.prototype._rejected = function() {
                            return this._values.length - this.length();
                        };
                        SomePromiseArray.prototype._addRejected = function(reason) {
                            this._values.push(reason);
                        };
                        SomePromiseArray.prototype._addFulfilled = function(value) {
                            this._values[this._totalResolved++] = value;
                        };
                        SomePromiseArray.prototype._canPossiblyFulfill = function() {
                            return this.length() - this._rejected();
                        };
                        SomePromiseArray.prototype._getRangeError = function(count) {
                            var message = "Input array must contain at least " + this._howMany + " items but contains only " + count + " items";
                            return new RangeError(message);
                        };
                        SomePromiseArray.prototype._resolveEmptyArray = function() {
                            this._reject(this._getRangeError(0));
                        };
                        Promise.some = function(promises, howMany) {
                            return some(promises, howMany);
                        };
                        Promise.prototype.some = function(howMany) {
                            return some(this, howMany);
                        };
                        Promise._SomePromiseArray = SomePromiseArray;
                    };
                }, {
                    "./errors.js": 13,
                    "./util.js": 38
                } ],
                34: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise) {
                        function PromiseInspection(promise) {
                            if (promise !== undefined) {
                                promise = promise._target();
                                this._bitField = promise._bitField;
                                this._settledValue = promise._settledValue;
                            } else {
                                this._bitField = 0;
                                this._settledValue = undefined;
                            }
                        }
                        PromiseInspection.prototype.value = function() {
                            if (!this.isFulfilled()) throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n    See http://goo.gl/hc1DLj\n");
                            return this._settledValue;
                        };
                        PromiseInspection.prototype.error = PromiseInspection.prototype.reason = function() {
                            if (!this.isRejected()) throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n    See http://goo.gl/hPuiwB\n");
                            return this._settledValue;
                        };
                        PromiseInspection.prototype.isFulfilled = Promise.prototype._isFulfilled = function() {
                            return (268435456 & this._bitField) > 0;
                        };
                        PromiseInspection.prototype.isRejected = Promise.prototype._isRejected = function() {
                            return (134217728 & this._bitField) > 0;
                        };
                        PromiseInspection.prototype.isPending = Promise.prototype._isPending = function() {
                            return 0 == (402653184 & this._bitField);
                        };
                        PromiseInspection.prototype.isResolved = Promise.prototype._isResolved = function() {
                            return (402653184 & this._bitField) > 0;
                        };
                        Promise.prototype.isPending = function() {
                            return this._target()._isPending();
                        };
                        Promise.prototype.isRejected = function() {
                            return this._target()._isRejected();
                        };
                        Promise.prototype.isFulfilled = function() {
                            return this._target()._isFulfilled();
                        };
                        Promise.prototype.isResolved = function() {
                            return this._target()._isResolved();
                        };
                        Promise.prototype._value = function() {
                            return this._settledValue;
                        };
                        Promise.prototype._reason = function() {
                            this._unsetRejectionIsUnhandled();
                            return this._settledValue;
                        };
                        Promise.prototype.value = function() {
                            var target = this._target();
                            if (!target.isFulfilled()) throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n    See http://goo.gl/hc1DLj\n");
                            return target._settledValue;
                        };
                        Promise.prototype.reason = function() {
                            var target = this._target();
                            if (!target.isRejected()) throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n    See http://goo.gl/hPuiwB\n");
                            target._unsetRejectionIsUnhandled();
                            return target._settledValue;
                        };
                        Promise.PromiseInspection = PromiseInspection;
                    };
                }, {} ],
                35: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL) {
                        function tryConvertToPromise(obj, context) {
                            if (isObject(obj)) {
                                if (obj instanceof Promise) return obj; else if (isAnyBluebirdPromise(obj)) {
                                    var ret = new Promise(INTERNAL);
                                    obj._then(ret._fulfillUnchecked, ret._rejectUncheckedCheckError, ret._progressUnchecked, ret, null);
                                    return ret;
                                }
                                var then = util.tryCatch(getThen)(obj);
                                if (then === errorObj) {
                                    if (context) context._pushContext();
                                    var ret = Promise.reject(then.e);
                                    if (context) context._popContext();
                                    return ret;
                                } else if ("function" == typeof then) return doThenable(obj, then, context);
                            }
                            return obj;
                        }
                        function getThen(obj) {
                            return obj.then;
                        }
                        function isAnyBluebirdPromise(obj) {
                            return hasProp.call(obj, "_promise0");
                        }
                        function doThenable(x, then, context) {
                            function resolveFromThenable(value) {
                                if (promise) {
                                    promise._resolveCallback(value);
                                    promise = null;
                                }
                            }
                            function rejectFromThenable(reason) {
                                if (promise) {
                                    promise._rejectCallback(reason, synchronous, !0);
                                    promise = null;
                                }
                            }
                            function progressFromThenable(value) {
                                if (promise) if ("function" == typeof promise._progress) promise._progress(value);
                            }
                            var promise = new Promise(INTERNAL), ret = promise;
                            if (context) context._pushContext();
                            promise._captureStackTrace();
                            if (context) context._popContext();
                            var synchronous = !0, result = util.tryCatch(then).call(x, resolveFromThenable, rejectFromThenable, progressFromThenable);
                            synchronous = !1;
                            if (promise && result === errorObj) {
                                promise._rejectCallback(result.e, !0, !0);
                                promise = null;
                            }
                            return ret;
                        }
                        var util = _dereq_("./util.js"), errorObj = util.errorObj, isObject = util.isObject, hasProp = {}.hasOwnProperty;
                        return tryConvertToPromise;
                    };
                }, {
                    "./util.js": 38
                } ],
                36: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, INTERNAL) {
                        function successClear(value) {
                            var handle = this;
                            if (handle instanceof Number) handle = +handle;
                            clearTimeout(handle);
                            return value;
                        }
                        function failureClear(reason) {
                            var handle = this;
                            if (handle instanceof Number) handle = +handle;
                            clearTimeout(handle);
                            throw reason;
                        }
                        var util = _dereq_("./util.js"), TimeoutError = Promise.TimeoutError, afterTimeout = function(promise, message) {
                            if (promise.isPending()) {
                                var err;
                                if (!util.isPrimitive(message) && message instanceof Error) err = message; else {
                                    if ("string" != typeof message) message = "operation timed out";
                                    err = new TimeoutError(message);
                                }
                                util.markAsOriginatingFromRejection(err);
                                promise._attachExtraTrace(err);
                                promise._cancel(err);
                            }
                        }, afterValue = function(value) {
                            return delay(+this).thenReturn(value);
                        }, delay = Promise.delay = function(value, ms) {
                            if (ms === undefined) {
                                ms = value;
                                value = undefined;
                                var ret = new Promise(INTERNAL);
                                setTimeout(function() {
                                    ret._fulfill();
                                }, ms);
                                return ret;
                            }
                            ms = +ms;
                            return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);
                        };
                        Promise.prototype.delay = function(ms) {
                            return delay(this, ms);
                        };
                        Promise.prototype.timeout = function(ms, message) {
                            ms = +ms;
                            var ret = this.then().cancellable();
                            ret._cancellationParent = this;
                            var handle = setTimeout(function() {
                                afterTimeout(ret, message);
                            }, ms);
                            return ret._then(successClear, failureClear, undefined, handle, undefined);
                        };
                    };
                }, {
                    "./util.js": 38
                } ],
                37: [ function(_dereq_, module, exports) {
                    "use strict";
                    module.exports = function(Promise, apiRejection, tryConvertToPromise, createContext) {
                        function inspectionMapper(inspections) {
                            for (var len = inspections.length, i = 0; i < len; ++i) {
                                var inspection = inspections[i];
                                if (inspection.isRejected()) return Promise.reject(inspection.error());
                                inspections[i] = inspection._settledValue;
                            }
                            return inspections;
                        }
                        function thrower(e) {
                            setTimeout(function() {
                                throw e;
                            }, 0);
                        }
                        function castPreservingDisposable(thenable) {
                            var maybePromise = tryConvertToPromise(thenable);
                            if (maybePromise !== thenable && "function" == typeof thenable._isDisposable && "function" == typeof thenable._getDisposer && thenable._isDisposable()) maybePromise._setDisposable(thenable._getDisposer());
                            return maybePromise;
                        }
                        function dispose(resources, inspection) {
                            function iterator() {
                                if (i >= len) return ret.resolve();
                                var maybePromise = castPreservingDisposable(resources[i++]);
                                if (maybePromise instanceof Promise && maybePromise._isDisposable()) {
                                    try {
                                        maybePromise = tryConvertToPromise(maybePromise._getDisposer().tryDispose(inspection), resources.promise);
                                    } catch (e) {
                                        return thrower(e);
                                    }
                                    if (maybePromise instanceof Promise) return maybePromise._then(iterator, thrower, null, null, null);
                                }
                                iterator();
                            }
                            var i = 0, len = resources.length, ret = Promise.defer();
                            iterator();
                            return ret.promise;
                        }
                        function disposerSuccess(value) {
                            var inspection = new PromiseInspection();
                            inspection._settledValue = value;
                            inspection._bitField = 268435456;
                            return dispose(this, inspection).thenReturn(value);
                        }
                        function disposerFail(reason) {
                            var inspection = new PromiseInspection();
                            inspection._settledValue = reason;
                            inspection._bitField = 134217728;
                            return dispose(this, inspection).thenThrow(reason);
                        }
                        function Disposer(data, promise, context) {
                            this._data = data;
                            this._promise = promise;
                            this._context = context;
                        }
                        function FunctionDisposer(fn, promise, context) {
                            this.constructor$(fn, promise, context);
                        }
                        function maybeUnwrapDisposer(value) {
                            if (Disposer.isDisposer(value)) {
                                this.resources[this.index]._setDisposable(value);
                                return value.promise();
                            }
                            return value;
                        }
                        var TypeError = _dereq_("./errors.js").TypeError, inherits = _dereq_("./util.js").inherits, PromiseInspection = Promise.PromiseInspection;
                        Disposer.prototype.data = function() {
                            return this._data;
                        };
                        Disposer.prototype.promise = function() {
                            return this._promise;
                        };
                        Disposer.prototype.resource = function() {
                            if (this.promise().isFulfilled()) return this.promise().value(); else return null;
                        };
                        Disposer.prototype.tryDispose = function(inspection) {
                            var resource = this.resource(), context = this._context;
                            if (context !== undefined) context._pushContext();
                            var ret = null !== resource ? this.doDispose(resource, inspection) : null;
                            if (context !== undefined) context._popContext();
                            this._promise._unsetDisposable();
                            this._data = null;
                            return ret;
                        };
                        Disposer.isDisposer = function(d) {
                            return null != d && "function" == typeof d.resource && "function" == typeof d.tryDispose;
                        };
                        inherits(FunctionDisposer, Disposer);
                        FunctionDisposer.prototype.doDispose = function(resource, inspection) {
                            return this.data().call(resource, resource, inspection);
                        };
                        Promise.using = function() {
                            var len = arguments.length;
                            if (len < 2) return apiRejection("you must pass at least 2 arguments to Promise.using");
                            var fn = arguments[len - 1];
                            if ("function" != typeof fn) return apiRejection("fn must be a function\n\n    See http://goo.gl/916lJJ\n");
                            var input, spreadArgs = !0;
                            if (2 === len && Array.isArray(arguments[0])) {
                                input = arguments[0];
                                len = input.length;
                                spreadArgs = !1;
                            } else {
                                input = arguments;
                                len--;
                            }
                            for (var resources = new Array(len), i = 0; i < len; ++i) {
                                var resource = input[i];
                                if (Disposer.isDisposer(resource)) {
                                    var disposer = resource;
                                    resource = resource.promise();
                                    resource._setDisposable(disposer);
                                } else {
                                    var maybePromise = tryConvertToPromise(resource);
                                    if (maybePromise instanceof Promise) resource = maybePromise._then(maybeUnwrapDisposer, null, null, {
                                        resources: resources,
                                        index: i
                                    }, undefined);
                                }
                                resources[i] = resource;
                            }
                            var promise = Promise.settle(resources).then(inspectionMapper).then(function(vals) {
                                promise._pushContext();
                                var ret;
                                try {
                                    ret = spreadArgs ? fn.apply(undefined, vals) : fn.call(undefined, vals);
                                } finally {
                                    promise._popContext();
                                }
                                return ret;
                            })._then(disposerSuccess, disposerFail, undefined, resources, undefined);
                            resources.promise = promise;
                            return promise;
                        };
                        Promise.prototype._setDisposable = function(disposer) {
                            this._bitField = 262144 | this._bitField;
                            this._disposer = disposer;
                        };
                        Promise.prototype._isDisposable = function() {
                            return (262144 & this._bitField) > 0;
                        };
                        Promise.prototype._getDisposer = function() {
                            return this._disposer;
                        };
                        Promise.prototype._unsetDisposable = function() {
                            this._bitField = -262145 & this._bitField;
                            this._disposer = undefined;
                        };
                        Promise.prototype.disposer = function(fn) {
                            if ("function" == typeof fn) return new FunctionDisposer(fn, this, createContext());
                            throw new TypeError();
                        };
                    };
                }, {
                    "./errors.js": 13,
                    "./util.js": 38
                } ],
                38: [ function(_dereq_, module, exports) {
                    "use strict";
                    function tryCatcher() {
                        try {
                            var target = tryCatchTarget;
                            tryCatchTarget = null;
                            return target.apply(this, arguments);
                        } catch (e) {
                            errorObj.e = e;
                            return errorObj;
                        }
                    }
                    function tryCatch(fn) {
                        tryCatchTarget = fn;
                        return tryCatcher;
                    }
                    function isPrimitive(val) {
                        return null == val || !0 === val || !1 === val || "string" == typeof val || "number" == typeof val;
                    }
                    function isObject(value) {
                        return !isPrimitive(value);
                    }
                    function maybeWrapAsError(maybeError) {
                        if (!isPrimitive(maybeError)) return maybeError; else return new Error(safeToString(maybeError));
                    }
                    function withAppended(target, appendee) {
                        var i, len = target.length, ret = new Array(len + 1);
                        for (i = 0; i < len; ++i) ret[i] = target[i];
                        ret[i] = appendee;
                        return ret;
                    }
                    function getDataPropertyOrDefault(obj, key, defaultValue) {
                        if (es5.isES5) {
                            var desc = Object.getOwnPropertyDescriptor(obj, key);
                            if (null != desc) return null == desc.get && null == desc.set ? desc.value : defaultValue;
                        } else return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;
                    }
                    function notEnumerableProp(obj, name, value) {
                        if (isPrimitive(obj)) return obj;
                        var descriptor = {
                            value: value,
                            configurable: !0,
                            enumerable: !1,
                            writable: !0
                        };
                        es5.defineProperty(obj, name, descriptor);
                        return obj;
                    }
                    function thrower(r) {
                        throw r;
                    }
                    function isClass(fn) {
                        try {
                            if ("function" == typeof fn) {
                                var keys = es5.names(fn.prototype), hasMethods = es5.isES5 && keys.length > 1, hasMethodsOtherThanConstructor = keys.length > 0 && !(1 === keys.length && "constructor" === keys[0]), hasThisAssignmentAndStaticMethods = thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0;
                                if (hasMethods || hasMethodsOtherThanConstructor || hasThisAssignmentAndStaticMethods) return !0;
                            }
                            return !1;
                        } catch (e) {
                            return !1;
                        }
                    }
                    function toFastProperties(obj) {
                        function f() {}
                        f.prototype = obj;
                        for (var l = 8; l--; ) new f();
                        return obj;
                    }
                    function isIdentifier(str) {
                        return rident.test(str);
                    }
                    function filledRange(count, prefix, suffix) {
                        for (var ret = new Array(count), i = 0; i < count; ++i) ret[i] = prefix + i + suffix;
                        return ret;
                    }
                    function safeToString(obj) {
                        try {
                            return obj + "";
                        } catch (e) {
                            return "[no string representation]";
                        }
                    }
                    function markAsOriginatingFromRejection(e) {
                        try {
                            notEnumerableProp(e, "isOperational", !0);
                        } catch (ignore) {}
                    }
                    function originatesFromRejection(e) {
                        if (null == e) return !1; else return e instanceof Error.__BluebirdErrorTypes__.OperationalError || !0 === e.isOperational;
                    }
                    function canAttachTrace(obj) {
                        return obj instanceof Error && es5.propertyIsWritable(obj, "stack");
                    }
                    function classString(obj) {
                        return {}.toString.call(obj);
                    }
                    function copyDescriptors(from, to, filter) {
                        for (var keys = es5.names(from), i = 0; i < keys.length; ++i) {
                            var key = keys[i];
                            if (filter(key)) try {
                                es5.defineProperty(to, key, es5.getDescriptor(from, key));
                            } catch (ignore) {}
                        }
                    }
                    var es5 = _dereq_("./es5.js"), canEvaluate = "undefined" == typeof navigator, haveGetters = function() {
                        try {
                            var o = {};
                            es5.defineProperty(o, "f", {
                                get: function() {
                                    return 3;
                                }
                            });
                            return 3 === o.f;
                        } catch (e) {
                            return !1;
                        }
                    }(), errorObj = {
                        e: {}
                    }, tryCatchTarget, inherits = function(Child, Parent) {
                        function T() {
                            this.constructor = Child;
                            this.constructor$ = Parent;
                            for (var propertyName in Parent.prototype) if (hasProp.call(Parent.prototype, propertyName) && "$" !== propertyName.charAt(propertyName.length - 1)) this[propertyName + "$"] = Parent.prototype[propertyName];
                        }
                        var hasProp = {}.hasOwnProperty;
                        T.prototype = Parent.prototype;
                        Child.prototype = new T();
                        return Child.prototype;
                    }, inheritedDataKeys = function() {
                        var excludedPrototypes = [ Array.prototype, Object.prototype, Function.prototype ], isExcludedProto = function(val) {
                            for (var i = 0; i < excludedPrototypes.length; ++i) if (excludedPrototypes[i] === val) return !0;
                            return !1;
                        };
                        if (es5.isES5) {
                            var getKeys = Object.getOwnPropertyNames;
                            return function(obj) {
                                for (var ret = [], visitedKeys = Object.create(null); null != obj && !isExcludedProto(obj); ) {
                                    var keys;
                                    try {
                                        keys = getKeys(obj);
                                    } catch (e) {
                                        return ret;
                                    }
                                    for (var i = 0; i < keys.length; ++i) {
                                        var key = keys[i];
                                        if (!visitedKeys[key]) {
                                            visitedKeys[key] = !0;
                                            var desc = Object.getOwnPropertyDescriptor(obj, key);
                                            if (null != desc && null == desc.get && null == desc.set) ret.push(key);
                                        }
                                    }
                                    obj = es5.getPrototypeOf(obj);
                                }
                                return ret;
                            };
                        } else {
                            var hasProp = {}.hasOwnProperty;
                            return function(obj) {
                                if (isExcludedProto(obj)) return [];
                                var ret = [];
                                enumeration: for (var key in obj) if (hasProp.call(obj, key)) ret.push(key); else {
                                    for (var i = 0; i < excludedPrototypes.length; ++i) if (hasProp.call(excludedPrototypes[i], key)) continue enumeration;
                                    ret.push(key);
                                }
                                return ret;
                            };
                        }
                    }(), thisAssignmentPattern = /this\s*\.\s*\S+\s*=/, rident = /^[a-z$_][a-z$_0-9]*$/i, ensureErrorObject = function() {
                        if (!("stack" in new Error())) return function(value) {
                            if (canAttachTrace(value)) return value;
                            try {
                                throw new Error(safeToString(value));
                            } catch (err) {
                                return err;
                            }
                        }; else return function(value) {
                            if (canAttachTrace(value)) return value; else return new Error(safeToString(value));
                        };
                    }(), ret = {
                        isClass: isClass,
                        isIdentifier: isIdentifier,
                        inheritedDataKeys: inheritedDataKeys,
                        getDataPropertyOrDefault: getDataPropertyOrDefault,
                        thrower: thrower,
                        isArray: es5.isArray,
                        haveGetters: haveGetters,
                        notEnumerableProp: notEnumerableProp,
                        isPrimitive: isPrimitive,
                        isObject: isObject,
                        canEvaluate: canEvaluate,
                        errorObj: errorObj,
                        tryCatch: tryCatch,
                        inherits: inherits,
                        withAppended: withAppended,
                        maybeWrapAsError: maybeWrapAsError,
                        toFastProperties: toFastProperties,
                        filledRange: filledRange,
                        toString: safeToString,
                        canAttachTrace: canAttachTrace,
                        ensureErrorObject: ensureErrorObject,
                        originatesFromRejection: originatesFromRejection,
                        markAsOriginatingFromRejection: markAsOriginatingFromRejection,
                        classString: classString,
                        copyDescriptors: copyDescriptors,
                        hasDevTools: "undefined" != typeof chrome && chrome && "function" == typeof chrome.loadTimes,
                        isNode: void 0 !== process && "[object process]" === classString(process).toLowerCase()
                    };
                    ret.isRecentNode = ret.isNode && function() {
                        var version = process.versions.node.split(".").map(Number);
                        return 0 === version[0] && version[1] > 10 || version[0] > 0;
                    }();
                    if (ret.isNode) ret.toFastProperties(process);
                    try {
                        throw new Error();
                    } catch (e) {
                        ret.lastLineError = e;
                    }
                    module.exports = ret;
                }, {
                    "./es5.js": 14
                } ]
            }, {}, [ 4 ])(4);
        });
        if ("undefined" != typeof window && null !== window) window.P = window.Promise; else if ("undefined" != typeof self && null !== self) self.P = self.Promise;
    }).call(exports, __webpack_require__(186), __webpack_require__(54), __webpack_require__(681).setImmediate);
}, function(module, exports, __webpack_require__) {
    "use strict";
    function bytes(value, options) {
        if ("string" == typeof value) return parse(value);
        if ("number" == typeof value) return format(value, options); else return null;
    }
    function format(value, options) {
        if (!Number.isFinite(value)) return null;
        var mag = Math.abs(value), thousandsSeparator = options && options.thousandsSeparator || "", unitSeparator = options && options.unitSeparator || "", decimalPlaces = options && options.decimalPlaces !== undefined ? options.decimalPlaces : 2, fixedDecimals = Boolean(options && options.fixedDecimals), unit = options && options.unit || "";
        if (!unit || !map[unit.toLowerCase()]) if (mag >= map.tb) unit = "TB"; else if (mag >= map.gb) unit = "GB"; else if (mag >= map.mb) unit = "MB"; else if (mag >= map.kb) unit = "KB"; else unit = "B";
        var val = value / map[unit.toLowerCase()], str = val.toFixed(decimalPlaces);
        if (!fixedDecimals) str = str.replace(formatDecimalsRegExp, "$1");
        if (thousandsSeparator) str = str.replace(formatThousandsRegExp, thousandsSeparator);
        return str + unitSeparator + unit;
    }
    function parse(val) {
        if ("number" == typeof val && !isNaN(val)) return val;
        if ("string" != typeof val) return null;
        var floatValue, results = parseRegExp.exec(val), unit = "b";
        if (!results) {
            floatValue = parseInt(val, 10);
            unit = "b";
        } else {
            floatValue = parseFloat(results[1]);
            unit = results[4].toLowerCase();
        }
        return Math.floor(map[unit] * floatValue);
    }
    module.exports = bytes;
    module.exports.format = format;
    module.exports.parse = parse;
    var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g, formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/, map = {
        b: 1,
        kb: 1024,
        mb: 1 << 20,
        gb: 1 << 30,
        tb: 1024 * (1 << 30)
    }, parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i;
}, function(module, exports, __webpack_require__) {
    function Emitter(obj) {
        if (obj) return mixin(obj);
    }
    function mixin(obj) {
        for (var key in Emitter.prototype) obj[key] = Emitter.prototype[key];
        return obj;
    }
    if (!0) module.exports = Emitter;
    Emitter.prototype.on = Emitter.prototype.addEventListener = function(event, fn) {
        this._callbacks = this._callbacks || {};
        (this._callbacks["$" + event] = this._callbacks["$" + event] || []).push(fn);
        return this;
    };
    Emitter.prototype.once = function(event, fn) {
        function on() {
            this.off(event, on);
            fn.apply(this, arguments);
        }
        on.fn = fn;
        this.on(event, on);
        return this;
    };
    Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function(event, fn) {
        this._callbacks = this._callbacks || {};
        if (0 == arguments.length) {
            this._callbacks = {};
            return this;
        }
        var callbacks = this._callbacks["$" + event];
        if (!callbacks) return this;
        if (1 == arguments.length) {
            delete this._callbacks["$" + event];
            return this;
        }
        for (var cb, i = 0; i < callbacks.length; i++) {
            cb = callbacks[i];
            if (cb === fn || cb.fn === fn) {
                callbacks.splice(i, 1);
                break;
            }
        }
        return this;
    };
    Emitter.prototype.emit = function(event) {
        this._callbacks = this._callbacks || {};
        var args = [].slice.call(arguments, 1), callbacks = this._callbacks["$" + event];
        if (callbacks) {
            callbacks = callbacks.slice(0);
            for (var i = 0, len = callbacks.length; i < len; ++i) callbacks[i].apply(this, args);
        }
        return this;
    };
    Emitter.prototype.listeners = function(event) {
        this._callbacks = this._callbacks || {};
        return this._callbacks["$" + event] || [];
    };
    Emitter.prototype.hasListeners = function(event) {
        return !!this.listeners(event).length;
    };
}, function(module, exports, __webpack_require__) {
    var forOf = __webpack_require__(134);
    module.exports = function(iter, ITERATOR) {
        var result = [];
        forOf(iter, !1, result.push, result, ITERATOR);
        return result;
    };
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), isArray = __webpack_require__(164), SPECIES = __webpack_require__(15)("species");
    module.exports = function(original) {
        var C;
        if (isArray(original)) {
            C = original.constructor;
            if ("function" == typeof C && (C === Array || isArray(C.prototype))) C = undefined;
            if (isObject(C)) {
                C = C[SPECIES];
                if (null === C) C = undefined;
            }
        }
        return C === undefined ? Array : C;
    };
}, function(module, exports, __webpack_require__) {
    var speciesConstructor = __webpack_require__(362);
    module.exports = function(original, length) {
        return new (speciesConstructor(original))(length);
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var anObject = __webpack_require__(11), toPrimitive = __webpack_require__(45);
    module.exports = function(hint) {
        if ("string" !== hint && "number" !== hint && "default" !== hint) throw TypeError("Incorrect hint");
        return toPrimitive(anObject(this), "number" != hint);
    };
}, function(module, exports, __webpack_require__) {
    var getKeys = __webpack_require__(79), gOPS = __webpack_require__(139), pIE = __webpack_require__(114);
    module.exports = function(it) {
        var result = getKeys(it), getSymbols = gOPS.f;
        if (getSymbols) for (var key, symbols = getSymbols(it), isEnum = pIE.f, i = 0; symbols.length > i; ) if (isEnum.call(it, key = symbols[i++])) result.push(key);
        return result;
    };
}, function(module, exports, __webpack_require__) {
    var getKeys = __webpack_require__(79), toIObject = __webpack_require__(32);
    module.exports = function(object, el) {
        for (var key, O = toIObject(object), keys = getKeys(O), length = keys.length, index = 0; length > index; ) if (O[key = keys[index++]] === el) return key;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var getKeys = __webpack_require__(79), gOPS = __webpack_require__(139), pIE = __webpack_require__(114), toObject = __webpack_require__(25), IObject = __webpack_require__(113), $assign = Object.assign;
    module.exports = !$assign || __webpack_require__(9)(function() {
        var A = {}, B = {}, S = Symbol(), K = "abcdefghijklmnopqrst";
        A[S] = 7;
        K.split("").forEach(function(k) {
            B[k] = k;
        });
        return 7 != $assign({}, A)[S] || Object.keys($assign({}, B)).join("") != K;
    }) ? function(target, source) {
        for (var T = toObject(target), aLen = arguments.length, index = 1, getSymbols = gOPS.f, isEnum = pIE.f; aLen > index; ) for (var key, S = IObject(arguments[index++]), keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S), length = keys.length, j = 0; length > j; ) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
        return T;
    } : $assign;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var path = __webpack_require__(369), invoke = __webpack_require__(135), aFunction = __webpack_require__(39);
    module.exports = function() {
        for (var fn = aFunction(this), length = arguments.length, pargs = Array(length), i = 0, _ = path._, holder = !1; length > i; ) if ((pargs[i] = arguments[i++]) === _) holder = !0;
        return function() {
            var args, that = this, aLen = arguments.length, j = 0, k = 0;
            if (!holder && !aLen) return invoke(fn, pargs, that);
            args = pargs.slice();
            if (holder) for (;length > j; j++) if (args[j] === _) args[j] = arguments[k++];
            for (;aLen > k; ) args.push(arguments[k++]);
            return invoke(fn, args, that);
        };
    };
}, function(module, exports, __webpack_require__) {
    module.exports = __webpack_require__(8);
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.P, "Array", {
        copyWithin: __webpack_require__(229)
    });
    __webpack_require__(87)("copyWithin");
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $every = __webpack_require__(67)(4);
    $export($export.P + $export.F * !__webpack_require__(42)([].every, !0), "Array", {
        every: function(callbackfn) {
            return $every(this, callbackfn, arguments[1]);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.P, "Array", {
        fill: __webpack_require__(156)
    });
    __webpack_require__(87)("fill");
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $filter = __webpack_require__(67)(2);
    $export($export.P + $export.F * !__webpack_require__(42)([].filter, !0), "Array", {
        filter: function(callbackfn) {
            return $filter(this, callbackfn, arguments[1]);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $find = __webpack_require__(67)(6), KEY = "findIndex", forced = !0;
    if (KEY in []) Array(1)[KEY](function() {
        forced = !1;
    });
    $export($export.P + $export.F * forced, "Array", {
        findIndex: function(callbackfn) {
            return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
        }
    });
    __webpack_require__(87)(KEY);
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $find = __webpack_require__(67)(5), forced = !0;
    if ("find" in []) Array(1).find(function() {
        forced = !1;
    });
    $export($export.P + $export.F * forced, "Array", {
        find: function(callbackfn) {
            return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
        }
    });
    __webpack_require__(87)("find");
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $forEach = __webpack_require__(67)(0), STRICT = __webpack_require__(42)([].forEach, !0);
    $export($export.P + $export.F * !STRICT, "Array", {
        forEach: function(callbackfn) {
            return $forEach(this, callbackfn, arguments[1]);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ctx = __webpack_require__(57), $export = __webpack_require__(0), toObject = __webpack_require__(25), call = __webpack_require__(237), isArrayIter = __webpack_require__(163), toLength = __webpack_require__(24), createProperty = __webpack_require__(157), getIterFn = __webpack_require__(179);
    $export($export.S + $export.F * !__webpack_require__(137)(function(iter) {
        Array.from(iter);
    }), "Array", {
        from: function(arrayLike) {
            var length, result, step, iterator, O = toObject(arrayLike), C = "function" == typeof this ? this : Array, aLen = arguments.length, mapfn = aLen > 1 ? arguments[1] : undefined, mapping = mapfn !== undefined, index = 0, iterFn = getIterFn(O);
            if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
            if (iterFn != undefined && (C != Array || !isArrayIter(iterFn))) for (iterator = iterFn.call(O), 
            result = new C(); !(step = iterator.next()).done; index++) createProperty(result, index, mapping ? call(iterator, mapfn, [ step.value, index ], !0) : step.value); else {
                length = toLength(O.length);
                for (result = new C(length); length > index; index++) createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
            }
            result.length = index;
            return result;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $indexOf = __webpack_require__(131)(!1), $native = [].indexOf, NEGATIVE_ZERO = !!$native && 1 / [ 1 ].indexOf(1, -0) < 0;
    $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(42)($native)), "Array", {
        indexOf: function(searchElement) {
            return NEGATIVE_ZERO ? $native.apply(this, arguments) || 0 : $indexOf(this, searchElement, arguments[1]);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Array", {
        isArray: __webpack_require__(164)
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toIObject = __webpack_require__(32), arrayJoin = [].join;
    $export($export.P + $export.F * (__webpack_require__(113) != Object || !__webpack_require__(42)(arrayJoin)), "Array", {
        join: function(separator) {
            return arrayJoin.call(toIObject(this), separator === undefined ? "," : separator);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toIObject = __webpack_require__(32), toInteger = __webpack_require__(69), toLength = __webpack_require__(24), $native = [].lastIndexOf, NEGATIVE_ZERO = !!$native && 1 / [ 1 ].lastIndexOf(1, -0) < 0;
    $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(42)($native)), "Array", {
        lastIndexOf: function(searchElement) {
            if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;
            var O = toIObject(this), length = toLength(O.length), index = length - 1;
            if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));
            if (index < 0) index = length + index;
            for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;
            return -1;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $map = __webpack_require__(67)(1);
    $export($export.P + $export.F * !__webpack_require__(42)([].map, !0), "Array", {
        map: function(callbackfn) {
            return $map(this, callbackfn, arguments[1]);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), createProperty = __webpack_require__(157);
    $export($export.S + $export.F * __webpack_require__(9)(function() {
        function F() {}
        return !(Array.of.call(F) instanceof F);
    }), "Array", {
        of: function() {
            for (var index = 0, aLen = arguments.length, result = new ("function" == typeof this ? this : Array)(aLen); aLen > index; ) createProperty(result, index, arguments[index++]);
            result.length = aLen;
            return result;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $reduce = __webpack_require__(230);
    $export($export.P + $export.F * !__webpack_require__(42)([].reduceRight, !0), "Array", {
        reduceRight: function(callbackfn) {
            return $reduce(this, callbackfn, arguments.length, arguments[1], !0);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $reduce = __webpack_require__(230);
    $export($export.P + $export.F * !__webpack_require__(42)([].reduce, !0), "Array", {
        reduce: function(callbackfn) {
            return $reduce(this, callbackfn, arguments.length, arguments[1], !1);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), html = __webpack_require__(161), cof = __webpack_require__(40), toIndex = __webpack_require__(80), toLength = __webpack_require__(24), arraySlice = [].slice;
    $export($export.P + $export.F * __webpack_require__(9)(function() {
        if (html) arraySlice.call(html);
    }), "Array", {
        slice: function(begin, end) {
            var len = toLength(this.length), klass = cof(this);
            end = end === undefined ? len : end;
            if ("Array" == klass) return arraySlice.call(this, begin, end);
            for (var start = toIndex(begin, len), upTo = toIndex(end, len), size = toLength(upTo - start), cloned = Array(size), i = 0; i < size; i++) cloned[i] = "String" == klass ? this.charAt(start + i) : this[start + i];
            return cloned;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $some = __webpack_require__(67)(3);
    $export($export.P + $export.F * !__webpack_require__(42)([].some, !0), "Array", {
        some: function(callbackfn) {
            return $some(this, callbackfn, arguments[1]);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), aFunction = __webpack_require__(39), toObject = __webpack_require__(25), fails = __webpack_require__(9), $sort = [].sort, test = [ 1, 2, 3 ];
    $export($export.P + $export.F * (fails(function() {
        test.sort(undefined);
    }) || !fails(function() {
        test.sort(null);
    }) || !__webpack_require__(42)($sort)), "Array", {
        sort: function(comparefn) {
            return comparefn === undefined ? $sort.call(toObject(this)) : $sort.call(toObject(this), aFunction(comparefn));
        }
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(91)("Array");
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Date", {
        now: function() {
            return new Date().getTime();
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), fails = __webpack_require__(9), getTime = Date.prototype.getTime, lz = function(num) {
        return num > 9 ? num : "0" + num;
    };
    $export($export.P + $export.F * (fails(function() {
        return "0385-07-25T07:06:39.999Z" != new Date(-5e13 - 1).toISOString();
    }) || !fails(function() {
        new Date(NaN).toISOString();
    })), "Date", {
        toISOString: function() {
            if (!isFinite(getTime.call(this))) throw RangeError("Invalid time value");
            var d = this, y = d.getUTCFullYear(), m = d.getUTCMilliseconds(), s = y < 0 ? "-" : y > 9999 ? "+" : "";
            return s + ("00000" + Math.abs(y)).slice(s ? -6 : -4) + "-" + lz(d.getUTCMonth() + 1) + "-" + lz(d.getUTCDate()) + "T" + lz(d.getUTCHours()) + ":" + lz(d.getUTCMinutes()) + ":" + lz(d.getUTCSeconds()) + "." + (m > 99 ? m : "0" + lz(m)) + "Z";
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toObject = __webpack_require__(25), toPrimitive = __webpack_require__(45);
    $export($export.P + $export.F * __webpack_require__(9)(function() {
        return null !== new Date(NaN).toJSON() || 1 !== Date.prototype.toJSON.call({
            toISOString: function() {
                return 1;
            }
        });
    }), "Date", {
        toJSON: function(key) {
            var O = toObject(this), pv = toPrimitive(O);
            return "number" == typeof pv && !isFinite(pv) ? null : O.toISOString();
        }
    });
}, function(module, exports, __webpack_require__) {
    var TO_PRIMITIVE = __webpack_require__(15)("toPrimitive"), proto = Date.prototype;
    if (!(TO_PRIMITIVE in proto)) __webpack_require__(33)(proto, TO_PRIMITIVE, __webpack_require__(364));
}, function(module, exports, __webpack_require__) {
    var DateProto = Date.prototype, $toString = DateProto.toString, getTime = DateProto.getTime;
    if (new Date(NaN) + "" != "Invalid Date") __webpack_require__(35)(DateProto, "toString", function() {
        var value = getTime.call(this);
        return value === value ? $toString.call(this) : "Invalid Date";
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.P, "Function", {
        bind: __webpack_require__(231)
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var isObject = __webpack_require__(12), getPrototypeOf = __webpack_require__(58), HAS_INSTANCE = __webpack_require__(15)("hasInstance"), FunctionProto = Function.prototype;
    if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(21).f(FunctionProto, HAS_INSTANCE, {
        value: function(O) {
            if ("function" != typeof this || !isObject(O)) return !1;
            if (!isObject(this.prototype)) return O instanceof this;
            for (;O = getPrototypeOf(O); ) if (this.prototype === O) return !0;
            return !1;
        }
    });
}, function(module, exports, __webpack_require__) {
    var dP = __webpack_require__(21).f, createDesc = __webpack_require__(68), has = __webpack_require__(30), FProto = Function.prototype, nameRE = /^\s*function ([^ (]*)/, isExtensible = Object.isExtensible || function() {
        return !0;
    };
    "name" in FProto || __webpack_require__(20) && dP(FProto, "name", {
        configurable: !0,
        get: function() {
            try {
                var that = this, name = ("" + that).match(nameRE)[1];
                has(that, "name") || !isExtensible(that) || dP(that, "name", createDesc(5, name));
                return name;
            } catch (e) {
                return "";
            }
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var strong = __webpack_require__(232);
    module.exports = __webpack_require__(234)("Map", function(get) {
        return function() {
            return get(this, arguments.length > 0 ? arguments[0] : undefined);
        };
    }, {
        get: function(key) {
            var entry = strong.getEntry(this, key);
            return entry && entry.v;
        },
        set: function(key, value) {
            return strong.def(this, 0 === key ? 0 : key, value);
        }
    }, strong, !0);
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), log1p = __webpack_require__(239), sqrt = Math.sqrt, $acosh = Math.acosh;
    $export($export.S + $export.F * !($acosh && 710 == Math.floor($acosh(Number.MAX_VALUE)) && $acosh(Infinity) == Infinity), "Math", {
        acosh: function(x) {
            return (x = +x) < 1 ? NaN : x > 94906265.62425156 ? Math.log(x) + Math.LN2 : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
        }
    });
}, function(module, exports, __webpack_require__) {
    function asinh(x) {
        return !isFinite(x = +x) || 0 == x ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
    }
    var $export = __webpack_require__(0), $asinh = Math.asinh;
    $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), "Math", {
        asinh: asinh
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $atanh = Math.atanh;
    $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), "Math", {
        atanh: function(x) {
            return 0 == (x = +x) ? x : Math.log((1 + x) / (1 - x)) / 2;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), sign = __webpack_require__(168);
    $export($export.S, "Math", {
        cbrt: function(x) {
            return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        clz32: function(x) {
            return (x >>>= 0) ? 31 - Math.floor(Math.log(x + .5) * Math.LOG2E) : 32;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), exp = Math.exp;
    $export($export.S, "Math", {
        cosh: function(x) {
            return (exp(x = +x) + exp(-x)) / 2;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $expm1 = __webpack_require__(167);
    $export($export.S + $export.F * ($expm1 != Math.expm1), "Math", {
        expm1: $expm1
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), sign = __webpack_require__(168), pow = Math.pow, EPSILON = pow(2, -52), EPSILON32 = pow(2, -23), MAX32 = pow(2, 127) * (2 - EPSILON32), MIN32 = pow(2, -126), roundTiesToEven = function(n) {
        return n + 1 / EPSILON - 1 / EPSILON;
    };
    $export($export.S, "Math", {
        fround: function(x) {
            var a, result, $abs = Math.abs(x), $sign = sign(x);
            if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
            a = (1 + EPSILON32 / EPSILON) * $abs;
            result = a - (a - $abs);
            if (result > MAX32 || result != result) return $sign * Infinity; else return $sign * result;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), abs = Math.abs;
    $export($export.S, "Math", {
        hypot: function(value1, value2) {
            for (var arg, div, sum = 0, i = 0, aLen = arguments.length, larg = 0; i < aLen; ) {
                arg = abs(arguments[i++]);
                if (larg < arg) {
                    div = larg / arg;
                    sum = sum * div * div + 1;
                    larg = arg;
                } else if (arg > 0) {
                    div = arg / larg;
                    sum += div * div;
                } else sum += arg;
            }
            return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $imul = Math.imul;
    $export($export.S + $export.F * __webpack_require__(9)(function() {
        return -5 != $imul(4294967295, 5) || 2 != $imul.length;
    }), "Math", {
        imul: function(x, y) {
            var xn = +x, yn = +y, xl = 65535 & xn, yl = 65535 & yn;
            return 0 | xl * yl + ((65535 & xn >>> 16) * yl + xl * (65535 & yn >>> 16) << 16 >>> 0);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        log10: function(x) {
            return Math.log(x) / Math.LN10;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        log1p: __webpack_require__(239)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        log2: function(x) {
            return Math.log(x) / Math.LN2;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        sign: __webpack_require__(168)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), expm1 = __webpack_require__(167), exp = Math.exp;
    $export($export.S + $export.F * __webpack_require__(9)(function() {
        return -2e-17 != !Math.sinh(-2e-17);
    }), "Math", {
        sinh: function(x) {
            return Math.abs(x = +x) < 1 ? (expm1(x) - expm1(-x)) / 2 : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), expm1 = __webpack_require__(167), exp = Math.exp;
    $export($export.S, "Math", {
        tanh: function(x) {
            var a = expm1(x = +x), b = expm1(-x);
            return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        trunc: function(it) {
            return (it > 0 ? Math.floor : Math.ceil)(it);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var global = __webpack_require__(8), has = __webpack_require__(30), cof = __webpack_require__(40), inheritIfRequired = __webpack_require__(162), toPrimitive = __webpack_require__(45), fails = __webpack_require__(9), gOPN = __webpack_require__(78).f, gOPD = __webpack_require__(34).f, dP = __webpack_require__(21).f, $trim = __webpack_require__(93).trim, $Number = global.Number, Base = $Number, proto = $Number.prototype, BROKEN_COF = "Number" == cof(__webpack_require__(77)(proto)), TRIM = "trim" in String.prototype, toNumber = function(argument) {
        var it = toPrimitive(argument, !1);
        if ("string" == typeof it && it.length > 2) {
            it = TRIM ? it.trim() : $trim(it, 3);
            var third, radix, maxCode, first = it.charCodeAt(0);
            if (43 === first || 45 === first) {
                third = it.charCodeAt(2);
                if (88 === third || 120 === third) return NaN;
            } else if (48 === first) {
                switch (it.charCodeAt(1)) {
                  case 66:
                  case 98:
                    radix = 2;
                    maxCode = 49;
                    break;

                  case 79:
                  case 111:
                    radix = 8;
                    maxCode = 55;
                    break;

                  default:
                    return +it;
                }
                for (var code, digits = it.slice(2), i = 0, l = digits.length; i < l; i++) {
                    code = digits.charCodeAt(i);
                    if (code < 48 || code > maxCode) return NaN;
                }
                return parseInt(digits, radix);
            }
        }
        return +it;
    };
    if (!$Number(" 0o1") || !$Number("0b1") || $Number("+0x1")) {
        $Number = function(value) {
            var it = arguments.length < 1 ? 0 : value, that = this;
            return that instanceof $Number && (BROKEN_COF ? fails(function() {
                proto.valueOf.call(that);
            }) : "Number" != cof(that)) ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
        };
        for (var key, keys = __webpack_require__(20) ? gOPN(Base) : "MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","), j = 0; keys.length > j; j++) if (has(Base, key = keys[j]) && !has($Number, key)) dP($Number, key, gOPD(Base, key));
        $Number.prototype = proto;
        proto.constructor = $Number;
        __webpack_require__(35)(global, "Number", $Number);
    }
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Number", {
        EPSILON: Math.pow(2, -52)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), _isFinite = __webpack_require__(8).isFinite;
    $export($export.S, "Number", {
        isFinite: function(it) {
            return "number" == typeof it && _isFinite(it);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Number", {
        isInteger: __webpack_require__(236)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Number", {
        isNaN: function(number) {
            return number != number;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), isInteger = __webpack_require__(236), abs = Math.abs;
    $export($export.S, "Number", {
        isSafeInteger: function(number) {
            return isInteger(number) && abs(number) <= 9007199254740991;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Number", {
        MAX_SAFE_INTEGER: 9007199254740991
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Number", {
        MIN_SAFE_INTEGER: -9007199254740991
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $parseFloat = __webpack_require__(246);
    $export($export.S + $export.F * (Number.parseFloat != $parseFloat), "Number", {
        parseFloat: $parseFloat
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $parseInt = __webpack_require__(247);
    $export($export.S + $export.F * (Number.parseInt != $parseInt), "Number", {
        parseInt: $parseInt
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toInteger = __webpack_require__(69), aNumberValue = __webpack_require__(228), repeat = __webpack_require__(175), $toFixed = 1..toFixed, floor = Math.floor, data = [ 0, 0, 0, 0, 0, 0 ], ERROR = "Number.toFixed: incorrect invocation!", multiply = function(n, c) {
        for (var i = -1, c2 = c; ++i < 6; ) {
            c2 += n * data[i];
            data[i] = c2 % 1e7;
            c2 = floor(c2 / 1e7);
        }
    }, divide = function(n) {
        for (var i = 6, c = 0; --i >= 0; ) {
            c += data[i];
            data[i] = floor(c / n);
            c = c % n * 1e7;
        }
    }, numToString = function() {
        for (var i = 6, s = ""; --i >= 0; ) if ("" !== s || 0 === i || 0 !== data[i]) {
            var t = String(data[i]);
            s = "" === s ? t : s + repeat.call("0", 7 - t.length) + t;
        }
        return s;
    }, pow = function(x, n, acc) {
        return 0 === n ? acc : n % 2 == 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
    }, log = function(x) {
        for (var n = 0, x2 = x; x2 >= 4096; ) {
            n += 12;
            x2 /= 4096;
        }
        for (;x2 >= 2; ) {
            n += 1;
            x2 /= 2;
        }
        return n;
    };
    $export($export.P + $export.F * (!!$toFixed && ("0.000" !== 8e-5.toFixed(3) || "1" !== .9.toFixed(0) || "1.25" !== 1.255.toFixed(2) || "1000000000000000128" !== (0xde0b6b3a7640080).toFixed(0)) || !__webpack_require__(9)(function() {
        $toFixed.call({});
    })), "Number", {
        toFixed: function(fractionDigits) {
            var e, z, j, k, x = aNumberValue(this, ERROR), f = toInteger(fractionDigits), s = "", m = "0";
            if (f < 0 || f > 20) throw RangeError(ERROR);
            if (x != x) return "NaN";
            if (x <= -1e21 || x >= 1e21) return String(x);
            if (x < 0) {
                s = "-";
                x = -x;
            }
            if (x > 1e-21) {
                e = log(x * pow(2, 69, 1)) - 69;
                z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
                z *= 4503599627370496;
                e = 52 - e;
                if (e > 0) {
                    multiply(0, z);
                    j = f;
                    for (;j >= 7; ) {
                        multiply(1e7, 0);
                        j -= 7;
                    }
                    multiply(pow(10, j, 1), 0);
                    j = e - 1;
                    for (;j >= 23; ) {
                        divide(1 << 23);
                        j -= 23;
                    }
                    divide(1 << j);
                    multiply(1, 1);
                    divide(2);
                    m = numToString();
                } else {
                    multiply(0, z);
                    multiply(1 << -e, 0);
                    m = numToString() + repeat.call("0", f);
                }
            }
            if (f > 0) {
                k = m.length;
                m = s + (k <= f ? "0." + repeat.call("0", f - k) + m : m.slice(0, k - f) + "." + m.slice(k - f));
            } else m = s + m;
            return m;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $fails = __webpack_require__(9), aNumberValue = __webpack_require__(228), $toPrecision = 1..toPrecision;
    $export($export.P + $export.F * ($fails(function() {
        return "1" !== $toPrecision.call(1, undefined);
    }) || !$fails(function() {
        $toPrecision.call({});
    })), "Number", {
        toPrecision: function(precision) {
            var that = aNumberValue(this, "Number#toPrecision: incorrect invocation!");
            return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S + $export.F, "Object", {
        assign: __webpack_require__(367)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Object", {
        create: __webpack_require__(77)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S + $export.F * !__webpack_require__(20), "Object", {
        defineProperties: __webpack_require__(241)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S + $export.F * !__webpack_require__(20), "Object", {
        defineProperty: __webpack_require__(21).f
    });
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), meta = __webpack_require__(90).onFreeze;
    __webpack_require__(44)("freeze", function($freeze) {
        return function(it) {
            return $freeze && isObject(it) ? $freeze(meta(it)) : it;
        };
    });
}, function(module, exports, __webpack_require__) {
    var toIObject = __webpack_require__(32), $getOwnPropertyDescriptor = __webpack_require__(34).f;
    __webpack_require__(44)("getOwnPropertyDescriptor", function() {
        return function(it, key) {
            return $getOwnPropertyDescriptor(toIObject(it), key);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(44)("getOwnPropertyNames", function() {
        return __webpack_require__(242).f;
    });
}, function(module, exports, __webpack_require__) {
    var toObject = __webpack_require__(25), $getPrototypeOf = __webpack_require__(58);
    __webpack_require__(44)("getPrototypeOf", function() {
        return function(it) {
            return $getPrototypeOf(toObject(it));
        };
    });
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12);
    __webpack_require__(44)("isExtensible", function($isExtensible) {
        return function(it) {
            return isObject(it) ? $isExtensible ? $isExtensible(it) : !0 : !1;
        };
    });
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12);
    __webpack_require__(44)("isFrozen", function($isFrozen) {
        return function(it) {
            return isObject(it) ? $isFrozen ? $isFrozen(it) : !1 : !0;
        };
    });
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12);
    __webpack_require__(44)("isSealed", function($isSealed) {
        return function(it) {
            return isObject(it) ? $isSealed ? $isSealed(it) : !1 : !0;
        };
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Object", {
        is: __webpack_require__(248)
    });
}, function(module, exports, __webpack_require__) {
    var toObject = __webpack_require__(25), $keys = __webpack_require__(79);
    __webpack_require__(44)("keys", function() {
        return function(it) {
            return $keys(toObject(it));
        };
    });
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), meta = __webpack_require__(90).onFreeze;
    __webpack_require__(44)("preventExtensions", function($preventExtensions) {
        return function(it) {
            return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;
        };
    });
}, function(module, exports, __webpack_require__) {
    var isObject = __webpack_require__(12), meta = __webpack_require__(90).onFreeze;
    __webpack_require__(44)("seal", function($seal) {
        return function(it) {
            return $seal && isObject(it) ? $seal(meta(it)) : it;
        };
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Object", {
        setPrototypeOf: __webpack_require__(169).set
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var classof = __webpack_require__(112), test = {};
    test[__webpack_require__(15)("toStringTag")] = "z";
    if (test + "" != "[object z]") __webpack_require__(35)(Object.prototype, "toString", function() {
        return "[object " + classof(this) + "]";
    }, !0);
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $parseFloat = __webpack_require__(246);
    $export($export.G + $export.F * (parseFloat != $parseFloat), {
        parseFloat: $parseFloat
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $parseInt = __webpack_require__(247);
    $export($export.G + $export.F * (parseInt != $parseInt), {
        parseInt: $parseInt
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var Internal, GenericPromiseCapability, Wrapper, LIBRARY = __webpack_require__(76), global = __webpack_require__(8), ctx = __webpack_require__(57), classof = __webpack_require__(112), $export = __webpack_require__(0), isObject = __webpack_require__(12), aFunction = __webpack_require__(39), anInstance = __webpack_require__(111), forOf = __webpack_require__(134), speciesConstructor = __webpack_require__(172), task = __webpack_require__(177).set, microtask = __webpack_require__(240)(), TypeError = global.TypeError, process = global.process, $Promise = global.Promise, process = global.process, isNode = "process" == classof(process), empty = function() {}, USE_NATIVE = !!function() {
        try {
            var promise = $Promise.resolve(1), FakePromise = (promise.constructor = {})[__webpack_require__(15)("species")] = function(exec) {
                exec(empty, empty);
            };
            return (isNode || "function" == typeof PromiseRejectionEvent) && promise.then(empty) instanceof FakePromise;
        } catch (e) {}
    }(), sameConstructor = function(a, b) {
        return a === b || a === $Promise && b === Wrapper;
    }, isThenable = function(it) {
        var then;
        return isObject(it) && "function" == typeof (then = it.then) ? then : !1;
    }, newPromiseCapability = function(C) {
        return sameConstructor($Promise, C) ? new PromiseCapability(C) : new GenericPromiseCapability(C);
    }, PromiseCapability = GenericPromiseCapability = function(C) {
        var resolve, reject;
        this.promise = new C(function($$resolve, $$reject) {
            if (resolve !== undefined || reject !== undefined) throw TypeError("Bad Promise constructor");
            resolve = $$resolve;
            reject = $$reject;
        });
        this.resolve = aFunction(resolve);
        this.reject = aFunction(reject);
    }, perform = function(exec) {
        try {
            exec();
        } catch (e) {
            return {
                error: e
            };
        }
    }, notify = function(promise, isReject) {
        if (!promise._n) {
            promise._n = !0;
            var chain = promise._c;
            microtask(function() {
                for (var value = promise._v, ok = 1 == promise._s, i = 0; chain.length > i; ) !function(reaction) {
                    var result, then, handler = ok ? reaction.ok : reaction.fail, resolve = reaction.resolve, reject = reaction.reject, domain = reaction.domain;
                    try {
                        if (handler) {
                            if (!ok) {
                                if (2 == promise._h) onHandleUnhandled(promise);
                                promise._h = 1;
                            }
                            if (!0 === handler) result = value; else {
                                if (domain) domain.enter();
                                result = handler(value);
                                if (domain) domain.exit();
                            }
                            if (result === reaction.promise) reject(TypeError("Promise-chain cycle")); else if (then = isThenable(result)) then.call(result, resolve, reject); else resolve(result);
                        } else reject(value);
                    } catch (e) {
                        reject(e);
                    }
                }(chain[i++]);
                promise._c = [];
                promise._n = !1;
                if (isReject && !promise._h) onUnhandled(promise);
            });
        }
    }, onUnhandled = function(promise) {
        task.call(global, function() {
            var abrupt, handler, console, value = promise._v;
            if (isUnhandled(promise)) {
                abrupt = perform(function() {
                    if (isNode) process.emit("unhandledRejection", value, promise); else if (handler = global.onunhandledrejection) handler({
                        promise: promise,
                        reason: value
                    }); else if ((console = global.console) && console.error) console.error("Unhandled promise rejection", value);
                });
                promise._h = isNode || isUnhandled(promise) ? 2 : 1;
            }
            promise._a = undefined;
            if (abrupt) throw abrupt.error;
        });
    }, isUnhandled = function(promise) {
        if (1 == promise._h) return !1;
        for (var reaction, chain = promise._a || promise._c, i = 0; chain.length > i; ) {
            reaction = chain[i++];
            if (reaction.fail || !isUnhandled(reaction.promise)) return !1;
        }
        return !0;
    }, onHandleUnhandled = function(promise) {
        task.call(global, function() {
            var handler;
            if (isNode) process.emit("rejectionHandled", promise); else if (handler = global.onrejectionhandled) handler({
                promise: promise,
                reason: promise._v
            });
        });
    }, $reject = function(value) {
        var promise = this;
        if (!promise._d) {
            promise._d = !0;
            promise = promise._w || promise;
            promise._v = value;
            promise._s = 2;
            if (!promise._a) promise._a = promise._c.slice();
            notify(promise, !0);
        }
    }, $resolve = function(value) {
        var then, promise = this;
        if (!promise._d) {
            promise._d = !0;
            promise = promise._w || promise;
            try {
                if (promise === value) throw TypeError("Promise can't be resolved itself");
                if (then = isThenable(value)) microtask(function() {
                    var wrapper = {
                        _w: promise,
                        _d: !1
                    };
                    try {
                        then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
                    } catch (e) {
                        $reject.call(wrapper, e);
                    }
                }); else {
                    promise._v = value;
                    promise._s = 1;
                    notify(promise, !1);
                }
            } catch (e) {
                $reject.call({
                    _w: promise,
                    _d: !1
                }, e);
            }
        }
    };
    if (!USE_NATIVE) {
        $Promise = function(executor) {
            anInstance(this, $Promise, "Promise", "_h");
            aFunction(executor);
            Internal.call(this);
            try {
                executor(ctx($resolve, this, 1), ctx($reject, this, 1));
            } catch (err) {
                $reject.call(this, err);
            }
        };
        Internal = function(executor) {
            this._c = [];
            this._a = undefined;
            this._s = 0;
            this._d = !1;
            this._v = undefined;
            this._h = 0;
            this._n = !1;
        };
        Internal.prototype = __webpack_require__(115)($Promise.prototype, {
            then: function(onFulfilled, onRejected) {
                var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
                reaction.ok = "function" == typeof onFulfilled ? onFulfilled : !0;
                reaction.fail = "function" == typeof onRejected && onRejected;
                reaction.domain = isNode ? process.domain : undefined;
                this._c.push(reaction);
                if (this._a) this._a.push(reaction);
                if (this._s) notify(this, !1);
                return reaction.promise;
            },
            "catch": function(onRejected) {
                return this.then(undefined, onRejected);
            }
        });
        PromiseCapability = function() {
            var promise = new Internal();
            this.promise = promise;
            this.resolve = ctx($resolve, promise, 1);
            this.reject = ctx($reject, promise, 1);
        };
    }
    $export($export.G + $export.W + $export.F * !USE_NATIVE, {
        Promise: $Promise
    });
    __webpack_require__(92)($Promise, "Promise");
    __webpack_require__(91)("Promise");
    Wrapper = __webpack_require__(88).Promise;
    $export($export.S + $export.F * !USE_NATIVE, "Promise", {
        reject: function(r) {
            var capability = newPromiseCapability(this);
            (0, capability.reject)(r);
            return capability.promise;
        }
    });
    $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), "Promise", {
        resolve: function(x) {
            if (x instanceof $Promise && sameConstructor(x.constructor, this)) return x;
            var capability = newPromiseCapability(this);
            (0, capability.resolve)(x);
            return capability.promise;
        }
    });
    $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(137)(function(iter) {
        $Promise.all(iter)["catch"](empty);
    })), "Promise", {
        all: function(iterable) {
            var C = this, capability = newPromiseCapability(C), resolve = capability.resolve, reject = capability.reject, abrupt = perform(function() {
                var values = [], index = 0, remaining = 1;
                forOf(iterable, !1, function(promise) {
                    var $index = index++, alreadyCalled = !1;
                    values.push(undefined);
                    remaining++;
                    C.resolve(promise).then(function(value) {
                        if (!alreadyCalled) {
                            alreadyCalled = !0;
                            values[$index] = value;
                            --remaining || resolve(values);
                        }
                    }, reject);
                });
                --remaining || resolve(values);
            });
            if (abrupt) reject(abrupt.error);
            return capability.promise;
        },
        race: function(iterable) {
            var C = this, capability = newPromiseCapability(C), reject = capability.reject, abrupt = perform(function() {
                forOf(iterable, !1, function(promise) {
                    C.resolve(promise).then(capability.resolve, reject);
                });
            });
            if (abrupt) reject(abrupt.error);
            return capability.promise;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), aFunction = __webpack_require__(39), anObject = __webpack_require__(11), rApply = (__webpack_require__(8).Reflect || {}).apply, fApply = Function.apply;
    $export($export.S + $export.F * !__webpack_require__(9)(function() {
        rApply(function() {});
    }), "Reflect", {
        apply: function(target, thisArgument, argumentsList) {
            var T = aFunction(target), L = anObject(argumentsList);
            return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), create = __webpack_require__(77), aFunction = __webpack_require__(39), anObject = __webpack_require__(11), isObject = __webpack_require__(12), fails = __webpack_require__(9), bind = __webpack_require__(231), rConstruct = (__webpack_require__(8).Reflect || {}).construct, NEW_TARGET_BUG = fails(function() {
        function F() {}
        return !(rConstruct(function() {}, [], F) instanceof F);
    }), ARGS_BUG = !fails(function() {
        rConstruct(function() {});
    });
    $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), "Reflect", {
        construct: function(Target, args) {
            aFunction(Target);
            anObject(args);
            var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
            if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
            if (Target == newTarget) {
                switch (args.length) {
                  case 0:
                    return new Target();

                  case 1:
                    return new Target(args[0]);

                  case 2:
                    return new Target(args[0], args[1]);

                  case 3:
                    return new Target(args[0], args[1], args[2]);

                  case 4:
                    return new Target(args[0], args[1], args[2], args[3]);
                }
                var $args = [ null ];
                $args.push.apply($args, args);
                return new (bind.apply(Target, $args))();
            }
            var proto = newTarget.prototype, instance = create(isObject(proto) ? proto : Object.prototype), result = Function.apply.call(Target, instance, args);
            return isObject(result) ? result : instance;
        }
    });
}, function(module, exports, __webpack_require__) {
    var dP = __webpack_require__(21), $export = __webpack_require__(0), anObject = __webpack_require__(11), toPrimitive = __webpack_require__(45);
    $export($export.S + $export.F * __webpack_require__(9)(function() {
        Reflect.defineProperty(dP.f({}, 1, {
            value: 1
        }), 1, {
            value: 2
        });
    }), "Reflect", {
        defineProperty: function(target, propertyKey, attributes) {
            anObject(target);
            propertyKey = toPrimitive(propertyKey, !0);
            anObject(attributes);
            try {
                dP.f(target, propertyKey, attributes);
                return !0;
            } catch (e) {
                return !1;
            }
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), gOPD = __webpack_require__(34).f, anObject = __webpack_require__(11);
    $export($export.S, "Reflect", {
        deleteProperty: function(target, propertyKey) {
            var desc = gOPD(anObject(target), propertyKey);
            return desc && !desc.configurable ? !1 : delete target[propertyKey];
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), anObject = __webpack_require__(11), Enumerate = function(iterated) {
        this._t = anObject(iterated);
        this._i = 0;
        var key, keys = this._k = [];
        for (key in iterated) keys.push(key);
    };
    __webpack_require__(165)(Enumerate, "Object", function() {
        var key, that = this, keys = that._k;
        do {
            if (that._i >= keys.length) return {
                value: undefined,
                done: !0
            };
        } while (!((key = keys[that._i++]) in that._t));
        return {
            value: key,
            done: !1
        };
    });
    $export($export.S, "Reflect", {
        enumerate: function(target) {
            return new Enumerate(target);
        }
    });
}, function(module, exports, __webpack_require__) {
    var gOPD = __webpack_require__(34), $export = __webpack_require__(0), anObject = __webpack_require__(11);
    $export($export.S, "Reflect", {
        getOwnPropertyDescriptor: function(target, propertyKey) {
            return gOPD.f(anObject(target), propertyKey);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), getProto = __webpack_require__(58), anObject = __webpack_require__(11);
    $export($export.S, "Reflect", {
        getPrototypeOf: function(target) {
            return getProto(anObject(target));
        }
    });
}, function(module, exports, __webpack_require__) {
    function get(target, propertyKey) {
        var desc, proto, receiver = arguments.length < 3 ? target : arguments[2];
        if (anObject(target) === receiver) return target[propertyKey];
        if (desc = gOPD.f(target, propertyKey)) return has(desc, "value") ? desc.value : desc.get !== undefined ? desc.get.call(receiver) : undefined;
        if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver); else return;
    }
    var gOPD = __webpack_require__(34), getPrototypeOf = __webpack_require__(58), has = __webpack_require__(30), $export = __webpack_require__(0), isObject = __webpack_require__(12), anObject = __webpack_require__(11);
    $export($export.S, "Reflect", {
        get: get
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Reflect", {
        has: function(target, propertyKey) {
            return propertyKey in target;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), anObject = __webpack_require__(11), $isExtensible = Object.isExtensible;
    $export($export.S, "Reflect", {
        isExtensible: function(target) {
            anObject(target);
            return $isExtensible ? $isExtensible(target) : !0;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Reflect", {
        ownKeys: __webpack_require__(245)
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), anObject = __webpack_require__(11), $preventExtensions = Object.preventExtensions;
    $export($export.S, "Reflect", {
        preventExtensions: function(target) {
            anObject(target);
            try {
                if ($preventExtensions) $preventExtensions(target);
                return !0;
            } catch (e) {
                return !1;
            }
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), setProto = __webpack_require__(169);
    if (setProto) $export($export.S, "Reflect", {
        setPrototypeOf: function(target, proto) {
            setProto.check(target, proto);
            try {
                setProto.set(target, proto);
                return !0;
            } catch (e) {
                return !1;
            }
        }
    });
}, function(module, exports, __webpack_require__) {
    function set(target, propertyKey, V) {
        var existingDescriptor, proto, receiver = arguments.length < 4 ? target : arguments[3], ownDesc = gOPD.f(anObject(target), propertyKey);
        if (!ownDesc) {
            if (isObject(proto = getPrototypeOf(target))) return set(proto, propertyKey, V, receiver);
            ownDesc = createDesc(0);
        }
        if (has(ownDesc, "value")) {
            if (!1 === ownDesc.writable || !isObject(receiver)) return !1;
            existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);
            existingDescriptor.value = V;
            dP.f(receiver, propertyKey, existingDescriptor);
            return !0;
        }
        return ownDesc.set === undefined ? !1 : (ownDesc.set.call(receiver, V), !0);
    }
    var dP = __webpack_require__(21), gOPD = __webpack_require__(34), getPrototypeOf = __webpack_require__(58), has = __webpack_require__(30), $export = __webpack_require__(0), createDesc = __webpack_require__(68), anObject = __webpack_require__(11), isObject = __webpack_require__(12);
    $export($export.S, "Reflect", {
        set: set
    });
}, function(module, exports, __webpack_require__) {
    var global = __webpack_require__(8), inheritIfRequired = __webpack_require__(162), dP = __webpack_require__(21).f, gOPN = __webpack_require__(78).f, isRegExp = __webpack_require__(136), $flags = __webpack_require__(133), $RegExp = global.RegExp, Base = $RegExp, proto = $RegExp.prototype, re1 = /a/g, re2 = /a/g, CORRECT_NEW = new $RegExp(re1) !== re1;
    if (__webpack_require__(20) && (!CORRECT_NEW || __webpack_require__(9)(function() {
        re2[__webpack_require__(15)("match")] = !1;
        return $RegExp(re1) != re1 || $RegExp(re2) == re2 || "/a/i" != $RegExp(re1, "i");
    }))) {
        $RegExp = function(p, f) {
            var tiRE = this instanceof $RegExp, piRE = isRegExp(p), fiU = f === undefined;
            return !tiRE && piRE && p.constructor === $RegExp && fiU ? p : inheritIfRequired(CORRECT_NEW ? new Base(piRE && !fiU ? p.source : p, f) : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f), tiRE ? this : proto, $RegExp);
        };
        for (var keys = gOPN(Base), i = 0; keys.length > i; ) !function(key) {
            key in $RegExp || dP($RegExp, key, {
                configurable: !0,
                get: function() {
                    return Base[key];
                },
                set: function(it) {
                    Base[key] = it;
                }
            });
        }(keys[i++]);
        proto.constructor = $RegExp;
        $RegExp.prototype = proto;
        __webpack_require__(35)(global, "RegExp", $RegExp);
    }
    __webpack_require__(91)("RegExp");
}, function(module, exports, __webpack_require__) {
    __webpack_require__(132)("match", 1, function(defined, MATCH, $match) {
        return [ function(regexp) {
            "use strict";
            var O = defined(this), fn = regexp == undefined ? undefined : regexp[MATCH];
            return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
        }, $match ];
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(132)("replace", 2, function(defined, REPLACE, $replace) {
        return [ function(searchValue, replaceValue) {
            "use strict";
            var O = defined(this), fn = searchValue == undefined ? undefined : searchValue[REPLACE];
            return fn !== undefined ? fn.call(searchValue, O, replaceValue) : $replace.call(String(O), searchValue, replaceValue);
        }, $replace ];
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(132)("search", 1, function(defined, SEARCH, $search) {
        return [ function(regexp) {
            "use strict";
            var O = defined(this), fn = regexp == undefined ? undefined : regexp[SEARCH];
            return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
        }, $search ];
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(132)("split", 2, function(defined, SPLIT, $split) {
        "use strict";
        var isRegExp = __webpack_require__(136), _split = $split, $push = [].push, LENGTH = "length";
        if ("c" == "abbc".split(/(b)*/)[1] || 4 != "test".split(/(?:)/, -1)[LENGTH] || 2 != "ab".split(/(?:ab)*/)[LENGTH] || 4 != ".".split(/(.?)(.?)/)[LENGTH] || ".".split(/()()/)[LENGTH] > 1 || "".split(/.?/)[LENGTH]) {
            var NPCG = /()??/.exec("")[1] === undefined;
            $split = function(separator, limit) {
                var string = String(this);
                if (separator === undefined && 0 === limit) return [];
                if (!isRegExp(separator)) return _split.call(string, separator, limit);
                var separator2, match, lastIndex, lastLength, i, output = [], flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.unicode ? "u" : "") + (separator.sticky ? "y" : ""), lastLastIndex = 0, splitLimit = limit === undefined ? 4294967295 : limit >>> 0, separatorCopy = new RegExp(separator.source, flags + "g");
                if (!NPCG) separator2 = new RegExp("^" + separatorCopy.source + "$(?!\\s)", flags);
                for (;match = separatorCopy.exec(string); ) {
                    lastIndex = match.index + match[0][LENGTH];
                    if (lastIndex > lastLastIndex) {
                        output.push(string.slice(lastLastIndex, match.index));
                        if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function() {
                            for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;
                        });
                        if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));
                        lastLength = match[0][LENGTH];
                        lastLastIndex = lastIndex;
                        if (output[LENGTH] >= splitLimit) break;
                    }
                    if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++;
                }
                if (lastLastIndex === string[LENGTH]) {
                    if (lastLength || !separatorCopy.test("")) output.push("");
                } else output.push(string.slice(lastLastIndex));
                return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
            };
        } else if ("0".split(undefined, 0)[LENGTH]) $split = function(separator, limit) {
            return separator === undefined && 0 === limit ? [] : _split.call(this, separator, limit);
        };
        return [ function(separator, limit) {
            var O = defined(this), fn = separator == undefined ? undefined : separator[SPLIT];
            return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);
        }, $split ];
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(252);
    var anObject = __webpack_require__(11), $flags = __webpack_require__(133), DESCRIPTORS = __webpack_require__(20), $toString = /./.toString, define = function(fn) {
        __webpack_require__(35)(RegExp.prototype, "toString", fn, !0);
    };
    if (__webpack_require__(9)(function() {
        return "/a/b" != $toString.call({
            source: "a",
            flags: "b"
        });
    })) define(function() {
        var R = anObject(this);
        return "/".concat(R.source, "/", "flags" in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);
    }); else if ("toString" != $toString.name) define(function() {
        return $toString.call(this);
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var strong = __webpack_require__(232);
    module.exports = __webpack_require__(234)("Set", function(get) {
        return function() {
            return get(this, arguments.length > 0 ? arguments[0] : undefined);
        };
    }, {
        add: function(value) {
            return strong.def(this, value = 0 === value ? 0 : value, value);
        }
    }, strong);
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("anchor", function(createHTML) {
        return function(name) {
            return createHTML(this, "a", "name", name);
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("big", function(createHTML) {
        return function() {
            return createHTML(this, "big", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("blink", function(createHTML) {
        return function() {
            return createHTML(this, "blink", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("bold", function(createHTML) {
        return function() {
            return createHTML(this, "b", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $at = __webpack_require__(173)(!1);
    $export($export.P, "String", {
        codePointAt: function(pos) {
            return $at(this, pos);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toLength = __webpack_require__(24), context = __webpack_require__(174), $endsWith = "".endsWith;
    $export($export.P + $export.F * __webpack_require__(160)("endsWith"), "String", {
        endsWith: function(searchString) {
            var that = context(this, searchString, "endsWith"), endPosition = arguments.length > 1 ? arguments[1] : undefined, len = toLength(that.length), end = endPosition === undefined ? len : Math.min(toLength(endPosition), len), search = String(searchString);
            return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("fixed", function(createHTML) {
        return function() {
            return createHTML(this, "tt", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("fontcolor", function(createHTML) {
        return function(color) {
            return createHTML(this, "font", "color", color);
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("fontsize", function(createHTML) {
        return function(size) {
            return createHTML(this, "font", "size", size);
        };
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), toIndex = __webpack_require__(80), fromCharCode = String.fromCharCode, $fromCodePoint = String.fromCodePoint;
    $export($export.S + $export.F * (!!$fromCodePoint && 1 != $fromCodePoint.length), "String", {
        fromCodePoint: function(x) {
            for (var code, res = [], aLen = arguments.length, i = 0; aLen > i; ) {
                code = +arguments[i++];
                if (toIndex(code, 1114111) !== code) throw RangeError(code + " is not a valid code point");
                res.push(code < 65536 ? fromCharCode(code) : fromCharCode(55296 + ((code -= 65536) >> 10), code % 1024 + 56320));
            }
            return res.join("");
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), context = __webpack_require__(174);
    $export($export.P + $export.F * __webpack_require__(160)("includes"), "String", {
        includes: function(searchString) {
            return !!~context(this, searchString, "includes").indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("italics", function(createHTML) {
        return function() {
            return createHTML(this, "i", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $at = __webpack_require__(173)(!0);
    __webpack_require__(166)(String, "String", function(iterated) {
        this._t = String(iterated);
        this._i = 0;
    }, function() {
        var point, O = this._t, index = this._i;
        if (index >= O.length) return {
            value: undefined,
            done: !0
        };
        point = $at(O, index);
        this._i += point.length;
        return {
            value: point,
            done: !1
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("link", function(createHTML) {
        return function(url) {
            return createHTML(this, "a", "href", url);
        };
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), toIObject = __webpack_require__(32), toLength = __webpack_require__(24);
    $export($export.S, "String", {
        raw: function(callSite) {
            for (var tpl = toIObject(callSite.raw), len = toLength(tpl.length), aLen = arguments.length, res = [], i = 0; len > i; ) {
                res.push(String(tpl[i++]));
                if (i < aLen) res.push(String(arguments[i]));
            }
            return res.join("");
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.P, "String", {
        repeat: __webpack_require__(175)
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("small", function(createHTML) {
        return function() {
            return createHTML(this, "small", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toLength = __webpack_require__(24), context = __webpack_require__(174), $startsWith = "".startsWith;
    $export($export.P + $export.F * __webpack_require__(160)("startsWith"), "String", {
        startsWith: function(searchString) {
            var that = context(this, searchString, "startsWith"), index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)), search = String(searchString);
            return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("strike", function(createHTML) {
        return function() {
            return createHTML(this, "strike", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("sub", function(createHTML) {
        return function() {
            return createHTML(this, "sub", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(31)("sup", function(createHTML) {
        return function() {
            return createHTML(this, "sup", "", "");
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(93)("trim", function($trim) {
        return function() {
            return $trim(this, 3);
        };
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var global = __webpack_require__(8), has = __webpack_require__(30), DESCRIPTORS = __webpack_require__(20), $export = __webpack_require__(0), redefine = __webpack_require__(35), META = __webpack_require__(90).KEY, $fails = __webpack_require__(9), shared = __webpack_require__(171), setToStringTag = __webpack_require__(92), uid = __webpack_require__(81), wks = __webpack_require__(15), wksExt = __webpack_require__(251), wksDefine = __webpack_require__(250), keyOf = __webpack_require__(366), enumKeys = __webpack_require__(365), isArray = __webpack_require__(164), anObject = __webpack_require__(11), toIObject = __webpack_require__(32), toPrimitive = __webpack_require__(45), createDesc = __webpack_require__(68), _create = __webpack_require__(77), gOPNExt = __webpack_require__(242), $GOPD = __webpack_require__(34), $DP = __webpack_require__(21), $keys = __webpack_require__(79), gOPD = $GOPD.f, dP = $DP.f, gOPN = gOPNExt.f, $Symbol = global.Symbol, $JSON = global.JSON, _stringify = $JSON && $JSON.stringify, HIDDEN = wks("_hidden"), TO_PRIMITIVE = wks("toPrimitive"), isEnum = {}.propertyIsEnumerable, SymbolRegistry = shared("symbol-registry"), AllSymbols = shared("symbols"), OPSymbols = shared("op-symbols"), ObjectProto = Object.prototype, USE_NATIVE = "function" == typeof $Symbol, QObject = global.QObject, setter = !QObject || !QObject.prototype || !QObject.prototype.findChild, setSymbolDesc = DESCRIPTORS && $fails(function() {
        return 7 != _create(dP({}, "a", {
            get: function() {
                return dP(this, "a", {
                    value: 7
                }).a;
            }
        })).a;
    }) ? function(it, key, D) {
        var protoDesc = gOPD(ObjectProto, key);
        if (protoDesc) delete ObjectProto[key];
        dP(it, key, D);
        if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
    } : dP, wrap = function(tag) {
        var sym = AllSymbols[tag] = _create($Symbol.prototype);
        sym._k = tag;
        return sym;
    }, isSymbol = USE_NATIVE && "symbol" == typeof $Symbol.iterator ? function(it) {
        return "symbol" == typeof it;
    } : function(it) {
        return it instanceof $Symbol;
    }, $defineProperty = function(it, key, D) {
        if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
        anObject(it);
        key = toPrimitive(key, !0);
        anObject(D);
        if (has(AllSymbols, key)) {
            if (!D.enumerable) {
                if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
                it[HIDDEN][key] = !0;
            } else {
                if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = !1;
                D = _create(D, {
                    enumerable: createDesc(0, !1)
                });
            }
            return setSymbolDesc(it, key, D);
        }
        return dP(it, key, D);
    }, $defineProperties = function(it, P) {
        anObject(it);
        for (var key, keys = enumKeys(P = toIObject(P)), i = 0, l = keys.length; l > i; ) $defineProperty(it, key = keys[i++], P[key]);
        return it;
    }, $create = function(it, P) {
        return P === undefined ? _create(it) : $defineProperties(_create(it), P);
    }, $propertyIsEnumerable = function(key) {
        var E = isEnum.call(this, key = toPrimitive(key, !0));
        if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return !1; else return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : !0;
    }, $getOwnPropertyDescriptor = function(it, key) {
        it = toIObject(it);
        key = toPrimitive(key, !0);
        if (it !== ObjectProto || !has(AllSymbols, key) || has(OPSymbols, key)) {
            var D = gOPD(it, key);
            if (D && has(AllSymbols, key) && (!has(it, HIDDEN) || !it[HIDDEN][key])) D.enumerable = !0;
            return D;
        }
    }, $getOwnPropertyNames = function(it) {
        for (var key, names = gOPN(toIObject(it)), result = [], i = 0; names.length > i; ) if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
        return result;
    }, $getOwnPropertySymbols = function(it) {
        for (var key, IS_OP = it === ObjectProto, names = gOPN(IS_OP ? OPSymbols : toIObject(it)), result = [], i = 0; names.length > i; ) if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : !0)) result.push(AllSymbols[key]);
        return result;
    };
    if (!USE_NATIVE) {
        $Symbol = function() {
            if (this instanceof $Symbol) throw TypeError("Symbol is not a constructor!");
            var tag = uid(arguments.length > 0 ? arguments[0] : undefined), $set = function(value) {
                if (this === ObjectProto) $set.call(OPSymbols, value);
                if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = !1;
                setSymbolDesc(this, tag, createDesc(1, value));
            };
            if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, {
                configurable: !0,
                set: $set
            });
            return wrap(tag);
        };
        redefine($Symbol.prototype, "toString", function() {
            return this._k;
        });
        $GOPD.f = $getOwnPropertyDescriptor;
        $DP.f = $defineProperty;
        __webpack_require__(78).f = gOPNExt.f = $getOwnPropertyNames;
        __webpack_require__(114).f = $propertyIsEnumerable;
        __webpack_require__(139).f = $getOwnPropertySymbols;
        if (DESCRIPTORS && !__webpack_require__(76)) redefine(ObjectProto, "propertyIsEnumerable", $propertyIsEnumerable, !0);
        wksExt.f = function(name) {
            return wrap(wks(name));
        };
    }
    $export($export.G + $export.W + $export.F * !USE_NATIVE, {
        Symbol: $Symbol
    });
    for (var symbols = "hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","), i = 0; symbols.length > i; ) wks(symbols[i++]);
    for (var symbols = $keys(wks.store), i = 0; symbols.length > i; ) wksDefine(symbols[i++]);
    $export($export.S + $export.F * !USE_NATIVE, "Symbol", {
        "for": function(key) {
            return has(SymbolRegistry, key += "") ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key);
        },
        keyFor: function(key) {
            if (isSymbol(key)) return keyOf(SymbolRegistry, key);
            throw TypeError(key + " is not a symbol!");
        },
        useSetter: function() {
            setter = !0;
        },
        useSimple: function() {
            setter = !1;
        }
    });
    $export($export.S + $export.F * !USE_NATIVE, "Object", {
        create: $create,
        defineProperty: $defineProperty,
        defineProperties: $defineProperties,
        getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
        getOwnPropertyNames: $getOwnPropertyNames,
        getOwnPropertySymbols: $getOwnPropertySymbols
    });
    $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function() {
        var S = $Symbol();
        return "[null]" != _stringify([ S ]) || "{}" != _stringify({
            a: S
        }) || "{}" != _stringify(Object(S));
    })), "JSON", {
        stringify: function(it) {
            if (it !== undefined && !isSymbol(it)) {
                for (var replacer, $replacer, args = [ it ], i = 1; arguments.length > i; ) args.push(arguments[i++]);
                replacer = args[1];
                if ("function" == typeof replacer) $replacer = replacer;
                if ($replacer || !isArray(replacer)) replacer = function(key, value) {
                    if ($replacer) value = $replacer.call(this, key, value);
                    if (!isSymbol(value)) return value;
                };
                args[1] = replacer;
                return _stringify.apply($JSON, args);
            }
        }
    });
    $Symbol.prototype[TO_PRIMITIVE] || __webpack_require__(33)($Symbol.prototype, TO_PRIMITIVE, $Symbol.prototype.valueOf);
    setToStringTag($Symbol, "Symbol");
    setToStringTag(Math, "Math", !0);
    setToStringTag(global.JSON, "JSON", !0);
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $typed = __webpack_require__(140), buffer = __webpack_require__(178), anObject = __webpack_require__(11), toIndex = __webpack_require__(80), toLength = __webpack_require__(24), isObject = __webpack_require__(12), ArrayBuffer = __webpack_require__(8).ArrayBuffer, speciesConstructor = __webpack_require__(172), $ArrayBuffer = buffer.ArrayBuffer, $DataView = buffer.DataView, $isView = $typed.ABV && ArrayBuffer.isView, $slice = $ArrayBuffer.prototype.slice, VIEW = $typed.VIEW;
    $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {
        ArrayBuffer: $ArrayBuffer
    });
    $export($export.S + $export.F * !$typed.CONSTR, "ArrayBuffer", {
        isView: function(it) {
            return $isView && $isView(it) || isObject(it) && VIEW in it;
        }
    });
    $export($export.P + $export.U + $export.F * __webpack_require__(9)(function() {
        return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
    }), "ArrayBuffer", {
        slice: function(start, end) {
            if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start);
            for (var len = anObject(this).byteLength, first = toIndex(start, len), final = toIndex(end === undefined ? len : end, len), result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first)), viewS = new $DataView(this), viewT = new $DataView(result), index = 0; first < final; ) viewT.setUint8(index++, viewS.getUint8(first++));
            return result;
        }
    });
    __webpack_require__(91)("ArrayBuffer");
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.G + $export.W + $export.F * !__webpack_require__(140).ABV, {
        DataView: __webpack_require__(178).DataView
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Float32", 4, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Float64", 8, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Int16", 2, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Int32", 4, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Int8", 1, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Uint16", 2, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Uint32", 4, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Uint8", 1, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    });
}, function(module, exports, __webpack_require__) {
    __webpack_require__(59)("Uint8", 1, function(init) {
        return function(data, byteOffset, length) {
            return init(this, data, byteOffset, length);
        };
    }, !0);
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $includes = __webpack_require__(131)(!0);
    $export($export.P, "Array", {
        includes: function(el) {
            return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
        }
    });
    __webpack_require__(87)("includes");
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), microtask = __webpack_require__(240)(), process = __webpack_require__(8).process, isNode = "process" == __webpack_require__(40)(process);
    $export($export.G, {
        asap: function(fn) {
            var domain = isNode && process.domain;
            microtask(domain ? domain.bind(fn) : fn);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), cof = __webpack_require__(40);
    $export($export.S, "Error", {
        isError: function(it) {
            return "Error" === cof(it);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.P + $export.R, "Map", {
        toJSON: __webpack_require__(233)("Map")
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        iaddh: function(x0, x1, y0, y1) {
            var $x0 = x0 >>> 0, $x1 = x1 >>> 0, $y0 = y0 >>> 0;
            return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        imulh: function(u, v) {
            var $u = +u, $v = +v, u0 = 65535 & $u, v0 = 65535 & $v, u1 = $u >> 16, v1 = $v >> 16, t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
            return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (65535 & t) >> 16);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        isubh: function(x0, x1, y0, y1) {
            var $x0 = x0 >>> 0, $x1 = x1 >>> 0, $y0 = y0 >>> 0;
            return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "Math", {
        umulh: function(u, v) {
            var $u = +u, $v = +v, u0 = 65535 & $u, v0 = 65535 & $v, u1 = $u >>> 16, v1 = $v >>> 16, t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
            return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (65535 & t) >>> 16);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toObject = __webpack_require__(25), aFunction = __webpack_require__(39), $defineProperty = __webpack_require__(21);
    __webpack_require__(20) && $export($export.P + __webpack_require__(138), "Object", {
        __defineGetter__: function(P, getter) {
            $defineProperty.f(toObject(this), P, {
                get: aFunction(getter),
                enumerable: !0,
                configurable: !0
            });
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toObject = __webpack_require__(25), aFunction = __webpack_require__(39), $defineProperty = __webpack_require__(21);
    __webpack_require__(20) && $export($export.P + __webpack_require__(138), "Object", {
        __defineSetter__: function(P, setter) {
            $defineProperty.f(toObject(this), P, {
                set: aFunction(setter),
                enumerable: !0,
                configurable: !0
            });
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $entries = __webpack_require__(244)(!0);
    $export($export.S, "Object", {
        entries: function(it) {
            return $entries(it);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), ownKeys = __webpack_require__(245), toIObject = __webpack_require__(32), gOPD = __webpack_require__(34), createProperty = __webpack_require__(157);
    $export($export.S, "Object", {
        getOwnPropertyDescriptors: function(object) {
            for (var key, O = toIObject(object), getDesc = gOPD.f, keys = ownKeys(O), result = {}, i = 0; keys.length > i; ) createProperty(result, key = keys[i++], getDesc(O, key));
            return result;
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toObject = __webpack_require__(25), toPrimitive = __webpack_require__(45), getPrototypeOf = __webpack_require__(58), getOwnPropertyDescriptor = __webpack_require__(34).f;
    __webpack_require__(20) && $export($export.P + __webpack_require__(138), "Object", {
        __lookupGetter__: function(P) {
            var D, O = toObject(this), K = toPrimitive(P, !0);
            do {
                if (D = getOwnPropertyDescriptor(O, K)) return D.get;
            } while (O = getPrototypeOf(O));
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), toObject = __webpack_require__(25), toPrimitive = __webpack_require__(45), getPrototypeOf = __webpack_require__(58), getOwnPropertyDescriptor = __webpack_require__(34).f;
    __webpack_require__(20) && $export($export.P + __webpack_require__(138), "Object", {
        __lookupSetter__: function(P) {
            var D, O = toObject(this), K = toPrimitive(P, !0);
            do {
                if (D = getOwnPropertyDescriptor(O, K)) return D.set;
            } while (O = getPrototypeOf(O));
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $values = __webpack_require__(244)(!1);
    $export($export.S, "Object", {
        values: function(it) {
            return $values(it);
        }
    });
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.P + $export.R, "Set", {
        toJSON: __webpack_require__(233)("Set")
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $at = __webpack_require__(173)(!0);
    $export($export.P, "String", {
        at: function(pos) {
            return $at(this, pos);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), defined = __webpack_require__(41), toLength = __webpack_require__(24), isRegExp = __webpack_require__(136), getFlags = __webpack_require__(133), RegExpProto = RegExp.prototype, $RegExpStringIterator = function(regexp, string) {
        this._r = regexp;
        this._s = string;
    };
    __webpack_require__(165)($RegExpStringIterator, "RegExp String", function() {
        var match = this._r.exec(this._s);
        return {
            value: match,
            done: null === match
        };
    });
    $export($export.P, "String", {
        matchAll: function(regexp) {
            defined(this);
            if (!isRegExp(regexp)) throw TypeError(regexp + " is not a regexp!");
            var S = String(this), flags = "flags" in RegExpProto ? String(regexp.flags) : getFlags.call(regexp), rx = new RegExp(regexp.source, ~flags.indexOf("g") ? flags : "g" + flags);
            rx.lastIndex = toLength(regexp.lastIndex);
            return new $RegExpStringIterator(rx, S);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $pad = __webpack_require__(249);
    $export($export.P, "String", {
        padEnd: function(maxLength) {
            return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, !1);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    var $export = __webpack_require__(0), $pad = __webpack_require__(249);
    $export($export.P, "String", {
        padStart: function(maxLength) {
            return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, !0);
        }
    });
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(93)("trimLeft", function($trim) {
        return function() {
            return $trim(this, 1);
        };
    }, "trimStart");
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(93)("trimRight", function($trim) {
        return function() {
            return $trim(this, 2);
        };
    }, "trimEnd");
}, function(module, exports, __webpack_require__) {
    __webpack_require__(250)("asyncIterator");
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0);
    $export($export.S, "System", {
        global: __webpack_require__(8)
    });
}, function(module, exports, __webpack_require__) {
    for (var $iterators = __webpack_require__(180), redefine = __webpack_require__(35), global = __webpack_require__(8), hide = __webpack_require__(33), Iterators = __webpack_require__(89), wks = __webpack_require__(15), ITERATOR = wks("iterator"), TO_STRING_TAG = wks("toStringTag"), ArrayValues = Iterators.Array, collections = [ "NodeList", "DOMTokenList", "MediaList", "StyleSheetList", "CSSRuleList" ], i = 0; i < 5; i++) {
        var key, NAME = collections[i], Collection = global[NAME], proto = Collection && Collection.prototype;
        if (proto) {
            if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
            if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
            Iterators[NAME] = ArrayValues;
            for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], !0);
        }
    }
}, function(module, exports, __webpack_require__) {
    var $export = __webpack_require__(0), $task = __webpack_require__(177);
    $export($export.G + $export.B, {
        setImmediate: $task.set,
        clearImmediate: $task.clear
    });
}, function(module, exports, __webpack_require__) {
    var global = __webpack_require__(8), $export = __webpack_require__(0), invoke = __webpack_require__(135), partial = __webpack_require__(368), navigator = global.navigator, MSIE = !!navigator && /MSIE .\./.test(navigator.userAgent), wrap = function(set) {
        return MSIE ? function(fn, time) {
            return set(invoke(partial, [].slice.call(arguments, 2), "function" == typeof fn ? fn : Function(fn)), time);
        } : set;
    };
    $export($export.G + $export.B + $export.F * MSIE, {
        setTimeout: wrap(global.setTimeout),
        setInterval: wrap(global.setInterval)
    });
}, function(module, exports, __webpack_require__) {
    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;
    !function(root, factory) {
        "use strict";
        if (!0) __WEBPACK_AMD_DEFINE_FACTORY__ = factory, (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof __WEBPACK_AMD_DEFINE_FACTORY__ ? __WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module) : __WEBPACK_AMD_DEFINE_FACTORY__) !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__); else if ("object" == typeof exports) module.exports = factory(); else root.returnExports = factory();
    }(this, function() {
        var isCallable, isRegex, $Array = Array, ArrayPrototype = $Array.prototype, $Object = Object, ObjectPrototype = $Object.prototype, $Function = Function, FunctionPrototype = $Function.prototype, $String = String, StringPrototype = $String.prototype, $Number = Number, NumberPrototype = $Number.prototype, array_slice = ArrayPrototype.slice, array_splice = ArrayPrototype.splice, array_push = ArrayPrototype.push, array_unshift = ArrayPrototype.unshift, array_concat = ArrayPrototype.concat, array_join = ArrayPrototype.join, call = FunctionPrototype.call, apply = FunctionPrototype.apply, max = Math.max, min = Math.min, to_string = ObjectPrototype.toString, hasToStringTag = "function" == typeof Symbol && "symbol" == typeof Symbol.toStringTag, fnToStr = Function.prototype.toString, constructorRegex = /^\s*class /, isES6ClassFn = function(value) {
            try {
                var fnStr = fnToStr.call(value), singleStripped = fnStr.replace(/\/\/.*\n/g, ""), multiStripped = singleStripped.replace(/\/\*[.\s\S]*\*\//g, ""), spaceStripped = multiStripped.replace(/\n/gm, " ").replace(/ {2}/g, " ");
                return constructorRegex.test(spaceStripped);
            } catch (e) {
                return !1;
            }
        }, tryFunctionObject = function(value) {
            try {
                if (isES6ClassFn(value)) return !1;
                fnToStr.call(value);
                return !0;
            } catch (e) {
                return !1;
            }
        }, isCallable = function(value) {
            if (!value) return !1;
            if ("function" != typeof value && "object" != typeof value) return !1;
            if (hasToStringTag) return tryFunctionObject(value);
            if (isES6ClassFn(value)) return !1;
            var strClass = to_string.call(value);
            return "[object Function]" === strClass || "[object GeneratorFunction]" === strClass;
        }, regexExec = RegExp.prototype.exec, tryRegexExec = function(value) {
            try {
                regexExec.call(value);
                return !0;
            } catch (e) {
                return !1;
            }
        };
        isRegex = function(value) {
            if ("object" != typeof value) return !1; else return hasToStringTag ? tryRegexExec(value) : "[object RegExp]" === to_string.call(value);
        };
        var isString, strValue = String.prototype.valueOf, tryStringObject = function(value) {
            try {
                strValue.call(value);
                return !0;
            } catch (e) {
                return !1;
            }
        };
        isString = function(value) {
            if ("string" == typeof value) return !0;
            if ("object" != typeof value) return !1; else return hasToStringTag ? tryStringObject(value) : "[object String]" === to_string.call(value);
        };
        var supportsDescriptors = $Object.defineProperty && function() {
            try {
                var obj = {};
                $Object.defineProperty(obj, "x", {
                    enumerable: !1,
                    value: obj
                });
                for (var _ in obj) return !1;
                return obj.x === obj;
            } catch (e) {
                return !1;
            }
        }(), defineProperties = function(has) {
            var defineProperty;
            if (supportsDescriptors) defineProperty = function(object, name, method, forceAssign) {
                if (forceAssign || !(name in object)) $Object.defineProperty(object, name, {
                    configurable: !0,
                    enumerable: !1,
                    writable: !0,
                    value: method
                });
            }; else defineProperty = function(object, name, method, forceAssign) {
                if (forceAssign || !(name in object)) object[name] = method;
            };
            return function(object, map, forceAssign) {
                for (var name in map) if (has.call(map, name)) defineProperty(object, name, map[name], forceAssign);
            };
        }(ObjectPrototype.hasOwnProperty), isPrimitive = function(input) {
            var type = typeof input;
            return null === input || "object" !== type && "function" !== type;
        }, isActualNaN = $Number.isNaN || function(x) {
            return x !== x;
        }, ES = {
            ToInteger: function(num) {
                var n = +num;
                if (isActualNaN(n)) n = 0; else if (0 !== n && n !== 1 / 0 && n !== -1 / 0) n = (n > 0 || -1) * Math.floor(Math.abs(n));
                return n;
            },
            ToPrimitive: function(input) {
                var val, valueOf, toStr;
                if (isPrimitive(input)) return input;
                valueOf = input.valueOf;
                if (isCallable(valueOf)) {
                    val = valueOf.call(input);
                    if (isPrimitive(val)) return val;
                }
                toStr = input.toString;
                if (isCallable(toStr)) {
                    val = toStr.call(input);
                    if (isPrimitive(val)) return val;
                }
                throw new TypeError();
            },
            ToObject: function(o) {
                if (null == o) throw new TypeError("can't convert " + o + " to object");
                return $Object(o);
            },
            ToUint32: function(x) {
                return x >>> 0;
            }
        }, Empty = function() {};
        defineProperties(FunctionPrototype, {
            bind: function(that) {
                var target = this;
                if (!isCallable(target)) throw new TypeError("Function.prototype.bind called on incompatible " + target);
                for (var bound, args = array_slice.call(arguments, 1), binder = function() {
                    if (this instanceof bound) {
                        var result = apply.call(target, this, array_concat.call(args, array_slice.call(arguments)));
                        if ($Object(result) === result) return result; else return this;
                    } else return apply.call(target, that, array_concat.call(args, array_slice.call(arguments)));
                }, boundLength = max(0, target.length - args.length), boundArgs = [], i = 0; i < boundLength; i++) array_push.call(boundArgs, "$" + i);
                bound = $Function("binder", "return function (" + array_join.call(boundArgs, ",") + "){ return binder.apply(this, arguments); }")(binder);
                if (target.prototype) {
                    Empty.prototype = target.prototype;
                    bound.prototype = new Empty();
                    Empty.prototype = null;
                }
                return bound;
            }
        });
        var owns = call.bind(ObjectPrototype.hasOwnProperty), toStr = call.bind(ObjectPrototype.toString), arraySlice = call.bind(array_slice), arraySliceApply = apply.bind(array_slice);
        if ("object" == typeof document && document && document.documentElement) try {
            arraySlice(document.documentElement.childNodes);
        } catch (e) {
            var origArraySlice = arraySlice, origArraySliceApply = arraySliceApply;
            arraySlice = function(arr) {
                for (var r = [], i = arr.length; i-- > 0; ) r[i] = arr[i];
                return origArraySliceApply(r, origArraySlice(arguments, 1));
            };
            arraySliceApply = function(arr, args) {
                return origArraySliceApply(arraySlice(arr), args);
            };
        }
        var strSlice = call.bind(StringPrototype.slice), strSplit = call.bind(StringPrototype.split), strIndexOf = call.bind(StringPrototype.indexOf), pushCall = call.bind(array_push), isEnum = call.bind(ObjectPrototype.propertyIsEnumerable), arraySort = call.bind(ArrayPrototype.sort), isArray = $Array.isArray || function(obj) {
            return "[object Array]" === toStr(obj);
        }, hasUnshiftReturnValueBug = 1 !== [].unshift(0);
        defineProperties(ArrayPrototype, {
            unshift: function() {
                array_unshift.apply(this, arguments);
                return this.length;
            }
        }, hasUnshiftReturnValueBug);
        defineProperties($Array, {
            isArray: isArray
        });
        var boxedString = $Object("a"), splitString = "a" !== boxedString[0] || !(0 in boxedString), properlyBoxesContext = function(method) {
            var properlyBoxesNonStrict = !0, properlyBoxesStrict = !0, threwException = !1;
            if (method) try {
                method.call("foo", function(_, __, context) {
                    if ("object" != typeof context) properlyBoxesNonStrict = !1;
                });
                method.call([ 1 ], function() {
                    "use strict";
                    properlyBoxesStrict = "string" == typeof this;
                }, "x");
            } catch (e) {
                threwException = !0;
            }
            return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;
        };
        defineProperties(ArrayPrototype, {
            forEach: function(callbackfn) {
                var T, object = ES.ToObject(this), self = splitString && isString(this) ? strSplit(this, "") : object, i = -1, length = ES.ToUint32(self.length);
                if (arguments.length > 1) T = arguments[1];
                if (!isCallable(callbackfn)) throw new TypeError("Array.prototype.forEach callback must be a function");
                for (;++i < length; ) if (i in self) if (void 0 === T) callbackfn(self[i], i, object); else callbackfn.call(T, self[i], i, object);
            }
        }, !properlyBoxesContext(ArrayPrototype.forEach));
        defineProperties(ArrayPrototype, {
            map: function(callbackfn) {
                var T, object = ES.ToObject(this), self = splitString && isString(this) ? strSplit(this, "") : object, length = ES.ToUint32(self.length), result = $Array(length);
                if (arguments.length > 1) T = arguments[1];
                if (!isCallable(callbackfn)) throw new TypeError("Array.prototype.map callback must be a function");
                for (var i = 0; i < length; i++) if (i in self) if (void 0 === T) result[i] = callbackfn(self[i], i, object); else result[i] = callbackfn.call(T, self[i], i, object);
                return result;
            }
        }, !properlyBoxesContext(ArrayPrototype.map));
        defineProperties(ArrayPrototype, {
            filter: function(callbackfn) {
                var value, T, object = ES.ToObject(this), self = splitString && isString(this) ? strSplit(this, "") : object, length = ES.ToUint32(self.length), result = [];
                if (arguments.length > 1) T = arguments[1];
                if (!isCallable(callbackfn)) throw new TypeError("Array.prototype.filter callback must be a function");
                for (var i = 0; i < length; i++) if (i in self) {
                    value = self[i];
                    if (void 0 === T ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) pushCall(result, value);
                }
                return result;
            }
        }, !properlyBoxesContext(ArrayPrototype.filter));
        defineProperties(ArrayPrototype, {
            every: function(callbackfn) {
                var T, object = ES.ToObject(this), self = splitString && isString(this) ? strSplit(this, "") : object, length = ES.ToUint32(self.length);
                if (arguments.length > 1) T = arguments[1];
                if (!isCallable(callbackfn)) throw new TypeError("Array.prototype.every callback must be a function");
                for (var i = 0; i < length; i++) if (i in self && !(void 0 === T ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) return !1;
                return !0;
            }
        }, !properlyBoxesContext(ArrayPrototype.every));
        defineProperties(ArrayPrototype, {
            some: function(callbackfn) {
                var T, object = ES.ToObject(this), self = splitString && isString(this) ? strSplit(this, "") : object, length = ES.ToUint32(self.length);
                if (arguments.length > 1) T = arguments[1];
                if (!isCallable(callbackfn)) throw new TypeError("Array.prototype.some callback must be a function");
                for (var i = 0; i < length; i++) if (i in self && (void 0 === T ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) return !0;
                return !1;
            }
        }, !properlyBoxesContext(ArrayPrototype.some));
        var reduceCoercesToObject = !1;
        if (ArrayPrototype.reduce) reduceCoercesToObject = "object" == typeof ArrayPrototype.reduce.call("es5", function(_, __, ___, list) {
            return list;
        });
        defineProperties(ArrayPrototype, {
            reduce: function(callbackfn) {
                var object = ES.ToObject(this), self = splitString && isString(this) ? strSplit(this, "") : object, length = ES.ToUint32(self.length);
                if (!isCallable(callbackfn)) throw new TypeError("Array.prototype.reduce callback must be a function");
                if (0 === length && 1 === arguments.length) throw new TypeError("reduce of empty array with no initial value");
                var result, i = 0;
                if (arguments.length >= 2) result = arguments[1]; else for (;;) {
                    if (i in self) {
                        result = self[i++];
                        break;
                    }
                    if (++i >= length) throw new TypeError("reduce of empty array with no initial value");
                }
                for (;i < length; i++) if (i in self) result = callbackfn(result, self[i], i, object);
                return result;
            }
        }, !reduceCoercesToObject);
        var reduceRightCoercesToObject = !1;
        if (ArrayPrototype.reduceRight) reduceRightCoercesToObject = "object" == typeof ArrayPrototype.reduceRight.call("es5", function(_, __, ___, list) {
            return list;
        });
        defineProperties(ArrayPrototype, {
            reduceRight: function(callbackfn) {
                var object = ES.ToObject(this), self = splitString && isString(this) ? strSplit(this, "") : object, length = ES.ToUint32(self.length);
                if (!isCallable(callbackfn)) throw new TypeError("Array.prototype.reduceRight callback must be a function");
                if (0 === length && 1 === arguments.length) throw new TypeError("reduceRight of empty array with no initial value");
                var result, i = length - 1;
                if (arguments.length >= 2) result = arguments[1]; else for (;;) {
                    if (i in self) {
                        result = self[i--];
                        break;
                    }
                    if (--i < 0) throw new TypeError("reduceRight of empty array with no initial value");
                }
                if (i < 0) return result;
                do {
                    if (i in self) result = callbackfn(result, self[i], i, object);
                } while (i--);
                return result;
            }
        }, !reduceRightCoercesToObject);
        var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && -1 !== [ 0, 1 ].indexOf(1, 2);
        defineProperties(ArrayPrototype, {
            indexOf: function(searchElement) {
                var self = splitString && isString(this) ? strSplit(this, "") : ES.ToObject(this), length = ES.ToUint32(self.length);
                if (0 === length) return -1;
                var i = 0;
                if (arguments.length > 1) i = ES.ToInteger(arguments[1]);
                i = i >= 0 ? i : max(0, length + i);
                for (;i < length; i++) if (i in self && self[i] === searchElement) return i;
                return -1;
            }
        }, hasFirefox2IndexOfBug);
        var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && -1 !== [ 0, 1 ].lastIndexOf(0, -3);
        defineProperties(ArrayPrototype, {
            lastIndexOf: function(searchElement) {
                var self = splitString && isString(this) ? strSplit(this, "") : ES.ToObject(this), length = ES.ToUint32(self.length);
                if (0 === length) return -1;
                var i = length - 1;
                if (arguments.length > 1) i = min(i, ES.ToInteger(arguments[1]));
                i = i >= 0 ? i : length - Math.abs(i);
                for (;i >= 0; i--) if (i in self && searchElement === self[i]) return i;
                return -1;
            }
        }, hasFirefox2LastIndexOfBug);
        var spliceNoopReturnsEmptyArray = function() {
            var a = [ 1, 2 ], result = a.splice();
            return 2 === a.length && isArray(result) && 0 === result.length;
        }();
        defineProperties(ArrayPrototype, {
            splice: function(start, deleteCount) {
                if (0 === arguments.length) return []; else return array_splice.apply(this, arguments);
            }
        }, !spliceNoopReturnsEmptyArray);
        var spliceWorksWithEmptyObject = function() {
            var obj = {};
            ArrayPrototype.splice.call(obj, 0, 0, 1);
            return 1 === obj.length;
        }();
        defineProperties(ArrayPrototype, {
            splice: function(start, deleteCount) {
                if (0 === arguments.length) return [];
                var args = arguments;
                this.length = max(ES.ToInteger(this.length), 0);
                if (arguments.length > 0 && "number" != typeof deleteCount) {
                    args = arraySlice(arguments);
                    if (args.length < 2) pushCall(args, this.length - start); else args[1] = ES.ToInteger(deleteCount);
                }
                return array_splice.apply(this, args);
            }
        }, !spliceWorksWithEmptyObject);
        var spliceWorksWithLargeSparseArrays = function() {
            var arr = new $Array(1e5);
            arr[8] = "x";
            arr.splice(1, 1);
            return 7 === arr.indexOf("x");
        }(), spliceWorksWithSmallSparseArrays = function() {
            var arr = [];
            arr[256] = "a";
            arr.splice(257, 0, "b");
            return "a" === arr[256];
        }();
        defineProperties(ArrayPrototype, {
            splice: function(start, deleteCount) {
                for (var from, O = ES.ToObject(this), A = [], len = ES.ToUint32(O.length), relativeStart = ES.ToInteger(start), actualStart = relativeStart < 0 ? max(len + relativeStart, 0) : min(relativeStart, len), actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart), k = 0; k < actualDeleteCount; ) {
                    from = $String(actualStart + k);
                    if (owns(O, from)) A[k] = O[from];
                    k += 1;
                }
                var to, items = arraySlice(arguments, 2), itemCount = items.length;
                if (itemCount < actualDeleteCount) {
                    k = actualStart;
                    for (var maxK = len - actualDeleteCount; k < maxK; ) {
                        from = $String(k + actualDeleteCount);
                        to = $String(k + itemCount);
                        if (owns(O, from)) O[to] = O[from]; else delete O[to];
                        k += 1;
                    }
                    k = len;
                    for (var minK = len - actualDeleteCount + itemCount; k > minK; ) {
                        delete O[k - 1];
                        k -= 1;
                    }
                } else if (itemCount > actualDeleteCount) {
                    k = len - actualDeleteCount;
                    for (;k > actualStart; ) {
                        from = $String(k + actualDeleteCount - 1);
                        to = $String(k + itemCount - 1);
                        if (owns(O, from)) O[to] = O[from]; else delete O[to];
                        k -= 1;
                    }
                }
                k = actualStart;
                for (var i = 0; i < items.length; ++i) {
                    O[k] = items[i];
                    k += 1;
                }
                O.length = len - actualDeleteCount + itemCount;
                return A;
            }
        }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
        var hasStringJoinBug, originalJoin = ArrayPrototype.join;
        try {
            hasStringJoinBug = "1,2,3" !== Array.prototype.join.call("123", ",");
        } catch (e) {
            hasStringJoinBug = !0;
        }
        if (hasStringJoinBug) defineProperties(ArrayPrototype, {
            join: function(separator) {
                var sep = void 0 === separator ? "," : separator;
                return originalJoin.call(isString(this) ? strSplit(this, "") : this, sep);
            }
        }, hasStringJoinBug);
        var hasJoinUndefinedBug = "1,2" !== [ 1, 2 ].join(undefined);
        if (hasJoinUndefinedBug) defineProperties(ArrayPrototype, {
            join: function(separator) {
                var sep = void 0 === separator ? "," : separator;
                return originalJoin.call(this, sep);
            }
        }, hasJoinUndefinedBug);
        var pushShim = function(item) {
            for (var O = ES.ToObject(this), n = ES.ToUint32(O.length), i = 0; i < arguments.length; ) {
                O[n + i] = arguments[i];
                i += 1;
            }
            O.length = n + i;
            return n + i;
        }, pushIsNotGeneric = function() {
            var obj = {};
            return 1 !== Array.prototype.push.call(obj, undefined) || 1 !== obj.length || "undefined" != typeof obj[0] || !owns(obj, 0);
        }();
        defineProperties(ArrayPrototype, {
            push: function(item) {
                if (isArray(this)) return array_push.apply(this, arguments); else return pushShim.apply(this, arguments);
            }
        }, pushIsNotGeneric);
        var pushUndefinedIsWeird = function() {
            var arr = [];
            return 1 !== arr.push(undefined) || 1 !== arr.length || "undefined" != typeof arr[0] || !owns(arr, 0);
        }();
        defineProperties(ArrayPrototype, {
            push: pushShim
        }, pushUndefinedIsWeird);
        defineProperties(ArrayPrototype, {
            slice: function(start, end) {
                var arr = isString(this) ? strSplit(this, "") : this;
                return arraySliceApply(arr, arguments);
            }
        }, splitString);
        var sortIgnoresNonFunctions = function() {
            try {
                [ 1, 2 ].sort(null);
            } catch (e) {
                try {
                    [ 1, 2 ].sort({});
                } catch (e2) {
                    return !1;
                }
            }
            return !0;
        }(), sortThrowsOnRegex = function() {
            try {
                [ 1, 2 ].sort(/a/);
                return !1;
            } catch (e) {}
            return !0;
        }(), sortIgnoresUndefined = function() {
            try {
                [ 1, 2 ].sort(undefined);
                return !0;
            } catch (e) {}
            return !1;
        }();
        defineProperties(ArrayPrototype, {
            sort: function(compareFn) {
                if (void 0 === compareFn) return arraySort(this);
                if (!isCallable(compareFn)) throw new TypeError("Array.prototype.sort callback must be a function");
                return arraySort(this, compareFn);
            }
        }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);
        var hasDontEnumBug = !isEnum({
            toString: null
        }, "toString"), hasProtoEnumBug = isEnum(function() {}, "prototype"), hasStringEnumBug = !owns("x", "0"), equalsConstructorPrototype = function(o) {
            var ctor = o.constructor;
            return ctor && ctor.prototype === o;
        }, excludedKeys = {
            $window: !0,
            $console: !0,
            $parent: !0,
            $self: !0,
            $frame: !0,
            $frames: !0,
            $frameElement: !0,
            $webkitIndexedDB: !0,
            $webkitStorageInfo: !0,
            $external: !0,
            $width: !0,
            $height: !0,
            $top: !0,
            $localStorage: !0
        }, hasAutomationEqualityBug = function() {
            if ("undefined" == typeof window) return !1;
            for (var k in window) try {
                if (!excludedKeys["$" + k] && owns(window, k) && null !== window[k] && "object" == typeof window[k]) equalsConstructorPrototype(window[k]);
            } catch (e) {
                return !0;
            }
            return !1;
        }(), equalsConstructorPrototypeIfNotBuggy = function(object) {
            if ("undefined" == typeof window || !hasAutomationEqualityBug) return equalsConstructorPrototype(object);
            try {
                return equalsConstructorPrototype(object);
            } catch (e) {
                return !1;
            }
        }, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length, isStandardArguments = function(value) {
            return "[object Arguments]" === toStr(value);
        }, isLegacyArguments = function(value) {
            return null !== value && "object" == typeof value && "number" == typeof value.length && value.length >= 0 && !isArray(value) && isCallable(value.callee);
        }, isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
        defineProperties($Object, {
            keys: function(object) {
                var isFn = isCallable(object), isArgs = isArguments(object), isObject = null !== object && "object" == typeof object, isStr = isObject && isString(object);
                if (!isObject && !isFn && !isArgs) throw new TypeError("Object.keys called on a non-object");
                var theKeys = [], skipProto = hasProtoEnumBug && isFn;
                if (isStr && hasStringEnumBug || isArgs) for (var i = 0; i < object.length; ++i) pushCall(theKeys, $String(i));
                if (!isArgs) for (var name in object) if ((!skipProto || "prototype" !== name) && owns(object, name)) pushCall(theKeys, $String(name));
                if (hasDontEnumBug) for (var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object), j = 0; j < dontEnumsLength; j++) {
                    var dontEnum = dontEnums[j];
                    if ((!skipConstructor || "constructor" !== dontEnum) && owns(object, dontEnum)) pushCall(theKeys, dontEnum);
                }
                return theKeys;
            }
        });
        var keysWorksWithArguments = $Object.keys && function() {
            return 2 === $Object.keys(arguments).length;
        }(1, 2), keysHasArgumentsLengthBug = $Object.keys && function() {
            var argKeys = $Object.keys(arguments);
            return 1 !== arguments.length || 1 !== argKeys.length || 1 !== argKeys[0];
        }(1), originalKeys = $Object.keys;
        defineProperties($Object, {
            keys: function(object) {
                if (isArguments(object)) return originalKeys(arraySlice(object)); else return originalKeys(object);
            }
        }, !keysWorksWithArguments || keysHasArgumentsLengthBug);
        var hasToDateStringFormatBug, hasToStringFormatBug, hasNegativeMonthYearBug = 0 !== new Date(-0xc782b5b342b24).getUTCMonth(), aNegativeTestDate = new Date(-0x55d318d56a724), aPositiveTestDate = new Date(14496624e5), hasToUTCStringFormatBug = "Mon, 01 Jan -45875 11:59:59 GMT" !== aNegativeTestDate.toUTCString();
        if (aNegativeTestDate.getTimezoneOffset() < -720) {
            hasToDateStringFormatBug = "Tue Jan 02 -45875" !== aNegativeTestDate.toDateString();
            hasToStringFormatBug = !/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(aPositiveTestDate));
        } else {
            hasToDateStringFormatBug = "Mon Jan 01 -45875" !== aNegativeTestDate.toDateString();
            hasToStringFormatBug = !/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(aPositiveTestDate));
        }
        var originalGetFullYear = call.bind(Date.prototype.getFullYear), originalGetMonth = call.bind(Date.prototype.getMonth), originalGetDate = call.bind(Date.prototype.getDate), originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear), originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth), originalGetUTCDate = call.bind(Date.prototype.getUTCDate), originalGetUTCDay = call.bind(Date.prototype.getUTCDay), originalGetUTCHours = call.bind(Date.prototype.getUTCHours), originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes), originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds), originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds), dayName = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], monthName = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], daysInMonth = function(month, year) {
            return originalGetDate(new Date(year, month, 0));
        };
        defineProperties(Date.prototype, {
            getFullYear: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var year = originalGetFullYear(this);
                if (year < 0 && originalGetMonth(this) > 11) return year + 1; else return year;
            },
            getMonth: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var year = originalGetFullYear(this), month = originalGetMonth(this);
                if (year < 0 && month > 11) return 0; else return month;
            },
            getDate: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var year = originalGetFullYear(this), month = originalGetMonth(this), date = originalGetDate(this);
                if (year < 0 && month > 11) {
                    if (12 === month) return date;
                    return daysInMonth(0, year + 1) - date + 1;
                }
                return date;
            },
            getUTCFullYear: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var year = originalGetUTCFullYear(this);
                if (year < 0 && originalGetUTCMonth(this) > 11) return year + 1; else return year;
            },
            getUTCMonth: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var year = originalGetUTCFullYear(this), month = originalGetUTCMonth(this);
                if (year < 0 && month > 11) return 0; else return month;
            },
            getUTCDate: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var year = originalGetUTCFullYear(this), month = originalGetUTCMonth(this), date = originalGetUTCDate(this);
                if (year < 0 && month > 11) {
                    if (12 === month) return date;
                    return daysInMonth(0, year + 1) - date + 1;
                }
                return date;
            }
        }, hasNegativeMonthYearBug);
        defineProperties(Date.prototype, {
            toUTCString: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var day = originalGetUTCDay(this), date = originalGetUTCDate(this), month = originalGetUTCMonth(this), year = originalGetUTCFullYear(this), hour = originalGetUTCHours(this), minute = originalGetUTCMinutes(this), second = originalGetUTCSeconds(this);
                return dayName[day] + ", " + (date < 10 ? "0" + date : date) + " " + monthName[month] + " " + year + " " + (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second) + " GMT";
            }
        }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);
        defineProperties(Date.prototype, {
            toDateString: function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var day = this.getDay(), date = this.getDate(), month = this.getMonth(), year = this.getFullYear();
                return dayName[day] + " " + monthName[month] + " " + (date < 10 ? "0" + date : date) + " " + year;
            }
        }, hasNegativeMonthYearBug || hasToDateStringFormatBug);
        if (hasNegativeMonthYearBug || hasToStringFormatBug) {
            Date.prototype.toString = function() {
                if (!(this && this instanceof Date)) throw new TypeError("this is not a Date object.");
                var day = this.getDay(), date = this.getDate(), month = this.getMonth(), year = this.getFullYear(), hour = this.getHours(), minute = this.getMinutes(), second = this.getSeconds(), timezoneOffset = this.getTimezoneOffset(), hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60), minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);
                return dayName[day] + " " + monthName[month] + " " + (date < 10 ? "0" + date : date) + " " + year + " " + (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second) + " GMT" + (timezoneOffset > 0 ? "-" : "+") + (hoursOffset < 10 ? "0" + hoursOffset : hoursOffset) + (minutesOffset < 10 ? "0" + minutesOffset : minutesOffset);
            };
            if (supportsDescriptors) $Object.defineProperty(Date.prototype, "toString", {
                configurable: !0,
                enumerable: !1,
                writable: !0
            });
        }
        var hasNegativeDateBug = Date.prototype.toISOString && -1 === new Date(-621987552e5).toISOString().indexOf("-000001"), hasSafari51DateBug = Date.prototype.toISOString && "1969-12-31T23:59:59.999Z" !== new Date(-1).toISOString(), getTime = call.bind(Date.prototype.getTime);
        defineProperties(Date.prototype, {
            toISOString: function() {
                if (!isFinite(this) || !isFinite(getTime(this))) throw new RangeError("Date.prototype.toISOString called on non-finite value.");
                var year = originalGetUTCFullYear(this), month = originalGetUTCMonth(this);
                year += Math.floor(month / 12);
                month = (month % 12 + 12) % 12;
                var result = [ month + 1, originalGetUTCDate(this), originalGetUTCHours(this), originalGetUTCMinutes(this), originalGetUTCSeconds(this) ];
                year = (year < 0 ? "-" : year > 9999 ? "+" : "") + strSlice("00000" + Math.abs(year), 0 <= year && year <= 9999 ? -4 : -6);
                for (var i = 0; i < result.length; ++i) result[i] = strSlice("00" + result[i], -2);
                return year + "-" + arraySlice(result, 0, 2).join("-") + "T" + arraySlice(result, 2).join(":") + "." + strSlice("000" + originalGetUTCMilliseconds(this), -3) + "Z";
            }
        }, hasNegativeDateBug || hasSafari51DateBug);
        if (!function() {
            try {
                return Date.prototype.toJSON && null === new Date(NaN).toJSON() && -1 !== new Date(-621987552e5).toJSON().indexOf("-000001") && Date.prototype.toJSON.call({
                    toISOString: function() {
                        return !0;
                    }
                });
            } catch (e) {
                return !1;
            }
        }()) Date.prototype.toJSON = function(key) {
            var O = $Object(this), tv = ES.ToPrimitive(O);
            if ("number" == typeof tv && !isFinite(tv)) return null;
            var toISO = O.toISOString;
            if (!isCallable(toISO)) throw new TypeError("toISOString property is not callable");
            return toISO.call(O);
        };
        var supportsExtendedYears = 1e15 === Date.parse("+033658-09-27T01:46:40.000Z"), acceptsInvalidDates = !isNaN(Date.parse("2012-04-04T24:00:00.500Z")) || !isNaN(Date.parse("2012-11-31T23:59:59.000Z")) || !isNaN(Date.parse("2012-12-31T23:59:60.000Z"));
        if (isNaN(Date.parse("2000-01-01T00:00:00.000Z")) || acceptsInvalidDates || !supportsExtendedYears) {
            var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1, hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());
            Date = function(NativeDate) {
                var DateShim = function(Y, M, D, h, m, s, ms) {
                    var date, length = arguments.length;
                    if (this instanceof NativeDate) {
                        var seconds = s, millis = ms;
                        if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {
                            var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit, sToShift = Math.floor(msToShift / 1e3);
                            seconds += sToShift;
                            millis -= 1e3 * sToShift;
                        }
                        date = 1 === length && $String(Y) === Y ? new NativeDate(DateShim.parse(Y)) : length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) : length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) : length >= 5 ? new NativeDate(Y, M, D, h, m) : length >= 4 ? new NativeDate(Y, M, D, h) : length >= 3 ? new NativeDate(Y, M, D) : length >= 2 ? new NativeDate(Y, M) : length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y) : new NativeDate();
                    } else date = NativeDate.apply(this, arguments);
                    if (!isPrimitive(date)) defineProperties(date, {
                        constructor: DateShim
                    }, !0);
                    return date;
                }, isoDateExpression = new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"), months = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 ], dayFromMonth = function(year, month) {
                    var t = month > 1 ? 1 : 0;
                    return months[month] + Math.floor((year - 1969 + t) / 4) - Math.floor((year - 1901 + t) / 100) + Math.floor((year - 1601 + t) / 400) + 365 * (year - 1970);
                }, toUTC = function(t) {
                    var s = 0, ms = t;
                    if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {
                        var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit, sToShift = Math.floor(msToShift / 1e3);
                        s += sToShift;
                        ms -= 1e3 * sToShift;
                    }
                    return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));
                };
                for (var key in NativeDate) if (owns(NativeDate, key)) DateShim[key] = NativeDate[key];
                defineProperties(DateShim, {
                    now: NativeDate.now,
                    UTC: NativeDate.UTC
                }, !0);
                DateShim.prototype = NativeDate.prototype;
                defineProperties(DateShim.prototype, {
                    constructor: DateShim
                }, !0);
                defineProperties(DateShim, {
                    parse: function(string) {
                        var match = isoDateExpression.exec(string);
                        if (match) {
                            var result, year = $Number(match[1]), month = $Number(match[2] || 1) - 1, day = $Number(match[3] || 1) - 1, hour = $Number(match[4] || 0), minute = $Number(match[5] || 0), second = $Number(match[6] || 0), millisecond = Math.floor(1e3 * $Number(match[7] || 0)), isLocalTime = Boolean(match[4] && !match[8]), signOffset = "-" === match[9] ? 1 : -1, hourOffset = $Number(match[10] || 0), minuteOffset = $Number(match[11] || 0);
                            if (hour < (minute > 0 || second > 0 || millisecond > 0 ? 24 : 25) && minute < 60 && second < 60 && millisecond < 1e3 && month > -1 && month < 12 && hourOffset < 24 && minuteOffset < 60 && day > -1 && day < dayFromMonth(year, month + 1) - dayFromMonth(year, month)) {
                                result = 60 * (24 * (dayFromMonth(year, month) + day) + hour + hourOffset * signOffset);
                                result = 1e3 * (60 * (result + minute + minuteOffset * signOffset) + second) + millisecond;
                                if (isLocalTime) result = toUTC(result);
                                if (-864e13 <= result && result <= 864e13) return result;
                            }
                            return NaN;
                        }
                        return NativeDate.parse.apply(this, arguments);
                    }
                });
                return DateShim;
            }(Date);
        }
        if (!Date.now) Date.now = function() {
            return new Date().getTime();
        };
        var hasToFixedBugs = NumberPrototype.toFixed && ("0.000" !== 8e-5.toFixed(3) || "1" !== .9.toFixed(0) || "1.25" !== 1.255.toFixed(2) || "1000000000000000128" !== (0xde0b6b3a7640080).toFixed(0)), toFixedHelpers = {
            base: 1e7,
            size: 6,
            data: [ 0, 0, 0, 0, 0, 0 ],
            multiply: function(n, c) {
                for (var i = -1, c2 = c; ++i < toFixedHelpers.size; ) {
                    c2 += n * toFixedHelpers.data[i];
                    toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
                    c2 = Math.floor(c2 / toFixedHelpers.base);
                }
            },
            divide: function(n) {
                for (var i = toFixedHelpers.size, c = 0; --i >= 0; ) {
                    c += toFixedHelpers.data[i];
                    toFixedHelpers.data[i] = Math.floor(c / n);
                    c = c % n * toFixedHelpers.base;
                }
            },
            numToString: function() {
                for (var i = toFixedHelpers.size, s = ""; --i >= 0; ) if ("" !== s || 0 === i || 0 !== toFixedHelpers.data[i]) {
                    var t = $String(toFixedHelpers.data[i]);
                    if ("" === s) s = t; else s += strSlice("0000000", 0, 7 - t.length) + t;
                }
                return s;
            },
            pow: function pow(x, n, acc) {
                return 0 === n ? acc : n % 2 == 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
            },
            log: function(x) {
                for (var n = 0, x2 = x; x2 >= 4096; ) {
                    n += 12;
                    x2 /= 4096;
                }
                for (;x2 >= 2; ) {
                    n += 1;
                    x2 /= 2;
                }
                return n;
            }
        };
        defineProperties(NumberPrototype, {
            toFixed: function(fractionDigits) {
                var f, x, s, m, e, z, j, k;
                f = $Number(fractionDigits);
                f = isActualNaN(f) ? 0 : Math.floor(f);
                if (f < 0 || f > 20) throw new RangeError("Number.toFixed called with invalid number of decimals");
                x = $Number(this);
                if (isActualNaN(x)) return "NaN";
                if (x <= -1e21 || x >= 1e21) return $String(x);
                s = "";
                if (x < 0) {
                    s = "-";
                    x = -x;
                }
                m = "0";
                if (x > 1e-21) {
                    e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
                    z = e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1);
                    z *= 4503599627370496;
                    e = 52 - e;
                    if (e > 0) {
                        toFixedHelpers.multiply(0, z);
                        j = f;
                        for (;j >= 7; ) {
                            toFixedHelpers.multiply(1e7, 0);
                            j -= 7;
                        }
                        toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
                        j = e - 1;
                        for (;j >= 23; ) {
                            toFixedHelpers.divide(1 << 23);
                            j -= 23;
                        }
                        toFixedHelpers.divide(1 << j);
                        toFixedHelpers.multiply(1, 1);
                        toFixedHelpers.divide(2);
                        m = toFixedHelpers.numToString();
                    } else {
                        toFixedHelpers.multiply(0, z);
                        toFixedHelpers.multiply(1 << -e, 0);
                        m = toFixedHelpers.numToString() + strSlice("0.00000000000000000000", 2, 2 + f);
                    }
                }
                if (f > 0) {
                    k = m.length;
                    if (k <= f) m = s + strSlice("0.0000000000000000000", 0, f - k + 2) + m; else m = s + strSlice(m, 0, k - f) + "." + strSlice(m, k - f);
                } else m = s + m;
                return m;
            }
        }, hasToFixedBugs);
        var hasToPrecisionUndefinedBug = function() {
            try {
                return "1" === 1..toPrecision(undefined);
            } catch (e) {
                return !0;
            }
        }(), originalToPrecision = NumberPrototype.toPrecision;
        defineProperties(NumberPrototype, {
            toPrecision: function(precision) {
                return void 0 === precision ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);
            }
        }, hasToPrecisionUndefinedBug);
        if (2 !== "ab".split(/(?:ab)*/).length || 4 !== ".".split(/(.?)(.?)/).length || "t" === "tesst".split(/(s)*/)[1] || 4 !== "test".split(/(?:)/, -1).length || "".split(/.?/).length || ".".split(/()()/).length > 1) !function() {
            var compliantExecNpcg = "undefined" == typeof /()??/.exec("")[1], maxSafe32BitInt = Math.pow(2, 32) - 1;
            StringPrototype.split = function(separator, limit) {
                var string = String(this);
                if (void 0 === separator && 0 === limit) return [];
                if (!isRegex(separator)) return strSplit(this, separator, limit);
                var separator2, match, lastIndex, lastLength, output = [], flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.unicode ? "u" : "") + (separator.sticky ? "y" : ""), lastLastIndex = 0, separatorCopy = new RegExp(separator.source, flags + "g");
                if (!compliantExecNpcg) separator2 = new RegExp("^" + separatorCopy.source + "$(?!\\s)", flags);
                var splitLimit = void 0 === limit ? maxSafe32BitInt : ES.ToUint32(limit);
                match = separatorCopy.exec(string);
                for (;match; ) {
                    lastIndex = match.index + match[0].length;
                    if (lastIndex > lastLastIndex) {
                        pushCall(output, strSlice(string, lastLastIndex, match.index));
                        if (!compliantExecNpcg && match.length > 1) match[0].replace(separator2, function() {
                            for (var i = 1; i < arguments.length - 2; i++) if ("undefined" == typeof arguments[i]) match[i] = void 0;
                        });
                        if (match.length > 1 && match.index < string.length) array_push.apply(output, arraySlice(match, 1));
                        lastLength = match[0].length;
                        lastLastIndex = lastIndex;
                        if (output.length >= splitLimit) break;
                    }
                    if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++;
                    match = separatorCopy.exec(string);
                }
                if (lastLastIndex === string.length) {
                    if (lastLength || !separatorCopy.test("")) pushCall(output, "");
                } else pushCall(output, strSlice(string, lastLastIndex));
                return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;
            };
        }(); else if ("0".split(void 0, 0).length) StringPrototype.split = function(separator, limit) {
            if (void 0 === separator && 0 === limit) return []; else return strSplit(this, separator, limit);
        };
        var str_replace = StringPrototype.replace;
        if (!function() {
            var groups = [];
            "x".replace(/x(.)?/g, function(match, group) {
                pushCall(groups, group);
            });
            return 1 === groups.length && "undefined" == typeof groups[0];
        }()) StringPrototype.replace = function(searchValue, replaceValue) {
            var isFn = isCallable(replaceValue), hasCapturingGroups = isRegex(searchValue) && /\)[*?]/.test(searchValue.source);
            if (!isFn || !hasCapturingGroups) return str_replace.call(this, searchValue, replaceValue); else {
                var wrappedReplaceValue = function(match) {
                    var length = arguments.length, originalLastIndex = searchValue.lastIndex;
                    searchValue.lastIndex = 0;
                    var args = searchValue.exec(match) || [];
                    searchValue.lastIndex = originalLastIndex;
                    pushCall(args, arguments[length - 2], arguments[length - 1]);
                    return replaceValue.apply(this, args);
                };
                return str_replace.call(this, searchValue, wrappedReplaceValue);
            }
        };
        var string_substr = StringPrototype.substr, hasNegativeSubstrBug = "".substr && "b" !== "0b".substr(-1);
        defineProperties(StringPrototype, {
            substr: function(start, length) {
                var normalizedStart = start;
                if (start < 0) normalizedStart = max(this.length + start, 0);
                return string_substr.call(this, normalizedStart, length);
            }
        }, hasNegativeSubstrBug);
        var ws = "\t\n\x0B\f\r   ᠎             　\u2028\u2029\ufeff", zeroWidth = "​", wsRegexChars = "[" + ws + "]", trimBeginRegexp = new RegExp("^" + wsRegexChars + wsRegexChars + "*"), trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + "*$"), hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
        defineProperties(StringPrototype, {
            trim: function() {
                if (void 0 === this || null === this) throw new TypeError("can't convert " + this + " to object");
                return $String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
            }
        }, hasTrimWhitespaceBug);
        var trim = call.bind(String.prototype.trim), hasLastIndexBug = StringPrototype.lastIndexOf && -1 !== "abcあい".lastIndexOf("あい", 2);
        defineProperties(StringPrototype, {
            lastIndexOf: function(searchString) {
                if (void 0 === this || null === this) throw new TypeError("can't convert " + this + " to object");
                for (var S = $String(this), searchStr = $String(searchString), numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN, pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos), start = min(max(pos, 0), S.length), searchLen = searchStr.length, k = start + searchLen; k > 0; ) {
                    k = max(0, k - searchLen);
                    var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);
                    if (-1 !== index) return k + index;
                }
                return -1;
            }
        }, hasLastIndexBug);
        var originalLastIndexOf = StringPrototype.lastIndexOf;
        defineProperties(StringPrototype, {
            lastIndexOf: function(searchString) {
                return originalLastIndexOf.apply(this, arguments);
            }
        }, 1 !== StringPrototype.lastIndexOf.length);
        if (8 !== parseInt(ws + "08") || 22 !== parseInt(ws + "0x16")) parseInt = function(origParseInt) {
            var hexRegex = /^[-+]?0[xX]/;
            return function(str, radix) {
                if ("symbol" == typeof str) ;
                var string = trim(String(str)), defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
                return origParseInt(string, defaultedRadix);
            };
        }(parseInt);
        if (1 / parseFloat("-0") != -Infinity) parseFloat = function(origParseFloat) {
            return function(string) {
                var inputString = trim(String(string)), result = origParseFloat(inputString);
                return 0 === result && "-" === strSlice(inputString, 0, 1) ? -0 : result;
            };
        }(parseFloat);
        if ("RangeError: test" !== String(new RangeError("test"))) {
            var errorToStringShim = function() {
                if (void 0 === this || null === this) throw new TypeError("can't convert " + this + " to object");
                var name = this.name;
                if (void 0 === name) name = "Error"; else if ("string" != typeof name) name = $String(name);
                var msg = this.message;
                if (void 0 === msg) msg = ""; else if ("string" != typeof msg) msg = $String(msg);
                if (!name) return msg;
                if (!msg) return name; else return name + ": " + msg;
            };
            Error.prototype.toString = errorToStringShim;
        }
        if (supportsDescriptors) {
            var ensureNonEnumerable = function(obj, prop) {
                if (isEnum(obj, prop)) {
                    var desc = Object.getOwnPropertyDescriptor(obj, prop);
                    if (desc.configurable) {
                        desc.enumerable = !1;
                        Object.defineProperty(obj, prop, desc);
                    }
                }
            };
            ensureNonEnumerable(Error.prototype, "message");
            if ("" !== Error.prototype.message) Error.prototype.message = "";
            ensureNonEnumerable(Error.prototype, "name");
        }
        if ("/a/gim" !== String(/a/gim)) {
            var regexToString = function() {
                var str = "/" + this.source + "/";
                if (this.global) str += "g";
                if (this.ignoreCase) str += "i";
                if (this.multiline) str += "m";
                return str;
            };
            RegExp.prototype.toString = regexToString;
        }
    });
}, function(module, exports, __webpack_require__) {
    (function(module, global) {
        var __WEBPACK_AMD_DEFINE_RESULT__;
        (function() {
            function runInContext(context, exports) {
                function has(name) {
                    if (has[name] !== undef) return has[name];
                    var isSupported;
                    if ("bug-string-char-index" == name) isSupported = "a" != "a"[0]; else if ("json" == name) isSupported = has("json-stringify") && has("json-parse"); else {
                        var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';
                        if ("json-stringify" == name) {
                            var stringify = exports.stringify, stringifySupported = "function" == typeof stringify && isExtended;
                            if (stringifySupported) {
                                (value = function() {
                                    return 1;
                                }).toJSON = value;
                                try {
                                    stringifySupported = "0" === stringify(0) && "0" === stringify(new Number()) && '""' == stringify(new String()) && stringify(getClass) === undef && stringify(undef) === undef && stringify() === undef && "1" === stringify(value) && "[1]" == stringify([ value ]) && "[null]" == stringify([ undef ]) && "null" == stringify(null) && "[null,null,null]" == stringify([ undef, getClass, null ]) && stringify({
                                        a: [ value, !0, !1, null, "\0\b\n\f\r\t" ]
                                    }) == serialized && "1" === stringify(null, value) && "[\n 1,\n 2\n]" == stringify([ 1, 2 ], null, 1) && '"-271821-04-20T00:00:00.000Z"' == stringify(new Date(-864e13)) && '"+275760-09-13T00:00:00.000Z"' == stringify(new Date(864e13)) && '"-000001-01-01T00:00:00.000Z"' == stringify(new Date(-621987552e5)) && '"1969-12-31T23:59:59.999Z"' == stringify(new Date(-1));
                                } catch (exception) {
                                    stringifySupported = !1;
                                }
                            }
                            isSupported = stringifySupported;
                        }
                        if ("json-parse" == name) {
                            var parse = exports.parse;
                            if ("function" == typeof parse) try {
                                if (0 === parse("0") && !parse(!1)) {
                                    value = parse(serialized);
                                    var parseSupported = 5 == value.a.length && 1 === value.a[0];
                                    if (parseSupported) {
                                        try {
                                            parseSupported = !parse('"\t"');
                                        } catch (exception) {}
                                        if (parseSupported) try {
                                            parseSupported = 1 !== parse("01");
                                        } catch (exception) {}
                                        if (parseSupported) try {
                                            parseSupported = 1 !== parse("1.");
                                        } catch (exception) {}
                                    }
                                }
                            } catch (exception) {
                                parseSupported = !1;
                            }
                            isSupported = parseSupported;
                        }
                    }
                    return has[name] = !!isSupported;
                }
                context || (context = root.Object());
                exports || (exports = root.Object());
                var Number = context.Number || root.Number, String = context.String || root.String, Object = context.Object || root.Object, Date = context.Date || root.Date, SyntaxError = context.SyntaxError || root.SyntaxError, TypeError = context.TypeError || root.TypeError, Math = context.Math || root.Math, nativeJSON = context.JSON || root.JSON;
                if ("object" == typeof nativeJSON && nativeJSON) {
                    exports.stringify = nativeJSON.stringify;
                    exports.parse = nativeJSON.parse;
                }
                var isProperty, forEach, undef, objectProto = Object.prototype, getClass = objectProto.toString, isExtended = new Date(-0xc782b5b800cec);
                try {
                    isExtended = -109252 == isExtended.getUTCFullYear() && 0 === isExtended.getUTCMonth() && 1 === isExtended.getUTCDate() && 10 == isExtended.getUTCHours() && 37 == isExtended.getUTCMinutes() && 6 == isExtended.getUTCSeconds() && 708 == isExtended.getUTCMilliseconds();
                } catch (exception) {}
                if (!has("json")) {
                    var charIndexBuggy = has("bug-string-char-index");
                    if (!isExtended) var floor = Math.floor, Months = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ], getDay = function(year, month) {
                        return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);
                    };
                    if (!(isProperty = objectProto.hasOwnProperty)) isProperty = function(property) {
                        var constructor, members = {};
                        if ((members.__proto__ = null, members.__proto__ = {
                            toString: 1
                        }, members).toString != getClass) isProperty = function(property) {
                            var original = this.__proto__, result = property in (this.__proto__ = null, this);
                            this.__proto__ = original;
                            return result;
                        }; else {
                            constructor = members.constructor;
                            isProperty = function(property) {
                                var parent = (this.constructor || constructor).prototype;
                                return property in this && !(property in parent && this[property] === parent[property]);
                            };
                        }
                        members = null;
                        return isProperty.call(this, property);
                    };
                    forEach = function(object, callback) {
                        var Properties, members, property, size = 0;
                        (Properties = function() {
                            this.valueOf = 0;
                        }).prototype.valueOf = 0;
                        members = new Properties();
                        for (property in members) if (isProperty.call(members, property)) size++;
                        Properties = members = null;
                        if (!size) {
                            members = [ "valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor" ];
                            forEach = function(object, callback) {
                                var property, length, isFunction = "[object Function]" == getClass.call(object), hasProperty = !isFunction && "function" != typeof object.constructor && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;
                                for (property in object) if ((!isFunction || "prototype" != property) && hasProperty.call(object, property)) callback(property);
                                for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)) ;
                            };
                        } else if (2 == size) forEach = function(object, callback) {
                            var property, members = {}, isFunction = "[object Function]" == getClass.call(object);
                            for (property in object) if ((!isFunction || "prototype" != property) && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) callback(property);
                        }; else forEach = function(object, callback) {
                            var property, isConstructor, isFunction = "[object Function]" == getClass.call(object);
                            for (property in object) if ((!isFunction || "prototype" != property) && isProperty.call(object, property) && !(isConstructor = "constructor" === property)) callback(property);
                            if (isConstructor || isProperty.call(object, property = "constructor")) callback(property);
                        };
                        return forEach(object, callback);
                    };
                    if (!has("json-stringify")) {
                        var Escapes = {
                            92: "\\\\",
                            34: '\\"',
                            8: "\\b",
                            12: "\\f",
                            10: "\\n",
                            13: "\\r",
                            9: "\\t"
                        }, toPaddedString = function(width, value) {
                            return ("000000" + (value || 0)).slice(-width);
                        }, quote = function(value) {
                            for (var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10, symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); index < length; index++) {
                                var charCode = value.charCodeAt(index);
                                switch (charCode) {
                                  case 8:
                                  case 9:
                                  case 10:
                                  case 12:
                                  case 13:
                                  case 34:
                                  case 92:
                                    result += Escapes[charCode];
                                    break;

                                  default:
                                    if (charCode < 32) {
                                        result += "\\u00" + toPaddedString(2, charCode.toString(16));
                                        break;
                                    }
                                    result += useCharIndex ? symbols[index] : value.charAt(index);
                                }
                            }
                            return result + '"';
                        }, serialize = function(property, object, callback, properties, whitespace, indentation, stack) {
                            var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;
                            try {
                                value = object[property];
                            } catch (exception) {}
                            if ("object" == typeof value && value) {
                                className = getClass.call(value);
                                if ("[object Date]" == className && !isProperty.call(value, "toJSON")) if (value > -1 / 0 && value < 1 / 0) {
                                    if (getDay) {
                                        date = floor(value / 864e5);
                                        for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++) ;
                                        for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++) ;
                                        date = 1 + date - getDay(year, month);
                                        time = (value % 864e5 + 864e5) % 864e5;
                                        hours = floor(time / 36e5) % 24;
                                        minutes = floor(time / 6e4) % 60;
                                        seconds = floor(time / 1e3) % 60;
                                        milliseconds = time % 1e3;
                                    } else {
                                        year = value.getUTCFullYear();
                                        month = value.getUTCMonth();
                                        date = value.getUTCDate();
                                        hours = value.getUTCHours();
                                        minutes = value.getUTCMinutes();
                                        seconds = value.getUTCSeconds();
                                        milliseconds = value.getUTCMilliseconds();
                                    }
                                    value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + "." + toPaddedString(3, milliseconds) + "Z";
                                } else value = null; else if ("function" == typeof value.toJSON && ("[object Number]" != className && "[object String]" != className && "[object Array]" != className || isProperty.call(value, "toJSON"))) value = value.toJSON(property);
                            }
                            if (callback) value = callback.call(object, property, value);
                            if (null === value) return "null";
                            className = getClass.call(value);
                            if ("[object Boolean]" == className) return "" + value; else if ("[object Number]" == className) return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; else if ("[object String]" == className) return quote("" + value);
                            if ("object" == typeof value) {
                                for (length = stack.length; length--; ) if (stack[length] === value) throw TypeError();
                                stack.push(value);
                                results = [];
                                prefix = indentation;
                                indentation += whitespace;
                                if ("[object Array]" == className) {
                                    for (index = 0, length = value.length; index < length; index++) {
                                        element = serialize(index, value, callback, properties, whitespace, indentation, stack);
                                        results.push(element === undef ? "null" : element);
                                    }
                                    result = results.length ? whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : "[" + results.join(",") + "]" : "[]";
                                } else {
                                    forEach(properties || value, function(property) {
                                        var element = serialize(property, value, callback, properties, whitespace, indentation, stack);
                                        if (element !== undef) results.push(quote(property) + ":" + (whitespace ? " " : "") + element);
                                    });
                                    result = results.length ? whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : "{" + results.join(",") + "}" : "{}";
                                }
                                stack.pop();
                                return result;
                            }
                        };
                        exports.stringify = function(source, filter, width) {
                            var whitespace, callback, properties, className;
                            if (objectTypes[typeof filter] && filter) if ("[object Function]" == (className = getClass.call(filter))) callback = filter; else if ("[object Array]" == className) {
                                properties = {};
                                for (var value, index = 0, length = filter.length; index < length; value = filter[index++], 
                                ("[object String]" == (className = getClass.call(value)) || "[object Number]" == className) && (properties[value] = 1)) ;
                            }
                            if (width) if ("[object Number]" == (className = getClass.call(width))) {
                                if ((width -= width % 1) > 0) for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " ") ;
                            } else if ("[object String]" == className) whitespace = width.length <= 10 ? width : width.slice(0, 10);
                            return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []);
                        };
                    }
                    if (!has("json-parse")) {
                        var Index, Source, fromCharCode = String.fromCharCode, Unescapes = {
                            92: "\\",
                            34: '"',
                            47: "/",
                            98: "\b",
                            116: "\t",
                            110: "\n",
                            102: "\f",
                            114: "\r"
                        }, abort = function() {
                            Index = Source = null;
                            throw SyntaxError();
                        }, lex = function() {
                            for (var value, begin, position, isSigned, charCode, source = Source, length = source.length; Index < length; ) {
                                charCode = source.charCodeAt(Index);
                                switch (charCode) {
                                  case 9:
                                  case 10:
                                  case 13:
                                  case 32:
                                    Index++;
                                    break;

                                  case 123:
                                  case 125:
                                  case 91:
                                  case 93:
                                  case 58:
                                  case 44:
                                    value = charIndexBuggy ? source.charAt(Index) : source[Index];
                                    Index++;
                                    return value;

                                  case 34:
                                    for (value = "@", Index++; Index < length; ) {
                                        charCode = source.charCodeAt(Index);
                                        if (charCode < 32) abort(); else if (92 == charCode) {
                                            charCode = source.charCodeAt(++Index);
                                            switch (charCode) {
                                              case 92:
                                              case 34:
                                              case 47:
                                              case 98:
                                              case 116:
                                              case 110:
                                              case 102:
                                              case 114:
                                                value += Unescapes[charCode];
                                                Index++;
                                                break;

                                              case 117:
                                                begin = ++Index;
                                                for (position = Index + 4; Index < position; Index++) {
                                                    charCode = source.charCodeAt(Index);
                                                    if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) abort();
                                                }
                                                value += fromCharCode("0x" + source.slice(begin, Index));
                                                break;

                                              default:
                                                abort();
                                            }
                                        } else {
                                            if (34 == charCode) break;
                                            charCode = source.charCodeAt(Index);
                                            begin = Index;
                                            for (;charCode >= 32 && 92 != charCode && 34 != charCode; ) charCode = source.charCodeAt(++Index);
                                            value += source.slice(begin, Index);
                                        }
                                    }
                                    if (34 == source.charCodeAt(Index)) {
                                        Index++;
                                        return value;
                                    }
                                    abort();

                                  default:
                                    begin = Index;
                                    if (45 == charCode) {
                                        isSigned = !0;
                                        charCode = source.charCodeAt(++Index);
                                    }
                                    if (charCode >= 48 && charCode <= 57) {
                                        if (48 == charCode && (charCode = source.charCodeAt(Index + 1)) >= 48 && charCode <= 57) abort();
                                        isSigned = !1;
                                        for (;Index < length && (charCode = source.charCodeAt(Index)) >= 48 && charCode <= 57; Index++) ;
                                        if (46 == source.charCodeAt(Index)) {
                                            position = ++Index;
                                            for (;position < length && (charCode = source.charCodeAt(position)) >= 48 && charCode <= 57; position++) ;
                                            if (position == Index) abort();
                                            Index = position;
                                        }
                                        charCode = source.charCodeAt(Index);
                                        if (101 == charCode || 69 == charCode) {
                                            charCode = source.charCodeAt(++Index);
                                            if (43 == charCode || 45 == charCode) Index++;
                                            for (position = Index; position < length && (charCode = source.charCodeAt(position)) >= 48 && charCode <= 57; position++) ;
                                            if (position == Index) abort();
                                            Index = position;
                                        }
                                        return +source.slice(begin, Index);
                                    }
                                    if (isSigned) abort();
                                    if ("true" == source.slice(Index, Index + 4)) {
                                        Index += 4;
                                        return !0;
                                    } else if ("false" == source.slice(Index, Index + 5)) {
                                        Index += 5;
                                        return !1;
                                    } else if ("null" == source.slice(Index, Index + 4)) {
                                        Index += 4;
                                        return null;
                                    }
                                    abort();
                                }
                            }
                            return "$";
                        }, get = function(value) {
                            var results, hasMembers;
                            if ("$" == value) abort();
                            if ("string" == typeof value) {
                                if ("@" == (charIndexBuggy ? value.charAt(0) : value[0])) return value.slice(1);
                                if ("[" == value) {
                                    results = [];
                                    for (;;hasMembers || (hasMembers = !0)) {
                                        value = lex();
                                        if ("]" == value) break;
                                        if (hasMembers) if ("," == value) {
                                            value = lex();
                                            if ("]" == value) abort();
                                        } else abort();
                                        if ("," == value) abort();
                                        results.push(get(value));
                                    }
                                    return results;
                                } else if ("{" == value) {
                                    results = {};
                                    for (;;hasMembers || (hasMembers = !0)) {
                                        value = lex();
                                        if ("}" == value) break;
                                        if (hasMembers) if ("," == value) {
                                            value = lex();
                                            if ("}" == value) abort();
                                        } else abort();
                                        if ("," == value || "string" != typeof value || "@" != (charIndexBuggy ? value.charAt(0) : value[0]) || ":" != lex()) abort();
                                        results[value.slice(1)] = get(lex());
                                    }
                                    return results;
                                }
                                abort();
                            }
                            return value;
                        }, update = function(source, property, callback) {
                            var element = walk(source, property, callback);
                            if (element === undef) delete source[property]; else source[property] = element;
                        }, walk = function(source, property, callback) {
                            var length, value = source[property];
                            if ("object" == typeof value && value) if ("[object Array]" == getClass.call(value)) for (length = value.length; length--; ) update(value, length, callback); else forEach(value, function(property) {
                                update(value, property, callback);
                            });
                            return callback.call(source, property, value);
                        };
                        exports.parse = function(source, callback) {
                            var result, value;
                            Index = 0;
                            Source = "" + source;
                            result = get(lex());
                            if ("$" != lex()) abort();
                            Index = Source = null;
                            return callback && "[object Function]" == getClass.call(callback) ? walk((value = {}, 
                            value[""] = result, value), "", callback) : result;
                        };
                    }
                }
                exports.runInContext = runInContext;
                return exports;
            }
            var isLoader = __webpack_require__(854), objectTypes = {
                "function": !0,
                object: !0
            }, freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports, root = objectTypes[typeof window] && window || this, freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && "object" == typeof global && global;
            if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) root = freeGlobal;
            if (freeExports && !isLoader) runInContext(root, freeExports); else {
                var nativeJSON = root.JSON, previousJSON = root.JSON3, isRestored = !1, JSON3 = runInContext(root, root.JSON3 = {
                    noConflict: function() {
                        if (!isRestored) {
                            isRestored = !0;
                            root.JSON = nativeJSON;
                            root.JSON3 = previousJSON;
                            nativeJSON = previousJSON = null;
                        }
                        return JSON3;
                    }
                });
                root.JSON = {
                    parse: JSON3.parse,
                    stringify: JSON3.stringify
                };
            }
            if (isLoader) (__WEBPACK_AMD_DEFINE_RESULT__ = function() {
                return JSON3;
            }.call(exports, __webpack_require__, exports, module)) !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
        }).call(this);
    }).call(exports, __webpack_require__(214)(module), __webpack_require__(54));
}, function(module, exports) {
    function compact(array) {
        for (var index = -1, length = array ? array.length : 0, resIndex = -1, result = []; ++index < length; ) {
            var value = array[index];
            if (value) result[++resIndex] = value;
        }
        return result;
    }
    module.exports = compact;
}, function(module, exports, __webpack_require__) {
    var createAggregator = __webpack_require__(568), partition = createAggregator(function(result, value, key) {
        result[key ? 0 : 1].push(value);
    }, function() {
        return [ [], [] ];
    });
    module.exports = partition;
}, function(module, exports, __webpack_require__) {
    var arrayReduce = __webpack_require__(543), baseEach = __webpack_require__(142), createReduce = __webpack_require__(574), reduce = createReduce(arrayReduce, baseEach);
    module.exports = reduce;
}, function(module, exports, __webpack_require__) {
    function sortBy(collection, iteratee, thisArg) {
        if (null == collection) return [];
        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) iteratee = undefined;
        var index = -1;
        iteratee = baseCallback(iteratee, thisArg, 3);
        var result = baseMap(collection, function(value, key, collection) {
            return {
                criteria: iteratee(value, key, collection),
                index: ++index,
                value: value
            };
        });
        return baseSortBy(result, compareAscending);
    }
    var baseCallback = __webpack_require__(116), baseMap = __webpack_require__(552), baseSortBy = __webpack_require__(560), compareAscending = __webpack_require__(567), isIterateeCall = __webpack_require__(119);
    module.exports = sortBy;
}, function(module, exports, __webpack_require__) {
    var getNative = __webpack_require__(118), nativeNow = getNative(Date, "now"), now = nativeNow || function() {
        return new Date().getTime();
    };
    module.exports = now;
}, function(module, exports) {
    function before(n, func) {
        var result;
        if ("function" != typeof func) if ("function" == typeof n) {
            var temp = n;
            n = func;
            func = temp;
        } else throw new TypeError(FUNC_ERROR_TEXT);
        return function() {
            if (--n > 0) result = func.apply(this, arguments);
            if (n <= 1) func = undefined;
            return result;
        };
    }
    var FUNC_ERROR_TEXT = "Expected a function";
    module.exports = before;
}, function(module, exports, __webpack_require__) {
    function once(func) {
        return before(2, func);
    }
    var before = __webpack_require__(537);
    module.exports = once;
}, function(module, exports, __webpack_require__) {
    function throttle(func, wait, options) {
        var leading = !0, trailing = !0;
        if ("function" != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
        if (!1 === options) leading = !1; else if (isObject(options)) {
            leading = "leading" in options ? !!options.leading : leading;
            trailing = "trailing" in options ? !!options.trailing : trailing;
        }
        return debounce(func, wait, {
            leading: leading,
            maxWait: +wait,
            trailing: trailing
        });
    }
    var debounce = __webpack_require__(255), isObject = __webpack_require__(28), FUNC_ERROR_TEXT = "Expected a function";
    module.exports = throttle;
}, function(module, exports, __webpack_require__) {
    (function(global) {
        function SetCache(values) {
            var length = values ? values.length : 0;
            this.data = {
                hash: nativeCreate(null),
                set: new Set()
            };
            for (;length--; ) this.push(values[length]);
        }
        var cachePush = __webpack_require__(566), getNative = __webpack_require__(118), Set = getNative(global, "Set"), nativeCreate = getNative(Object, "create");
        SetCache.prototype.push = cachePush;
        module.exports = SetCache;
    }).call(exports, __webpack_require__(54));
}, function(module, exports) {
    function arrayExtremum(array, iteratee, comparator, exValue) {
        for (var index = -1, length = array.length, computed = exValue, result = computed; ++index < length; ) {
            var value = array[index], current = +iteratee(value);
            if (comparator(current, computed)) {
                computed = current;
                result = value;
            }
        }
        return result;
    }
    module.exports = arrayExtremum;
}, function(module, exports) {
    function arrayPush(array, values) {
        for (var index = -1, length = values.length, offset = array.length; ++index < length; ) array[offset + index] = values[index];
        return array;
    }
    module.exports = arrayPush;
}, function(module, exports) {
    function arrayReduce(array, iteratee, accumulator, initFromArray) {
        var index = -1, length = array.length;
        if (initFromArray && length) accumulator = array[++index];
        for (;++index < length; ) accumulator = iteratee(accumulator, array[index], index, array);
        return accumulator;
    }
    module.exports = arrayReduce;
}, function(module, exports) {
    function arraySome(array, predicate) {
        for (var index = -1, length = array.length; ++index < length; ) if (predicate(array[index], index, array)) return !0;
        return !1;
    }
    module.exports = arraySome;
}, function(module, exports, __webpack_require__) {
    function baseAssign(object, source) {
        return null == source ? object : baseCopy(source, keys(source), object);
    }
    var baseCopy = __webpack_require__(259), keys = __webpack_require__(82);
    module.exports = baseAssign;
}, function(module, exports, __webpack_require__) {
    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
        var result;
        if (customizer) result = object ? customizer(value, key, object) : customizer(value);
        if (result !== undefined) return result;
        if (!isObject(value)) return value;
        var isArr = isArray(value);
        if (isArr) {
            result = initCloneArray(value);
            if (!isDeep) return arrayCopy(value, result);
        } else {
            var tag = objToString.call(value), isFunc = tag == funcTag;
            if (tag == objectTag || tag == argsTag || isFunc && !object) {
                result = initCloneObject(isFunc ? {} : value);
                if (!isDeep) return baseAssign(result, value);
            } else return cloneableTags[tag] ? initCloneByTag(value, tag, isDeep) : object ? value : {};
        }
        stackA || (stackA = []);
        stackB || (stackB = []);
        for (var length = stackA.length; length--; ) if (stackA[length] == value) return stackB[length];
        stackA.push(value);
        stackB.push(result);
        (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
            result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
        });
        return result;
    }
    var arrayCopy = __webpack_require__(257), arrayEach = __webpack_require__(258), baseAssign = __webpack_require__(545), baseForOwn = __webpack_require__(263), initCloneArray = __webpack_require__(580), initCloneByTag = __webpack_require__(581), initCloneObject = __webpack_require__(582), isArray = __webpack_require__(27), isObject = __webpack_require__(28), argsTag = "[object Arguments]", funcTag = "[object Function]", objectTag = "[object Object]", cloneableTags = {};
    cloneableTags[argsTag] = cloneableTags["[object Array]"] = cloneableTags["[object ArrayBuffer]"] = cloneableTags["[object Boolean]"] = cloneableTags["[object Date]"] = cloneableTags["[object Float32Array]"] = cloneableTags["[object Float64Array]"] = cloneableTags["[object Int8Array]"] = cloneableTags["[object Int16Array]"] = cloneableTags["[object Int32Array]"] = cloneableTags["[object Number]"] = cloneableTags[objectTag] = cloneableTags["[object RegExp]"] = cloneableTags["[object String]"] = cloneableTags["[object Uint8Array]"] = cloneableTags["[object Uint8ClampedArray]"] = cloneableTags["[object Uint16Array]"] = cloneableTags["[object Uint32Array]"] = !0;
    cloneableTags["[object Error]"] = cloneableTags[funcTag] = cloneableTags["[object Map]"] = cloneableTags["[object Set]"] = cloneableTags["[object WeakMap]"] = !1;
    var objectProto = Object.prototype, objToString = objectProto.toString;
    module.exports = baseClone;
}, function(module, exports) {
    function baseCompareAscending(value, other) {
        if (value !== other) {
            var valIsNull = null === value, valIsUndef = value === undefined, valIsReflexive = value === value, othIsNull = null === other, othIsUndef = other === undefined, othIsReflexive = other === other;
            if (value > other && !othIsNull || !valIsReflexive || valIsNull && !othIsUndef && othIsReflexive || valIsUndef && othIsReflexive) return 1;
            if (value < other && !valIsNull || !othIsReflexive || othIsNull && !valIsUndef && valIsReflexive || othIsUndef && valIsReflexive) return -1;
        }
        return 0;
    }
    module.exports = baseCompareAscending;
}, function(module, exports, __webpack_require__) {
    function baseExtremum(collection, iteratee, comparator, exValue) {
        var computed = exValue, result = computed;
        baseEach(collection, function(value, index, collection) {
            var current = +iteratee(value, index, collection);
            if (comparator(current, computed) || current === exValue && current === result) {
                computed = current;
                result = value;
            }
        });
        return result;
    }
    var baseEach = __webpack_require__(142);
    module.exports = baseExtremum;
}, function(module, exports, __webpack_require__) {
    function baseIndexOf(array, value, fromIndex) {
        if (value !== value) return indexOfNaN(array, fromIndex);
        for (var index = fromIndex - 1, length = array.length; ++index < length; ) if (array[index] === value) return index;
        return -1;
    }
    var indexOfNaN = __webpack_require__(579);
    module.exports = baseIndexOf;
}, function(module, exports, __webpack_require__) {
    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
        var objIsArr = isArray(object), othIsArr = isArray(other), objTag = arrayTag, othTag = arrayTag;
        if (!objIsArr) {
            objTag = objToString.call(object);
            if (objTag == argsTag) objTag = objectTag; else if (objTag != objectTag) objIsArr = isTypedArray(object);
        }
        if (!othIsArr) {
            othTag = objToString.call(other);
            if (othTag == argsTag) othTag = objectTag; else if (othTag != objectTag) othIsArr = isTypedArray(other);
        }
        var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
        if (isSameTag && !objIsArr && !objIsObj) return equalByTag(object, other, objTag);
        if (!isLoose) {
            var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
            if (objIsWrapped || othIsWrapped) return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
        }
        if (!isSameTag) return !1;
        stackA || (stackA = []);
        stackB || (stackB = []);
        for (var length = stackA.length; length--; ) if (stackA[length] == object) return stackB[length] == other;
        stackA.push(object);
        stackB.push(other);
        var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
        stackA.pop();
        stackB.pop();
        return result;
    }
    var equalArrays = __webpack_require__(575), equalByTag = __webpack_require__(576), equalObjects = __webpack_require__(577), isArray = __webpack_require__(27), isTypedArray = __webpack_require__(184), argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]", objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty, objToString = objectProto.toString;
    module.exports = baseIsEqualDeep;
}, function(module, exports, __webpack_require__) {
    function baseIsMatch(object, matchData, customizer) {
        var index = matchData.length, length = index, noCustomizer = !customizer;
        if (null == object) return !length;
        object = toObject(object);
        for (;index--; ) {
            var data = matchData[index];
            if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) return !1;
        }
        for (;++index < length; ) {
            data = matchData[index];
            var key = data[0], objValue = object[key], srcValue = data[1];
            if (noCustomizer && data[2]) {
                if (objValue === undefined && !(key in object)) return !1;
            } else {
                var result = customizer ? customizer(objValue, srcValue, key) : undefined;
                if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, !0) : result)) return !1;
            }
        }
        return !0;
    }
    var baseIsEqual = __webpack_require__(182), toObject = __webpack_require__(61);
    module.exports = baseIsMatch;
}, function(module, exports, __webpack_require__) {
    function baseMap(collection, iteratee) {
        var index = -1, result = isArrayLike(collection) ? Array(collection.length) : [];
        baseEach(collection, function(value, key, collection) {
            result[++index] = iteratee(value, key, collection);
        });
        return result;
    }
    var baseEach = __webpack_require__(142), isArrayLike = __webpack_require__(60);
    module.exports = baseMap;
}, function(module, exports, __webpack_require__) {
    function baseMatches(source) {
        var matchData = getMatchData(source);
        if (1 == matchData.length && matchData[0][2]) {
            var key = matchData[0][0], value = matchData[0][1];
            return function(object) {
                if (null == object) return !1; else return object[key] === value && (value !== undefined || key in toObject(object));
            };
        }
        return function(object) {
            return baseIsMatch(object, matchData);
        };
    }
    var baseIsMatch = __webpack_require__(551), getMatchData = __webpack_require__(578), toObject = __webpack_require__(61);
    module.exports = baseMatches;
}, function(module, exports, __webpack_require__) {
    function baseMatchesProperty(path, srcValue) {
        var isArr = isArray(path), isCommon = isKey(path) && isStrictComparable(srcValue), pathKey = path + "";
        path = toPath(path);
        return function(object) {
            if (null == object) return !1;
            var key = pathKey;
            object = toObject(object);
            if ((isArr || !isCommon) && !(key in object)) {
                object = 1 == path.length ? object : baseGet(object, baseSlice(path, 0, -1));
                if (null == object) return !1;
                key = last(path);
                object = toObject(object);
            }
            return object[key] === srcValue ? srcValue !== undefined || key in object : baseIsEqual(srcValue, object[key], undefined, !0);
        };
    }
    var baseGet = __webpack_require__(264), baseIsEqual = __webpack_require__(182), baseSlice = __webpack_require__(559), isArray = __webpack_require__(27), isKey = __webpack_require__(267), isStrictComparable = __webpack_require__(268), last = __webpack_require__(254), toObject = __webpack_require__(61), toPath = __webpack_require__(269);
    module.exports = baseMatchesProperty;
}, function(module, exports, __webpack_require__) {
    function baseMerge(object, source, customizer, stackA, stackB) {
        if (!isObject(object)) return object;
        var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), props = isSrcArr ? undefined : keys(source);
        arrayEach(props || source, function(srcValue, key) {
            if (props) {
                key = srcValue;
                srcValue = source[key];
            }
            if (isObjectLike(srcValue)) {
                stackA || (stackA = []);
                stackB || (stackB = []);
                baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
            } else {
                var value = object[key], result = customizer ? customizer(value, srcValue, key, object, source) : undefined, isCommon = result === undefined;
                if (isCommon) result = srcValue;
                if ((result !== undefined || isSrcArr && !(key in object)) && (isCommon || (result === result ? result !== value : value === value))) object[key] = result;
            }
        });
        return object;
    }
    var arrayEach = __webpack_require__(258), baseMergeDeep = __webpack_require__(556), isArray = __webpack_require__(27), isArrayLike = __webpack_require__(60), isObject = __webpack_require__(28), isObjectLike = __webpack_require__(46), isTypedArray = __webpack_require__(184), keys = __webpack_require__(82);
    module.exports = baseMerge;
}, function(module, exports, __webpack_require__) {
    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
        for (var length = stackA.length, srcValue = source[key]; length--; ) if (stackA[length] == srcValue) {
            object[key] = stackB[length];
            return;
        }
        var value = object[key], result = customizer ? customizer(value, srcValue, key, object, source) : undefined, isCommon = result === undefined;
        if (isCommon) {
            result = srcValue;
            if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) result = isArray(value) ? value : isArrayLike(value) ? arrayCopy(value) : []; else if (isPlainObject(srcValue) || isArguments(srcValue)) result = isArguments(value) ? toPlainObject(value) : isPlainObject(value) ? value : {}; else isCommon = !1;
        }
        stackA.push(srcValue);
        stackB.push(result);
        if (isCommon) object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); else if (result === result ? result !== value : value === value) object[key] = result;
    }
    var arrayCopy = __webpack_require__(257), isArguments = __webpack_require__(96), isArray = __webpack_require__(27), isArrayLike = __webpack_require__(60), isPlainObject = __webpack_require__(592), isTypedArray = __webpack_require__(184), toPlainObject = __webpack_require__(594);
    module.exports = baseMergeDeep;
}, function(module, exports, __webpack_require__) {
    function basePropertyDeep(path) {
        var pathKey = path + "";
        path = toPath(path);
        return function(object) {
            return baseGet(object, path, pathKey);
        };
    }
    var baseGet = __webpack_require__(264), toPath = __webpack_require__(269);
    module.exports = basePropertyDeep;
}, function(module, exports) {
    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
        eachFunc(collection, function(value, index, collection) {
            accumulator = initFromCollection ? (initFromCollection = !1, value) : iteratee(accumulator, value, index, collection);
        });
        return accumulator;
    }
    module.exports = baseReduce;
}, function(module, exports) {
    function baseSlice(array, start, end) {
        var index = -1, length = array.length;
        start = null == start ? 0 : +start || 0;
        if (start < 0) start = -start > length ? 0 : length + start;
        end = end === undefined || end > length ? length : +end || 0;
        if (end < 0) end += length;
        length = start > end ? 0 : end - start >>> 0;
        start >>>= 0;
        for (var result = Array(length); ++index < length; ) result[index] = array[index + start];
        return result;
    }
    module.exports = baseSlice;
}, function(module, exports) {
    function baseSortBy(array, comparer) {
        var length = array.length;
        array.sort(comparer);
        for (;length--; ) array[length] = array[length].value;
        return array;
    }
    module.exports = baseSortBy;
}, function(module, exports) {
    function baseToString(value) {
        return null == value ? "" : value + "";
    }
    module.exports = baseToString;
}, function(module, exports, __webpack_require__) {
    function baseUniq(array, iteratee) {
        var index = -1, indexOf = baseIndexOf, length = array.length, isCommon = !0, isLarge = isCommon && length >= LARGE_ARRAY_SIZE, seen = isLarge ? createCache() : null, result = [];
        if (seen) {
            indexOf = cacheIndexOf;
            isCommon = !1;
        } else {
            isLarge = !1;
            seen = iteratee ? [] : result;
        }
        outer: for (;++index < length; ) {
            var value = array[index], computed = iteratee ? iteratee(value, index, array) : value;
            if (isCommon && value === value) {
                for (var seenIndex = seen.length; seenIndex--; ) if (seen[seenIndex] === computed) continue outer;
                if (iteratee) seen.push(computed);
                result.push(value);
            } else if (indexOf(seen, computed, 0) < 0) {
                if (iteratee || isLarge) seen.push(computed);
                result.push(value);
            }
        }
        return result;
    }
    var baseIndexOf = __webpack_require__(549), cacheIndexOf = __webpack_require__(565), createCache = __webpack_require__(572), LARGE_ARRAY_SIZE = 200;
    module.exports = baseUniq;
}, function(module, exports) {
    function baseValues(object, props) {
        for (var index = -1, length = props.length, result = Array(length); ++index < length; ) result[index] = object[props[index]];
        return result;
    }
    module.exports = baseValues;
}, function(module, exports, __webpack_require__) {
    (function(global) {
        function bufferClone(buffer) {
            var result = new ArrayBuffer(buffer.byteLength);
            new Uint8Array(result).set(new Uint8Array(buffer));
            return result;
        }
        var ArrayBuffer = global.ArrayBuffer, Uint8Array = global.Uint8Array;
        module.exports = bufferClone;
    }).call(exports, __webpack_require__(54));
}, function(module, exports, __webpack_require__) {
    function cacheIndexOf(cache, value) {
        var data = cache.data;
        return ("string" == typeof value || isObject(value) ? data.set.has(value) : data.hash[value]) ? 0 : -1;
    }
    var isObject = __webpack_require__(28);
    module.exports = cacheIndexOf;
}, function(module, exports, __webpack_require__) {
    function cachePush(value) {
        var data = this.data;
        if ("string" == typeof value || isObject(value)) data.set.add(value); else data.hash[value] = !0;
    }
    var isObject = __webpack_require__(28);
    module.exports = cachePush;
}, function(module, exports, __webpack_require__) {
    function compareAscending(object, other) {
        return baseCompareAscending(object.criteria, other.criteria) || object.index - other.index;
    }
    var baseCompareAscending = __webpack_require__(547);
    module.exports = compareAscending;
}, function(module, exports, __webpack_require__) {
    function createAggregator(setter, initializer) {
        return function(collection, iteratee, thisArg) {
            var result = initializer ? initializer() : {};
            iteratee = baseCallback(iteratee, thisArg, 3);
            if (isArray(collection)) for (var index = -1, length = collection.length; ++index < length; ) {
                var value = collection[index];
                setter(result, value, iteratee(value, index, collection), collection);
            } else baseEach(collection, function(value, key, collection) {
                setter(result, value, iteratee(value, key, collection), collection);
            });
            return result;
        };
    }
    var baseCallback = __webpack_require__(116), baseEach = __webpack_require__(142), isArray = __webpack_require__(27);
    module.exports = createAggregator;
}, function(module, exports, __webpack_require__) {
    function createAssigner(assigner) {
        return restParam(function(object, sources) {
            var index = -1, length = null == object ? 0 : sources.length, customizer = length > 2 ? sources[length - 2] : undefined, guard = length > 2 ? sources[2] : undefined, thisArg = length > 1 ? sources[length - 1] : undefined;
            if ("function" == typeof customizer) {
                customizer = bindCallback(customizer, thisArg, 5);
                length -= 2;
            } else {
                customizer = "function" == typeof thisArg ? thisArg : undefined;
                length -= customizer ? 1 : 0;
            }
            if (guard && isIterateeCall(sources[0], sources[1], guard)) {
                customizer = length < 3 ? undefined : customizer;
                length = 1;
            }
            for (;++index < length; ) {
                var source = sources[index];
                if (source) assigner(object, source, customizer);
            }
            return object;
        });
    }
    var bindCallback = __webpack_require__(117), isIterateeCall = __webpack_require__(119), restParam = __webpack_require__(256);
    module.exports = createAssigner;
}, function(module, exports, __webpack_require__) {
    function createBaseEach(eachFunc, fromRight) {
        return function(collection, iteratee) {
            var length = collection ? getLength(collection) : 0;
            if (!isLength(length)) return eachFunc(collection, iteratee);
            for (var index = fromRight ? length : -1, iterable = toObject(collection); (fromRight ? index-- : ++index < length) && !1 !== iteratee(iterable[index], index, iterable); ) ;
            return collection;
        };
    }
    var getLength = __webpack_require__(266), isLength = __webpack_require__(95), toObject = __webpack_require__(61);
    module.exports = createBaseEach;
}, function(module, exports, __webpack_require__) {
    function createBaseFor(fromRight) {
        return function(object, iteratee, keysFunc) {
            for (var iterable = toObject(object), props = keysFunc(object), length = props.length, index = fromRight ? length : -1; fromRight ? index-- : ++index < length; ) {
                var key = props[index];
                if (!1 === iteratee(iterable[key], key, iterable)) break;
            }
            return object;
        };
    }
    var toObject = __webpack_require__(61);
    module.exports = createBaseFor;
}, function(module, exports, __webpack_require__) {
    (function(global) {
        function createCache(values) {
            return nativeCreate && Set ? new SetCache(values) : null;
        }
        var SetCache = __webpack_require__(540), getNative = __webpack_require__(118), Set = getNative(global, "Set"), nativeCreate = getNative(Object, "create");
        module.exports = createCache;
    }).call(exports, __webpack_require__(54));
}, function(module, exports, __webpack_require__) {
    function createExtremum(comparator, exValue) {
        return function(collection, iteratee, thisArg) {
            if (thisArg && isIterateeCall(collection, iteratee, thisArg)) iteratee = undefined;
            iteratee = baseCallback(iteratee, thisArg, 3);
            if (1 == iteratee.length) {
                collection = isArray(collection) ? collection : toIterable(collection);
                var result = arrayExtremum(collection, iteratee, comparator, exValue);
                if (!collection.length || result !== exValue) return result;
            }
            return baseExtremum(collection, iteratee, comparator, exValue);
        };
    }
    var arrayExtremum = __webpack_require__(541), baseCallback = __webpack_require__(116), baseExtremum = __webpack_require__(548), isArray = __webpack_require__(27), isIterateeCall = __webpack_require__(119), toIterable = __webpack_require__(587);
    module.exports = createExtremum;
}, function(module, exports, __webpack_require__) {
    function createReduce(arrayFunc, eachFunc) {
        return function(collection, iteratee, accumulator, thisArg) {
            var initFromArray = arguments.length < 3;
            return "function" == typeof iteratee && thisArg === undefined && isArray(collection) ? arrayFunc(collection, iteratee, accumulator, initFromArray) : baseReduce(collection, baseCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
        };
    }
    var baseCallback = __webpack_require__(116), baseReduce = __webpack_require__(558), isArray = __webpack_require__(27);
    module.exports = createReduce;
}, function(module, exports, __webpack_require__) {
    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
        var index = -1, arrLength = array.length, othLength = other.length;
        if (arrLength != othLength && !(isLoose && othLength > arrLength)) return !1;
        for (;++index < arrLength; ) {
            var arrValue = array[index], othValue = other[index], result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
            if (result !== undefined) {
                if (result) continue;
                return !1;
            }
            if (isLoose) {
                if (!arraySome(other, function(othValue) {
                    return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
                })) return !1;
            } else if (arrValue !== othValue && !equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB)) return !1;
        }
        return !0;
    }
    var arraySome = __webpack_require__(544);
    module.exports = equalArrays;
}, function(module, exports) {
    function equalByTag(object, other, tag) {
        switch (tag) {
          case boolTag:
          case dateTag:
            return +object == +other;

          case errorTag:
            return object.name == other.name && object.message == other.message;

          case numberTag:
            return object != +object ? other != +other : object == +other;

          case regexpTag:
          case stringTag:
            return object == other + "";
        }
        return !1;
    }
    var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", numberTag = "[object Number]", regexpTag = "[object RegExp]", stringTag = "[object String]";
    module.exports = equalByTag;
}, function(module, exports, __webpack_require__) {
    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
        var objProps = keys(object), objLength = objProps.length;
        if (objLength != keys(other).length && !isLoose) return !1;
        for (var index = objLength; index--; ) {
            var key = objProps[index];
            if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) return !1;
        }
        for (var skipCtor = isLoose; ++index < objLength; ) {
            key = objProps[index];
            var objValue = object[key], othValue = other[key], result = customizer ? customizer(isLoose ? othValue : objValue, isLoose ? objValue : othValue, key) : undefined;
            if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) return !1;
            skipCtor || (skipCtor = "constructor" == key);
        }
        if (!skipCtor) {
            var objCtor = object.constructor, othCtor = other.constructor;
            if (objCtor != othCtor && "constructor" in object && "constructor" in other && !("function" == typeof objCtor && objCtor instanceof objCtor && "function" == typeof othCtor && othCtor instanceof othCtor)) return !1;
        }
        return !0;
    }
    var keys = __webpack_require__(82), objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty;
    module.exports = equalObjects;
}, function(module, exports, __webpack_require__) {
    function getMatchData(object) {
        for (var result = pairs(object), length = result.length; length--; ) result[length][2] = isStrictComparable(result[length][1]);
        return result;
    }
    var isStrictComparable = __webpack_require__(268), pairs = __webpack_require__(597);
    module.exports = getMatchData;
}, function(module, exports) {
    function indexOfNaN(array, fromIndex, fromRight) {
        for (var length = array.length, index = fromIndex + (fromRight ? 0 : -1); fromRight ? index-- : ++index < length; ) {
            var other = array[index];
            if (other !== other) return index;
        }
        return -1;
    }
    module.exports = indexOfNaN;
}, function(module, exports) {
    function initCloneArray(array) {
        var length = array.length, result = new array.constructor(length);
        if (length && "string" == typeof array[0] && hasOwnProperty.call(array, "index")) {
            result.index = array.index;
            result.input = array.input;
        }
        return result;
    }
    var objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty;
    module.exports = initCloneArray;
}, function(module, exports, __webpack_require__) {
    function initCloneByTag(object, tag, isDeep) {
        var Ctor = object.constructor;
        switch (tag) {
          case arrayBufferTag:
            return bufferClone(object);

          case boolTag:
          case dateTag:
            return new Ctor(+object);

          case float32Tag:
          case float64Tag:
          case int8Tag:
          case int16Tag:
          case int32Tag:
          case uint8Tag:
          case uint8ClampedTag:
          case uint16Tag:
          case uint32Tag:
            var buffer = object.buffer;
            return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);

          case numberTag:
          case stringTag:
            return new Ctor(object);

          case regexpTag:
            var result = new Ctor(object.source, reFlags.exec(object));
            result.lastIndex = object.lastIndex;
        }
        return result;
    }
    var bufferClone = __webpack_require__(564), boolTag = "[object Boolean]", dateTag = "[object Date]", numberTag = "[object Number]", regexpTag = "[object RegExp]", stringTag = "[object String]", arrayBufferTag = "[object ArrayBuffer]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]", reFlags = /\w*$/;
    module.exports = initCloneByTag;
}, function(module, exports) {
    function initCloneObject(object) {
        var Ctor = object.constructor;
        if (!("function" == typeof Ctor && Ctor instanceof Ctor)) Ctor = Object;
        return new Ctor();
    }
    module.exports = initCloneObject;
}, function(module, exports, __webpack_require__) {
    function pickByArray(object, props) {
        object = toObject(object);
        for (var index = -1, length = props.length, result = {}; ++index < length; ) {
            var key = props[index];
            if (key in object) result[key] = object[key];
        }
        return result;
    }
    var toObject = __webpack_require__(61);
    module.exports = pickByArray;
}, function(module, exports, __webpack_require__) {
    function pickByCallback(object, predicate) {
        var result = {};
        baseForIn(object, function(value, key, object) {
            if (predicate(value, key, object)) result[key] = value;
        });
        return result;
    }
    var baseForIn = __webpack_require__(262);
    module.exports = pickByCallback;
}, function(module, exports, __webpack_require__) {
    function shimKeys(object) {
        for (var props = keysIn(object), propsLength = props.length, length = propsLength && object.length, allowIndexes = !!length && isLength(length) && (isArray(object) || isArguments(object)), index = -1, result = []; ++index < propsLength; ) {
            var key = props[index];
            if (allowIndexes && isIndex(key, length) || hasOwnProperty.call(object, key)) result.push(key);
        }
        return result;
    }
    var isArguments = __webpack_require__(96), isArray = __webpack_require__(27), isIndex = __webpack_require__(183), isLength = __webpack_require__(95), keysIn = __webpack_require__(185), objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty;
    module.exports = shimKeys;
}, function(module, exports) {
    function sortedUniq(array, iteratee) {
        for (var seen, index = -1, length = array.length, resIndex = -1, result = []; ++index < length; ) {
            var value = array[index], computed = iteratee ? iteratee(value, index, array) : value;
            if (!index || seen !== computed) {
                seen = computed;
                result[++resIndex] = value;
            }
        }
        return result;
    }
    module.exports = sortedUniq;
}, function(module, exports, __webpack_require__) {
    function toIterable(value) {
        if (null == value) return [];
        if (!isArrayLike(value)) return values(value); else return isObject(value) ? value : Object(value);
    }
    var isArrayLike = __webpack_require__(60), isObject = __webpack_require__(28), values = __webpack_require__(598);
    module.exports = toIterable;
}, function(module, exports, __webpack_require__) {
    function cloneDeep(value, customizer, thisArg) {
        return "function" == typeof customizer ? baseClone(value, !0, bindCallback(customizer, thisArg, 3)) : baseClone(value, !0);
    }
    var baseClone = __webpack_require__(546), bindCallback = __webpack_require__(117);
    module.exports = cloneDeep;
}, function(module, exports) {
    function gt(value, other) {
        return value > other;
    }
    module.exports = gt;
}, function(module, exports, __webpack_require__) {
    function isEqual(value, other, customizer, thisArg) {
        customizer = "function" == typeof customizer ? bindCallback(customizer, thisArg, 3) : undefined;
        var result = customizer ? customizer(value, other) : undefined;
        return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
    }
    var baseIsEqual = __webpack_require__(182), bindCallback = __webpack_require__(117);
    module.exports = isEqual;
}, function(module, exports, __webpack_require__) {
    function isNative(value) {
        if (null == value) return !1;
        if (isFunction(value)) return reIsNative.test(fnToString.call(value)); else return isObjectLike(value) && reIsHostCtor.test(value);
    }
    var isFunction = __webpack_require__(271), isObjectLike = __webpack_require__(46), reIsHostCtor = /^\[object .+?Constructor\]$/, objectProto = Object.prototype, fnToString = Function.prototype.toString, hasOwnProperty = objectProto.hasOwnProperty, reIsNative = RegExp("^" + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$");
    module.exports = isNative;
}, function(module, exports, __webpack_require__) {
    function isPlainObject(value) {
        var Ctor;
        if (!isObjectLike(value) || objToString.call(value) != objectTag || isArguments(value) || !hasOwnProperty.call(value, "constructor") && "function" == typeof (Ctor = value.constructor) && !(Ctor instanceof Ctor)) return !1;
        var result;
        baseForIn(value, function(subValue, key) {
            result = key;
        });
        return result === undefined || hasOwnProperty.call(value, result);
    }
    var baseForIn = __webpack_require__(262), isArguments = __webpack_require__(96), isObjectLike = __webpack_require__(46), objectTag = "[object Object]", objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty, objToString = objectProto.toString;
    module.exports = isPlainObject;
}, function(module, exports, __webpack_require__) {
    function isString(value) {
        return "string" == typeof value || isObjectLike(value) && objToString.call(value) == stringTag;
    }
    var isObjectLike = __webpack_require__(46), stringTag = "[object String]", objectProto = Object.prototype, objToString = objectProto.toString;
    module.exports = isString;
}, function(module, exports, __webpack_require__) {
    function toPlainObject(value) {
        return baseCopy(value, keysIn(value));
    }
    var baseCopy = __webpack_require__(259), keysIn = __webpack_require__(185);
    module.exports = toPlainObject;
}, function(module, exports, __webpack_require__) {
    var createExtremum = __webpack_require__(573), gt = __webpack_require__(589), NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, max = createExtremum(gt, NEGATIVE_INFINITY);
    module.exports = max;
}, function(module, exports, __webpack_require__) {
    var baseMerge = __webpack_require__(555), createAssigner = __webpack_require__(569), merge = createAssigner(baseMerge);
    module.exports = merge;
}, function(module, exports, __webpack_require__) {
    function pairs(object) {
        object = toObject(object);
        for (var index = -1, props = keys(object), length = props.length, result = Array(length); ++index < length; ) {
            var key = props[index];
            result[index] = [ key, object[key] ];
        }
        return result;
    }
    var keys = __webpack_require__(82), toObject = __webpack_require__(61);
    module.exports = pairs;
}, function(module, exports, __webpack_require__) {
    function values(object) {
        return baseValues(object, keys(object));
    }
    var baseValues = __webpack_require__(563), keys = __webpack_require__(82);
    module.exports = values;
}, function(module, exports, __webpack_require__) {
    function property(path) {
        return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
    }
    var baseProperty = __webpack_require__(265), basePropertyDeep = __webpack_require__(557), isKey = __webpack_require__(267);
    module.exports = property;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isKeypressCommand(nativeEvent) {
        return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && !(nativeEvent.ctrlKey && nativeEvent.altKey);
    }
    var EventConstants = __webpack_require__(36), EventPropagators = __webpack_require__(98), ExecutionEnvironment = __webpack_require__(26), SyntheticInputEvent = __webpack_require__(643), keyOf = __webpack_require__(71), canUseTextInputEvent = ExecutionEnvironment.canUseDOM && "TextEvent" in window && !("documentMode" in document || function() {
        var opera = window.opera;
        return "object" == typeof opera && "function" == typeof opera.version && parseInt(opera.version(), 10) <= 12;
    }()), SPACEBAR_CHAR = String.fromCharCode(32), topLevelTypes = EventConstants.topLevelTypes, eventTypes = {
        beforeInput: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onBeforeInput: null
                }),
                captured: keyOf({
                    onBeforeInputCapture: null
                })
            },
            dependencies: [ topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste ]
        }
    }, fallbackChars = null, BeforeInputEventPlugin = {
        eventTypes: eventTypes,
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            var chars;
            if (canUseTextInputEvent) switch (topLevelType) {
              case topLevelTypes.topKeyPress:
                var which = nativeEvent.which;
                if (32 !== which) return;
                chars = String.fromCharCode(which);
                break;

              case topLevelTypes.topTextInput:
                chars = nativeEvent.data;
                if (chars === SPACEBAR_CHAR) return;
                break;

              default:
                return;
            } else {
                switch (topLevelType) {
                  case topLevelTypes.topPaste:
                    fallbackChars = null;
                    break;

                  case topLevelTypes.topKeyPress:
                    if (nativeEvent.which && !isKeypressCommand(nativeEvent)) fallbackChars = String.fromCharCode(nativeEvent.which);
                    break;

                  case topLevelTypes.topCompositionEnd:
                    fallbackChars = nativeEvent.data;
                }
                if (null === fallbackChars) return;
                chars = fallbackChars;
            }
            if (chars) {
                var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent);
                event.data = chars;
                fallbackChars = null;
                EventPropagators.accumulateTwoPhaseDispatches(event);
                return event;
            }
        }
    };
    module.exports = BeforeInputEventPlugin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function shouldUseChangeEvent(elem) {
        return "SELECT" === elem.nodeName || "INPUT" === elem.nodeName && "file" === elem.type;
    }
    function manualDispatchChangeEvent(nativeEvent) {
        var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent);
        EventPropagators.accumulateTwoPhaseDispatches(event);
        ReactUpdates.batchedUpdates(runEventInBatch, event);
    }
    function runEventInBatch(event) {
        EventPluginHub.enqueueEvents(event);
        EventPluginHub.processEventQueue();
    }
    function startWatchingForChangeEventIE8(target, targetID) {
        activeElement = target;
        activeElementID = targetID;
        activeElement.attachEvent("onchange", manualDispatchChangeEvent);
    }
    function stopWatchingForChangeEventIE8() {
        if (activeElement) {
            activeElement.detachEvent("onchange", manualDispatchChangeEvent);
            activeElement = null;
            activeElementID = null;
        }
    }
    function getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {
        if (topLevelType === topLevelTypes.topChange) return topLevelTargetID;
    }
    function handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {
        if (topLevelType === topLevelTypes.topFocus) {
            stopWatchingForChangeEventIE8();
            startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);
        } else if (topLevelType === topLevelTypes.topBlur) stopWatchingForChangeEventIE8();
    }
    function startWatchingForValueChange(target, targetID) {
        activeElement = target;
        activeElementID = targetID;
        activeElementValue = target.value;
        if ("undefined" != typeof target.constructor) {
            activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, "value");
            Object.defineProperty(activeElement, "value", newValueProp);
        } else {
            activeElement.attachEvent("onkeyup", handleKeyUp);
            activeElement.attachEvent("onkeydown", handleKeydown);
            activeElement.attachEvent("oncut", handleMouseInput);
            activeElement.attachEvent("onpaste", handleMouseInput);
            activeElement.attachEvent("oncontextmenu", handleMouseInput);
            activeElement.attachEvent("onmouseup", handleMouseInput);
        }
        activeElement.attachEvent("onpropertychange", handlePropertyChange);
    }
    function stopWatchingForValueChange() {
        if (activeElement) {
            try {
                delete activeElement.value;
            } catch (err) {}
            activeElement.detachEvent("onpropertychange", handlePropertyChange);
            if ("undefined" == typeof activeElement.constructor) {
                activeElement.detachEvent("onkeyup", handleKeyUp);
                activeElement.detachEvent("onkeydown", handleKeydown);
                activeElement.detachEvent("oncut", handleMouseInput);
                activeElement.detachEvent("onpaste", handleMouseInput);
                activeElement.detachEvent("oncontextmenu", handleMouseInput);
                activeElement.detachEvent("onmouseup", handleMouseInput);
                activeElementChangeEventTime = null;
                activeElementMouseEventTime = null;
                activeElementKeyEventTime = null;
            }
            activeElement = null;
            activeElementID = null;
            activeElementValue = null;
            activeElementValueProp = null;
        }
    }
    function handleKeydown(nativeEvent) {
        activeElementKeyEventTime = new Date();
    }
    function handleMouseInput(nativeEvent) {
        activeElementMouseEventTime = null;
        if (!activeElementKeyEventTime || new Date() - activeElementKeyEventTime > 500) activeElementMouseEventTime = new Date();
        activeElementKeyEventTime = null;
    }
    function handlePropertyChange(nativeEvent) {
        if ("value" === nativeEvent.propertyName) {
            var value = nativeEvent.srcElement.value;
            if (value !== activeElementValue) {
                activeElementValue = value;
                if ("undefined" != typeof activeElement.constructor) manualDispatchChangeEvent(nativeEvent); else {
                    if (activeElementMouseEventTime) {
                        var timediff = new Date() - activeElementMouseEventTime;
                        activeElementMouseEventTime = null;
                        if (timediff < 500) {
                            manualDispatchChangeEvent(nativeEvent);
                            return;
                        }
                    }
                    activeElementChangeEventTime = new Date();
                }
            }
        }
    }
    function handleKeyUp(nativeEvent) {
        if (activeElementChangeEventTime) {
            var timediff = new Date() - activeElementChangeEventTime;
            activeElementChangeEventTime = null;
            if (timediff < 500) manualDispatchChangeEvent(nativeEvent);
        }
    }
    function getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {
        if (topLevelType === topLevelTypes.topInput) return topLevelTargetID;
    }
    function handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
        if (topLevelType === topLevelTypes.topFocus) {
            stopWatchingForValueChange();
            startWatchingForValueChange(topLevelTarget, topLevelTargetID);
        } else if (topLevelType === topLevelTypes.topBlur) stopWatchingForValueChange();
    }
    function getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
        if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) if (activeElement && activeElement.value !== activeElementValue) {
            activeElementValue = activeElement.value;
            return activeElementID;
        }
    }
    function shouldUseClickEvent(elem) {
        return "INPUT" === elem.nodeName && ("checkbox" === elem.type || "radio" === elem.type);
    }
    function getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {
        if (topLevelType === topLevelTypes.topClick) return topLevelTargetID;
    }
    var EventConstants = __webpack_require__(36), EventPluginHub = __webpack_require__(120), EventPropagators = __webpack_require__(98), ExecutionEnvironment = __webpack_require__(26), ReactUpdates = __webpack_require__(103), SyntheticEvent = __webpack_require__(84), isEventSupported = __webpack_require__(199), isTextInputElement = __webpack_require__(297), keyOf = __webpack_require__(71), topLevelTypes = EventConstants.topLevelTypes, eventTypes = {
        change: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onChange: null
                }),
                captured: keyOf({
                    onChangeCapture: null
                })
            },
            dependencies: [ topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange ]
        }
    }, activeElement = null, activeElementID = null, activeElementValue = null, activeElementValueProp = null, activeElementChangeEventTime = null, activeElementMouseEventTime = null, activeElementKeyEventTime = null, doesChangeEventBubble = !1;
    if (ExecutionEnvironment.canUseDOM) doesChangeEventBubble = isEventSupported("change") && (!("documentMode" in document) || document.documentMode > 8);
    var isInputEventSupported = !1;
    if (ExecutionEnvironment.canUseDOM) isInputEventSupported = isEventSupported("input") && (!("documentMode" in document) || document.documentMode > 9);
    var newValueProp = {
        get: function() {
            return activeElementValueProp.get.call(this);
        },
        set: function(val) {
            activeElementValue = "" + val;
            activeElementValueProp.set.call(this, val);
        }
    }, ChangeEventPlugin = {
        eventTypes: eventTypes,
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            var getTargetIDFunc, handleEventFunc;
            if (shouldUseChangeEvent(topLevelTarget)) if (doesChangeEventBubble) getTargetIDFunc = getTargetIDForChangeEvent; else handleEventFunc = handleEventsForChangeEventIE8; else if (isTextInputElement(topLevelTarget)) if (isInputEventSupported) getTargetIDFunc = getTargetIDForInputEvent; else {
                getTargetIDFunc = getTargetIDForInputEventIE;
                handleEventFunc = handleEventsForInputEventIE;
            } else if (shouldUseClickEvent(topLevelTarget)) getTargetIDFunc = getTargetIDForClickEvent;
            if (getTargetIDFunc) {
                var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);
                if (targetID) {
                    var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent);
                    EventPropagators.accumulateTwoPhaseDispatches(event);
                    return event;
                }
            }
            if (handleEventFunc) handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);
        }
    };
    module.exports = ChangeEventPlugin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var nextReactRootIndex = 0, ClientReactRootIndex = {
        createReactRootIndex: function() {
            return nextReactRootIndex++;
        }
    };
    module.exports = ClientReactRootIndex;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getCompositionEventType(topLevelType) {
        switch (topLevelType) {
          case topLevelTypes.topCompositionStart:
            return eventTypes.compositionStart;

          case topLevelTypes.topCompositionEnd:
            return eventTypes.compositionEnd;

          case topLevelTypes.topCompositionUpdate:
            return eventTypes.compositionUpdate;
        }
    }
    function isFallbackStart(topLevelType, nativeEvent) {
        return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;
    }
    function isFallbackEnd(topLevelType, nativeEvent) {
        switch (topLevelType) {
          case topLevelTypes.topKeyUp:
            return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);

          case topLevelTypes.topKeyDown:
            return nativeEvent.keyCode !== START_KEYCODE;

          case topLevelTypes.topKeyPress:
          case topLevelTypes.topMouseDown:
          case topLevelTypes.topBlur:
            return !0;

          default:
            return !1;
        }
    }
    function FallbackCompositionState(root) {
        this.root = root;
        this.startSelection = ReactInputSelection.getSelection(root);
        this.startValue = this.getText();
    }
    var EventConstants = __webpack_require__(36), EventPropagators = __webpack_require__(98), ExecutionEnvironment = __webpack_require__(26), ReactInputSelection = __webpack_require__(192), SyntheticCompositionEvent = __webpack_require__(640), getTextContentAccessor = __webpack_require__(198), keyOf = __webpack_require__(71), END_KEYCODES = [ 9, 13, 27, 32 ], START_KEYCODE = 229, useCompositionEvent = ExecutionEnvironment.canUseDOM && "CompositionEvent" in window, useFallbackData = !useCompositionEvent || "documentMode" in document && document.documentMode > 8 && document.documentMode <= 11, topLevelTypes = EventConstants.topLevelTypes, currentComposition = null, eventTypes = {
        compositionEnd: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onCompositionEnd: null
                }),
                captured: keyOf({
                    onCompositionEndCapture: null
                })
            },
            dependencies: [ topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown ]
        },
        compositionStart: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onCompositionStart: null
                }),
                captured: keyOf({
                    onCompositionStartCapture: null
                })
            },
            dependencies: [ topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown ]
        },
        compositionUpdate: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onCompositionUpdate: null
                }),
                captured: keyOf({
                    onCompositionUpdateCapture: null
                })
            },
            dependencies: [ topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown ]
        }
    };
    FallbackCompositionState.prototype.getText = function() {
        return this.root.value || this.root[getTextContentAccessor()];
    };
    FallbackCompositionState.prototype.getData = function() {
        var endValue = this.getText(), prefixLength = this.startSelection.start, suffixLength = this.startValue.length - this.startSelection.end;
        return endValue.substr(prefixLength, endValue.length - suffixLength - prefixLength);
    };
    var CompositionEventPlugin = {
        eventTypes: eventTypes,
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            var eventType, data;
            if (useCompositionEvent) eventType = getCompositionEventType(topLevelType); else if (!currentComposition) {
                if (isFallbackStart(topLevelType, nativeEvent)) eventType = eventTypes.compositionStart;
            } else if (isFallbackEnd(topLevelType, nativeEvent)) eventType = eventTypes.compositionEnd;
            if (useFallbackData) if (!currentComposition && eventType === eventTypes.compositionStart) currentComposition = new FallbackCompositionState(topLevelTarget); else if (eventType === eventTypes.compositionEnd) if (currentComposition) {
                data = currentComposition.getData();
                currentComposition = null;
            }
            if (eventType) {
                var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent);
                if (data) event.data = data;
                EventPropagators.accumulateTwoPhaseDispatches(event);
                return event;
            }
        }
    };
    module.exports = CompositionEventPlugin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function insertChildAt(parentNode, childNode, index) {
        parentNode.insertBefore(childNode, parentNode.childNodes[index] || null);
    }
    var updateTextContent, Danger = __webpack_require__(605), ReactMultiChildUpdateTypes = __webpack_require__(282), getTextContentAccessor = __webpack_require__(198), invariant = __webpack_require__(5), textContentAccessor = getTextContentAccessor();
    if ("textContent" === textContentAccessor) updateTextContent = function(node, text) {
        node.textContent = text;
    }; else updateTextContent = function(node, text) {
        for (;node.firstChild; ) node.removeChild(node.firstChild);
        if (text) {
            var doc = node.ownerDocument || document;
            node.appendChild(doc.createTextNode(text));
        }
    };
    var DOMChildrenOperations = {
        dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,
        updateTextContent: updateTextContent,
        processUpdates: function(updates, markupList) {
            for (var update, initialChildren = null, updatedChildren = null, i = 0; update = updates[i]; i++) if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {
                var updatedIndex = update.fromIndex, updatedChild = update.parentNode.childNodes[updatedIndex], parentID = update.parentID;
                !0 ? invariant(updatedChild, "processUpdates(): Unable to find child %s of element. This probably means the DOM was unexpectedly mutated (e.g., by the browser), usually due to forgetting a <tbody> when using tables, nesting <p> or <a> tags, or using non-SVG elements in an <svg> parent. Try inspecting the child nodes of the element with React ID `%s`.", updatedIndex, parentID) : invariant(updatedChild);
                initialChildren = initialChildren || {};
                initialChildren[parentID] = initialChildren[parentID] || [];
                initialChildren[parentID][updatedIndex] = updatedChild;
                updatedChildren = updatedChildren || [];
                updatedChildren.push(updatedChild);
            }
            var renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);
            if (updatedChildren) for (var j = 0; j < updatedChildren.length; j++) updatedChildren[j].parentNode.removeChild(updatedChildren[j]);
            for (var k = 0; update = updates[k]; k++) switch (update.type) {
              case ReactMultiChildUpdateTypes.INSERT_MARKUP:
                insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);
                break;

              case ReactMultiChildUpdateTypes.MOVE_EXISTING:
                insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);
                break;

              case ReactMultiChildUpdateTypes.TEXT_CONTENT:
                updateTextContent(update.parentNode, update.textContent);
                break;

              case ReactMultiChildUpdateTypes.REMOVE_NODE:
            }
        }
    };
    module.exports = DOMChildrenOperations;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getNodeName(markup) {
        return markup.substring(1, markup.indexOf(" "));
    }
    var ExecutionEnvironment = __webpack_require__(26), createNodesFromMarkup = __webpack_require__(651), emptyFunction = __webpack_require__(63), getMarkupWrap = __webpack_require__(294), invariant = __webpack_require__(5), OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/, Danger = {
        dangerouslyRenderMarkup: function(markupList) {
            !0 ? invariant(ExecutionEnvironment.canUseDOM, "dangerouslyRenderMarkup(...): Cannot render markup in a Worker thread. This is likely a bug in the framework. Please report immediately.") : invariant(ExecutionEnvironment.canUseDOM);
            for (var nodeName, markupByNodeName = {}, i = 0; i < markupList.length; i++) {
                !0 ? invariant(markupList[i], "dangerouslyRenderMarkup(...): Missing markup.") : invariant(markupList[i]);
                nodeName = getNodeName(markupList[i]);
                nodeName = getMarkupWrap(nodeName) ? nodeName : "*";
                markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];
                markupByNodeName[nodeName][i] = markupList[i];
            }
            var resultList = [], resultListAssignmentCount = 0;
            for (nodeName in markupByNodeName) if (markupByNodeName.hasOwnProperty(nodeName)) {
                var markupListByNodeName = markupByNodeName[nodeName];
                for (var resultIndex in markupListByNodeName) if (markupListByNodeName.hasOwnProperty(resultIndex)) {
                    var markup = markupListByNodeName[resultIndex];
                    markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP, '$1 data-danger-index="' + resultIndex + '" ');
                }
                var renderNodes = createNodesFromMarkup(markupListByNodeName.join(""), emptyFunction);
                for (i = 0; i < renderNodes.length; ++i) {
                    var renderNode = renderNodes[i];
                    if (renderNode.hasAttribute && renderNode.hasAttribute("data-danger-index") || renderNode.getAttributeNode && null !== renderNode.getAttributeNode("data-danger-index")) {
                        resultIndex = +renderNode.getAttribute("data-danger-index");
                        renderNode.removeAttribute("data-danger-index");
                        !0 ? invariant(!resultList.hasOwnProperty(resultIndex), "Danger: Assigning to an already-occupied result index.") : invariant(!resultList.hasOwnProperty(resultIndex));
                        resultList[resultIndex] = renderNode;
                        resultListAssignmentCount += 1;
                    } else if (!0) console.error("Danger: Discarding unexpected node:", renderNode);
                }
            }
            !0 ? invariant(resultListAssignmentCount === resultList.length, "Danger: Did not assign to every index of resultList.") : invariant(resultListAssignmentCount === resultList.length);
            !0 ? invariant(resultList.length === markupList.length, "Danger: Expected markup to render %s nodes, but rendered %s.", markupList.length, resultList.length) : invariant(resultList.length === markupList.length);
            return resultList;
        },
        dangerouslyReplaceNodeWithMarkup: function(oldChild, markup) {
            !0 ? invariant(ExecutionEnvironment.canUseDOM, "dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. This is likely a bug in the framework. Please report immediately.") : invariant(ExecutionEnvironment.canUseDOM);
            !0 ? invariant(markup, "dangerouslyReplaceNodeWithMarkup(...): Missing markup.") : invariant(markup);
            !0 ? invariant("html" !== oldChild.tagName.toLowerCase(), "dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See renderComponentToString().") : invariant("html" !== oldChild.tagName.toLowerCase());
            var newChild = createNodesFromMarkup(markup, emptyFunction)[0];
            oldChild.parentNode.replaceChild(newChild, oldChild);
        }
    };
    module.exports = Danger;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var keyOf = __webpack_require__(71), DefaultEventPluginOrder = [ keyOf({
        ResponderEventPlugin: null
    }), keyOf({
        SimpleEventPlugin: null
    }), keyOf({
        TapEventPlugin: null
    }), keyOf({
        EnterLeaveEventPlugin: null
    }), keyOf({
        ChangeEventPlugin: null
    }), keyOf({
        SelectEventPlugin: null
    }), keyOf({
        CompositionEventPlugin: null
    }), keyOf({
        BeforeInputEventPlugin: null
    }), keyOf({
        AnalyticsEventPlugin: null
    }), keyOf({
        MobileSafariClickEventPlugin: null
    }) ];
    module.exports = DefaultEventPluginOrder;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var EventConstants = __webpack_require__(36), EventPropagators = __webpack_require__(98), SyntheticMouseEvent = __webpack_require__(144), ReactMount = __webpack_require__(51), keyOf = __webpack_require__(71), topLevelTypes = EventConstants.topLevelTypes, getFirstReactDOM = ReactMount.getFirstReactDOM, eventTypes = {
        mouseEnter: {
            registrationName: keyOf({
                onMouseEnter: null
            }),
            dependencies: [ topLevelTypes.topMouseOut, topLevelTypes.topMouseOver ]
        },
        mouseLeave: {
            registrationName: keyOf({
                onMouseLeave: null
            }),
            dependencies: [ topLevelTypes.topMouseOut, topLevelTypes.topMouseOver ]
        }
    }, extractedEvents = [ null, null ], EnterLeaveEventPlugin = {
        eventTypes: eventTypes,
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) return null;
            if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) return null;
            var win;
            if (topLevelTarget.window === topLevelTarget) win = topLevelTarget; else {
                var doc = topLevelTarget.ownerDocument;
                if (doc) win = doc.defaultView || doc.parentWindow; else win = window;
            }
            var from, to;
            if (topLevelType === topLevelTypes.topMouseOut) {
                from = topLevelTarget;
                to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement) || win;
            } else {
                from = win;
                to = topLevelTarget;
            }
            if (from === to) return null;
            var fromID = from ? ReactMount.getID(from) : "", toID = to ? ReactMount.getID(to) : "", leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent);
            leave.type = "mouseleave";
            leave.target = from;
            leave.relatedTarget = to;
            var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent);
            enter.type = "mouseenter";
            enter.target = to;
            enter.relatedTarget = from;
            EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);
            extractedEvents[0] = leave;
            extractedEvents[1] = enter;
            return extractedEvents;
        }
    };
    module.exports = EnterLeaveEventPlugin;
}, function(module, exports, __webpack_require__) {
    var emptyFunction = __webpack_require__(63), EventListener = {
        listen: function(target, eventType, callback) {
            if (target.addEventListener) {
                target.addEventListener(eventType, callback, !1);
                return {
                    remove: function() {
                        target.removeEventListener(eventType, callback, !1);
                    }
                };
            } else if (target.attachEvent) {
                target.attachEvent("on" + eventType, callback);
                return {
                    remove: function() {
                        target.detachEvent("on" + eventType, callback);
                    }
                };
            }
        },
        capture: function(target, eventType, callback) {
            if (!target.addEventListener) {
                if (!0) console.error("Attempted to listen to events during the capture phase on a browser that does not support the capture phase. Your application will not receive some events.");
                return {
                    remove: emptyFunction
                };
            } else {
                target.addEventListener(eventType, callback, !0);
                return {
                    remove: function() {
                        target.removeEventListener(eventType, callback, !0);
                    }
                };
            }
        },
        registerDefault: function() {}
    };
    module.exports = EventListener;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var hasSVG, DOMProperty = __webpack_require__(83), ExecutionEnvironment = __webpack_require__(26), MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE, MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY, HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE, HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS, HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE, HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE, HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
    if (ExecutionEnvironment.canUseDOM) {
        var implementation = document.implementation;
        hasSVG = implementation && implementation.hasFeature && implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1");
    }
    var HTMLDOMPropertyConfig = {
        isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),
        Properties: {
            accept: null,
            accessKey: null,
            action: null,
            allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
            allowTransparency: MUST_USE_ATTRIBUTE,
            alt: null,
            async: HAS_BOOLEAN_VALUE,
            autoComplete: null,
            autoPlay: HAS_BOOLEAN_VALUE,
            cellPadding: null,
            cellSpacing: null,
            charSet: MUST_USE_ATTRIBUTE,
            checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
            className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,
            cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
            colSpan: null,
            content: null,
            contentEditable: null,
            contextMenu: MUST_USE_ATTRIBUTE,
            controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
            coords: null,
            crossOrigin: null,
            data: null,
            dateTime: MUST_USE_ATTRIBUTE,
            defer: HAS_BOOLEAN_VALUE,
            dir: null,
            disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
            download: HAS_OVERLOADED_BOOLEAN_VALUE,
            draggable: null,
            encType: null,
            form: MUST_USE_ATTRIBUTE,
            formNoValidate: HAS_BOOLEAN_VALUE,
            frameBorder: MUST_USE_ATTRIBUTE,
            height: MUST_USE_ATTRIBUTE,
            hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
            href: null,
            hrefLang: null,
            htmlFor: null,
            httpEquiv: null,
            icon: null,
            id: MUST_USE_PROPERTY,
            label: null,
            lang: null,
            list: null,
            loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
            max: null,
            maxLength: MUST_USE_ATTRIBUTE,
            media: MUST_USE_ATTRIBUTE,
            mediaGroup: null,
            method: null,
            min: null,
            multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
            muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
            name: null,
            noValidate: HAS_BOOLEAN_VALUE,
            open: null,
            pattern: null,
            placeholder: null,
            poster: null,
            preload: null,
            radioGroup: null,
            readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
            rel: null,
            required: HAS_BOOLEAN_VALUE,
            role: MUST_USE_ATTRIBUTE,
            rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
            rowSpan: null,
            sandbox: null,
            scope: null,
            scrollLeft: MUST_USE_PROPERTY,
            scrolling: null,
            scrollTop: MUST_USE_PROPERTY,
            seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
            selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
            shape: null,
            size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
            sizes: MUST_USE_ATTRIBUTE,
            span: HAS_POSITIVE_NUMERIC_VALUE,
            spellCheck: null,
            src: null,
            srcDoc: MUST_USE_PROPERTY,
            srcSet: MUST_USE_ATTRIBUTE,
            start: HAS_NUMERIC_VALUE,
            step: null,
            style: null,
            tabIndex: null,
            target: null,
            title: null,
            type: null,
            useMap: null,
            value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
            width: MUST_USE_ATTRIBUTE,
            wmode: MUST_USE_ATTRIBUTE,
            autoCapitalize: null,
            autoCorrect: null,
            itemProp: MUST_USE_ATTRIBUTE,
            itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
            itemType: MUST_USE_ATTRIBUTE,
            property: null
        },
        DOMAttributeNames: {
            className: "class",
            htmlFor: "for",
            httpEquiv: "http-equiv"
        },
        DOMPropertyNames: {
            autoCapitalize: "autocapitalize",
            autoComplete: "autocomplete",
            autoCorrect: "autocorrect",
            autoFocus: "autofocus",
            autoPlay: "autoplay",
            encType: "enctype",
            hrefLang: "hreflang",
            radioGroup: "radiogroup",
            spellCheck: "spellcheck",
            srcDoc: "srcdoc",
            srcSet: "srcset"
        }
    };
    module.exports = HTMLDOMPropertyConfig;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var EventConstants = __webpack_require__(36), emptyFunction = __webpack_require__(63), topLevelTypes = EventConstants.topLevelTypes, MobileSafariClickEventPlugin = {
        eventTypes: null,
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            if (topLevelType === topLevelTypes.topTouchStart) {
                var target = nativeEvent.target;
                if (target && !target.onclick) target.onclick = emptyFunction;
            }
        }
    };
    module.exports = MobileSafariClickEventPlugin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createDescriptor(type, props, children) {
        var args = Array.prototype.slice.call(arguments, 1);
        return type.apply(null, args);
    }
    var DOMPropertyOperations = __webpack_require__(97), EventPluginUtils = __webpack_require__(188), ReactChildren = __webpack_require__(612), ReactComponent = __webpack_require__(100), ReactCompositeComponent = __webpack_require__(48), ReactContext = __webpack_require__(190), ReactCurrentOwner = __webpack_require__(101), ReactDescriptor = __webpack_require__(50), ReactDOM = __webpack_require__(49), ReactDOMComponent = __webpack_require__(278), ReactDefaultInjection = __webpack_require__(624), ReactInstanceHandles = __webpack_require__(102), ReactMount = __webpack_require__(51), ReactMultiChild = __webpack_require__(281), ReactPerf = __webpack_require__(62), ReactPropTypes = __webpack_require__(286), ReactServerRendering = __webpack_require__(633), ReactTextComponent = __webpack_require__(289), onlyChild = __webpack_require__(663), warning = __webpack_require__(53);
    ReactDefaultInjection.inject();
    if (!0) var _warnedForDeprecation = !1;
    var React = {
        Children: {
            map: ReactChildren.map,
            forEach: ReactChildren.forEach,
            count: ReactChildren.count,
            only: onlyChild
        },
        DOM: ReactDOM,
        PropTypes: ReactPropTypes,
        initializeTouchEvents: function(shouldUseTouch) {
            EventPluginUtils.useTouchEvents = shouldUseTouch;
        },
        createClass: ReactCompositeComponent.createClass,
        createDescriptor: function() {
            if (!0) {
                warning(_warnedForDeprecation, "React.createDescriptor is deprecated and will be removed in the next version of React. Use React.createElement instead.");
                _warnedForDeprecation = !0;
            }
            return createDescriptor.apply(this, arguments);
        },
        createElement: createDescriptor,
        constructAndRenderComponent: ReactMount.constructAndRenderComponent,
        constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID,
        renderComponent: ReactPerf.measure("React", "renderComponent", ReactMount.renderComponent),
        renderComponentToString: ReactServerRendering.renderComponentToString,
        renderComponentToStaticMarkup: ReactServerRendering.renderComponentToStaticMarkup,
        unmountComponentAtNode: ReactMount.unmountComponentAtNode,
        isValidClass: ReactDescriptor.isValidFactory,
        isValidComponent: ReactDescriptor.isValidDescriptor,
        withContext: ReactContext.withContext,
        __internals: {
            Component: ReactComponent,
            CurrentOwner: ReactCurrentOwner,
            DOMComponent: ReactDOMComponent,
            DOMPropertyOperations: DOMPropertyOperations,
            InstanceHandles: ReactInstanceHandles,
            Mount: ReactMount,
            MultiChild: ReactMultiChild,
            TextComponent: ReactTextComponent
        }
    };
    if (!0) {
        if (__webpack_require__(26).canUseDOM && window.top === window.self && navigator.userAgent.indexOf("Chrome") > -1) {
            console.debug("Download the React DevTools for a better development experience: http://fb.me/react-devtools");
            var expectedFeatures = [ Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim, Object.create, Object.freeze ];
            for (var i in expectedFeatures) if (!expectedFeatures[i]) {
                console.error("One or more ES5 shim/shams expected by React are not available: http://fb.me/react-warning-polyfills");
                break;
            }
        }
    }
    React.version = "0.11.2";
    module.exports = React;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function ForEachBookKeeping(forEachFunction, forEachContext) {
        this.forEachFunction = forEachFunction;
        this.forEachContext = forEachContext;
    }
    function forEachSingleChild(traverseContext, child, name, i) {
        var forEachBookKeeping = traverseContext;
        forEachBookKeeping.forEachFunction.call(forEachBookKeeping.forEachContext, child, i);
    }
    function forEachChildren(children, forEachFunc, forEachContext) {
        if (null == children) return children;
        var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);
        traverseAllChildren(children, forEachSingleChild, traverseContext);
        ForEachBookKeeping.release(traverseContext);
    }
    function MapBookKeeping(mapResult, mapFunction, mapContext) {
        this.mapResult = mapResult;
        this.mapFunction = mapFunction;
        this.mapContext = mapContext;
    }
    function mapSingleChildIntoContext(traverseContext, child, name, i) {
        var mapBookKeeping = traverseContext, mapResult = mapBookKeeping.mapResult, keyUnique = !mapResult.hasOwnProperty(name);
        warning(keyUnique, "ReactChildren.map(...): Encountered two children with the same key, `%s`. Child keys must be unique; when two children share a key, only the first child will be used.", name);
        if (keyUnique) {
            var mappedChild = mapBookKeeping.mapFunction.call(mapBookKeeping.mapContext, child, i);
            mapResult[name] = mappedChild;
        }
    }
    function mapChildren(children, func, context) {
        if (null == children) return children;
        var mapResult = {}, traverseContext = MapBookKeeping.getPooled(mapResult, func, context);
        traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
        MapBookKeeping.release(traverseContext);
        return mapResult;
    }
    function forEachSingleChildDummy(traverseContext, child, name, i) {
        return null;
    }
    function countChildren(children, context) {
        return traverseAllChildren(children, forEachSingleChildDummy, null);
    }
    var PooledClass = __webpack_require__(70), traverseAllChildren = __webpack_require__(302), warning = __webpack_require__(53), twoArgumentPooler = PooledClass.twoArgumentPooler, threeArgumentPooler = PooledClass.threeArgumentPooler;
    PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);
    PooledClass.addPoolingTo(MapBookKeeping, threeArgumentPooler);
    var ReactChildren = {
        forEach: forEachChildren,
        map: mapChildren,
        count: countChildren
    };
    module.exports = ReactChildren;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactDOMIDOperations = __webpack_require__(616), ReactMarkupChecksum = __webpack_require__(280), ReactMount = __webpack_require__(51), ReactPerf = __webpack_require__(62), ReactReconcileTransaction = __webpack_require__(632), getReactRootElementInContainer = __webpack_require__(295), invariant = __webpack_require__(5), setInnerHTML = __webpack_require__(300), ReactComponentBrowserEnvironment = {
        ReactReconcileTransaction: ReactReconcileTransaction,
        BackendIDOperations: ReactDOMIDOperations,
        unmountIDFromEnvironment: function(rootNodeID) {
            ReactMount.purgeID(rootNodeID);
        },
        mountImageIntoNode: ReactPerf.measure("ReactComponentBrowserEnvironment", "mountImageIntoNode", function(markup, container, shouldReuseMarkup) {
            !0 ? invariant(container && (1 === container.nodeType || 9 === container.nodeType), "mountComponentIntoNode(...): Target container is not valid.") : invariant(container && (1 === container.nodeType || 9 === container.nodeType));
            if (shouldReuseMarkup) if (ReactMarkupChecksum.canReuseMarkup(markup, getReactRootElementInContainer(container))) return; else {
                !0 ? invariant(9 !== container.nodeType, "You're trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side.") : invariant(9 !== container.nodeType);
                if (!0) console.warn("React attempted to use reuse markup in a container but the checksum was invalid. This generally means that you are using server rendering and the markup generated on the server was not what the client was expecting. React injected new markup to compensate which works but you have lost many of the benefits of server rendering. Instead, figure out why the markup being generated is different on the client or server.");
            }
            !0 ? invariant(9 !== container.nodeType, "You're trying to render a component to the document but you didn't use server rendering. We can't do this without using server rendering due to cross-browser quirks. See renderComponentToString() for server rendering.") : invariant(9 !== container.nodeType);
            setInnerHTML(container, markup);
        })
    };
    module.exports = ReactComponentBrowserEnvironment;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var AutoFocusMixin = __webpack_require__(143), ReactBrowserComponentMixin = __webpack_require__(47), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), keyMirror = __webpack_require__(85), button = ReactDOM.button, mouseListenerNames = keyMirror({
        onClick: !0,
        onDoubleClick: !0,
        onMouseDown: !0,
        onMouseMove: !0,
        onMouseUp: !0,
        onClickCapture: !0,
        onDoubleClickCapture: !0,
        onMouseDownCapture: !0,
        onMouseMoveCapture: !0,
        onMouseUpCapture: !0
    }), ReactDOMButton = ReactCompositeComponent.createClass({
        displayName: "ReactDOMButton",
        mixins: [ AutoFocusMixin, ReactBrowserComponentMixin ],
        render: function() {
            var props = {};
            for (var key in this.props) if (this.props.hasOwnProperty(key) && (!this.props.disabled || !mouseListenerNames[key])) props[key] = this.props[key];
            return button(props, this.props.children);
        }
    });
    module.exports = ReactDOMButton;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var EventConstants = __webpack_require__(36), LocalEventTrapMixin = __webpack_require__(277), ReactBrowserComponentMixin = __webpack_require__(47), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), form = ReactDOM.form, ReactDOMForm = ReactCompositeComponent.createClass({
        displayName: "ReactDOMForm",
        mixins: [ ReactBrowserComponentMixin, LocalEventTrapMixin ],
        render: function() {
            return this.transferPropsTo(form(null, this.props.children));
        },
        componentDidMount: function() {
            this.trapBubbledEvent(EventConstants.topLevelTypes.topReset, "reset");
            this.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, "submit");
        }
    });
    module.exports = ReactDOMForm;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var CSSPropertyOperations = __webpack_require__(275), DOMChildrenOperations = __webpack_require__(604), DOMPropertyOperations = __webpack_require__(97), ReactMount = __webpack_require__(51), ReactPerf = __webpack_require__(62), invariant = __webpack_require__(5), setInnerHTML = __webpack_require__(300), INVALID_PROPERTY_ERRORS = {
        dangerouslySetInnerHTML: "`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",
        style: "`style` must be set using `updateStylesByID()`."
    }, ReactDOMIDOperations = {
        updatePropertyByID: ReactPerf.measure("ReactDOMIDOperations", "updatePropertyByID", function(id, name, value) {
            var node = ReactMount.getNode(id);
            !0 ? invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name), "updatePropertyByID(...): %s", INVALID_PROPERTY_ERRORS[name]) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name));
            if (null != value) DOMPropertyOperations.setValueForProperty(node, name, value); else DOMPropertyOperations.deleteValueForProperty(node, name);
        }),
        deletePropertyByID: ReactPerf.measure("ReactDOMIDOperations", "deletePropertyByID", function(id, name, value) {
            var node = ReactMount.getNode(id);
            !0 ? invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name), "updatePropertyByID(...): %s", INVALID_PROPERTY_ERRORS[name]) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name));
            DOMPropertyOperations.deleteValueForProperty(node, name, value);
        }),
        updateStylesByID: ReactPerf.measure("ReactDOMIDOperations", "updateStylesByID", function(id, styles) {
            var node = ReactMount.getNode(id);
            CSSPropertyOperations.setValueForStyles(node, styles);
        }),
        updateInnerHTMLByID: ReactPerf.measure("ReactDOMIDOperations", "updateInnerHTMLByID", function(id, html) {
            var node = ReactMount.getNode(id);
            setInnerHTML(node, html);
        }),
        updateTextContentByID: ReactPerf.measure("ReactDOMIDOperations", "updateTextContentByID", function(id, content) {
            var node = ReactMount.getNode(id);
            DOMChildrenOperations.updateTextContent(node, content);
        }),
        dangerouslyReplaceNodeWithMarkupByID: ReactPerf.measure("ReactDOMIDOperations", "dangerouslyReplaceNodeWithMarkupByID", function(id, markup) {
            var node = ReactMount.getNode(id);
            DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);
        }),
        dangerouslyProcessChildrenUpdates: ReactPerf.measure("ReactDOMIDOperations", "dangerouslyProcessChildrenUpdates", function(updates, markup) {
            for (var i = 0; i < updates.length; i++) updates[i].parentNode = ReactMount.getNode(updates[i].parentID);
            DOMChildrenOperations.processUpdates(updates, markup);
        })
    };
    module.exports = ReactDOMIDOperations;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var EventConstants = __webpack_require__(36), LocalEventTrapMixin = __webpack_require__(277), ReactBrowserComponentMixin = __webpack_require__(47), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), img = ReactDOM.img, ReactDOMImg = ReactCompositeComponent.createClass({
        displayName: "ReactDOMImg",
        tagName: "IMG",
        mixins: [ ReactBrowserComponentMixin, LocalEventTrapMixin ],
        render: function() {
            return img(this.props);
        },
        componentDidMount: function() {
            this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, "load");
            this.trapBubbledEvent(EventConstants.topLevelTypes.topError, "error");
        }
    });
    module.exports = ReactDOMImg;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var AutoFocusMixin = __webpack_require__(143), DOMPropertyOperations = __webpack_require__(97), LinkedValueUtils = __webpack_require__(189), ReactBrowserComponentMixin = __webpack_require__(47), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), ReactMount = __webpack_require__(51), invariant = __webpack_require__(5), merge = __webpack_require__(37), input = ReactDOM.input, instancesByReactID = {}, ReactDOMInput = ReactCompositeComponent.createClass({
        displayName: "ReactDOMInput",
        mixins: [ AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin ],
        getInitialState: function() {
            var defaultValue = this.props.defaultValue;
            return {
                checked: this.props.defaultChecked || !1,
                value: null != defaultValue ? defaultValue : null
            };
        },
        shouldComponentUpdate: function() {
            return !this._isChanging;
        },
        render: function() {
            var props = merge(this.props);
            props.defaultChecked = null;
            props.defaultValue = null;
            var value = LinkedValueUtils.getValue(this);
            props.value = null != value ? value : this.state.value;
            var checked = LinkedValueUtils.getChecked(this);
            props.checked = null != checked ? checked : this.state.checked;
            props.onChange = this._handleChange;
            return input(props, this.props.children);
        },
        componentDidMount: function() {
            var id = ReactMount.getID(this.getDOMNode());
            instancesByReactID[id] = this;
        },
        componentWillUnmount: function() {
            var rootNode = this.getDOMNode(), id = ReactMount.getID(rootNode);
            delete instancesByReactID[id];
        },
        componentDidUpdate: function(prevProps, prevState, prevContext) {
            var rootNode = this.getDOMNode();
            if (null != this.props.checked) DOMPropertyOperations.setValueForProperty(rootNode, "checked", this.props.checked || !1);
            var value = LinkedValueUtils.getValue(this);
            if (null != value) DOMPropertyOperations.setValueForProperty(rootNode, "value", "" + value);
        },
        _handleChange: function(event) {
            var returnValue, onChange = LinkedValueUtils.getOnChange(this);
            if (onChange) {
                this._isChanging = !0;
                returnValue = onChange.call(this, event);
                this._isChanging = !1;
            }
            this.setState({
                checked: event.target.checked,
                value: event.target.value
            });
            var name = this.props.name;
            if ("radio" === this.props.type && null != name) {
                for (var rootNode = this.getDOMNode(), queryRoot = rootNode; queryRoot.parentNode; ) queryRoot = queryRoot.parentNode;
                for (var group = queryRoot.querySelectorAll("input[name=" + JSON.stringify("" + name) + '][type="radio"]'), i = 0, groupLen = group.length; i < groupLen; i++) {
                    var otherNode = group[i];
                    if (otherNode !== rootNode && otherNode.form === rootNode.form) {
                        var otherID = ReactMount.getID(otherNode);
                        !0 ? invariant(otherID, "ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.") : invariant(otherID);
                        var otherInstance = instancesByReactID[otherID];
                        !0 ? invariant(otherInstance, "ReactDOMInput: Unknown radio button ID %s.", otherID) : invariant(otherInstance);
                        otherInstance.setState({
                            checked: !1
                        });
                    }
                }
            }
            return returnValue;
        }
    });
    module.exports = ReactDOMInput;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactBrowserComponentMixin = __webpack_require__(47), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), warning = __webpack_require__(53), option = ReactDOM.option, ReactDOMOption = ReactCompositeComponent.createClass({
        displayName: "ReactDOMOption",
        mixins: [ ReactBrowserComponentMixin ],
        componentWillMount: function() {
            if (!0) warning(null == this.props.selected, "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>.");
        },
        render: function() {
            return option(this.props, this.props.children);
        }
    });
    module.exports = ReactDOMOption;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function selectValueType(props, propName, componentName) {
        if (null != props[propName]) if (props.multiple) {
            if (!Array.isArray(props[propName])) return new Error("The `" + propName + "` prop supplied to <select> must be an array if `multiple` is true.");
        } else if (Array.isArray(props[propName])) return new Error("The `" + propName + "` prop supplied to <select> must be a scalar value if `multiple` is false.");
    }
    function updateOptions(component, propValue) {
        var selectedValue, i, l, multiple = component.props.multiple, value = null != propValue ? propValue : component.state.value, options = component.getDOMNode().options;
        if (multiple) {
            selectedValue = {};
            for (i = 0, l = value.length; i < l; ++i) selectedValue["" + value[i]] = !0;
        } else selectedValue = "" + value;
        for (i = 0, l = options.length; i < l; i++) {
            var selected = multiple ? selectedValue.hasOwnProperty(options[i].value) : options[i].value === selectedValue;
            if (selected !== options[i].selected) options[i].selected = selected;
        }
    }
    var AutoFocusMixin = __webpack_require__(143), LinkedValueUtils = __webpack_require__(189), ReactBrowserComponentMixin = __webpack_require__(47), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), merge = __webpack_require__(37), select = ReactDOM.select, ReactDOMSelect = ReactCompositeComponent.createClass({
        displayName: "ReactDOMSelect",
        mixins: [ AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin ],
        propTypes: {
            defaultValue: selectValueType,
            value: selectValueType
        },
        getInitialState: function() {
            return {
                value: this.props.defaultValue || (this.props.multiple ? [] : "")
            };
        },
        componentWillReceiveProps: function(nextProps) {
            if (!this.props.multiple && nextProps.multiple) this.setState({
                value: [ this.state.value ]
            }); else if (this.props.multiple && !nextProps.multiple) this.setState({
                value: this.state.value[0]
            });
        },
        shouldComponentUpdate: function() {
            return !this._isChanging;
        },
        render: function() {
            var props = merge(this.props);
            props.onChange = this._handleChange;
            props.value = null;
            return select(props, this.props.children);
        },
        componentDidMount: function() {
            updateOptions(this, LinkedValueUtils.getValue(this));
        },
        componentDidUpdate: function(prevProps) {
            var value = LinkedValueUtils.getValue(this), prevMultiple = !!prevProps.multiple, multiple = !!this.props.multiple;
            if (null != value || prevMultiple !== multiple) updateOptions(this, value);
        },
        _handleChange: function(event) {
            var returnValue, onChange = LinkedValueUtils.getOnChange(this);
            if (onChange) {
                this._isChanging = !0;
                returnValue = onChange.call(this, event);
                this._isChanging = !1;
            }
            var selectedValue;
            if (this.props.multiple) {
                selectedValue = [];
                for (var options = event.target.options, i = 0, l = options.length; i < l; i++) if (options[i].selected) selectedValue.push(options[i].value);
            } else selectedValue = event.target.value;
            this.setState({
                value: selectedValue
            });
            return returnValue;
        }
    });
    module.exports = ReactDOMSelect;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
        return anchorNode === focusNode && anchorOffset === focusOffset;
    }
    function getIEOffsets(node) {
        var selection = document.selection, selectedRange = selection.createRange(), selectedLength = selectedRange.text.length, fromStart = selectedRange.duplicate();
        fromStart.moveToElementText(node);
        fromStart.setEndPoint("EndToStart", selectedRange);
        var startOffset = fromStart.text.length;
        return {
            start: startOffset,
            end: startOffset + selectedLength
        };
    }
    function getModernOffsets(node) {
        var selection = window.getSelection();
        if (0 === selection.rangeCount) return null;
        var anchorNode = selection.anchorNode, anchorOffset = selection.anchorOffset, focusNode = selection.focusNode, focusOffset = selection.focusOffset, currentRange = selection.getRangeAt(0), isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset), rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length, tempRange = currentRange.cloneRange();
        tempRange.selectNodeContents(node);
        tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);
        var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset), start = isTempRangeCollapsed ? 0 : tempRange.toString().length, end = start + rangeLength, detectionRange = document.createRange();
        detectionRange.setStart(anchorNode, anchorOffset);
        detectionRange.setEnd(focusNode, focusOffset);
        var isBackward = detectionRange.collapsed;
        detectionRange.detach();
        return {
            start: isBackward ? end : start,
            end: isBackward ? start : end
        };
    }
    function setIEOffsets(node, offsets) {
        var start, end, range = document.selection.createRange().duplicate();
        if ("undefined" == typeof offsets.end) {
            start = offsets.start;
            end = start;
        } else if (offsets.start > offsets.end) {
            start = offsets.end;
            end = offsets.start;
        } else {
            start = offsets.start;
            end = offsets.end;
        }
        range.moveToElementText(node);
        range.moveStart("character", start);
        range.setEndPoint("EndToStart", range);
        range.moveEnd("character", end - start);
        range.select();
    }
    function setModernOffsets(node, offsets) {
        var selection = window.getSelection(), length = node[getTextContentAccessor()].length, start = Math.min(offsets.start, length), end = "undefined" == typeof offsets.end ? start : Math.min(offsets.end, length);
        if (!selection.extend && start > end) {
            var temp = end;
            end = start;
            start = temp;
        }
        var startMarker = getNodeForCharacterOffset(node, start), endMarker = getNodeForCharacterOffset(node, end);
        if (startMarker && endMarker) {
            var range = document.createRange();
            range.setStart(startMarker.node, startMarker.offset);
            selection.removeAllRanges();
            if (start > end) {
                selection.addRange(range);
                selection.extend(endMarker.node, endMarker.offset);
            } else {
                range.setEnd(endMarker.node, endMarker.offset);
                selection.addRange(range);
            }
            range.detach();
        }
    }
    var ExecutionEnvironment = __webpack_require__(26), getNodeForCharacterOffset = __webpack_require__(656), getTextContentAccessor = __webpack_require__(198), useIEOffsets = ExecutionEnvironment.canUseDOM && document.selection, ReactDOMSelection = {
        getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,
        setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets
    };
    module.exports = ReactDOMSelection;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var AutoFocusMixin = __webpack_require__(143), DOMPropertyOperations = __webpack_require__(97), LinkedValueUtils = __webpack_require__(189), ReactBrowserComponentMixin = __webpack_require__(47), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), invariant = __webpack_require__(5), merge = __webpack_require__(37), warning = __webpack_require__(53), textarea = ReactDOM.textarea, ReactDOMTextarea = ReactCompositeComponent.createClass({
        displayName: "ReactDOMTextarea",
        mixins: [ AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin ],
        getInitialState: function() {
            var defaultValue = this.props.defaultValue, children = this.props.children;
            if (null != children) {
                if (!0) warning(!1, "Use the `defaultValue` or `value` props instead of setting children on <textarea>.");
                !0 ? invariant(null == defaultValue, "If you supply `defaultValue` on a <textarea>, do not pass children.") : invariant(null == defaultValue);
                if (Array.isArray(children)) {
                    !0 ? invariant(children.length <= 1, "<textarea> can only have at most one child.") : invariant(children.length <= 1);
                    children = children[0];
                }
                defaultValue = "" + children;
            }
            if (null == defaultValue) defaultValue = "";
            var value = LinkedValueUtils.getValue(this);
            return {
                initialValue: "" + (null != value ? value : defaultValue)
            };
        },
        shouldComponentUpdate: function() {
            return !this._isChanging;
        },
        render: function() {
            var props = merge(this.props);
            !0 ? invariant(null == props.dangerouslySetInnerHTML, "`dangerouslySetInnerHTML` does not make sense on <textarea>.") : invariant(null == props.dangerouslySetInnerHTML);
            props.defaultValue = null;
            props.value = null;
            props.onChange = this._handleChange;
            return textarea(props, this.state.initialValue);
        },
        componentDidUpdate: function(prevProps, prevState, prevContext) {
            var value = LinkedValueUtils.getValue(this);
            if (null != value) {
                var rootNode = this.getDOMNode();
                DOMPropertyOperations.setValueForProperty(rootNode, "value", "" + value);
            }
        },
        _handleChange: function(event) {
            var returnValue, onChange = LinkedValueUtils.getOnChange(this);
            if (onChange) {
                this._isChanging = !0;
                returnValue = onChange.call(this, event);
                this._isChanging = !1;
            }
            this.setState({
                value: event.target.value
            });
            return returnValue;
        }
    });
    module.exports = ReactDOMTextarea;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function ReactDefaultBatchingStrategyTransaction() {
        this.reinitializeTransaction();
    }
    var ReactUpdates = __webpack_require__(103), Transaction = __webpack_require__(145), emptyFunction = __webpack_require__(63), mixInto = __webpack_require__(52), RESET_BATCHED_UPDATES = {
        initialize: emptyFunction,
        close: function() {
            ReactDefaultBatchingStrategy.isBatchingUpdates = !1;
        }
    }, FLUSH_BATCHED_UPDATES = {
        initialize: emptyFunction,
        close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
    }, TRANSACTION_WRAPPERS = [ FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES ];
    mixInto(ReactDefaultBatchingStrategyTransaction, Transaction.Mixin);
    mixInto(ReactDefaultBatchingStrategyTransaction, {
        getTransactionWrappers: function() {
            return TRANSACTION_WRAPPERS;
        }
    });
    var transaction = new ReactDefaultBatchingStrategyTransaction(), ReactDefaultBatchingStrategy = {
        isBatchingUpdates: !1,
        batchedUpdates: function(callback, a, b) {
            var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
            ReactDefaultBatchingStrategy.isBatchingUpdates = !0;
            if (alreadyBatchingUpdates) callback(a, b); else transaction.perform(callback, null, a, b);
        }
    };
    module.exports = ReactDefaultBatchingStrategy;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function inject() {
        ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
        ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);
        ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);
        ReactInjection.EventPluginHub.injectMount(ReactMount);
        ReactInjection.EventPluginHub.injectEventPluginsByName({
            SimpleEventPlugin: SimpleEventPlugin,
            EnterLeaveEventPlugin: EnterLeaveEventPlugin,
            ChangeEventPlugin: ChangeEventPlugin,
            CompositionEventPlugin: CompositionEventPlugin,
            MobileSafariClickEventPlugin: MobileSafariClickEventPlugin,
            SelectEventPlugin: SelectEventPlugin,
            BeforeInputEventPlugin: BeforeInputEventPlugin
        });
        ReactInjection.DOM.injectComponentClasses({
            button: ReactDOMButton,
            form: ReactDOMForm,
            img: ReactDOMImg,
            input: ReactDOMInput,
            option: ReactDOMOption,
            select: ReactDOMSelect,
            textarea: ReactDOMTextarea,
            html: createFullPageComponent(ReactDOM.html),
            head: createFullPageComponent(ReactDOM.head),
            body: createFullPageComponent(ReactDOM.body)
        });
        ReactInjection.CompositeComponent.injectMixin(ReactBrowserComponentMixin);
        ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
        ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
        ReactInjection.EmptyComponent.injectEmptyComponent(ReactDOM.noscript);
        ReactInjection.Updates.injectReconcileTransaction(ReactComponentBrowserEnvironment.ReactReconcileTransaction);
        ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
        ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);
        ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
        if (!0) {
            if (/[?&]react_perf\b/.test(ExecutionEnvironment.canUseDOM && window.location.href || "")) {
                __webpack_require__(625).start();
            }
        }
    }
    var BeforeInputEventPlugin = __webpack_require__(600), ChangeEventPlugin = __webpack_require__(601), ClientReactRootIndex = __webpack_require__(602), CompositionEventPlugin = __webpack_require__(603), DefaultEventPluginOrder = __webpack_require__(606), EnterLeaveEventPlugin = __webpack_require__(607), ExecutionEnvironment = __webpack_require__(26), HTMLDOMPropertyConfig = __webpack_require__(609), MobileSafariClickEventPlugin = __webpack_require__(610), ReactBrowserComponentMixin = __webpack_require__(47), ReactComponentBrowserEnvironment = __webpack_require__(613), ReactDefaultBatchingStrategy = __webpack_require__(623), ReactDOM = __webpack_require__(49), ReactDOMButton = __webpack_require__(614), ReactDOMForm = __webpack_require__(615), ReactDOMImg = __webpack_require__(617), ReactDOMInput = __webpack_require__(618), ReactDOMOption = __webpack_require__(619), ReactDOMSelect = __webpack_require__(620), ReactDOMTextarea = __webpack_require__(622), ReactEventListener = __webpack_require__(629), ReactInjection = __webpack_require__(630), ReactInstanceHandles = __webpack_require__(102), ReactMount = __webpack_require__(51), SelectEventPlugin = __webpack_require__(636), ServerReactRootIndex = __webpack_require__(637), SimpleEventPlugin = __webpack_require__(638), SVGDOMPropertyConfig = __webpack_require__(635), createFullPageComponent = __webpack_require__(650);
    module.exports = {
        inject: inject
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function roundFloat(val) {
        return Math.floor(100 * val) / 100;
    }
    function addValue(obj, key, val) {
        obj[key] = (obj[key] || 0) + val;
    }
    var DOMProperty = __webpack_require__(83), ReactDefaultPerfAnalysis = __webpack_require__(626), ReactMount = __webpack_require__(51), ReactPerf = __webpack_require__(62), performanceNow = __webpack_require__(665), ReactDefaultPerf = {
        _allMeasurements: [],
        _mountStack: [ 0 ],
        _injected: !1,
        start: function() {
            if (!ReactDefaultPerf._injected) ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);
            ReactDefaultPerf._allMeasurements.length = 0;
            ReactPerf.enableMeasure = !0;
        },
        stop: function() {
            ReactPerf.enableMeasure = !1;
        },
        getLastMeasurements: function() {
            return ReactDefaultPerf._allMeasurements;
        },
        printExclusive: function(measurements) {
            measurements = measurements || ReactDefaultPerf._allMeasurements;
            var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);
            console.table(summary.map(function(item) {
                return {
                    "Component class name": item.componentName,
                    "Total inclusive time (ms)": roundFloat(item.inclusive),
                    "Exclusive mount time (ms)": roundFloat(item.exclusive),
                    "Exclusive render time (ms)": roundFloat(item.render),
                    "Mount time per instance (ms)": roundFloat(item.exclusive / item.count),
                    "Render time per instance (ms)": roundFloat(item.render / item.count),
                    Instances: item.count
                };
            }));
        },
        printInclusive: function(measurements) {
            measurements = measurements || ReactDefaultPerf._allMeasurements;
            var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);
            console.table(summary.map(function(item) {
                return {
                    "Owner > component": item.componentName,
                    "Inclusive time (ms)": roundFloat(item.time),
                    Instances: item.count
                };
            }));
            console.log("Total time:", ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + " ms");
        },
        printWasted: function(measurements) {
            measurements = measurements || ReactDefaultPerf._allMeasurements;
            var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, !0);
            console.table(summary.map(function(item) {
                return {
                    "Owner > component": item.componentName,
                    "Wasted time (ms)": item.time,
                    Instances: item.count
                };
            }));
            console.log("Total time:", ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + " ms");
        },
        printDOM: function(measurements) {
            measurements = measurements || ReactDefaultPerf._allMeasurements;
            var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);
            console.table(summary.map(function(item) {
                var result = {};
                result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
                result.type = item.type;
                result.args = JSON.stringify(item.args);
                return result;
            }));
            console.log("Total time:", ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + " ms");
        },
        _recordWrite: function(id, fnName, totalTime, args) {
            var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;
            writes[id] = writes[id] || [];
            writes[id].push({
                type: fnName,
                time: totalTime,
                args: args
            });
        },
        measure: function(moduleName, fnName, func) {
            return function() {
                var totalTime, rv, start, args = Array.prototype.slice.call(arguments, 0);
                if ("_renderNewRootComponent" === fnName || "flushBatchedUpdates" === fnName) {
                    ReactDefaultPerf._allMeasurements.push({
                        exclusive: {},
                        inclusive: {},
                        render: {},
                        counts: {},
                        writes: {},
                        displayNames: {},
                        totalTime: 0
                    });
                    start = performanceNow();
                    rv = func.apply(this, args);
                    ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;
                    return rv;
                } else if ("ReactDOMIDOperations" === moduleName || "ReactComponentBrowserEnvironment" === moduleName) {
                    start = performanceNow();
                    rv = func.apply(this, args);
                    totalTime = performanceNow() - start;
                    if ("mountImageIntoNode" === fnName) {
                        var mountID = ReactMount.getID(args[1]);
                        ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);
                    } else if ("dangerouslyProcessChildrenUpdates" === fnName) args[0].forEach(function(update) {
                        var writeArgs = {};
                        if (null !== update.fromIndex) writeArgs.fromIndex = update.fromIndex;
                        if (null !== update.toIndex) writeArgs.toIndex = update.toIndex;
                        if (null !== update.textContent) writeArgs.textContent = update.textContent;
                        if (null !== update.markupIndex) writeArgs.markup = args[1][update.markupIndex];
                        ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);
                    }); else ReactDefaultPerf._recordWrite(args[0], fnName, totalTime, Array.prototype.slice.call(args, 1));
                    return rv;
                } else if ("ReactCompositeComponent" === moduleName && ("mountComponent" === fnName || "updateComponent" === fnName || "_renderValidatedComponent" === fnName)) {
                    var rootNodeID = "mountComponent" === fnName ? args[0] : this._rootNodeID, isRender = "_renderValidatedComponent" === fnName, isMount = "mountComponent" === fnName, mountStack = ReactDefaultPerf._mountStack, entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];
                    if (isRender) addValue(entry.counts, rootNodeID, 1); else if (isMount) mountStack.push(0);
                    start = performanceNow();
                    rv = func.apply(this, args);
                    totalTime = performanceNow() - start;
                    if (isRender) addValue(entry.render, rootNodeID, totalTime); else if (isMount) {
                        var subMountTime = mountStack.pop();
                        mountStack[mountStack.length - 1] += totalTime;
                        addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);
                        addValue(entry.inclusive, rootNodeID, totalTime);
                    } else addValue(entry.inclusive, rootNodeID, totalTime);
                    entry.displayNames[rootNodeID] = {
                        current: this.constructor.displayName,
                        owner: this._owner ? this._owner.constructor.displayName : "<root>"
                    };
                    return rv;
                } else return func.apply(this, args);
            };
        }
    };
    module.exports = ReactDefaultPerf;
}, function(module, exports, __webpack_require__) {
    function getTotalTime(measurements) {
        for (var totalTime = 0, i = 0; i < measurements.length; i++) {
            totalTime += measurements[i].totalTime;
        }
        return totalTime;
    }
    function getDOMSummary(measurements) {
        for (var items = [], i = 0; i < measurements.length; i++) {
            var id, measurement = measurements[i];
            for (id in measurement.writes) measurement.writes[id].forEach(function(write) {
                items.push({
                    id: id,
                    type: DOM_OPERATION_TYPES[write.type] || write.type,
                    args: write.args
                });
            });
        }
        return items;
    }
    function getExclusiveSummary(measurements) {
        for (var displayName, candidates = {}, i = 0; i < measurements.length; i++) {
            var measurement = measurements[i], allIDs = merge(measurement.exclusive, measurement.inclusive);
            for (var id in allIDs) {
                displayName = measurement.displayNames[id].current;
                candidates[displayName] = candidates[displayName] || {
                    componentName: displayName,
                    inclusive: 0,
                    exclusive: 0,
                    render: 0,
                    count: 0
                };
                if (measurement.render[id]) candidates[displayName].render += measurement.render[id];
                if (measurement.exclusive[id]) candidates[displayName].exclusive += measurement.exclusive[id];
                if (measurement.inclusive[id]) candidates[displayName].inclusive += measurement.inclusive[id];
                if (measurement.counts[id]) candidates[displayName].count += measurement.counts[id];
            }
        }
        var arr = [];
        for (displayName in candidates) if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) arr.push(candidates[displayName]);
        arr.sort(function(a, b) {
            return b.exclusive - a.exclusive;
        });
        return arr;
    }
    function getInclusiveSummary(measurements, onlyClean) {
        for (var inclusiveKey, candidates = {}, i = 0; i < measurements.length; i++) {
            var cleanComponents, measurement = measurements[i], allIDs = merge(measurement.exclusive, measurement.inclusive);
            if (onlyClean) cleanComponents = getUnchangedComponents(measurement);
            for (var id in allIDs) if (!onlyClean || cleanComponents[id]) {
                var displayName = measurement.displayNames[id];
                inclusiveKey = displayName.owner + " > " + displayName.current;
                candidates[inclusiveKey] = candidates[inclusiveKey] || {
                    componentName: inclusiveKey,
                    time: 0,
                    count: 0
                };
                if (measurement.inclusive[id]) candidates[inclusiveKey].time += measurement.inclusive[id];
                if (measurement.counts[id]) candidates[inclusiveKey].count += measurement.counts[id];
            }
        }
        var arr = [];
        for (inclusiveKey in candidates) if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) arr.push(candidates[inclusiveKey]);
        arr.sort(function(a, b) {
            return b.time - a.time;
        });
        return arr;
    }
    function getUnchangedComponents(measurement) {
        var cleanComponents = {}, dirtyLeafIDs = Object.keys(measurement.writes), allIDs = merge(measurement.exclusive, measurement.inclusive);
        for (var id in allIDs) {
            for (var isDirty = !1, i = 0; i < dirtyLeafIDs.length; i++) if (0 === dirtyLeafIDs[i].indexOf(id)) {
                isDirty = !0;
                break;
            }
            if (!isDirty && measurement.counts[id] > 0) cleanComponents[id] = !0;
        }
        return cleanComponents;
    }
    var merge = __webpack_require__(37), DONT_CARE_THRESHOLD = 1.2, DOM_OPERATION_TYPES = {
        mountImageIntoNode: "set innerHTML",
        INSERT_MARKUP: "set innerHTML",
        MOVE_EXISTING: "move",
        REMOVE_NODE: "remove",
        TEXT_CONTENT: "set textContent",
        updatePropertyByID: "update attribute",
        deletePropertyByID: "delete attribute",
        updateStylesByID: "update styles",
        updateInnerHTMLByID: "set innerHTML",
        dangerouslyReplaceNodeWithMarkupByID: "replace"
    }, ReactDefaultPerfAnalysis = {
        getExclusiveSummary: getExclusiveSummary,
        getInclusiveSummary: getInclusiveSummary,
        getDOMSummary: getDOMSummary,
        getTotalTime: getTotalTime
    };
    module.exports = ReactDefaultPerfAnalysis;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var ReactErrorUtils = {
        guard: function(func, name) {
            return func;
        }
    };
    module.exports = ReactErrorUtils;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function runEventQueueInBatch(events) {
        EventPluginHub.enqueueEvents(events);
        EventPluginHub.processEventQueue();
    }
    var EventPluginHub = __webpack_require__(120), ReactEventEmitterMixin = {
        handleTopLevel: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            runEventQueueInBatch(EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent));
        }
    };
    module.exports = ReactEventEmitterMixin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function findParent(node) {
        var nodeID = ReactMount.getID(node), rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID), container = ReactMount.findReactContainerForID(rootID);
        return ReactMount.getFirstReactDOM(container);
    }
    function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
        this.topLevelType = topLevelType;
        this.nativeEvent = nativeEvent;
        this.ancestors = [];
    }
    function handleTopLevelImpl(bookKeeping) {
        for (var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window, ancestor = topLevelTarget; ancestor; ) {
            bookKeeping.ancestors.push(ancestor);
            ancestor = findParent(ancestor);
        }
        for (var i = 0, l = bookKeeping.ancestors.length; i < l; i++) {
            topLevelTarget = bookKeeping.ancestors[i];
            var topLevelTargetID = ReactMount.getID(topLevelTarget) || "";
            ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent);
        }
    }
    function scrollValueMonitor(cb) {
        cb(getUnboundedScrollPosition(window));
    }
    var EventListener = __webpack_require__(608), ExecutionEnvironment = __webpack_require__(26), PooledClass = __webpack_require__(70), ReactInstanceHandles = __webpack_require__(102), ReactMount = __webpack_require__(51), ReactUpdates = __webpack_require__(103), getEventTarget = __webpack_require__(197), getUnboundedScrollPosition = __webpack_require__(296);
    __webpack_require__(52)(TopLevelCallbackBookKeeping, {
        destructor: function() {
            this.topLevelType = null;
            this.nativeEvent = null;
            this.ancestors.length = 0;
        }
    });
    PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);
    var ReactEventListener = {
        _enabled: !0,
        _handleTopLevel: null,
        WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,
        setHandleTopLevel: function(handleTopLevel) {
            ReactEventListener._handleTopLevel = handleTopLevel;
        },
        setEnabled: function(enabled) {
            ReactEventListener._enabled = !!enabled;
        },
        isEnabled: function() {
            return ReactEventListener._enabled;
        },
        trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {
            var element = handle;
            if (element) return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
        },
        trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {
            var element = handle;
            if (element) return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
        },
        monitorScrollValue: function(refresh) {
            var callback = scrollValueMonitor.bind(null, refresh);
            EventListener.listen(window, "scroll", callback);
            EventListener.listen(window, "resize", callback);
        },
        dispatchEvent: function(topLevelType, nativeEvent) {
            if (ReactEventListener._enabled) {
                var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);
                try {
                    ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);
                } finally {
                    TopLevelCallbackBookKeeping.release(bookKeeping);
                }
            }
        }
    };
    module.exports = ReactEventListener;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var DOMProperty = __webpack_require__(83), EventPluginHub = __webpack_require__(120), ReactComponent = __webpack_require__(100), ReactCompositeComponent = __webpack_require__(48), ReactDOM = __webpack_require__(49), ReactEmptyComponent = __webpack_require__(191), ReactBrowserEventEmitter = __webpack_require__(99), ReactPerf = __webpack_require__(62), ReactRootIndex = __webpack_require__(288), ReactUpdates = __webpack_require__(103), ReactInjection = {
        Component: ReactComponent.injection,
        CompositeComponent: ReactCompositeComponent.injection,
        DOMProperty: DOMProperty.injection,
        EmptyComponent: ReactEmptyComponent.injection,
        EventPluginHub: EventPluginHub.injection,
        DOM: ReactDOM.injection,
        EventEmitter: ReactBrowserEventEmitter.injection,
        Perf: ReactPerf.injection,
        RootIndex: ReactRootIndex.injection,
        Updates: ReactUpdates.injection
    };
    module.exports = ReactInjection;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createTransferStrategy(mergeStrategy) {
        return function(props, key, value) {
            if (!props.hasOwnProperty(key)) props[key] = value; else props[key] = mergeStrategy(props[key], value);
        };
    }
    function transferInto(props, newProps) {
        for (var thisKey in newProps) if (newProps.hasOwnProperty(thisKey)) {
            var transferStrategy = TransferStrategies[thisKey];
            if (transferStrategy && TransferStrategies.hasOwnProperty(thisKey)) transferStrategy(props, thisKey, newProps[thisKey]); else if (!props.hasOwnProperty(thisKey)) props[thisKey] = newProps[thisKey];
        }
        return props;
    }
    var emptyFunction = __webpack_require__(63), invariant = __webpack_require__(5), joinClasses = __webpack_require__(661), merge = __webpack_require__(37), transferStrategyMerge = createTransferStrategy(function(a, b) {
        return merge(b, a);
    }), TransferStrategies = {
        children: emptyFunction,
        className: createTransferStrategy(joinClasses),
        key: emptyFunction,
        ref: emptyFunction,
        style: transferStrategyMerge
    }, ReactPropTransferer = {
        TransferStrategies: TransferStrategies,
        mergeProps: function(oldProps, newProps) {
            return transferInto(merge(oldProps), newProps);
        },
        Mixin: {
            transferPropsTo: function(descriptor) {
                !0 ? invariant(descriptor._owner === this, "%s: You can't call transferPropsTo() on a component that you don't own, %s. This usually means you are calling transferPropsTo() on a component passed in as props or children.", this.constructor.displayName, descriptor.type.displayName) : invariant(descriptor._owner === this);
                transferInto(descriptor.props, this.props);
                return descriptor;
            }
        }
    };
    module.exports = ReactPropTransferer;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function ReactReconcileTransaction() {
        this.reinitializeTransaction();
        this.renderToStaticMarkup = !1;
        this.reactMountReady = CallbackQueue.getPooled(null);
        this.putListenerQueue = ReactPutListenerQueue.getPooled();
    }
    var CallbackQueue = __webpack_require__(187), PooledClass = __webpack_require__(70), ReactBrowserEventEmitter = __webpack_require__(99), ReactInputSelection = __webpack_require__(192), ReactPutListenerQueue = __webpack_require__(287), Transaction = __webpack_require__(145), mixInto = __webpack_require__(52), SELECTION_RESTORATION = {
        initialize: ReactInputSelection.getSelectionInformation,
        close: ReactInputSelection.restoreSelection
    }, EVENT_SUPPRESSION = {
        initialize: function() {
            var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();
            ReactBrowserEventEmitter.setEnabled(!1);
            return currentlyEnabled;
        },
        close: function(previouslyEnabled) {
            ReactBrowserEventEmitter.setEnabled(previouslyEnabled);
        }
    }, ON_DOM_READY_QUEUEING = {
        initialize: function() {
            this.reactMountReady.reset();
        },
        close: function() {
            this.reactMountReady.notifyAll();
        }
    }, PUT_LISTENER_QUEUEING = {
        initialize: function() {
            this.putListenerQueue.reset();
        },
        close: function() {
            this.putListenerQueue.putListeners();
        }
    }, TRANSACTION_WRAPPERS = [ PUT_LISTENER_QUEUEING, SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING ], Mixin = {
        getTransactionWrappers: function() {
            return TRANSACTION_WRAPPERS;
        },
        getReactMountReady: function() {
            return this.reactMountReady;
        },
        getPutListenerQueue: function() {
            return this.putListenerQueue;
        },
        destructor: function() {
            CallbackQueue.release(this.reactMountReady);
            this.reactMountReady = null;
            ReactPutListenerQueue.release(this.putListenerQueue);
            this.putListenerQueue = null;
        }
    };
    mixInto(ReactReconcileTransaction, Transaction.Mixin);
    mixInto(ReactReconcileTransaction, Mixin);
    PooledClass.addPoolingTo(ReactReconcileTransaction);
    module.exports = ReactReconcileTransaction;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function renderComponentToString(component) {
        !0 ? invariant(ReactDescriptor.isValidDescriptor(component), "renderComponentToString(): You must pass a valid ReactComponent.") : invariant(ReactDescriptor.isValidDescriptor(component));
        !0 ? invariant(!(2 === arguments.length && "function" == typeof arguments[1]), "renderComponentToString(): This function became synchronous and now returns the generated markup. Please remove the second parameter.") : invariant(!(2 === arguments.length && "function" == typeof arguments[1]));
        var transaction;
        try {
            var id = ReactInstanceHandles.createReactRootID();
            transaction = ReactServerRenderingTransaction.getPooled(!1);
            return transaction.perform(function() {
                var componentInstance = instantiateReactComponent(component), markup = componentInstance.mountComponent(id, transaction, 0);
                return ReactMarkupChecksum.addChecksumToMarkup(markup);
            }, null);
        } finally {
            ReactServerRenderingTransaction.release(transaction);
        }
    }
    function renderComponentToStaticMarkup(component) {
        !0 ? invariant(ReactDescriptor.isValidDescriptor(component), "renderComponentToStaticMarkup(): You must pass a valid ReactComponent.") : invariant(ReactDescriptor.isValidDescriptor(component));
        var transaction;
        try {
            var id = ReactInstanceHandles.createReactRootID();
            transaction = ReactServerRenderingTransaction.getPooled(!0);
            return transaction.perform(function() {
                return instantiateReactComponent(component).mountComponent(id, transaction, 0);
            }, null);
        } finally {
            ReactServerRenderingTransaction.release(transaction);
        }
    }
    var ReactDescriptor = __webpack_require__(50), ReactInstanceHandles = __webpack_require__(102), ReactMarkupChecksum = __webpack_require__(280), ReactServerRenderingTransaction = __webpack_require__(634), instantiateReactComponent = __webpack_require__(146), invariant = __webpack_require__(5);
    module.exports = {
        renderComponentToString: renderComponentToString,
        renderComponentToStaticMarkup: renderComponentToStaticMarkup
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function ReactServerRenderingTransaction(renderToStaticMarkup) {
        this.reinitializeTransaction();
        this.renderToStaticMarkup = renderToStaticMarkup;
        this.reactMountReady = CallbackQueue.getPooled(null);
        this.putListenerQueue = ReactPutListenerQueue.getPooled();
    }
    var PooledClass = __webpack_require__(70), CallbackQueue = __webpack_require__(187), ReactPutListenerQueue = __webpack_require__(287), Transaction = __webpack_require__(145), emptyFunction = __webpack_require__(63), mixInto = __webpack_require__(52), ON_DOM_READY_QUEUEING = {
        initialize: function() {
            this.reactMountReady.reset();
        },
        close: emptyFunction
    }, PUT_LISTENER_QUEUEING = {
        initialize: function() {
            this.putListenerQueue.reset();
        },
        close: emptyFunction
    }, TRANSACTION_WRAPPERS = [ PUT_LISTENER_QUEUEING, ON_DOM_READY_QUEUEING ], Mixin = {
        getTransactionWrappers: function() {
            return TRANSACTION_WRAPPERS;
        },
        getReactMountReady: function() {
            return this.reactMountReady;
        },
        getPutListenerQueue: function() {
            return this.putListenerQueue;
        },
        destructor: function() {
            CallbackQueue.release(this.reactMountReady);
            this.reactMountReady = null;
            ReactPutListenerQueue.release(this.putListenerQueue);
            this.putListenerQueue = null;
        }
    };
    mixInto(ReactServerRenderingTransaction, Transaction.Mixin);
    mixInto(ReactServerRenderingTransaction, Mixin);
    PooledClass.addPoolingTo(ReactServerRenderingTransaction);
    module.exports = ReactServerRenderingTransaction;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var DOMProperty = __webpack_require__(83), MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE, SVGDOMPropertyConfig = {
        Properties: {
            cx: MUST_USE_ATTRIBUTE,
            cy: MUST_USE_ATTRIBUTE,
            d: MUST_USE_ATTRIBUTE,
            dx: MUST_USE_ATTRIBUTE,
            dy: MUST_USE_ATTRIBUTE,
            fill: MUST_USE_ATTRIBUTE,
            fillOpacity: MUST_USE_ATTRIBUTE,
            fontFamily: MUST_USE_ATTRIBUTE,
            fontSize: MUST_USE_ATTRIBUTE,
            fx: MUST_USE_ATTRIBUTE,
            fy: MUST_USE_ATTRIBUTE,
            gradientTransform: MUST_USE_ATTRIBUTE,
            gradientUnits: MUST_USE_ATTRIBUTE,
            markerEnd: MUST_USE_ATTRIBUTE,
            markerMid: MUST_USE_ATTRIBUTE,
            markerStart: MUST_USE_ATTRIBUTE,
            offset: MUST_USE_ATTRIBUTE,
            opacity: MUST_USE_ATTRIBUTE,
            patternContentUnits: MUST_USE_ATTRIBUTE,
            patternUnits: MUST_USE_ATTRIBUTE,
            points: MUST_USE_ATTRIBUTE,
            preserveAspectRatio: MUST_USE_ATTRIBUTE,
            r: MUST_USE_ATTRIBUTE,
            rx: MUST_USE_ATTRIBUTE,
            ry: MUST_USE_ATTRIBUTE,
            spreadMethod: MUST_USE_ATTRIBUTE,
            stopColor: MUST_USE_ATTRIBUTE,
            stopOpacity: MUST_USE_ATTRIBUTE,
            stroke: MUST_USE_ATTRIBUTE,
            strokeDasharray: MUST_USE_ATTRIBUTE,
            strokeLinecap: MUST_USE_ATTRIBUTE,
            strokeOpacity: MUST_USE_ATTRIBUTE,
            strokeWidth: MUST_USE_ATTRIBUTE,
            textAnchor: MUST_USE_ATTRIBUTE,
            transform: MUST_USE_ATTRIBUTE,
            version: MUST_USE_ATTRIBUTE,
            viewBox: MUST_USE_ATTRIBUTE,
            x1: MUST_USE_ATTRIBUTE,
            x2: MUST_USE_ATTRIBUTE,
            x: MUST_USE_ATTRIBUTE,
            y1: MUST_USE_ATTRIBUTE,
            y2: MUST_USE_ATTRIBUTE,
            y: MUST_USE_ATTRIBUTE
        },
        DOMAttributeNames: {
            fillOpacity: "fill-opacity",
            fontFamily: "font-family",
            fontSize: "font-size",
            gradientTransform: "gradientTransform",
            gradientUnits: "gradientUnits",
            markerEnd: "marker-end",
            markerMid: "marker-mid",
            markerStart: "marker-start",
            patternContentUnits: "patternContentUnits",
            patternUnits: "patternUnits",
            preserveAspectRatio: "preserveAspectRatio",
            spreadMethod: "spreadMethod",
            stopColor: "stop-color",
            stopOpacity: "stop-opacity",
            strokeDasharray: "stroke-dasharray",
            strokeLinecap: "stroke-linecap",
            strokeOpacity: "stroke-opacity",
            strokeWidth: "stroke-width",
            textAnchor: "text-anchor",
            viewBox: "viewBox"
        }
    };
    module.exports = SVGDOMPropertyConfig;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getSelection(node) {
        if ("selectionStart" in node && ReactInputSelection.hasSelectionCapabilities(node)) return {
            start: node.selectionStart,
            end: node.selectionEnd
        }; else if (document.selection) {
            var range = document.selection.createRange();
            return {
                parentElement: range.parentElement(),
                text: range.text,
                top: range.boundingTop,
                left: range.boundingLeft
            };
        } else {
            var selection = window.getSelection();
            return {
                anchorNode: selection.anchorNode,
                anchorOffset: selection.anchorOffset,
                focusNode: selection.focusNode,
                focusOffset: selection.focusOffset
            };
        }
    }
    function constructSelectEvent(nativeEvent) {
        if (!mouseDown && null != activeElement && activeElement == getActiveElement()) {
            var currentSelection = getSelection(activeElement);
            if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
                lastSelection = currentSelection;
                var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent);
                syntheticEvent.type = "select";
                syntheticEvent.target = activeElement;
                EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);
                return syntheticEvent;
            }
        }
    }
    var EventConstants = __webpack_require__(36), EventPropagators = __webpack_require__(98), ReactInputSelection = __webpack_require__(192), SyntheticEvent = __webpack_require__(84), getActiveElement = __webpack_require__(293), isTextInputElement = __webpack_require__(297), keyOf = __webpack_require__(71), shallowEqual = __webpack_require__(301), topLevelTypes = EventConstants.topLevelTypes, eventTypes = {
        select: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onSelect: null
                }),
                captured: keyOf({
                    onSelectCapture: null
                })
            },
            dependencies: [ topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange ]
        }
    }, activeElement = null, activeElementID = null, lastSelection = null, mouseDown = !1, SelectEventPlugin = {
        eventTypes: eventTypes,
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            switch (topLevelType) {
              case topLevelTypes.topFocus:
                if (isTextInputElement(topLevelTarget) || "true" === topLevelTarget.contentEditable) {
                    activeElement = topLevelTarget;
                    activeElementID = topLevelTargetID;
                    lastSelection = null;
                }
                break;

              case topLevelTypes.topBlur:
                activeElement = null;
                activeElementID = null;
                lastSelection = null;
                break;

              case topLevelTypes.topMouseDown:
                mouseDown = !0;
                break;

              case topLevelTypes.topContextMenu:
              case topLevelTypes.topMouseUp:
                mouseDown = !1;
                return constructSelectEvent(nativeEvent);

              case topLevelTypes.topSelectionChange:
              case topLevelTypes.topKeyDown:
              case topLevelTypes.topKeyUp:
                return constructSelectEvent(nativeEvent);
            }
        }
    };
    module.exports = SelectEventPlugin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53), ServerReactRootIndex = {
        createReactRootIndex: function() {
            return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);
        }
    };
    module.exports = ServerReactRootIndex;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var EventConstants = __webpack_require__(36), EventPluginUtils = __webpack_require__(188), EventPropagators = __webpack_require__(98), SyntheticClipboardEvent = __webpack_require__(639), SyntheticEvent = __webpack_require__(84), SyntheticFocusEvent = __webpack_require__(642), SyntheticKeyboardEvent = __webpack_require__(644), SyntheticMouseEvent = __webpack_require__(144), SyntheticDragEvent = __webpack_require__(641), SyntheticTouchEvent = __webpack_require__(645), SyntheticUIEvent = __webpack_require__(121), SyntheticWheelEvent = __webpack_require__(646), invariant = __webpack_require__(5), keyOf = __webpack_require__(71), topLevelTypes = EventConstants.topLevelTypes, eventTypes = {
        blur: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onBlur: !0
                }),
                captured: keyOf({
                    onBlurCapture: !0
                })
            }
        },
        click: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onClick: !0
                }),
                captured: keyOf({
                    onClickCapture: !0
                })
            }
        },
        contextMenu: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onContextMenu: !0
                }),
                captured: keyOf({
                    onContextMenuCapture: !0
                })
            }
        },
        copy: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onCopy: !0
                }),
                captured: keyOf({
                    onCopyCapture: !0
                })
            }
        },
        cut: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onCut: !0
                }),
                captured: keyOf({
                    onCutCapture: !0
                })
            }
        },
        doubleClick: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDoubleClick: !0
                }),
                captured: keyOf({
                    onDoubleClickCapture: !0
                })
            }
        },
        drag: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDrag: !0
                }),
                captured: keyOf({
                    onDragCapture: !0
                })
            }
        },
        dragEnd: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDragEnd: !0
                }),
                captured: keyOf({
                    onDragEndCapture: !0
                })
            }
        },
        dragEnter: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDragEnter: !0
                }),
                captured: keyOf({
                    onDragEnterCapture: !0
                })
            }
        },
        dragExit: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDragExit: !0
                }),
                captured: keyOf({
                    onDragExitCapture: !0
                })
            }
        },
        dragLeave: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDragLeave: !0
                }),
                captured: keyOf({
                    onDragLeaveCapture: !0
                })
            }
        },
        dragOver: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDragOver: !0
                }),
                captured: keyOf({
                    onDragOverCapture: !0
                })
            }
        },
        dragStart: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDragStart: !0
                }),
                captured: keyOf({
                    onDragStartCapture: !0
                })
            }
        },
        drop: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onDrop: !0
                }),
                captured: keyOf({
                    onDropCapture: !0
                })
            }
        },
        focus: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onFocus: !0
                }),
                captured: keyOf({
                    onFocusCapture: !0
                })
            }
        },
        input: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onInput: !0
                }),
                captured: keyOf({
                    onInputCapture: !0
                })
            }
        },
        keyDown: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onKeyDown: !0
                }),
                captured: keyOf({
                    onKeyDownCapture: !0
                })
            }
        },
        keyPress: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onKeyPress: !0
                }),
                captured: keyOf({
                    onKeyPressCapture: !0
                })
            }
        },
        keyUp: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onKeyUp: !0
                }),
                captured: keyOf({
                    onKeyUpCapture: !0
                })
            }
        },
        load: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onLoad: !0
                }),
                captured: keyOf({
                    onLoadCapture: !0
                })
            }
        },
        error: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onError: !0
                }),
                captured: keyOf({
                    onErrorCapture: !0
                })
            }
        },
        mouseDown: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onMouseDown: !0
                }),
                captured: keyOf({
                    onMouseDownCapture: !0
                })
            }
        },
        mouseMove: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onMouseMove: !0
                }),
                captured: keyOf({
                    onMouseMoveCapture: !0
                })
            }
        },
        mouseOut: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onMouseOut: !0
                }),
                captured: keyOf({
                    onMouseOutCapture: !0
                })
            }
        },
        mouseOver: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onMouseOver: !0
                }),
                captured: keyOf({
                    onMouseOverCapture: !0
                })
            }
        },
        mouseUp: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onMouseUp: !0
                }),
                captured: keyOf({
                    onMouseUpCapture: !0
                })
            }
        },
        paste: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onPaste: !0
                }),
                captured: keyOf({
                    onPasteCapture: !0
                })
            }
        },
        reset: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onReset: !0
                }),
                captured: keyOf({
                    onResetCapture: !0
                })
            }
        },
        scroll: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onScroll: !0
                }),
                captured: keyOf({
                    onScrollCapture: !0
                })
            }
        },
        submit: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onSubmit: !0
                }),
                captured: keyOf({
                    onSubmitCapture: !0
                })
            }
        },
        touchCancel: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onTouchCancel: !0
                }),
                captured: keyOf({
                    onTouchCancelCapture: !0
                })
            }
        },
        touchEnd: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onTouchEnd: !0
                }),
                captured: keyOf({
                    onTouchEndCapture: !0
                })
            }
        },
        touchMove: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onTouchMove: !0
                }),
                captured: keyOf({
                    onTouchMoveCapture: !0
                })
            }
        },
        touchStart: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onTouchStart: !0
                }),
                captured: keyOf({
                    onTouchStartCapture: !0
                })
            }
        },
        wheel: {
            phasedRegistrationNames: {
                bubbled: keyOf({
                    onWheel: !0
                }),
                captured: keyOf({
                    onWheelCapture: !0
                })
            }
        }
    }, topLevelEventsToDispatchConfig = {
        topBlur: eventTypes.blur,
        topClick: eventTypes.click,
        topContextMenu: eventTypes.contextMenu,
        topCopy: eventTypes.copy,
        topCut: eventTypes.cut,
        topDoubleClick: eventTypes.doubleClick,
        topDrag: eventTypes.drag,
        topDragEnd: eventTypes.dragEnd,
        topDragEnter: eventTypes.dragEnter,
        topDragExit: eventTypes.dragExit,
        topDragLeave: eventTypes.dragLeave,
        topDragOver: eventTypes.dragOver,
        topDragStart: eventTypes.dragStart,
        topDrop: eventTypes.drop,
        topError: eventTypes.error,
        topFocus: eventTypes.focus,
        topInput: eventTypes.input,
        topKeyDown: eventTypes.keyDown,
        topKeyPress: eventTypes.keyPress,
        topKeyUp: eventTypes.keyUp,
        topLoad: eventTypes.load,
        topMouseDown: eventTypes.mouseDown,
        topMouseMove: eventTypes.mouseMove,
        topMouseOut: eventTypes.mouseOut,
        topMouseOver: eventTypes.mouseOver,
        topMouseUp: eventTypes.mouseUp,
        topPaste: eventTypes.paste,
        topReset: eventTypes.reset,
        topScroll: eventTypes.scroll,
        topSubmit: eventTypes.submit,
        topTouchCancel: eventTypes.touchCancel,
        topTouchEnd: eventTypes.touchEnd,
        topTouchMove: eventTypes.touchMove,
        topTouchStart: eventTypes.touchStart,
        topWheel: eventTypes.wheel
    };
    for (var topLevelType in topLevelEventsToDispatchConfig) topLevelEventsToDispatchConfig[topLevelType].dependencies = [ topLevelType ];
    var SimpleEventPlugin = {
        eventTypes: eventTypes,
        executeDispatch: function(event, listener, domID) {
            if (!1 === EventPluginUtils.executeDispatch(event, listener, domID)) {
                event.stopPropagation();
                event.preventDefault();
            }
        },
        extractEvents: function(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
            var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];
            if (!dispatchConfig) return null;
            var EventConstructor;
            switch (topLevelType) {
              case topLevelTypes.topInput:
              case topLevelTypes.topLoad:
              case topLevelTypes.topError:
              case topLevelTypes.topReset:
              case topLevelTypes.topSubmit:
                EventConstructor = SyntheticEvent;
                break;

              case topLevelTypes.topKeyPress:
                if (0 === nativeEvent.charCode) return null;

              case topLevelTypes.topKeyDown:
              case topLevelTypes.topKeyUp:
                EventConstructor = SyntheticKeyboardEvent;
                break;

              case topLevelTypes.topBlur:
              case topLevelTypes.topFocus:
                EventConstructor = SyntheticFocusEvent;
                break;

              case topLevelTypes.topClick:
                if (2 === nativeEvent.button) return null;

              case topLevelTypes.topContextMenu:
              case topLevelTypes.topDoubleClick:
              case topLevelTypes.topMouseDown:
              case topLevelTypes.topMouseMove:
              case topLevelTypes.topMouseOut:
              case topLevelTypes.topMouseOver:
              case topLevelTypes.topMouseUp:
                EventConstructor = SyntheticMouseEvent;
                break;

              case topLevelTypes.topDrag:
              case topLevelTypes.topDragEnd:
              case topLevelTypes.topDragEnter:
              case topLevelTypes.topDragExit:
              case topLevelTypes.topDragLeave:
              case topLevelTypes.topDragOver:
              case topLevelTypes.topDragStart:
              case topLevelTypes.topDrop:
                EventConstructor = SyntheticDragEvent;
                break;

              case topLevelTypes.topTouchCancel:
              case topLevelTypes.topTouchEnd:
              case topLevelTypes.topTouchMove:
              case topLevelTypes.topTouchStart:
                EventConstructor = SyntheticTouchEvent;
                break;

              case topLevelTypes.topScroll:
                EventConstructor = SyntheticUIEvent;
                break;

              case topLevelTypes.topWheel:
                EventConstructor = SyntheticWheelEvent;
                break;

              case topLevelTypes.topCopy:
              case topLevelTypes.topCut:
              case topLevelTypes.topPaste:
                EventConstructor = SyntheticClipboardEvent;
            }
            !0 ? invariant(EventConstructor, "SimpleEventPlugin: Unhandled event type, `%s`.", topLevelType) : invariant(EventConstructor);
            var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent);
            EventPropagators.accumulateTwoPhaseDispatches(event);
            return event;
        }
    };
    module.exports = SimpleEventPlugin;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticEvent = __webpack_require__(84), ClipboardEventInterface = {
        clipboardData: function(event) {
            return "clipboardData" in event ? event.clipboardData : window.clipboardData;
        }
    };
    SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
    module.exports = SyntheticClipboardEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticEvent = __webpack_require__(84), CompositionEventInterface = {
        data: null
    };
    SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);
    module.exports = SyntheticCompositionEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticMouseEvent = __webpack_require__(144), DragEventInterface = {
        dataTransfer: null
    };
    SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
    module.exports = SyntheticDragEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticUIEvent = __webpack_require__(121), FocusEventInterface = {
        relatedTarget: null
    };
    SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
    module.exports = SyntheticFocusEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticEvent = __webpack_require__(84), InputEventInterface = {
        data: null
    };
    SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);
    module.exports = SyntheticInputEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticUIEvent = __webpack_require__(121), getEventKey = __webpack_require__(655), getEventModifierState = __webpack_require__(196), KeyboardEventInterface = {
        key: getEventKey,
        location: null,
        ctrlKey: null,
        shiftKey: null,
        altKey: null,
        metaKey: null,
        repeat: null,
        locale: null,
        getModifierState: getEventModifierState,
        charCode: function(event) {
            if ("keypress" === event.type) return "charCode" in event ? event.charCode : event.keyCode; else return 0;
        },
        keyCode: function(event) {
            if ("keydown" === event.type || "keyup" === event.type) return event.keyCode; else return 0;
        },
        which: function(event) {
            return event.keyCode || event.charCode;
        }
    };
    SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
    module.exports = SyntheticKeyboardEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticUIEvent = __webpack_require__(121), getEventModifierState = __webpack_require__(196), TouchEventInterface = {
        touches: null,
        targetTouches: null,
        changedTouches: null,
        altKey: null,
        metaKey: null,
        ctrlKey: null,
        shiftKey: null,
        getModifierState: getEventModifierState
    };
    SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
    module.exports = SyntheticTouchEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent) {
        SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
    }
    var SyntheticMouseEvent = __webpack_require__(144), WheelEventInterface = {
        deltaX: function(event) {
            return "deltaX" in event ? event.deltaX : "wheelDeltaX" in event ? -event.wheelDeltaX : 0;
        },
        deltaY: function(event) {
            return "deltaY" in event ? event.deltaY : "wheelDeltaY" in event ? -event.wheelDeltaY : "wheelDelta" in event ? -event.wheelDelta : 0;
        },
        deltaZ: null,
        deltaMode: null
    };
    SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
    module.exports = SyntheticWheelEvent;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function adler32(data) {
        for (var a = 1, b = 0, i = 0; i < data.length; i++) {
            a = (a + data.charCodeAt(i)) % MOD;
            b = (b + a) % MOD;
        }
        return a | b << 16;
    }
    var MOD = 65521;
    module.exports = adler32;
}, function(module, exports, __webpack_require__) {
    function copyProperties(obj, a, b, c, d, e, f) {
        obj = obj || {};
        if (!0) if (f) throw new Error("Too many arguments passed to copyProperties");
        for (var v, args = [ a, b, c, d, e ], ii = 0; args[ii]; ) {
            v = args[ii++];
            for (var k in v) obj[k] = v[k];
            if (v.hasOwnProperty && v.hasOwnProperty("toString") && "undefined" != typeof v.toString && obj.toString !== v.toString) obj.toString = v.toString;
        }
        return obj;
    }
    module.exports = copyProperties;
}, function(module, exports, __webpack_require__) {
    function hasArrayNature(obj) {
        return !!obj && ("object" == typeof obj || "function" == typeof obj) && "length" in obj && !("setInterval" in obj) && "number" != typeof obj.nodeType && (Array.isArray(obj) || "callee" in obj || "item" in obj);
    }
    function createArrayFrom(obj) {
        if (!hasArrayNature(obj)) return [ obj ]; else if (Array.isArray(obj)) return obj.slice(); else return toArray(obj);
    }
    var toArray = __webpack_require__(666);
    module.exports = createArrayFrom;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createFullPageComponent(componentClass) {
        return ReactCompositeComponent.createClass({
            displayName: "ReactFullPageComponent" + (componentClass.type.displayName || ""),
            componentWillUnmount: function() {
                !0 ? invariant(!1, "%s tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.", this.constructor.displayName) : invariant(!1);
            },
            render: function() {
                return this.transferPropsTo(componentClass(null, this.props.children));
            }
        });
    }
    var ReactCompositeComponent = __webpack_require__(48), invariant = __webpack_require__(5);
    module.exports = createFullPageComponent;
}, function(module, exports, __webpack_require__) {
    function getNodeName(markup) {
        var nodeNameMatch = markup.match(nodeNamePattern);
        return nodeNameMatch && nodeNameMatch[1].toLowerCase();
    }
    function createNodesFromMarkup(markup, handleScript) {
        var node = dummyNode;
        !0 ? invariant(!!dummyNode, "createNodesFromMarkup dummy not initialized") : invariant(!!dummyNode);
        var nodeName = getNodeName(markup), wrap = nodeName && getMarkupWrap(nodeName);
        if (wrap) {
            node.innerHTML = wrap[1] + markup + wrap[2];
            for (var wrapDepth = wrap[0]; wrapDepth--; ) node = node.lastChild;
        } else node.innerHTML = markup;
        var scripts = node.getElementsByTagName("script");
        if (scripts.length) {
            !0 ? invariant(handleScript, "createNodesFromMarkup(...): Unexpected <script> element rendered.") : invariant(handleScript);
            createArrayFrom(scripts).forEach(handleScript);
        }
        for (var nodes = createArrayFrom(node.childNodes); node.lastChild; ) node.removeChild(node.lastChild);
        return nodes;
    }
    var ExecutionEnvironment = __webpack_require__(26), createArrayFrom = __webpack_require__(649), getMarkupWrap = __webpack_require__(294), invariant = __webpack_require__(5), dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement("div") : null, nodeNamePattern = /^\s*<(\w+)/;
    module.exports = createNodesFromMarkup;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function dangerousStyleValue(name, value) {
        if (null == value || "boolean" == typeof value || "" === value) return "";
        if (isNaN(value) || 0 === value || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) return "" + value;
        if ("string" == typeof value) value = value.trim();
        return value + "px";
    }
    var CSSProperty = __webpack_require__(274), isUnitlessNumber = CSSProperty.isUnitlessNumber;
    module.exports = dangerousStyleValue;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var emptyObject = {};
    if (!0) Object.freeze(emptyObject);
    module.exports = emptyObject;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function flattenSingleChildIntoContext(traverseContext, child, name) {
        var result = traverseContext, keyUnique = !result.hasOwnProperty(name);
        warning(keyUnique, "flattenChildren(...): Encountered two children with the same key, `%s`. Child keys must be unique; when two children share a key, only the first child will be used.", name);
        if (keyUnique && null != child) result[name] = child;
    }
    function flattenChildren(children) {
        if (null == children) return children;
        var result = {};
        traverseAllChildren(children, flattenSingleChildIntoContext, result);
        return result;
    }
    var traverseAllChildren = __webpack_require__(302), warning = __webpack_require__(53);
    module.exports = flattenChildren;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getEventKey(nativeEvent) {
        if (nativeEvent.key) {
            var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
            if ("Unidentified" !== key) return key;
        }
        if ("keypress" === nativeEvent.type) {
            var charCode = "charCode" in nativeEvent ? nativeEvent.charCode : nativeEvent.keyCode;
            return 13 === charCode ? "Enter" : String.fromCharCode(charCode);
        }
        if ("keydown" === nativeEvent.type || "keyup" === nativeEvent.type) return translateToKey[nativeEvent.keyCode] || "Unidentified";
        !0 ? invariant(!1, "Unexpected keyboard event type: %s", nativeEvent.type) : invariant(!1);
    }
    var invariant = __webpack_require__(5), normalizeKey = {
        Esc: "Escape",
        Spacebar: " ",
        Left: "ArrowLeft",
        Up: "ArrowUp",
        Right: "ArrowRight",
        Down: "ArrowDown",
        Del: "Delete",
        Win: "OS",
        Menu: "ContextMenu",
        Apps: "ContextMenu",
        Scroll: "ScrollLock",
        MozPrintableKey: "Unidentified"
    }, translateToKey = {
        8: "Backspace",
        9: "Tab",
        12: "Clear",
        13: "Enter",
        16: "Shift",
        17: "Control",
        18: "Alt",
        19: "Pause",
        20: "CapsLock",
        27: "Escape",
        32: " ",
        33: "PageUp",
        34: "PageDown",
        35: "End",
        36: "Home",
        37: "ArrowLeft",
        38: "ArrowUp",
        39: "ArrowRight",
        40: "ArrowDown",
        45: "Insert",
        46: "Delete",
        112: "F1",
        113: "F2",
        114: "F3",
        115: "F4",
        116: "F5",
        117: "F6",
        118: "F7",
        119: "F8",
        120: "F9",
        121: "F10",
        122: "F11",
        123: "F12",
        144: "NumLock",
        145: "ScrollLock",
        224: "Meta"
    };
    module.exports = getEventKey;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function getLeafNode(node) {
        for (;node && node.firstChild; ) node = node.firstChild;
        return node;
    }
    function getSiblingNode(node) {
        for (;node; ) {
            if (node.nextSibling) return node.nextSibling;
            node = node.parentNode;
        }
    }
    function getNodeForCharacterOffset(root, offset) {
        for (var node = getLeafNode(root), nodeStart = 0, nodeEnd = 0; node; ) {
            if (3 == node.nodeType) {
                nodeEnd = nodeStart + node.textContent.length;
                if (nodeStart <= offset && nodeEnd >= offset) return {
                    node: node,
                    offset: offset - nodeStart
                };
                nodeStart = nodeEnd;
            }
            node = getLeafNode(getSiblingNode(node));
        }
    }
    module.exports = getNodeForCharacterOffset;
}, function(module, exports) {
    function hyphenate(string) {
        return string.replace(_uppercasePattern, "-$1").toLowerCase();
    }
    var _uppercasePattern = /([A-Z])/g;
    module.exports = hyphenate;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function hyphenateStyleName(string) {
        return hyphenate(string).replace(msPattern, "-ms-");
    }
    var hyphenate = __webpack_require__(657), msPattern = /^ms-/;
    module.exports = hyphenateStyleName;
}, function(module, exports) {
    function isNode(object) {
        return !(!object || !("function" == typeof Node ? object instanceof Node : "object" == typeof object && "number" == typeof object.nodeType && "string" == typeof object.nodeName));
    }
    module.exports = isNode;
}, function(module, exports, __webpack_require__) {
    function isTextNode(object) {
        return isNode(object) && 3 == object.nodeType;
    }
    var isNode = __webpack_require__(659);
    module.exports = isTextNode;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function joinClasses(className) {
        if (!className) className = "";
        var nextClass, argLength = arguments.length;
        if (argLength > 1) for (var ii = 1; ii < argLength; ii++) {
            nextClass = arguments[ii];
            nextClass && (className += " " + nextClass);
        }
        return className;
    }
    module.exports = joinClasses;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var invariant = __webpack_require__(5), keyMirror = __webpack_require__(85), isTerminal = function(o) {
        return "object" != typeof o || null === o;
    }, mergeHelpers = {
        MAX_MERGE_DEPTH: 36,
        isTerminal: isTerminal,
        normalizeMergeArg: function(arg) {
            return arg === undefined || null === arg ? {} : arg;
        },
        checkMergeArrayArgs: function(one, two) {
            !0 ? invariant(Array.isArray(one) && Array.isArray(two), "Tried to merge arrays, instead got %s and %s.", one, two) : invariant(Array.isArray(one) && Array.isArray(two));
        },
        checkMergeObjectArgs: function(one, two) {
            mergeHelpers.checkMergeObjectArg(one);
            mergeHelpers.checkMergeObjectArg(two);
        },
        checkMergeObjectArg: function(arg) {
            !0 ? invariant(!isTerminal(arg) && !Array.isArray(arg), "Tried to merge an object, instead got %s.", arg) : invariant(!isTerminal(arg) && !Array.isArray(arg));
        },
        checkMergeIntoObjectArg: function(arg) {
            !0 ? invariant(!(isTerminal(arg) && "function" != typeof arg || Array.isArray(arg)), "Tried to merge into an object, instead got %s.", arg) : invariant(!(isTerminal(arg) && "function" != typeof arg || Array.isArray(arg)));
        },
        checkMergeLevel: function(level) {
            !0 ? invariant(level < 36, "Maximum deep merge depth exceeded. You may be attempting to merge circular structures in an unsupported way.") : invariant(level < 36);
        },
        checkArrayStrategy: function(strategy) {
            !0 ? invariant(strategy === undefined || strategy in mergeHelpers.ArrayStrategies, "You must provide an array strategy to deep merge functions to instruct the deep merge how to resolve merging two arrays.") : invariant(strategy === undefined || strategy in mergeHelpers.ArrayStrategies);
        },
        ArrayStrategies: keyMirror({
            Clobber: !0,
            IndexByIndex: !0
        })
    };
    module.exports = mergeHelpers;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function onlyChild(children) {
        !0 ? invariant(ReactDescriptor.isValidDescriptor(children), "onlyChild must be passed a children with exactly one child.") : invariant(ReactDescriptor.isValidDescriptor(children));
        return children;
    }
    var ReactDescriptor = __webpack_require__(50), invariant = __webpack_require__(5);
    module.exports = onlyChild;
}, function(module, exports, __webpack_require__) {
    "use strict";
    var performance, ExecutionEnvironment = __webpack_require__(26);
    if (ExecutionEnvironment.canUseDOM) performance = window.performance || window.msPerformance || window.webkitPerformance;
    module.exports = performance || {};
}, function(module, exports, __webpack_require__) {
    var performance = __webpack_require__(664);
    if (!performance || !performance.now) performance = Date;
    var performanceNow = performance.now.bind(performance);
    module.exports = performanceNow;
}, function(module, exports, __webpack_require__) {
    function toArray(obj) {
        var length = obj.length;
        !0 ? invariant(!Array.isArray(obj) && ("object" == typeof obj || "function" == typeof obj), "toArray: Array-like object expected") : invariant(!Array.isArray(obj) && ("object" == typeof obj || "function" == typeof obj));
        !0 ? invariant("number" == typeof length, "toArray: Object needs a length property") : invariant("number" == typeof length);
        !0 ? invariant(0 === length || length - 1 in obj, "toArray: Object should have keys for indices") : invariant(0 === length || length - 1 in obj);
        if (obj.hasOwnProperty) try {
            return Array.prototype.slice.call(obj);
        } catch (e) {}
        for (var ret = Array(length), ii = 0; ii < length; ii++) ret[ii] = obj[ii];
        return ret;
    }
    var invariant = __webpack_require__(5);
    module.exports = toArray;
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isPlainObject(obj) {
        if (!obj || "object" != typeof obj) return !1;
        var proto = "function" == typeof obj.constructor ? Object.getPrototypeOf(obj) : Object.prototype;
        if (null === proto) return !0;
        var constructor = proto.constructor;
        return "function" == typeof constructor && constructor instanceof constructor && fnToString(constructor) === fnToString(Object);
    }
    exports.__esModule = !0;
    exports["default"] = isPlainObject;
    var fnToString = function(fn) {
        return Function.prototype.toString.call(fn);
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function shallowEqual(objA, objB) {
        if (objA === objB) return !0;
        var keysA = Object.keys(objA), keysB = Object.keys(objB);
        if (keysA.length !== keysB.length) return !1;
        for (var hasOwn = Object.prototype.hasOwnProperty, i = 0; i < keysA.length; i++) if (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) return !1;
        return !0;
    }
    exports.__esModule = !0;
    exports["default"] = shallowEqual;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function wrapActionCreators(actionCreators) {
        return function(dispatch) {
            return _redux.bindActionCreators(actionCreators, dispatch);
        };
    }
    exports.__esModule = !0;
    exports["default"] = wrapActionCreators;
    var _redux = __webpack_require__(305);
    module.exports = exports["default"];
}, function(module, exports) {
    module.exports = function(arr, fn, initial) {
        for (var idx = 0, len = arr.length, curr = 3 == arguments.length ? initial : arr[idx++]; idx < len; ) curr = fn.call(null, curr, arr[idx], ++idx, arr);
        return curr;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function thunkMiddleware(_ref) {
        var dispatch = _ref.dispatch, getState = _ref.getState;
        return function(next) {
            return function(action) {
                return "function" == typeof action ? action(dispatch, getState) : next(action);
            };
        };
    }
    exports.__esModule = !0;
    exports["default"] = thunkMiddleware;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createStore(reducer, initialState) {
        var store = new _Store2["default"](reducer, initialState);
        return {
            dispatch: store.dispatch.bind(store),
            subscribe: store.subscribe.bind(store),
            getState: store.getState.bind(store),
            getReducer: store.getReducer.bind(store),
            replaceReducer: store.replaceReducer.bind(store)
        };
    }
    exports.__esModule = !0;
    exports["default"] = createStore;
    var _Store = __webpack_require__(304), _Store2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_Store);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function applyMiddleware() {
        for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) middlewares[_key] = arguments[_key];
        return function(next) {
            return function() {
                function dispatch(action) {
                    var methods = {
                        dispatch: dispatch,
                        getState: store.getState
                    };
                    return _compose2["default"](middleware(methods), store.dispatch)(action);
                }
                var store = next.apply(undefined, arguments), middleware = _composeMiddleware2["default"].apply(undefined, middlewares);
                return _extends({}, store, {
                    dispatch: dispatch
                });
            };
        };
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    };
    exports["default"] = applyMiddleware;
    var _compose = __webpack_require__(203), _compose2 = _interopRequireDefault(_compose), _composeMiddleware = __webpack_require__(306), _composeMiddleware2 = _interopRequireDefault(_composeMiddleware);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function bindActionCreators(actionCreators, dispatch) {
        return _utilsMapValues2["default"](actionCreators, function(actionCreator) {
            return function() {
                return dispatch(actionCreator.apply(undefined, arguments));
            };
        });
    }
    exports.__esModule = !0;
    exports["default"] = bindActionCreators;
    var _utilsMapValues = __webpack_require__(307), _utilsMapValues2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_utilsMapValues);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function getErrorMessage(key, action) {
        var actionType = action && action.type;
        return 'Reducer "' + key + '" returned undefined handling ' + (actionType && '"' + actionType + '"' || "an action") + ". To ignore an action, you must explicitly return the previous state.";
    }
    function combineReducers(reducers) {
        var finalReducers = _utilsPick2["default"](reducers, function(val) {
            return "function" == typeof val;
        });
        Object.keys(finalReducers).forEach(function(key) {
            var reducer = finalReducers[key];
            _invariant2["default"](void 0 !== reducer(undefined, {
                type: _Store.ActionTypes.INIT
            }), 'Reducer "' + key + '" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined.');
            var type = Math.random().toString(36).substring(7).split("").join(".");
            _invariant2["default"](void 0 !== reducer(undefined, {
                type: type
            }), 'Reducer "' + key + "\" returned undefined when probed with a random type. Don't try to handle " + _Store.ActionTypes.INIT + ' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined.');
        });
        return function(state, action) {
            if (state === undefined) state = {};
            return _utilsMapValues2["default"](finalReducers, function(reducer, key) {
                var newState = reducer(state[key], action);
                _invariant2["default"](void 0 !== newState, getErrorMessage(key, action));
                return newState;
            });
        };
    }
    exports.__esModule = !0;
    exports["default"] = combineReducers;
    var _utilsMapValues = __webpack_require__(307), _utilsMapValues2 = _interopRequireDefault(_utilsMapValues), _utilsPick = __webpack_require__(677), _utilsPick2 = _interopRequireDefault(_utilsPick), _invariant = __webpack_require__(181), _invariant2 = _interopRequireDefault(_invariant), _Store = __webpack_require__(304);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function isPlainObject(obj) {
        return obj ? "object" == typeof obj && Object.getPrototypeOf(obj) === Object.prototype : !1;
    }
    exports.__esModule = !0;
    exports["default"] = isPlainObject;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function pick(obj, fn) {
        return Object.keys(obj).reduce(function(result, key) {
            if (fn(obj[key])) result[key] = obj[key];
            return result;
        }, {});
    }
    exports.__esModule = !0;
    exports["default"] = pick;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    (function(global) {
        !function(global) {
            "use strict";
            function wrap(innerFn, outerFn, self, tryLocsList) {
                var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []);
                generator._invoke = makeInvokeMethod(innerFn, self, context);
                return generator;
            }
            function tryCatch(fn, obj, arg) {
                try {
                    return {
                        type: "normal",
                        arg: fn.call(obj, arg)
                    };
                } catch (err) {
                    return {
                        type: "throw",
                        arg: err
                    };
                }
            }
            function Generator() {}
            function GeneratorFunction() {}
            function GeneratorFunctionPrototype() {}
            function defineIteratorMethods(prototype) {
                [ "next", "throw", "return" ].forEach(function(method) {
                    prototype[method] = function(arg) {
                        return this._invoke(method, arg);
                    };
                });
            }
            function AsyncIterator(generator) {
                function invoke(method, arg, resolve, reject) {
                    var record = tryCatch(generator[method], generator, arg);
                    if ("throw" === record.type) reject(record.arg); else {
                        var result = record.arg, value = result.value;
                        if (value && "object" == typeof value && hasOwn.call(value, "__await")) return Promise.resolve(value.__await).then(function(value) {
                            invoke("next", value, resolve, reject);
                        }, function(err) {
                            invoke("throw", err, resolve, reject);
                        }); else return Promise.resolve(value).then(function(unwrapped) {
                            result.value = unwrapped;
                            resolve(result);
                        }, reject);
                    }
                }
                function enqueue(method, arg) {
                    function callInvokeWithMethodAndArg() {
                        return new Promise(function(resolve, reject) {
                            invoke(method, arg, resolve, reject);
                        });
                    }
                    return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
                }
                if ("object" == typeof global.process && global.process.domain) invoke = global.process.domain.bind(invoke);
                var previousPromise;
                this._invoke = enqueue;
            }
            function makeInvokeMethod(innerFn, self, context) {
                var state = GenStateSuspendedStart;
                return function(method, arg) {
                    if (state === GenStateExecuting) throw new Error("Generator is already running");
                    if (state === GenStateCompleted) {
                        if ("throw" === method) throw arg;
                        return doneResult();
                    }
                    context.method = method;
                    context.arg = arg;
                    for (;;) {
                        var delegate = context.delegate;
                        if (delegate) {
                            var delegateResult = maybeInvokeDelegate(delegate, context);
                            if (delegateResult) {
                                if (delegateResult === ContinueSentinel) continue;
                                return delegateResult;
                            }
                        }
                        if ("next" === context.method) context.sent = context._sent = context.arg; else if ("throw" === context.method) {
                            if (state === GenStateSuspendedStart) {
                                state = GenStateCompleted;
                                throw context.arg;
                            }
                            context.dispatchException(context.arg);
                        } else if ("return" === context.method) context.abrupt("return", context.arg);
                        state = GenStateExecuting;
                        var record = tryCatch(innerFn, self, context);
                        if ("normal" === record.type) {
                            state = context.done ? GenStateCompleted : GenStateSuspendedYield;
                            if (record.arg === ContinueSentinel) continue;
                            return {
                                value: record.arg,
                                done: context.done
                            };
                        } else if ("throw" === record.type) {
                            state = GenStateCompleted;
                            context.method = "throw";
                            context.arg = record.arg;
                        }
                    }
                };
            }
            function maybeInvokeDelegate(delegate, context) {
                var method = delegate.iterator[context.method];
                if (method === undefined) {
                    context.delegate = null;
                    if ("throw" === context.method) {
                        if (delegate.iterator["return"]) {
                            context.method = "return";
                            context.arg = undefined;
                            maybeInvokeDelegate(delegate, context);
                            if ("throw" === context.method) return ContinueSentinel;
                        }
                        context.method = "throw";
                        context.arg = new TypeError("The iterator does not provide a 'throw' method");
                    }
                    return ContinueSentinel;
                }
                var record = tryCatch(method, delegate.iterator, context.arg);
                if ("throw" === record.type) {
                    context.method = "throw";
                    context.arg = record.arg;
                    context.delegate = null;
                    return ContinueSentinel;
                }
                var info = record.arg;
                if (!info) {
                    context.method = "throw";
                    context.arg = new TypeError("iterator result is not an object");
                    context.delegate = null;
                    return ContinueSentinel;
                }
                if (info.done) {
                    context[delegate.resultName] = info.value;
                    context.next = delegate.nextLoc;
                    if ("return" !== context.method) {
                        context.method = "next";
                        context.arg = undefined;
                    }
                } else return info;
                context.delegate = null;
                return ContinueSentinel;
            }
            function pushTryEntry(locs) {
                var entry = {
                    tryLoc: locs[0]
                };
                if (1 in locs) entry.catchLoc = locs[1];
                if (2 in locs) {
                    entry.finallyLoc = locs[2];
                    entry.afterLoc = locs[3];
                }
                this.tryEntries.push(entry);
            }
            function resetTryEntry(entry) {
                var record = entry.completion || {};
                record.type = "normal";
                delete record.arg;
                entry.completion = record;
            }
            function Context(tryLocsList) {
                this.tryEntries = [ {
                    tryLoc: "root"
                } ];
                tryLocsList.forEach(pushTryEntry, this);
                this.reset(!0);
            }
            function values(iterable) {
                if (iterable) {
                    var iteratorMethod = iterable[iteratorSymbol];
                    if (iteratorMethod) return iteratorMethod.call(iterable);
                    if ("function" == typeof iterable.next) return iterable;
                    if (!isNaN(iterable.length)) {
                        var i = -1, next = function next() {
                            for (;++i < iterable.length; ) if (hasOwn.call(iterable, i)) {
                                next.value = iterable[i];
                                next.done = !1;
                                return next;
                            }
                            next.value = undefined;
                            next.done = !0;
                            return next;
                        };
                        return next.next = next;
                    }
                }
                return {
                    next: doneResult
                };
            }
            function doneResult() {
                return {
                    value: undefined,
                    done: !0
                };
            }
            var undefined, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag", inModule = "object" == typeof module, runtime = global.regeneratorRuntime;
            if (!runtime) {
                runtime = global.regeneratorRuntime = inModule ? module.exports : {};
                runtime.wrap = wrap;
                var GenStateSuspendedStart = "suspendedStart", GenStateSuspendedYield = "suspendedYield", GenStateExecuting = "executing", GenStateCompleted = "completed", ContinueSentinel = {}, IteratorPrototype = {};
                IteratorPrototype[iteratorSymbol] = function() {
                    return this;
                };
                var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([])));
                if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) IteratorPrototype = NativeIteratorPrototype;
                var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
                GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
                GeneratorFunctionPrototype.constructor = GeneratorFunction;
                GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction";
                runtime.isGeneratorFunction = function(genFun) {
                    var ctor = "function" == typeof genFun && genFun.constructor;
                    return ctor ? ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name) : !1;
                };
                runtime.mark = function(genFun) {
                    if (Object.setPrototypeOf) Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); else {
                        genFun.__proto__ = GeneratorFunctionPrototype;
                        if (!(toStringTagSymbol in genFun)) genFun[toStringTagSymbol] = "GeneratorFunction";
                    }
                    genFun.prototype = Object.create(Gp);
                    return genFun;
                };
                runtime.awrap = function(arg) {
                    return {
                        __await: arg
                    };
                };
                defineIteratorMethods(AsyncIterator.prototype);
                AsyncIterator.prototype[asyncIteratorSymbol] = function() {
                    return this;
                };
                runtime.AsyncIterator = AsyncIterator;
                runtime.async = function(innerFn, outerFn, self, tryLocsList) {
                    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));
                    return runtime.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) {
                        return result.done ? result.value : iter.next();
                    });
                };
                defineIteratorMethods(Gp);
                Gp[toStringTagSymbol] = "Generator";
                Gp[iteratorSymbol] = function() {
                    return this;
                };
                Gp.toString = function() {
                    return "[object Generator]";
                };
                runtime.keys = function(object) {
                    var keys = [];
                    for (var key in object) keys.push(key);
                    keys.reverse();
                    return function next() {
                        for (;keys.length; ) {
                            var key = keys.pop();
                            if (key in object) {
                                next.value = key;
                                next.done = !1;
                                return next;
                            }
                        }
                        next.done = !0;
                        return next;
                    };
                };
                runtime.values = values;
                Context.prototype = {
                    constructor: Context,
                    reset: function(skipTempReset) {
                        this.prev = 0;
                        this.next = 0;
                        this.sent = this._sent = undefined;
                        this.done = !1;
                        this.delegate = null;
                        this.method = "next";
                        this.arg = undefined;
                        this.tryEntries.forEach(resetTryEntry);
                        if (!skipTempReset) for (var name in this) if ("t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1))) this[name] = undefined;
                    },
                    stop: function() {
                        this.done = !0;
                        var rootEntry = this.tryEntries[0], rootRecord = rootEntry.completion;
                        if ("throw" === rootRecord.type) throw rootRecord.arg;
                        return this.rval;
                    },
                    dispatchException: function(exception) {
                        function handle(loc, caught) {
                            record.type = "throw";
                            record.arg = exception;
                            context.next = loc;
                            if (caught) {
                                context.method = "next";
                                context.arg = undefined;
                            }
                            return !!caught;
                        }
                        if (this.done) throw exception;
                        for (var context = this, i = this.tryEntries.length - 1; i >= 0; --i) {
                            var entry = this.tryEntries[i], record = entry.completion;
                            if ("root" === entry.tryLoc) return handle("end");
                            if (entry.tryLoc <= this.prev) {
                                var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc");
                                if (hasCatch && hasFinally) {
                                    if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); else if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
                                } else if (hasCatch) {
                                    if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
                                } else if (hasFinally) {
                                    if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
                                } else throw new Error("try statement without catch or finally");
                            }
                        }
                    },
                    abrupt: function(type, arg) {
                        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
                            var entry = this.tryEntries[i];
                            if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
                                var finallyEntry = entry;
                                break;
                            }
                        }
                        if (finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) finallyEntry = null;
                        var record = finallyEntry ? finallyEntry.completion : {};
                        record.type = type;
                        record.arg = arg;
                        if (finallyEntry) {
                            this.method = "next";
                            this.next = finallyEntry.finallyLoc;
                            return ContinueSentinel;
                        }
                        return this.complete(record);
                    },
                    complete: function(record, afterLoc) {
                        if ("throw" === record.type) throw record.arg;
                        if ("break" === record.type || "continue" === record.type) this.next = record.arg; else if ("return" === record.type) {
                            this.rval = this.arg = record.arg;
                            this.method = "return";
                            this.next = "end";
                        } else if ("normal" === record.type && afterLoc) this.next = afterLoc;
                        return ContinueSentinel;
                    },
                    finish: function(finallyLoc) {
                        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
                            var entry = this.tryEntries[i];
                            if (entry.finallyLoc === finallyLoc) {
                                this.complete(entry.completion, entry.afterLoc);
                                resetTryEntry(entry);
                                return ContinueSentinel;
                            }
                        }
                    },
                    "catch": function(tryLoc) {
                        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
                            var entry = this.tryEntries[i];
                            if (entry.tryLoc === tryLoc) {
                                var record = entry.completion;
                                if ("throw" === record.type) {
                                    var thrown = record.arg;
                                    resetTryEntry(entry);
                                }
                                return thrown;
                            }
                        }
                        throw new Error("illegal catch attempt");
                    },
                    delegateYield: function(iterable, resultName, nextLoc) {
                        this.delegate = {
                            iterator: values(iterable),
                            resultName: resultName,
                            nextLoc: nextLoc
                        };
                        if ("next" === this.method) this.arg = undefined;
                        return ContinueSentinel;
                    }
                };
            } else if (inModule) module.exports = runtime;
        }("object" == typeof global ? global : "object" == typeof window ? window : "object" == typeof self ? self : this);
    }).call(exports, __webpack_require__(54));
}, function(module, exports, __webpack_require__) {
    (function(global, process) {
        !function(global, undefined) {
            "use strict";
            function setImmediate(callback) {
                if ("function" != typeof callback) callback = new Function("" + callback);
                for (var args = new Array(arguments.length - 1), i = 0; i < args.length; i++) args[i] = arguments[i + 1];
                var task = {
                    callback: callback,
                    args: args
                };
                tasksByHandle[nextHandle] = task;
                registerImmediate(nextHandle);
                return nextHandle++;
            }
            function clearImmediate(handle) {
                delete tasksByHandle[handle];
            }
            function run(task) {
                var callback = task.callback, args = task.args;
                switch (args.length) {
                  case 0:
                    callback();
                    break;

                  case 1:
                    callback(args[0]);
                    break;

                  case 2:
                    callback(args[0], args[1]);
                    break;

                  case 3:
                    callback(args[0], args[1], args[2]);
                    break;

                  default:
                    callback.apply(undefined, args);
                }
            }
            function runIfPresent(handle) {
                if (currentlyRunningATask) setTimeout(runIfPresent, 0, handle); else {
                    var task = tasksByHandle[handle];
                    if (task) {
                        currentlyRunningATask = !0;
                        try {
                            run(task);
                        } finally {
                            clearImmediate(handle);
                            currentlyRunningATask = !1;
                        }
                    }
                }
            }
            if (!global.setImmediate) {
                var registerImmediate, nextHandle = 1, tasksByHandle = {}, currentlyRunningATask = !1, doc = global.document, attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
                attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
                if ("[object process]" === {}.toString.call(global.process)) !function() {
                    registerImmediate = function(handle) {
                        process.nextTick(function() {
                            runIfPresent(handle);
                        });
                    };
                }(); else if (function() {
                    if (global.postMessage && !global.importScripts) {
                        var postMessageIsAsynchronous = !0, oldOnMessage = global.onmessage;
                        global.onmessage = function() {
                            postMessageIsAsynchronous = !1;
                        };
                        global.postMessage("", "*");
                        global.onmessage = oldOnMessage;
                        return postMessageIsAsynchronous;
                    }
                }()) !function() {
                    var messagePrefix = "setImmediate$" + Math.random() + "$", onGlobalMessage = function(event) {
                        if (event.source === global && "string" == typeof event.data && 0 === event.data.indexOf(messagePrefix)) runIfPresent(+event.data.slice(messagePrefix.length));
                    };
                    if (global.addEventListener) global.addEventListener("message", onGlobalMessage, !1); else global.attachEvent("onmessage", onGlobalMessage);
                    registerImmediate = function(handle) {
                        global.postMessage(messagePrefix + handle, "*");
                    };
                }(); else if (global.MessageChannel) !function() {
                    var channel = new MessageChannel();
                    channel.port1.onmessage = function(event) {
                        runIfPresent(event.data);
                    };
                    registerImmediate = function(handle) {
                        channel.port2.postMessage(handle);
                    };
                }(); else if (doc && "onreadystatechange" in doc.createElement("script")) !function() {
                    var html = doc.documentElement;
                    registerImmediate = function(handle) {
                        var script = doc.createElement("script");
                        script.onreadystatechange = function() {
                            runIfPresent(handle);
                            script.onreadystatechange = null;
                            html.removeChild(script);
                            script = null;
                        };
                        html.appendChild(script);
                    };
                }(); else !function() {
                    registerImmediate = function(handle) {
                        setTimeout(runIfPresent, 0, handle);
                    };
                }();
                attachTo.setImmediate = setImmediate;
                attachTo.clearImmediate = clearImmediate;
            }
        }("undefined" == typeof self ? void 0 === global ? this : global : self);
    }).call(exports, __webpack_require__(54), __webpack_require__(186));
}, function(module, exports, __webpack_require__) {
    function noop() {}
    function isHost(obj) {
        switch ({}.toString.call(obj)) {
          case "[object File]":
          case "[object Blob]":
          case "[object FormData]":
            return !0;

          default:
            return !1;
        }
    }
    function isObject(obj) {
        return obj === Object(obj);
    }
    function serialize(obj) {
        if (!isObject(obj)) return obj;
        var pairs = [];
        for (var key in obj) if (null != obj[key]) pushEncodedKeyValuePair(pairs, key, obj[key]);
        return pairs.join("&");
    }
    function pushEncodedKeyValuePair(pairs, key, val) {
        if (Array.isArray(val)) return val.forEach(function(v) {
            pushEncodedKeyValuePair(pairs, key, v);
        });
        pairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(val));
    }
    function parseString(str) {
        for (var parts, pair, obj = {}, pairs = str.split("&"), i = 0, len = pairs.length; i < len; ++i) {
            pair = pairs[i];
            parts = pair.split("=");
            obj[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
        }
        return obj;
    }
    function parseHeader(str) {
        var index, line, field, val, lines = str.split(/\r?\n/), fields = {};
        lines.pop();
        for (var i = 0, len = lines.length; i < len; ++i) {
            line = lines[i];
            index = line.indexOf(":");
            field = line.slice(0, index).toLowerCase();
            val = trim(line.slice(index + 1));
            fields[field] = val;
        }
        return fields;
    }
    function isJSON(mime) {
        return /[\/+]json\b/.test(mime);
    }
    function type(str) {
        return str.split(/ *; */).shift();
    }
    function params(str) {
        return reduce(str.split(/ *; */), function(obj, str) {
            var parts = str.split(/ *= */), key = parts.shift(), val = parts.shift();
            if (key && val) obj[key] = val;
            return obj;
        }, {});
    }
    function Response(req, options) {
        options = options || {};
        this.req = req;
        this.xhr = this.req.xhr;
        this.text = "HEAD" != this.req.method && ("" === this.xhr.responseType || "text" === this.xhr.responseType) || "undefined" == typeof this.xhr.responseType ? this.xhr.responseText : null;
        this.statusText = this.req.xhr.statusText;
        this.setStatusProperties(this.xhr.status);
        this.header = this.headers = parseHeader(this.xhr.getAllResponseHeaders());
        this.header["content-type"] = this.xhr.getResponseHeader("content-type");
        this.setHeaderProperties(this.header);
        this.body = "HEAD" != this.req.method ? this.parseBody(this.text ? this.text : this.xhr.response) : null;
    }
    function Request(method, url) {
        var self = this;
        Emitter.call(this);
        this._query = this._query || [];
        this.method = method;
        this.url = url;
        this.header = {};
        this._header = {};
        this.on("end", function() {
            var err = null, res = null;
            try {
                res = new Response(self);
            } catch (e) {
                err = new Error("Parser is unable to parse the response");
                err.parse = !0;
                err.original = e;
                err.rawResponse = self.xhr && self.xhr.responseText ? self.xhr.responseText : null;
                return self.callback(err);
            }
            self.emit("response", res);
            if (err) return self.callback(err, res);
            if (res.status >= 200 && res.status < 300) return self.callback(err, res);
            var new_err = new Error(res.statusText || "Unsuccessful HTTP response");
            new_err.original = err;
            new_err.response = res;
            new_err.status = res.status;
            self.callback(new_err, res);
        });
    }
    function request(method, url) {
        if ("function" == typeof url) return new Request("GET", method).end(url);
        if (1 == arguments.length) return new Request("GET", method); else return new Request(method, url);
    }
    function del(url, fn) {
        var req = request("DELETE", url);
        if (fn) req.end(fn);
        return req;
    }
    var root, Emitter = __webpack_require__(360), reduce = __webpack_require__(670);
    if ("undefined" != typeof window) root = window; else if ("undefined" != typeof self) root = self; else root = this;
    request.getXHR = function() {
        if (root.XMLHttpRequest && (!root.location || "file:" != root.location.protocol || !root.ActiveXObject)) return new XMLHttpRequest(); else {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
            try {
                return new ActiveXObject("Msxml2.XMLHTTP.6.0");
            } catch (e) {}
            try {
                return new ActiveXObject("Msxml2.XMLHTTP.3.0");
            } catch (e) {}
            try {
                return new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {}
        }
        return !1;
    };
    var trim = "".trim ? function(s) {
        return s.trim();
    } : function(s) {
        return s.replace(/(^\s*|\s*$)/g, "");
    };
    request.serializeObject = serialize;
    request.parseString = parseString;
    request.types = {
        html: "text/html",
        json: "application/json",
        xml: "application/xml",
        urlencoded: "application/x-www-form-urlencoded",
        form: "application/x-www-form-urlencoded",
        "form-data": "application/x-www-form-urlencoded"
    };
    request.serialize = {
        "application/x-www-form-urlencoded": serialize,
        "application/json": JSON.stringify
    };
    request.parse = {
        "application/x-www-form-urlencoded": parseString,
        "application/json": JSON.parse
    };
    Response.prototype.get = function(field) {
        return this.header[field.toLowerCase()];
    };
    Response.prototype.setHeaderProperties = function(header) {
        var ct = this.header["content-type"] || "";
        this.type = type(ct);
        var obj = params(ct);
        for (var key in obj) this[key] = obj[key];
    };
    Response.prototype.parseBody = function(str) {
        var parse = request.parse[this.type];
        return parse && str && (str.length || str instanceof Object) ? parse(str) : null;
    };
    Response.prototype.setStatusProperties = function(status) {
        if (1223 === status) status = 204;
        var type = status / 100 | 0;
        this.status = this.statusCode = status;
        this.statusType = type;
        this.info = 1 == type;
        this.ok = 2 == type;
        this.clientError = 4 == type;
        this.serverError = 5 == type;
        this.error = 4 == type || 5 == type ? this.toError() : !1;
        this.accepted = 202 == status;
        this.noContent = 204 == status;
        this.badRequest = 400 == status;
        this.unauthorized = 401 == status;
        this.notAcceptable = 406 == status;
        this.notFound = 404 == status;
        this.forbidden = 403 == status;
    };
    Response.prototype.toError = function() {
        var req = this.req, method = req.method, url = req.url, msg = "cannot " + method + " " + url + " (" + this.status + ")", err = new Error(msg);
        err.status = this.status;
        err.method = method;
        err.url = url;
        return err;
    };
    request.Response = Response;
    Emitter(Request.prototype);
    Request.prototype.use = function(fn) {
        fn(this);
        return this;
    };
    Request.prototype.timeout = function(ms) {
        this._timeout = ms;
        return this;
    };
    Request.prototype.clearTimeout = function() {
        this._timeout = 0;
        clearTimeout(this._timer);
        return this;
    };
    Request.prototype.abort = function() {
        if (!this.aborted) {
            this.aborted = !0;
            this.xhr.abort();
            this.clearTimeout();
            this.emit("abort");
            return this;
        }
    };
    Request.prototype.set = function(field, val) {
        if (isObject(field)) {
            for (var key in field) this.set(key, field[key]);
            return this;
        }
        this._header[field.toLowerCase()] = val;
        this.header[field] = val;
        return this;
    };
    Request.prototype.unset = function(field) {
        delete this._header[field.toLowerCase()];
        delete this.header[field];
        return this;
    };
    Request.prototype.getHeader = function(field) {
        return this._header[field.toLowerCase()];
    };
    Request.prototype.type = function(type) {
        this.set("Content-Type", request.types[type] || type);
        return this;
    };
    Request.prototype.parse = function(fn) {
        this._parser = fn;
        return this;
    };
    Request.prototype.accept = function(type) {
        this.set("Accept", request.types[type] || type);
        return this;
    };
    Request.prototype.auth = function(user, pass) {
        var str = btoa(user + ":" + pass);
        this.set("Authorization", "Basic " + str);
        return this;
    };
    Request.prototype.query = function(val) {
        if ("string" != typeof val) val = serialize(val);
        if (val) this._query.push(val);
        return this;
    };
    Request.prototype.field = function(name, val) {
        if (!this._formData) this._formData = new root.FormData();
        this._formData.append(name, val);
        return this;
    };
    Request.prototype.attach = function(field, file, filename) {
        if (!this._formData) this._formData = new root.FormData();
        this._formData.append(field, file, filename || file.name);
        return this;
    };
    Request.prototype.send = function(data) {
        var obj = isObject(data), type = this.getHeader("Content-Type");
        if (obj && isObject(this._data)) for (var key in data) this._data[key] = data[key]; else if ("string" == typeof data) {
            if (!type) this.type("form");
            type = this.getHeader("Content-Type");
            if ("application/x-www-form-urlencoded" == type) this._data = this._data ? this._data + "&" + data : data; else this._data = (this._data || "") + data;
        } else this._data = data;
        if (!obj || isHost(data)) return this;
        if (!type) this.type("json");
        return this;
    };
    Request.prototype.callback = function(err, res) {
        var fn = this._callback;
        this.clearTimeout();
        fn(err, res);
    };
    Request.prototype.crossDomainError = function() {
        var err = new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");
        err.crossDomain = !0;
        err.status = this.status;
        err.method = this.method;
        err.url = this.url;
        this.callback(err);
    };
    Request.prototype.timeoutError = function() {
        var timeout = this._timeout, err = new Error("timeout of " + timeout + "ms exceeded");
        err.timeout = timeout;
        this.callback(err);
    };
    Request.prototype.withCredentials = function() {
        this._withCredentials = !0;
        return this;
    };
    Request.prototype.end = function(fn) {
        var self = this, xhr = this.xhr = request.getXHR(), query = this._query.join("&"), timeout = this._timeout, data = this._formData || this._data;
        this._callback = fn || noop;
        xhr.onreadystatechange = function() {
            if (4 == xhr.readyState) {
                var status;
                try {
                    status = xhr.status;
                } catch (e) {
                    status = 0;
                }
                if (0 == status) {
                    if (self.timedout) return self.timeoutError();
                    if (self.aborted) return;
                    return self.crossDomainError();
                }
                self.emit("end");
            }
        };
        var handleProgress = function(e) {
            if (e.total > 0) e.percent = e.loaded / e.total * 100;
            e.direction = "download";
            self.emit("progress", e);
        };
        if (this.hasListeners("progress")) xhr.onprogress = handleProgress;
        try {
            if (xhr.upload && this.hasListeners("progress")) xhr.upload.onprogress = handleProgress;
        } catch (e) {}
        if (timeout && !this._timer) this._timer = setTimeout(function() {
            self.timedout = !0;
            self.abort();
        }, timeout);
        if (query) {
            query = request.serializeObject(query);
            this.url += ~this.url.indexOf("?") ? "&" + query : "?" + query;
        }
        xhr.open(this.method, this.url, !0);
        if (this._withCredentials) xhr.withCredentials = !0;
        if ("GET" != this.method && "HEAD" != this.method && "string" != typeof data && !isHost(data)) {
            var contentType = this.getHeader("Content-Type"), serialize = this._parser || request.serialize[contentType ? contentType.split(";")[0] : ""];
            if (!serialize && isJSON(contentType)) serialize = request.serialize["application/json"];
            if (serialize) data = serialize(data);
        }
        for (var field in this.header) if (null != this.header[field]) xhr.setRequestHeader(field, this.header[field]);
        this.emit("request", this);
        xhr.send(void 0 !== data ? data : null);
        return this;
    };
    Request.prototype.then = function(fulfill, reject) {
        return this.end(function(err, res) {
            err ? reject(err) : fulfill(res);
        });
    };
    request.Request = Request;
    request.get = function(url, data, fn) {
        var req = request("GET", url);
        if ("function" == typeof data) fn = data, data = null;
        if (data) req.query(data);
        if (fn) req.end(fn);
        return req;
    };
    request.head = function(url, data, fn) {
        var req = request("HEAD", url);
        if ("function" == typeof data) fn = data, data = null;
        if (data) req.send(data);
        if (fn) req.end(fn);
        return req;
    };
    request.del = del;
    request["delete"] = del;
    request.patch = function(url, data, fn) {
        var req = request("PATCH", url);
        if ("function" == typeof data) fn = data, data = null;
        if (data) req.send(data);
        if (fn) req.end(fn);
        return req;
    };
    request.post = function(url, data, fn) {
        var req = request("POST", url);
        if ("function" == typeof data) fn = data, data = null;
        if (data) req.send(data);
        if (fn) req.end(fn);
        return req;
    };
    request.put = function(url, data, fn) {
        var req = request("PUT", url);
        if ("function" == typeof data) fn = data, data = null;
        if (data) req.send(data);
        if (fn) req.end(fn);
        return req;
    };
    module.exports = request;
}, function(module, exports, __webpack_require__) {
    (function(global) {
        function Timeout(id, clearFn) {
            this._id = id;
            this._clearFn = clearFn;
        }
        var scope = void 0 !== global && global || "undefined" != typeof self && self || window, apply = Function.prototype.apply;
        exports.setTimeout = function() {
            return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
        };
        exports.setInterval = function() {
            return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
        };
        exports.clearTimeout = exports.clearInterval = function(timeout) {
            if (timeout) timeout.close();
        };
        Timeout.prototype.unref = Timeout.prototype.ref = function() {};
        Timeout.prototype.close = function() {
            this._clearFn.call(scope, this._id);
        };
        exports.enroll = function(item, msecs) {
            clearTimeout(item._idleTimeoutId);
            item._idleTimeout = msecs;
        };
        exports.unenroll = function(item) {
            clearTimeout(item._idleTimeoutId);
            item._idleTimeout = -1;
        };
        exports._unrefActive = exports.active = function(item) {
            clearTimeout(item._idleTimeoutId);
            var msecs = item._idleTimeout;
            if (msecs >= 0) item._idleTimeoutId = setTimeout(function() {
                if (item._onTimeout) item._onTimeout();
            }, msecs);
        };
        __webpack_require__(679);
        exports.setImmediate = "undefined" != typeof self && self.setImmediate || void 0 !== global && global.setImmediate || this && this.setImmediate;
        exports.clearImmediate = "undefined" != typeof self && self.clearImmediate || void 0 !== global && global.clearImmediate || this && this.clearImmediate;
    }).call(exports, __webpack_require__(54));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    exports.openOfflineFolder = exports.downloadOffline = exports.toggleDriversClass = exports.togglePrograms = exports.loadConfiguratorData = exports.updateTotalSize = undefined;
    var _specialFolders = __webpack_require__(18), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _configurator = __webpack_require__(207), _configurator2 = _interopRequireDefault(_configurator), _openFolder = __webpack_require__(324), _openFolder2 = _interopRequireDefault(_openFolder), collectIndexes = function() {
        return function(dispatch, getState) {
            for (var _getState = getState(), data = _getState.configurator, drivers = data.drivers, programs = data.programs, indexes = [], items = [ programs ].concat(Object.values(drivers)), _iterator = items, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                var _ref;
                if (_isArray) {
                    if (_i >= _iterator.length) break;
                    _ref = _iterator[_i++];
                } else {
                    _i = _iterator.next();
                    if (_i.done) break;
                    _ref = _i.value;
                }
                var item = _ref, isChecked = item.isChecked, list = item.list;
                if (isChecked) indexes = indexes.concat(list.map(function(entry) {
                    return entry.index;
                }));
            }
            return indexes;
        };
    }, getTotalSize = function() {
        return function(dispatch, getState) {
            var selectedIndexes = dispatch(collectIndexes());
            return _configurator2["default"].getTotalSize(selectedIndexes);
        };
    }, updateTotalSize = exports.updateTotalSize = function() {
        return function(dispatch, getState) {
            dispatch({
                type: "CONFIGURATOR_SET_TOTAL_SIZE",
                payload: {
                    totalSize: dispatch(getTotalSize())
                }
            });
        };
    }, offlinePath = (exports.loadConfiguratorData = function() {
        return function() {
            var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                var _getState2, data, _ref3, drivers, programs;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        _getState2 = getState(), data = _getState2.configurator;
                        if (data.drivers) {
                            _context.next = 9;
                            break;
                        }
                        _context.next = 4;
                        return _configurator2["default"].init();

                      case 4:
                        _ref3 = _context.sent;
                        drivers = _ref3.drivers;
                        programs = _ref3.programs;
                        dispatch({
                            type: "CONFIGURATOR_SET_DATA",
                            payload: {
                                drivers: drivers,
                                programs: programs
                            }
                        });
                        dispatch(updateTotalSize());

                      case 9:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, undefined);
            }));
            return function(_x, _x2) {
                return _ref2.apply(this, arguments);
            };
        }();
    }, exports.togglePrograms = function(_ref4) {
        var isChecked = _ref4.isChecked, statisticsId = _ref4.statisticsId;
        return function(dispatch, getState) {
            if (isChecked) _logs2["default"].info({
                action: "configurator checkbox selected " + statisticsId,
                counters: [ "default", "shared" ]
            }, {}, "configurator:checkbox:selected:" + statisticsId);
            dispatch({
                type: "CONFIGURATOR_TOGGLE_PROGRAMS",
                payload: {
                    isChecked: isChecked
                }
            });
            dispatch(updateTotalSize());
        };
    }, exports.toggleDriversClass = function(_ref5) {
        var isChecked = _ref5.isChecked, statisticsId = _ref5.statisticsId, classId = _ref5.classId;
        return function(dispatch, getState) {
            if (isChecked) _logs2["default"].info({
                action: "configurator checkbox selected " + statisticsId,
                counters: [ "default", "shared" ]
            }, {}, "configurator:checkbox:selected:" + statisticsId);
            dispatch({
                type: "CONFIGURATOR_DRIVERS_CLASS",
                payload: {
                    isChecked: isChecked,
                    classId: classId
                }
            });
            dispatch(updateTotalSize());
        };
    }, _specialFolders.MyDocuments), onProgress = function(_ref6) {
        var totalSize = _ref6.totalSize, downloadedSize = _ref6.downloadedSize;
        window.store.dispatch({
            type: "CONFIGURATOR_DOWNLOAD_OFFLINE_PROGRESS",
            payload: {
                totalSize: totalSize,
                downloadedSize: downloadedSize
            }
        });
    };
    exports.downloadOffline = function() {
        var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        return function() {
            var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(dispatch, getState) {
                var selectedIndexes, result;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        if (options.eventAction) _logs2["default"].info({
                            action: options.eventAction,
                            counters: [ "default", "shared" ]
                        }, {}, options.eventNamespace);
                        selectedIndexes = dispatch(collectIndexes());
                        dispatch({
                            type: "CONFIGURATOR_DOWNLOAD_OFFLINE_START"
                        });
                        _context2.prev = 3;
                        _logs2["default"].info({
                            action: "configurator download started",
                            counters: [ "default", "shared" ]
                        }, {}, "configurator:download:started");
                        _context2.next = 7;
                        return _configurator2["default"].build(offlinePath, selectedIndexes, {
                            onProgress: onProgress
                        });

                      case 7:
                        result = _context2.sent;
                        _logs2["default"].info({
                            action: "configurator download finished",
                            counters: [ "default", "shared" ]
                        }, {}, "configurator:download:finished");
                        dispatch({
                            type: "CONFIGURATOR_DOWNLOAD_OFFLINE_DONE",
                            payload: {
                                result: result
                            }
                        });
                        _context2.next = 17;
                        break;

                      case 12:
                        _context2.prev = 12;
                        _context2.t0 = _context2["catch"](3);
                        _logs2["default"].error({
                            action: "configurator download failed",
                            counters: [ "default", "shared" ]
                        }, {
                            error: _context2.t0
                        }, "configurator:download:failed");
                        dispatch({
                            type: "CONFIGURATOR_DOWNLOAD_OFFLINE_FAIL"
                        });
                        throw _context2.t0;

                      case 17:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, undefined, [ [ 3, 12 ] ]);
            }));
            return function(_x4, _x5) {
                return _ref7.apply(this, arguments);
            };
        }();
    }, exports.openOfflineFolder = function() {
        (0, _openFolder2["default"])(offlinePath);
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function getInstallationResult() {
        return function(dispatch, getState) {
            var _getState = getState(), newDriversState = _getState.drivers, installation = _getState.installation, finalScreen = _getState.finalScreen, itemsContainDrivers = installation.itemsContainDrivers, installationItems = installation.items, oldDriversState = finalScreen.oldDriversState, resultType = void 0, finishedPrograms = void 0, failedPrograms = void 0, finishedDevices = void 0, failedDevices = void 0, missedDevices = void 0;
            finishedPrograms = installationItems.filter(function(item) {
                return !item.isDriver && "done" === item.status;
            });
            failedPrograms = installationItems.filter(function(item) {
                return !item.isDriver && "error" === item.status;
            });
            if (!itemsContainDrivers) if (1 === installationItems.length) resultType = finishedPrograms.length ? "SINGLE_PROGRAM_FINISHED" : "SINGLE_PROGRAM_FAILED"; else resultType = !failedPrograms.length ? resultType = "PROGRAMS_ALL_FINISHED" : finishedPrograms.length ? "PROGRAMS_SOME_FINISHED" : "PROGRAMS_ALL_FAILED"; else {
                var installingDeviceIds = (0, _reduce2["default"])(installationItems, function(results, item) {
                    if (item.isDriver) results.push(item.fullDeviceId);
                    return results;
                }, []);
                finishedDevices = [];
                failedDevices = [];
                missedDevices = [];
                newDriversState.devices.forEach(function(device) {
                    if (installingDeviceIds.includes(device.deviceId)) if ((0, _driversPrograms.isDeviceDriverNotInstalled)(device)) failedDevices.push(_extends({}, device)); else {
                        var old = oldDriversState.devices.find(function(old) {
                            return old.deviceId === device.deviceId;
                        });
                        finishedDevices.push(_extends({}, device, {
                            oldDriver: old && old.currentDriver
                        }));
                    } else if ((0, _driversPrograms.isDeviceDriverNotInstalled)(device)) missedDevices.push(_extends({}, device));
                });
                var oldNotInstalled = oldDriversState.devices.filter(_driversPrograms.isDeviceDriverNotInstalled), oldNotInstalledLength = oldNotInstalled.length, notInstalledLength = failedDevices.length + missedDevices.length, singleDriver = 1 === installationItems.length, itemsContainPrograms = finishedPrograms.length + failedPrograms.length > 0;
                if (!notInstalledLength) if (itemsContainPrograms) resultType = singleDriver ? "SINGLE_DRIVER_OK_PROGRAMS" : "DRIVERS_OK_PROGRAMS"; else resultType = singleDriver ? "SINGLE_DRIVER_OK" : "DRIVERS_OK"; else if (oldNotInstalledLength > notInstalledLength) resultType = singleDriver ? "SINGLE_DRIVER_BETTER" : "DRIVERS_BETTER"; else resultType = singleDriver ? "SINGLE_DRIVER_NOT_BETTER" : "DRIVERS_NOT_BETTER";
            }
            dispatch({
                type: "FINAL_SCREEN_GET_INSTALLATION_RESULT",
                payload: {
                    resultType: resultType,
                    finishedPrograms: finishedPrograms,
                    failedPrograms: failedPrograms,
                    finishedDevices: finishedDevices,
                    failedDevices: failedDevices,
                    missedDevices: missedDevices
                }
            });
        };
    }
    function repeatLastInstallation() {
        return function(dispatch, getState) {
            _logs2["default"].info({
                action: "final restart installation clicked"
            }, {}, "final:restart:installation:clicked");
            var _getState2 = getState(), finalScreen = _getState2.finalScreen, lastInstallationInput = finalScreen.lastInstallationInput;
            dispatch(new _Installation2["default"]().run(_extends({}, lastInstallationInput)));
        };
    }
    function hoverFinishedItem(item, isLeaving) {
        if (item.deviceId) return {
            type: "FINAL_SCREEN_HOVER_FINISHED_DEVICE",
            payload: {
                deviceId: item.deviceId,
                isLeaving: isLeaving
            }
        }; else return {
            type: "FINAL_SCREEN_HOVER_FINISHED_PROGRAM",
            payload: {
                id: item.id,
                isLeaving: isLeaving
            }
        };
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    };
    exports.getInstallationResult = getInstallationResult;
    exports.repeatLastInstallation = repeatLastInstallation;
    exports.hoverFinishedItem = hoverFinishedItem;
    var _reduce = __webpack_require__(534), _reduce2 = _interopRequireDefault(_reduce), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _Installation = __webpack_require__(148), _Installation2 = _interopRequireDefault(_Installation), _driversPrograms = __webpack_require__(29);
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function _asyncToGenerator(fn) {
            return function() {
                var gen = fn.apply(this, arguments);
                return new Promise(function(resolve, reject) {
                    function step(key, arg) {
                        try {
                            var info = gen[key](arg), value = info.value;
                        } catch (error) {
                            reject(error);
                            return;
                        }
                        if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                            step("next", value);
                        }, function(err) {
                            step("throw", err);
                        });
                    }
                    return step("next");
                });
            };
        }
        exports.__esModule = !0;
        exports.openURL = exports.installPlaykeyAndGo = exports.checkPlaykey = exports.hoverGame = exports.loadGamesList = undefined;
        var _registry = __webpack_require__(56), _utils = __webpack_require__(19), _system = __webpack_require__(6), _aria = __webpack_require__(104), _aria2 = _interopRequireDefault(_aria), _runCommandAsync = __webpack_require__(75), _games = __webpack_require__(757), _games2 = _interopRequireDefault(_games), openURL = (exports.loadGamesList = function() {
            return {
                type: "GAMES_LIST_LOADED",
                payload: [].concat((0, _games2["default"])(l))
            };
        }, exports.hoverGame = function(id, isLeaving) {
            return function(dispatch, getState) {
                dispatch({
                    type: "GAMES_HOVER_TOP_GAME",
                    payload: {
                        id: id,
                        isLeaving: isLeaving
                    }
                });
            };
        }, exports.checkPlaykey = function() {
            return {
                type: "GAMES_PLAYKEY_CHECKED",
                payload: (0, _registry.RegExists)("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{4287A341-688B-4B85-88AB-338966C6B7D8}_is1\\DisplayName")
            };
        }, exports.installPlaykeyAndGo = function(urlToGo) {
            return function() {
                var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                    var exeName, link, targetFolder, exitCode;
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            dispatch({
                                type: "GAMES_PLAYKEY_INSTALLING"
                            });
                            exeName = "Playkey.exe";
                            link = window.downloadEndpoint + "/soft/" + exeName;
                            targetFolder = _system.AppData + "\\DRPSu\\PROGRAMS";
                            _context.next = 6;
                            return _aria2["default"].downloadFiles(targetFolder, [ {
                                link: link
                            } ]);

                          case 6:
                            _context.next = 8;
                            return (0, _runCommandAsync.runCommandAsync)({
                                command: '"' + targetFolder + "/" + exeName + '" /verysilent',
                                checkInterval: 2e3
                            });

                          case 8:
                            exitCode = _context.sent;
                            dispatch({
                                type: "GAMES_PLAYKEY_INSTALLED",
                                payload: 0 === exitCode
                            });
                            dispatch(openURL(urlToGo));

                          case 11:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, undefined);
                }));
                return function(_x, _x2) {
                    return _ref.apply(this, arguments);
                };
            }();
        }, exports.openURL = function(url) {
            return function(dispatch, getState) {
                dispatch({
                    type: "USER_ACTIVATED"
                });
                (0, _utils.goToUrl)(url);
            };
        });
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function showLeftArrow() {
        return function(dispatch, getState) {
            dispatch({
                type: "NEW_ORDER_SHOW_LEFT_ARROW"
            });
        };
    }
    function showRightArrow() {
        return function(dispatch, getState) {
            dispatch({
                type: "NEW_ORDER_SHOW_RIGTH_ARROW"
            });
        };
    }
    function hideArrows() {
        return function(dispatch, getState) {
            dispatch({
                type: "NEW_ORDER_HIDE_ARROWS"
            });
        };
    }
    function cancelItemInstallation(itemName, itemId, itemStatus) {
        return function(dispatch, getState) {
            _statistics2["default"].event({
                action: "installation cancel clicked " + itemName
            });
            dispatch(new _Installation2["default"]().cancelItem(itemId, itemStatus));
        };
    }
    function confirmPromoInstallation(promo) {
        var _this = this;
        return function() {
            var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                var confirmed, softId, _getState, programs, program, zone;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        confirmed = !(0, _checkIfAppEsteem2["default"])();
                        if (confirmed) {
                            _context.next = 10;
                            break;
                        }
                        softId = promo.softId;
                        _getState = getState(), programs = _getState.programs;
                        program = programs.find(function(_ref2) {
                            return _ref2.id === softId;
                        });
                        if (!program) {
                            _context.next = 10;
                            break;
                        }
                        zone = "INSTALLATION_PAGE";
                        _context.next = 9;
                        return dispatch((0, _programsActions.confirmProgramInstallation)(program, zone));

                      case 9:
                        confirmed = _context.sent;

                      case 10:
                        if (confirmed) dispatch({
                            type: "NEW_ORDER_INSTALLATION_PROMO_CONFIRMED",
                            payload: promo
                        });

                      case 11:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, _this);
            }));
            return function(_x, _x2) {
                return _ref.apply(this, arguments);
            };
        }();
    }
    function confirmApplicationsRestart(applications) {
        return function(dispatch, getState) {
            dispatch({
                type: "NEW_ORDER_INSTALLATION_RESTART_APPLICATIONS_CONFIRMED",
                payload: applications
            });
        };
    }
    exports.__esModule = !0;
    exports.showLeftArrow = showLeftArrow;
    exports.showRightArrow = showRightArrow;
    exports.hideArrows = hideArrows;
    exports.cancelItemInstallation = cancelItemInstallation;
    exports.confirmPromoInstallation = confirmPromoInstallation;
    exports.confirmApplicationsRestart = confirmApplicationsRestart;
    var _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _Installation = __webpack_require__(148), _Installation2 = _interopRequireDefault(_Installation), _checkIfAppEsteem = __webpack_require__(320), _checkIfAppEsteem2 = _interopRequireDefault(_checkIfAppEsteem), _programsActions = __webpack_require__(64);
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    exports.startSystemScan = undefined;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _os = __webpack_require__(14), _retry = __webpack_require__(215), _retry2 = _interopRequireDefault(_retry), _diagnosticsActions = __webpack_require__(204), _serverFailoverActions = __webpack_require__(687), _driversActions = __webpack_require__(122), _settingsActions = __webpack_require__(123), _menuActions = __webpack_require__(38), _appActions = __webpack_require__(55), _aria = __webpack_require__(104), _aria2 = _interopRequireDefault(_aria), _systemScanner = __webpack_require__(65), _systemScanner2 = _interopRequireDefault(_systemScanner), _softPack = __webpack_require__(147), _softPack2 = _interopRequireDefault(_softPack), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), _user = __webpack_require__(209), _user2 = _interopRequireDefault(_user), _raven = __webpack_require__(152), _handleClasses = __webpack_require__(211), _toggleStatistics = __webpack_require__(328), _toggleStatistics2 = _interopRequireDefault(_toggleStatistics), _activateFirebug = __webpack_require__(319), _activateFirebug2 = _interopRequireDefault(_activateFirebug), _getInternalChannel = __webpack_require__(801), _getInternalChannel2 = _interopRequireDefault(_getInternalChannel), run = function() {
        return function() {
            var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch, getState) {
                var _window, version, verType, env, sha, buildDate, softEndpoint, internalChannel, id, showZeroDrives, skipStartScreen;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        (0, _appActions.initPS)();
                        _context.prev = 1;
                        _context.next = 4;
                        return _user2["default"].fetch();

                      case 4:
                        dispatch({
                            type: "USER_ACTIVATED"
                        });
                        dispatch({
                            type: "AUTHORIZED",
                            payload: _user2["default"]
                        });
                        _context.next = 10;
                        break;

                      case 8:
                        _context.prev = 8;
                        _context.t0 = _context["catch"](1);

                      case 10:
                        _context.prev = 10;
                        _context.next = 13;
                        return _aria2["default"].addToFirewallAllowed();

                      case 13:
                        _context.next = 17;
                        break;

                      case 15:
                        _context.prev = 15;
                        _context.t1 = _context["catch"](10);

                      case 17:
                        _context.next = 19;
                        return _settings2["default"].load();

                      case 19:
                        _logs2["default"].logging = _settings2["default"].get("general.enableLogging").value;
                        _window = window, version = _window.version, verType = _window.verType, env = _window.env, 
                        sha = _window.sha, buildDate = _window.buildDate, softEndpoint = _window.softEndpoint;
                        _context.next = 23;
                        return _statistics2["default"].init();

                      case 23:
                        _logs2["default"].info("DriverPack Solution " + version + " " + verType, {
                            driverPackSolution: {
                                version: version,
                                verType: verType
                            }
                        }, "driverPackSolutionVersion:defined");
                        _logs2["default"].info("Build " + env + " " + sha + " " + buildDate, {
                            env: env,
                            sha: sha,
                            buildDate: buildDate
                        }, "driverPackSolutionBuild:defined");
                        _logs2["default"].info("Soft endpoint " + softEndpoint, {
                            softEndpoint: softEndpoint
                        }, "softEndpoint:defined");
                        _logs2["default"].info(_os.OSCaption + " x" + _os.arch, {
                            OSCaption: _os.OSCaption,
                            arch: _os.arch
                        }, "OS:defined");
                        _logs2["default"].info("SessionId " + _statistics2["default"].sessionId, {
                            sessionId: _statistics2["default"].sessionId
                        }, "sessionId:defined");
                        if (!0) _statistics2["default"].experiment = "(not set)";
                        (0, _raven.setRavenContext)(_statistics2["default"]);
                        (0, _toggleStatistics2["default"])(_settings2["default"].get("driverSelection.sendStatistics").value);
                        internalChannel = (0, _getInternalChannel2["default"])();
                        _statistics2["default"].sendOpenedEvent({
                            namespace: "DriverPackSolution:opened",
                            override: {
                                yandex: {
                                    params: internalChannel ? _extends({}, internalChannel) : {}
                                }
                            }
                        });
                        if (_user2["default"].profile) {
                            id = _user2["default"].profile.id;
                            _logs2["default"].info({
                                action: "auth fetch succeeded",
                                counters: [ "debug" ]
                            }, {
                                userProfile: {
                                    id: id
                                }
                            }, "userProfile:auth:fetch:succeeded");
                        } else _logs2["default"].warn("auth fetch failed", {}, "userProfile:auth:fetch:failed");
                        _logs2["default"].debug("current settings", _settings2["default"].getAll(), "userProfile:settings:current");
                        _context.prev = 35;
                        _context.next = 38;
                        return (0, _retry2["default"])(function() {
                            return _softPack2["default"].run();
                        }, 3);

                      case 38:
                        _context.next = 44;
                        break;

                      case 40:
                        _context.prev = 40;
                        _context.t2 = _context["catch"](35);
                        _logs2["default"].error({
                            action: "soft.js failed",
                            counters: [ "debug" ]
                        }, {
                            error: _context.t2
                        }, "softJs:failed");
                        throw _context.t2;

                      case 44:
                        _context.prev = 44;
                        dispatch((0, _settingsActions.loadSettings)());
                        _context.next = 48;
                        return _systemScanner2["default"].run();

                      case 48:
                        dispatch((0, _diagnosticsActions.loadDiagnosticInfo)());
                        showZeroDrives = dispatch((0, _driversActions.checkZeroDriversCondition)());
                        skipStartScreen = showZeroDrives || _settings2["default"].get("general.startOnExpertMode").value;
                        if (skipStartScreen) dispatch((0, _menuActions.navigate)("DRIVERS", {
                            preventSendingEvent: !0,
                            startScreenSkipped: !0
                        })); else dispatch((0, _menuActions.navigate)("START"));
                        if (_settings2["default"].get("general.minifyMenu").value) (0, _handleClasses.addClass)(document.body, "minify-menu");
                        if (_settings2["default"].get("general.activateFirebug").value) (0, _activateFirebug2["default"])();
                        _context.next = 66;
                        break;

                      case 56:
                        _context.prev = 56;
                        _context.t3 = _context["catch"](44);
                        if ("HttpError" !== _context.t3.type || !("status" in _context.t3 || "timeout" in _context.t3)) {
                            _context.next = 63;
                            break;
                        }
                        _logs2["default"].error({
                            action: "Screen opened NoInternet"
                        }, {
                            error: _context.t3
                        }, "DriverPackSolution:noInternet");
                        dispatch((0, _serverFailoverActions.invokeServerFailover)("START"));
                        _context.next = 66;
                        break;

                      case 63:
                        _logs2["default"].error("DriverPack running failed", {
                            error: _context.t3
                        }, "DriverPackSolution:failed");
                        dispatch({
                            type: "RUN_ERROR_DETECTED"
                        });
                        throw _context.t3;

                      case 66:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, undefined, [ [ 1, 8 ], [ 10, 15 ], [ 35, 40 ], [ 44, 56 ] ]);
            }));
            return function(_x, _x2) {
                return _ref.apply(this, arguments);
            };
        }();
    };
    exports.startSystemScan = function() {
        return function(dispatch, getState) {
            return dispatch(run()).done();
        };
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    exports.invokeServerFailover = undefined;
    for (var _checkInternet = __webpack_require__(155), _specialFolders = __webpack_require__(18), _shell = __webpack_require__(16), _configurator = __webpack_require__(207), _configurator2 = _interopRequireDefault(_configurator), _download = __webpack_require__(150), _fakeDrivers = __webpack_require__(332), _fakeDrivers2 = _interopRequireDefault(_fakeDrivers), fakeDriversScanning = function(errorPage) {
        return {
            type: "DRIVERS_SCAN_FAKE",
            payload: {
                devices: Object.values(_fakeDrivers2["default"]),
                lowRanked: [],
                broken: []
            },
            page: errorPage
        };
    }, lightSoft = [], _iterator = Object.values({
        yandex: [ "downloader_browser.exe", "downloader_browser_tr.exe", "downloader_elements.exe" ],
        avast: [ "AvastAntivirusA.exe", "AvastAntivirusWorldwideA.exe" ]
    }), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
        var _ref;
        if (_isArray) {
            if (_i >= _iterator.length) break;
            _ref = _iterator[_i++];
        } else {
            _i = _iterator.next();
            if (_i.done) break;
            _ref = _i.value;
        }
        var value = _ref;
        lightSoft = lightSoft.concat(value.map(function(soft) {
            return soft.replace(/\.exe$/, "_light");
        }));
    }
    exports.invokeServerFailover = function() {
        var errorPage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "SERVER_ERROR_SCREEN";
        return function() {
            var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch) {
                var _ref3, programs, indexesForDownload, _iterator2, _isArray2, _i2, _ref5, _ref7, index, name, _ref6, path;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        _context.prev = 0;
                        dispatch({
                            type: "NAVIGATE",
                            page: "LOADING_SCREEN"
                        });
                        _context.next = 4;
                        return (0, _download.ensure)([ "aria2c.exe", {
                            name: "driverpack-7za.exe",
                            aliases: [ "7za.exe" ]
                        } ], undefined, undefined, 1);

                      case 4:
                        _context.next = 6;
                        return _configurator2["default"].init();

                      case 6:
                        _ref3 = _context.sent;
                        programs = _ref3.programs;
                        indexesForDownload = [];
                        _iterator2 = programs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();

                      case 10:
                        if (!_isArray2) {
                            _context.next = 16;
                            break;
                        }
                        if (!(_i2 >= _iterator2.length)) {
                            _context.next = 13;
                            break;
                        }
                        return _context.abrupt("break", 25);

                      case 13:
                        _ref5 = _iterator2[_i2++];
                        _context.next = 20;
                        break;

                      case 16:
                        _i2 = _iterator2.next();
                        if (!_i2.done) {
                            _context.next = 19;
                            break;
                        }
                        return _context.abrupt("break", 25);

                      case 19:
                        _ref5 = _i2.value;

                      case 20:
                        _ref7 = _ref5;
                        index = _ref7.index, name = _ref7.name;
                        if (lightSoft.includes(name)) indexesForDownload.push(index);

                      case 23:
                        _context.next = 10;
                        break;

                      case 25:
                        dispatch({
                            type: "NAVIGATE",
                            page: "SERVER_FAILOVER_SCREEN"
                        });
                        _context.next = 28;
                        return _configurator2["default"].build(_specialFolders.AppFolder, indexesForDownload);

                      case 28:
                        _ref6 = _context.sent;
                        path = _ref6.path;
                        _shell.WshShell.Run(path + "\\DriverPack.exe", 1, !1);
                        window.close();
                        _context.next = 43;
                        break;

                      case 34:
                        _context.prev = 34;
                        _context.t0 = _context["catch"](0);
                        _context.next = 38;
                        return (0, _checkInternet.checkInternet)();

                      case 38:
                        if (!_context.sent) {
                            _context.next = 42;
                            break;
                        }
                        dispatch(fakeDriversScanning(errorPage));
                        _context.next = 43;
                        break;

                      case 42:
                        dispatch({
                            type: "NAVIGATE",
                            page: "NO_INTERNET_SCREEN"
                        });

                      case 43:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, undefined, [ [ 0, 34 ] ]);
            }));
            return function(_x2) {
                return _ref2.apply(this, arguments);
            };
        }();
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Router = __webpack_require__(735), _Router2 = _interopRequireDefault(_Router);
    __webpack_require__(813);
    var App = _react2["default"].createClass({
        displayName: "App",
        render: function() {
            return (0, _Router2["default"])(null);
        }
    });
    exports["default"] = App;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _menuActions = __webpack_require__(38), _appActions = __webpack_require__(55), _utils = __webpack_require__(19);
        __webpack_require__(814);
        var BurgerMenu = _react2["default"].createClass({
            displayName: "BurgerMenu",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                children: _react.PropTypes.any.isRequired,
                openSystemMenu: _react.PropTypes.func.isRequired,
                toggleBurgerMenu: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                page: _react.PropTypes.string.isRequired,
                navigate: _react.PropTypes.func
            },
            render: function() {
                var _this = this, _props = this.props, openSystemMenu = _props.openSystemMenu, toggleBurgerMenu = _props.toggleBurgerMenu, page = _props.page, navigate = _props.navigate, showLinks = -1 === [ "INSTALLATION" ].indexOf(page);
                return _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                    className: "semi-transparent-overlay",
                    onMouseDown: function() {
                        return toggleBurgerMenu();
                    }
                }), _react2["default"].DOM.div({
                    className: "burger-menu"
                }, _react2["default"].DOM.div({
                    className: "burger-menu_inner"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link " + (showLinks ? "" : "burger-menu_link-disabled"),
                    style: {
                        marginTop: "18px"
                    },
                    onClick: function() {
                        toggleBurgerMenu({
                            eventAction: "burgermenu offline clicked"
                        });
                        navigate("CONFIGURATOR");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), "DriverPack Offline"), _react2["default"].DOM.div({
                    className: "burger-menu_divider"
                }), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link " + (showLinks ? "" : "burger-menu_link-disabled"),
                    onClick: function() {
                        return openSystemMenu("RECOVERY");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_create_recovery_point")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link " + (showLinks ? "" : "burger-menu_link-disabled"),
                    onClick: function() {
                        return openSystemMenu("BACKUP");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_create_drivers_backup")), _react2["default"].DOM.div({
                    className: "burger-menu_divider " + (showLinks ? "" : "burger-menu_divider-is-hidden")
                }), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link " + (showLinks ? "" : "burger-menu_link-disabled"),
                    onMouseDown: function() {
                        return openSystemMenu("UNINSTALL");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_add_remove_programs")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link " + (showLinks ? "" : "burger-menu_first-link"),
                    onMouseDown: function() {
                        return openSystemMenu("DEVICE_MANAGER");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_device_manager")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("SYSTEM_PROPERTIES");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_system_properties")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("DISPLAY_PROPERTIES");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_display_properties")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("POWER_OPTIONS");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_power_options")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("NETWORK_CONNECTIONS");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_network_connections")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("COMPUTER_MANAGEMENT");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_computer_management")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("CONTROL");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_control_panel")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("DISK_MANAGEMENT");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_disk_management")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("TASK_MANAGER");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_task_manager")), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onMouseDown: function() {
                        return openSystemMenu("CMD");
                    }
                }, _react2["default"].DOM.span({
                    className: "burger-menu_link-icon icons-controls"
                }, ""), l("menu_cmd")), _react2["default"].DOM.div({
                    className: "burger-menu_divider"
                }), _react2["default"].DOM.a({
                    href: "#",
                    className: "burger-menu_link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)("https://drp.su/" + ("ru" === _this.currentLanguage ? "ru" : "en") + "/info/terms-of-use");
                    }
                }, _react2["default"].DOM.div({
                    className: "burger-menu_link-icon icons-controls assept-icon"
                }), l("start_license")))));
            }
        }), mapState = function(state) {
            return {
                page: state.page
            };
        }, actions = {
            openSystemMenu: _menuActions.openSystemMenu,
            toggleBurgerMenu: _appActions.toggleBurgerMenu,
            navigate: _menuActions.navigate
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(BurgerMenu);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                configurator: state.configurator
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), _bytes = __webpack_require__(359), _bytes2 = _interopRequireDefault(_bytes), _deviceClasses = __webpack_require__(106), _deviceClasses2 = _interopRequireDefault(_deviceClasses), _configuratorActions = __webpack_require__(682), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(815);
        var internetExplorerVersion = (0, _getInternetExplorerVersion2["default"])(), ConfiguratorScreen = _react2["default"].createClass({
            displayName: "ConfiguratorScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                configurator: _react.PropTypes.object.isRequired,
                page: _react.PropTypes.string.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                loadConfiguratorData: _react.PropTypes.func.isRequired,
                togglePrograms: _react.PropTypes.func.isRequired,
                toggleDriversClass: _react.PropTypes.func.isRequired,
                downloadOffline: _react.PropTypes.func.isRequired
            },
            shouldHideOverlay: function() {
                if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 7) return !0; else return !1; else return !1;
            },
            componentDidMount: function() {
                (0, this.props.loadConfiguratorData)();
            },
            renderProgress: function(_ref) {
                var downloadedSize = _ref.downloadedSize, totalSize = _ref.totalSize, percents = Math.round(100 * downloadedSize / totalSize), visiblePercents = Math.min(Math.max(1, percents), 99), captionText = l("configurator-screen_downloading").replace("{{DOWNLOADED_SIZE}}", (0, 
                _bytes2["default"])(downloadedSize)).replace("{{TOTAL_SIZE}}", (0, _bytes2["default"])(totalSize));
                return _react2["default"].DOM.div({
                    className: "configurator_header_progress-holder"
                }, _react2["default"].DOM.div({
                    className: "configurator_header_progress-bg"
                }, _react2["default"].DOM.div({
                    className: "configurator_header_progress",
                    style: {
                        width: visiblePercents + "%"
                    }
                }), _react2["default"].DOM.div({
                    className: "configurator_header_progress-percents"
                }, visiblePercents, "%"), _react2["default"].DOM.div({
                    className: "configurator_header_progress-caption"
                }, captionText)));
            },
            renderOption: function(item) {
                var isChecked = item.isChecked, checkboxId = item.checkboxId, statisticsId = item.statisticsId, name = item.name, classId = item.classId, handler = item.handler;
                return _react2["default"].DOM.span(null, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input configurator_list-checkbox-input",
                    id: checkboxId,
                    checked: isChecked,
                    onChange: function(e) {
                        handler({
                            isChecked: e.target.checked,
                            statisticsId: statisticsId,
                            classId: classId
                        });
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: checkboxId,
                    className: "custom-control_checkbox-input-label"
                }), _react2["default"].DOM.span(null, name));
            },
            renderOptions: function(_ref2) {
                var _this = this, drivers = _ref2.drivers, programs = _ref2.programs, togglePrograms = _ref2.togglePrograms, toggleDriversClass = _ref2.toggleDriversClass, options = Object.entries(drivers).map(function(_ref3) {
                    var classId = _ref3[0];
                    return {
                        isChecked: _ref3[1].isChecked,
                        checkboxId: "configurator_drivers_" + classId,
                        statisticsId: classId,
                        name: (0, _deviceClasses2["default"])(l)[classId].morpher.single.main,
                        classId: classId,
                        handler: toggleDriversClass
                    };
                });
                options.unshift({
                    isChecked: programs.isChecked,
                    checkboxId: "configurator_programs",
                    statisticsId: "programs",
                    name: "Programs",
                    handler: togglePrograms
                });
                return _react2["default"].DOM.div(null, options.map(function(option, index) {
                    return _react2["default"].DOM.div({
                        key: index,
                        className: "configurator_list-item"
                    }, _this.renderOption(option));
                }));
            },
            render: function() {
                var _props = this.props, configurator = _props.configurator, page = _props.page, togglePrograms = _props.togglePrograms, toggleDriversClass = _props.toggleDriversClass, downloadOffline = _props.downloadOffline, totalSize = configurator.totalSize, drivers = configurator.drivers, programs = configurator.programs, isDownloading = configurator.isDownloading, isCompleted = configurator.isCompleted, isFailed = configurator.isFailed, progress = configurator.progress, downloadedSize = progress.downloadedSize, hideComponent = "CONFIGURATOR" !== page, isDisabled = isDownloading || isCompleted || isFailed, isOverlayHidden = this.shouldHideOverlay();
                return !drivers ? _react2["default"].DOM.td(null) : _react2["default"].DOM.td({
                    className: (hideComponent ? "display-none" : "") + " configurator-screen__wrapper"
                }, _react2["default"].DOM.div({
                    className: "configurator"
                }, _react2["default"].DOM.div({
                    style: {
                        paddingLeft: "32px",
                        backgroundColor: "#FFFFFF"
                    }
                }, _react2["default"].DOM.h1({
                    className: "screen-title"
                }, l("configurator-screen_title"))), _react2["default"].DOM.table({
                    className: "configurator_wrapper",
                    border: "1"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "configurator_header"
                }, _react2["default"].DOM.td({
                    className: "configurator_header-text"
                }, _react2["default"].DOM.div({
                    className: "configurator_text",
                    dangerouslySetInnerHTML: {
                        __html: l("configurator-screen_caption")
                    }
                }))), _react2["default"].DOM.tr({
                    className: "configurator_header-controls"
                }, _react2["default"].DOM.td({
                    className: "configurator_header-btn"
                }, !(isDownloading || isCompleted || isFailed) ? _react2["default"].DOM.button({
                    className: "cta-green-btn cta-btn-68 configurator_btn",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        downloadOffline({
                            eventAction: "configurator download driverpack offline clicked",
                            eventNamespace: "configurator:download:driverpack:offline:clicked"
                        });
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/configurator-btn-icon.png",
                    className: "cta-green-btn-install-all-icon",
                    width: "23",
                    height: "23"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text configurator_btn-span",
                    dangerouslySetInnerHTML: {
                        __html: l("configurator-screen_btn").replace("{{COUNT}}", (0, _bytes2["default"])(totalSize))
                    }
                })) : null, isDownloading ? this.renderProgress({
                    downloadedSize: downloadedSize,
                    totalSize: totalSize
                }) : null, isCompleted ? _react2["default"].DOM.div({
                    className: "clearfix"
                }, _react2["default"].DOM.div({
                    className: "configurator_process-state-label"
                }, (0, _Img2["default"])({
                    src: "img/installation/icon-installed.png",
                    width: "19",
                    height: "15",
                    className: "configurator_process-state-label-icon"
                }), l("configurator-screen_completed")), _react2["default"].DOM.a({
                    href: "#",
                    className: "configurator_gray-btn",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _configuratorActions.openOfflineFolder)();
                    }
                }, l("configurator-screen_open-downloads"))) : null, isFailed ? _react2["default"].DOM.div({
                    className: "clearfix"
                }, _react2["default"].DOM.div({
                    className: "configurator_process-state-label"
                }, (0, _Img2["default"])({
                    src: "img/programs/installed-programs_info-warn.png",
                    width: "20",
                    height: "20",
                    className: "configurator_process-state-label-icon"
                }), l("configurator-screen_fail")), _react2["default"].DOM.a({
                    href: "#",
                    className: "configurator_gray-btn",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        downloadOffline({
                            eventAction: "configurator try again clicked",
                            eventNamespace: "configurator:try:again:clicked"
                        });
                    }
                }, l("configurator-screen_retry"))) : null)))), _react2["default"].DOM.div({
                    className: "configurator_content-overlay-wrapper " + (isDisabled ? "configurator_content-is-disabled" : "")
                }, _react2["default"].DOM.table(null, _react2["default"].DOM.tbody({
                    className: "configurator_content"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "configurator_content-title"
                }, l("configurator-screen_params"))), _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "configurator_content-list"
                }, this.renderOptions({
                    drivers: drivers,
                    programs: programs,
                    togglePrograms: togglePrograms,
                    toggleDriversClass: toggleDriversClass
                }))), _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "configurator_content-folder"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "configurator_gray-btn",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _configuratorActions.openOfflineFolder)();
                    }
                }, l("configurator-screen_open-downloads")))))), isDisabled ? _react2["default"].DOM.div({
                    className: "configurator_content-overlay " + (isOverlayHidden ? "overlay-hidden" : "")
                }) : null)));
            }
        }), actions = {
            loadConfiguratorData: _configuratorActions.loadConfiguratorData,
            togglePrograms: _configuratorActions.togglePrograms,
            toggleDriversClass: _configuratorActions.toggleDriversClass,
            downloadOffline: _configuratorActions.downloadOffline
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(ConfiguratorScreen);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = undefined;
    var _ConfiguratorScreen = __webpack_require__(690), _ConfiguratorScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_ConfiguratorScreen);
    exports["default"] = _ConfiguratorScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                popup: state.app.popup,
                currentLanguage: state.lang.currentLanguage
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _programsActions = __webpack_require__(64), _utils = __webpack_require__(19);
        __webpack_require__(816);
        var ConfirmPopup = _react2["default"].createClass({
            displayName: "ConfirmPopup",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                popup: _react.PropTypes.object,
                togglePopupEula: _react.PropTypes.func.isRequired,
                closeConfirmPopup: _react.PropTypes.func.isRequired
            },
            componentDidMount: function() {
                var _props$popup$data = this.props.popup.data, program = _props$popup$data.program, zone = _props$popup$data.zone, actionParts = [ "confirm popup opened " + program.name ];
                switch (zone) {
                  case "PROGRAMS_PAGE":
                    actionParts.unshift("soft");
                    break;

                  case "PROTECT_SECURITY_PROGRAMS":
                    actionParts.unshift("protect");
                    break;

                  case "INSTALLATION_PAGE":
                    actionParts.unshift("installation");
                }
                _statistics2["default"].event({
                    action: actionParts.join(" ")
                });
            },
            renderText: function(textParts) {
                return _react2["default"].DOM.div({
                    className: "confirm-popup_description"
                }, textParts.map(function(part) {
                    if (part.href) return _react2["default"].DOM.a({
                        href: "#",
                        className: "confirm-popup_description-link",
                        onClick: function(e) {
                            e.stopPropagation();
                            e.preventDefault();
                            (0, _utils.goToUrl)(part.href);
                        }
                    }, part.text); else return part.text;
                }));
            },
            render: function() {
                var _props = this.props, popup = _props.popup, currentLanguage = _props.currentLanguage, togglePopupEula = _props.togglePopupEula, closeConfirmPopup = _props.closeConfirmPopup, isEulaChecked = popup.isEulaChecked, data = popup.data, program = data.program, zone = data.zone, extra = data.extra, isInstallation = "INSTALLATION_PAGE" === zone, icon = program.icon, name = program.name, localizedName = program.localizedName, publisher = program.publisher, isPartner = program.isPartner, confirmPopup = program.confirmPopup, title = confirmPopup.title, description = confirmPopup.description, eula = confirmPopup.eula || program.eula, policy = confirmPopup.policy || program.policy, lang = "ru" === currentLanguage ? "ru" : "en", localizedTitle = title ? title[lang] : null, localizedDescription = description[lang], isAppEsteem = window.isAppEsteem, totalDeferredRemain = void 0, deferredIds = void 0;
                if (extra && extra.deferred) {
                    totalDeferredRemain = extra.deferred.length - extra.deferred.indexOf(program);
                    deferredIds = extra.deferred.map(function(_ref) {
                        return _ref.id;
                    });
                }
                var text = isInstallation ? l("confirm_popup_install_eula") : l("confirm_popup_eula");
                text = text.replace("{{PROGRAM.NAME}}", name);
                var linkRegExp = /\{\{LINK[^\}]+\}\}/g;
                text = text.replace(linkRegExp, "|$&|");
                var textParts = text.split("|"), linkByParam = {
                    "{{LINK.EULA}}": {
                        href: eula,
                        text: l("confirm_popup_eula-link")
                    },
                    "{{LINK.POLICY}}": {
                        href: policy,
                        text: l("confirm_popup_policy-link")
                    }
                };
                textParts = text.split("|").map(function(text) {
                    return linkByParam[text] || {
                        text: text
                    };
                });
                var actionButtonText = l("confirm_popup_install_button");
                return _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                    className: "semi-transparent-overlay"
                }), _react2["default"].DOM.table({
                    className: "confirm-popup_popup"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "confirm-popup_wrapper"
                }, _react2["default"].DOM.div({
                    className: "confirm-popup_inner"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "confirm-popup_close icons-controls",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        closeConfirmPopup(!1, "close", program, zone);
                    }
                }, "✖"), _react2["default"].DOM.div({
                    className: "confirm-popup_title"
                }, l("confirm_popup_title")), _react2["default"].DOM.div({
                    className: "confirm-popup_content"
                }, _react2["default"].DOM.div({
                    className: "confirm-popup_soft clearfix"
                }, _react2["default"].DOM.div({
                    className: "confirm-popup_icon-holder"
                }, (0, _Img2["default"])({
                    src: icon,
                    className: "confirm-popup_icon",
                    width: "36",
                    height: "36"
                })), _react2["default"].DOM.div({
                    className: "confirm-popup_soft-text"
                }, _react2["default"].DOM.div({
                    className: "confirm-popup_soft-title"
                }, localizedName ? localizedName[lang] : name, window.isAppEsteem && isPartner ? _react2["default"].DOM.sup({
                    className: "program-name-sup-offer bold"
                }, "offer") : null), _react2["default"].DOM.div({
                    className: "confirm-popup_soft-vendor"
                }, publisher))), localizedTitle ? _react2["default"].DOM.div({
                    className: "confirm-popup_description-title bold"
                }, localizedTitle) : null, _react2["default"].DOM.div({
                    className: "confirm-popup_description"
                }, localizedDescription), isInstallation ? _react2["default"].DOM.table({
                    className: "confirm-popup_description-table"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "confirm-popup_checkbox-cell"
                }, _react2["default"].DOM.span(null, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input",
                    id: "confirm-popup_checkbox",
                    checked: isEulaChecked,
                    onChange: function(e) {
                        togglePopupEula(program, zone);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: "confirm-popup_checkbox",
                    className: "custom-control_checkbox-input-label"
                }))), _react2["default"].DOM.td(null, this.renderText(textParts)))) : this.renderText(textParts), _react2["default"].DOM.div(null, _react2["default"].DOM.button({
                    disabled: isEulaChecked ? !1 : "disabled",
                    onClick: function(e) {
                        return closeConfirmPopup(!0, "install", program, zone);
                    },
                    className: "confirm-popup_button cta-green-btn " + (isEulaChecked ? "" : "cta-green-btn-is-disabled")
                }, (0, _Img2["default"])({
                    src: "img/installation/confirm-popup-check-mark.png",
                    className: "confirm-popup_button-icon",
                    width: "15",
                    height: "15"
                }), actionButtonText)), _react2["default"].DOM.div(null, _react2["default"].DOM.button({
                    onClick: function(e) {
                        return closeConfirmPopup(!1, "cancel", program, zone);
                    },
                    className: "confirm-popup_button " + (isAppEsteem ? "cta-green-btn" : "confirm-popup_button confirm-popup_button-deny")
                }, isAppEsteem ? null : (0, _Img2["default"])({
                    src: "img/programs/confirm-popup-deny.png",
                    className: "confirm-popup_button-icon",
                    width: "15",
                    height: "15"
                }), l("confirm_popup_cancel_button"))), isAppEsteem && isInstallation ? _react2["default"].DOM.div(null, _react2["default"].DOM.button({
                    onClick: function(e) {
                        return closeConfirmPopup(!1, "cancel_all", program, zone, {
                            deferredIds: deferredIds
                        });
                    },
                    className: "confirm-popup_button " + (isAppEsteem ? "cta-green-btn" : "confirm-popup_button confirm-popup_button-deny")
                }, isAppEsteem ? null : (0, _Img2["default"])({
                    src: "img/programs/confirm-popup-deny.png",
                    className: "confirm-popup_button-icon",
                    width: "15",
                    height: "15"
                }), l("confirm_popup_cancel_all_button").replace("{{COUNT}}", totalDeferredRemain))) : null)))))));
            }
        }), actions = {
            togglePopupEula: _programsActions.togglePopupEula,
            closeConfirmPopup: _programsActions.closeConfirmPopup
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(ConfirmPopup);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function getScrollTop() {
            return document.documentElement && document.documentElement.scrollTop || document.body.scrollTop;
        }
        function getNodeOffset(node) {
            return node.getDOMNode().getBoundingClientRect().top + getScrollTop() - (document.documentElement.clientTop || 0);
        }
        function mapState(state) {
            return {
                data: state.diagnostics.data,
                isLoading: state.diagnostics.isLoading
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _flatten = __webpack_require__(253), _flatten2 = _interopRequireDefault(_flatten), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _diagnosticsActions = __webpack_require__(204), _throttle = __webpack_require__(539), _throttle2 = _interopRequireDefault(_throttle), _ohm = __webpack_require__(761), _ohm2 = _interopRequireDefault(_ohm), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion);
        __webpack_require__(817);
        var Diagnostics = _react2["default"].createClass({
            displayName: "Diagnostics",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                updateDiagnosticInfo: _react.PropTypes.func.isRequired,
                diagnostics: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            getInitialState: function() {
                return {
                    documentScrollTop: 0,
                    expandedBlock: null,
                    expandedSection: null,
                    isOpened: !1
                };
            },
            onOpened: function() {
                _ohm2["default"].Run();
                var updateDiagnosticInfo = this.props.updateDiagnosticInfo;
                this.updateInterval = setInterval(updateDiagnosticInfo, 1e4);
                this.scrollHandler = window.onscroll = (0, _throttle2["default"])(this.handleScroll, 1500);
                this.calcLayout();
                this.calcLayoutTimer = setTimeout(this.calcLayout, 1e3);
            },
            onClosed: function() {
                try {
                    clearInterval(this.updateInterval);
                } catch (e) {}
                try {
                    clearTimeout(this.calcLayoutTimer);
                } catch (e) {}
                try {
                    this.scrollHandler.cancel();
                } catch (e) {}
                window.onscroll = null;
            },
            componentDidMount: function() {
                var _this = this;
                this.checkIsOpenedInterval = setInterval(function() {
                    try {
                        var _props = _this.props, page = _props.page;
                        if (_props.isLoading) ; else if ("DIAGNOSTICS" === page) {
                            if (!_this.state.isOpened) {
                                _this.setState({
                                    isOpened: !0
                                });
                                _this.onOpened();
                            }
                        } else if (_this.state.isOpened) {
                            _this.setState({
                                isOpened: !1
                            });
                            _this.onClosed();
                        }
                    } catch (e) {
                        clearInterval(_this.interval);
                    }
                }, 2e3);
            },
            componentWillUnmount: function() {
                try {
                    clearInterval(this.checkIsOpenedInterval);
                } catch (e) {}
                this.onClosed();
            },
            componentDidUpdate: function() {
                var _props2 = this.props, page = _props2.page;
                if (!_props2.isLoading && "DIAGNOSTICS" === page) this.calcLayout();
            },
            calcLayout: function() {
                this.blockOffsets = this.getBlockLayoutFromDOM();
                this.sectionOffsets = this.getSectionLayoutFromDOM();
                this.handleScroll();
            },
            render: function() {
                var _this2 = this, _props3 = this.props, page = _props3.page, data = _props3.data, hideComponent = "DIAGNOSTICS" !== page;
                return _react2["default"].DOM.td({
                    className: "app-container " + (hideComponent ? "display-none" : "")
                }, _react2["default"].DOM.div({
                    className: "app-container_inner"
                }, _react2["default"].DOM.div(null, _react2["default"].DOM.h1({
                    className: "screen-title",
                    onMouseDown: function(e) {
                        e.preventDefault();
                    },
                    id: "top",
                    style: {
                        paddingBottom: "20px"
                    }
                }, l("diagnostics_section_title")), _react2["default"].DOM.table({
                    width: "100%",
                    style: {
                        minWidth: "500px",
                        marginTop: "30px",
                        marginBottom: "200px"
                    },
                    className: "diagnostic_holder"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    width: "100%",
                    style: {
                        verticalAlign: "top"
                    }
                }, Object.entries(data).map(function(block) {
                    return _this2.renderBlock(block);
                })))))));
            },
            renderBlock: function(_ref) {
                var _this3 = this, blockName = _ref[0], blockContents = _ref[1];
                return _react2["default"].DOM.div(null, _react2["default"].DOM.h1({
                    className: "screen-title",
                    style: {
                        padding: "10px 0"
                    },
                    ref: "block_" + blockName
                }, blockName), Object.entries(blockContents).map(function(section) {
                    return _this3.renderSection(section, blockName);
                }));
            },
            renderSection: function(_ref2, blockName) {
                var _this4 = this, sectionName = _ref2[0], sectionContents = _ref2[1];
                return _react2["default"].DOM.div(null, _react2["default"].DOM.h3({
                    ref: "section_" + blockName + "_" + sectionName
                }, sectionName), !Array.isArray(sectionContents) ? Object.entries(sectionContents).map(function(table) {
                    return _this4.renderTable(table);
                }) : Object.entries(this.formatArray(sectionContents)).map(function(table) {
                    return _this4.renderTable(table);
                }));
            },
            renderTable: function(_ref3) {
                var _this5 = this, tableName = _ref3[0], tableContents = _ref3[1];
                return _react2["default"].DOM.table({
                    width: "100%",
                    className: "diagnostic-list_table"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "diagnostic-list_table-head",
                    colSpan: "2"
                }, tableName)), (0, _flatten2["default"])(Object.entries(tableContents).map(function(_ref4) {
                    var propertyName = _ref4[0], singleOrMultiRowValue = _ref4[1];
                    if (Array.isArray(singleOrMultiRowValue)) return singleOrMultiRowValue.map(function(propertyValue) {
                        return [ propertyName, propertyValue ];
                    }); else return [ [ propertyName, singleOrMultiRowValue ] ];
                })).map(function(row) {
                    return _this5.renderRow(row);
                })));
            },
            renderRow: function(_ref5) {
                var propertyName = _ref5[0], propertyValue = _ref5[1];
                return _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "diagnostic-list_table-cell",
                    width: "30%"
                }, propertyName), _react2["default"].DOM.td({
                    className: "diagnostic-list_table-cell",
                    width: "70%"
                }, propertyValue));
            },
            renderNav: function(blocks) {
                var _this6 = this, _state = this.state, documentScrollTop = _state.documentScrollTop, expandedBlock = _state.expandedBlock, expandedSection = _state.expandedSection;
                return _react2["default"].DOM.div({
                    className: "bs-docs-sidebar fixed",
                    style: this.shouldPolyfillFixed() ? {
                        position: "absolute",
                        top: documentScrollTop
                    } : null
                }, _react2["default"].DOM.ul({
                    id: "sidebar",
                    className: "nav_list-holder nav nav-stacked"
                }, Object.entries(blocks).map(function(_ref6) {
                    var blockName = _ref6[0], blockContents = _ref6[1];
                    return _react2["default"].DOM.li({
                        className: (expandedBlock === "block_" + blockName ? "active" : "") + " nav_list-holder-item"
                    }, _react2["default"].DOM.a({
                        href: "#",
                        className: "nav_list-link",
                        onClick: function(e) {
                            return _this6.handleBlockNavigate(e, "block_" + blockName);
                        }
                    }, blockName), _react2["default"].DOM.ul({
                        className: "nav_sublist-holder nav nav-stacked"
                    }, Object.entries(blockContents).map(function(_ref7) {
                        var sectionName = _ref7[0];
                        _ref7[1];
                        return _react2["default"].DOM.li(null, _react2["default"].DOM.a({
                            href: "#",
                            className: "nav_sublist-link " + (expandedSection === "section_" + blockName + "_" + sectionName ? "active" : ""),
                            onClick: function(e) {
                                return _this6.handleNavigate(e, "section_" + blockName + "_" + sectionName);
                            }
                        }, sectionName));
                    })));
                })), _react2["default"].DOM.a({
                    className: "back-to-top",
                    href: "#",
                    onClick: this.handleTop
                }, "Back to top"));
            },
            handleBlockNavigate: function(e, name) {
                this.setState({
                    expandedBlock: name
                });
                this.handleNavigate(e, name);
            },
            handleNavigate: function(e, name) {
                e.preventDefault();
                var node = this.refs[name], offsetTop = getNodeOffset(node);
                window.scrollTo(0, offsetTop);
                this.handleScroll();
            },
            handleTop: function(e) {
                e.preventDefault();
                window.scrollTo(0, 0);
            },
            handleScroll: function() {
                var _findActiveElement = this.findActiveElement(this.blockOffsets), blockName = _findActiveElement[0], blockIndex = _findActiveElement[1], _findActiveElement2 = this.findActiveElement(this.sectionOffsets[blockIndex]), sectionName = _findActiveElement2[0];
                this.setState({
                    documentScrollTop: getScrollTop(),
                    expandedBlock: "block_" + blockName,
                    expandedSection: "section_" + blockName + "_" + sectionName
                });
            },
            findActiveElement: function(offsets) {
                var currentOffset = getScrollTop() + 10, match = offsets.findIndex(function(_ref8) {
                    var offset = (_ref8[0], _ref8[1]);
                    return currentOffset < offset;
                });
                if (-1 === match) {
                    var index = offsets.length - 1;
                    return [ offsets[index][0], index ];
                } else if (0 === match) {
                    var _offsets$_index = offsets[0], _name = _offsets$_index[0];
                    return [ _name, 0 ];
                } else if (match) {
                    var _index2 = match - 1, _offsets$_index2 = offsets[_index2], _name2 = _offsets$_index2[0];
                    return [ _name2, _index2 ];
                }
            },
            getBlockLayoutFromDOM: function() {
                var _this7 = this;
                return Object.keys(this.props.data).map(function(blockName) {
                    return [ blockName, getNodeOffset(_this7.refs["block_" + blockName]) ];
                });
            },
            getSectionLayoutFromDOM: function() {
                var _this8 = this, data = this.props.data;
                return Object.entries(data).map(function(_ref9) {
                    var blockName = _ref9[0], blockContents = _ref9[1];
                    return Object.entries(blockContents).map(function(_ref10) {
                        var sectionName = _ref10[0];
                        _ref10[1];
                        return [ sectionName, getNodeOffset(_this8.refs["section_" + blockName + "_" + sectionName]) ];
                    });
                });
            },
            formatArray: function(arr) {
                var res = {};
                arr.forEach(function(val, ind) {
                    res["# " + (ind + 1)] = val;
                });
                return res;
            },
            shouldPolyfillFixed: function() {
                var internetExplorerVersion = (0, _getInternetExplorerVersion2["default"])();
                if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 9) return !0; else return !1; else return !1;
            }
        }), actions = {
            updateDiagnosticInfo: _diagnosticsActions.updateDiagnosticInfo
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(Diagnostics);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _trimVendorName = __webpack_require__(109), _trimVendorName2 = _interopRequireDefault(_trimVendorName), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _deviceClasses = __webpack_require__(106), _deviceClasses2 = _interopRequireDefault(_deviceClasses);
        exports["default"] = _react2["default"].createClass({
            displayName: "DeviceRow",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                type: _react.PropTypes.string.isRequired,
                deviceId: _react.PropTypes.string.isRequired,
                isChecked: _react.PropTypes.bool,
                isExpanded: _react.PropTypes.bool,
                currentDriver: _react.PropTypes.object,
                selectedDriver: _react.PropTypes.object,
                currentLanguage: _react.PropTypes.string.isRequired,
                openDeviceManagerFor: _react.PropTypes.func.isRequired,
                toggleDevice: _react.PropTypes.func,
                expandDevice: _react.PropTypes.func
            },
            renderBrokenDevice: function() {
                var _props = this.props, deviceId = _props.deviceId, isExpanded = _props.isExpanded, expandDevice = _props.expandDevice;
                return _react2["default"].DOM.tr({
                    className: "drivers-screen_list-row drivers-screen_list-row-head"
                }, _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-name"
                }, _react2["default"].DOM.table(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                    className: "drivers-screen_list-cell-icon"
                }, (0, _Img2["default"])({
                    src: "img/device-class/undefined-device.png",
                    className: "drivers-screen_list-info-link-icon",
                    width: "30",
                    height: "30"
                }))), _react2["default"].DOM.td(null, _react2["default"].DOM.a({
                    href: "#",
                    className: "drivers-screen_list-name-title",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        expandDevice(deviceId, !isExpanded);
                    }
                }, l("drivers_screen_list-name-title-unknown"), !0 ? (0, _Img2["default"])({
                    src: isExpanded ? "img/screens/icon-driver-row-collapse.png" : "img/screens/icon-driver-row-expand.png",
                    className: "drivers-screen_list-name-arrow",
                    width: 13,
                    height: 6
                }) : null), _react2["default"].DOM.div({
                    className: "drivers-screen_device-info-text-wrapper"
                }, _react2["default"].DOM.span({
                    className: "drivers-screen_list-name-text"
                }, deviceId))))), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell"
                }, _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-cell-version"
                }, _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-arrow-col"
                }, _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })));
            },
            render: function() {
                var _props2 = this.props, type = _props2.type, deviceId = _props2.deviceId, isChecked = _props2.isChecked, isExpanded = _props2.isExpanded, currentDriver = _props2.currentDriver, selectedDriver = _props2.selectedDriver, openDeviceManagerFor = _props2.openDeviceManagerFor, toggleDevice = _props2.toggleDevice, expandDevice = _props2.expandDevice;
                if ("broken" === type) return this.renderBrokenDevice();
                var name = selectedDriver.name, deviceClass = selectedDriver["class"], _selectedDriver$manuf = selectedDriver.manufacturer, manufacturer = _selectedDriver$manuf === undefined ? "" : _selectedDriver$manuf, deviceClassName = (0, 
                _deviceClasses2["default"])(l)[deviceClass].morpher.single.main, title = deviceClassName + " " + (0, 
                _trimVendorName2["default"])(manufacturer, "", !1), currentVersion = ("notUpdated" === type || "installed" === type ? currentDriver.version : "") || "", currentDate = ("notUpdated" === type || "installed" === type ? currentDriver.date : "") || "", selectedVersion = ("notInstalled" === type || "notUpdated" === type ? selectedDriver.version : "") || "";
                return _react2["default"].DOM.tr({
                    className: "drivers-screen_list-row drivers-screen_list-row-head"
                }, _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-name"
                }, _react2["default"].DOM.table(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                    className: "drivers-screen_list-cell-icon"
                }, (0, _Img2["default"])({
                    src: "img/device-class/" + deviceClass + ".png",
                    className: "drivers-screen_list-info-link-icon",
                    width: "30",
                    height: "30"
                }))), _react2["default"].DOM.td(null, _react2["default"].DOM.a({
                    href: "#",
                    className: "drivers-screen_list-name-title",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        expandDevice(deviceId, !isExpanded);
                    }
                }, title, !0 ? (0, _Img2["default"])({
                    src: isExpanded ? "img/screens/icon-driver-row-collapse.png" : "img/screens/icon-driver-row-expand.png",
                    className: "drivers-screen_list-name-arrow",
                    width: 13,
                    height: 6
                }) : null), _react2["default"].DOM.div({
                    className: "drivers-screen_device-info-text-wrapper"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "drivers-screen_list-name-link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        openDeviceManagerFor(deviceId);
                    }
                }, name))))), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_driver-status"
                }, this.renderDeviceCaption({
                    type: type,
                    currentVersion: currentVersion,
                    currentDate: currentDate
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-cell-version"
                }, this.renderDeviceVersion({
                    type: type,
                    selectedVersion: selectedVersion
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-arrow-col"
                }, "notInstalled" === type || "notUpdated" === type ? _react2["default"].DOM.span(null, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input",
                    id: deviceId,
                    checked: isChecked,
                    onChange: function(e) {
                        toggleDevice(deviceId, e.target.checked);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: deviceId,
                    className: "custom-control_checkbox-input-label"
                })) : null, _react2["default"].DOM.div({
                    className: "drivers-screen_list-border-top"
                }), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })));
            },
            renderDeviceCaption: function(_ref) {
                var type = _ref.type, currentVersion = _ref.currentVersion;
                _ref.currentDate;
                switch (type) {
                  case "notUpdated":
                    return _react2["default"].DOM.div({
                        className: "drivers-screen_list-row-install-caption clearfix"
                    }, _react2["default"].DOM.div({
                        className: "drivers-screen_install-caption-wrapper"
                    }, _react2["default"].DOM.div(null, l("device_row_current_version")), _react2["default"].DOM.div(null, currentVersion)), (0, 
                    _Img2["default"])({
                        src: "img/driver-row-arrow.png",
                        className: "drivers-screen_list-row-install-icon",
                        width: "18",
                        height: "11",
                        style: {
                            marginTop: "12px"
                        }
                    }));

                  case "installed":
                    return _react2["default"].DOM.div({
                        className: "drivers-screen_list-row-install-caption clearfix"
                    }, _react2["default"].DOM.div({
                        className: "drivers-screen_install-caption-wrapper"
                    }, _react2["default"].DOM.div(null, l("device_row_current_version")), _react2["default"].DOM.div(null, currentVersion)), (0, 
                    _Img2["default"])({
                        style: {
                            visibility: "hidden"
                        },
                        src: "img/driver-row-arrow.png",
                        className: "drivers-screen_list-row-install-icon",
                        width: "18",
                        height: "11"
                    }));

                  default:
                    return null;
                }
            },
            renderDeviceVersion: function(_ref2) {
                var type = _ref2.type, selectedVersion = _ref2.selectedVersion;
                switch (type) {
                  case "notInstalled":
                    return _react2["default"].DOM.div({
                        className: "screen_list-cell-version-text"
                    }, l("device_row_installation"), _react2["default"].DOM.br(null), selectedVersion);

                  case "notUpdated":
                    return _react2["default"].DOM.div({
                        className: "screen_list-cell-version-text"
                    }, l("device_row_update"), _react2["default"].DOM.br(null), selectedVersion);

                  default:
                    return null;
                }
            },
            renderDate: function(dateString) {
                if (!dateString) return dateString; else return [].concat(dateString.split("-")).reverse().join(".");
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _logs = __webpack_require__(4), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _os = __webpack_require__(14), _utils = __webpack_require__(19), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _getDeviceProblemName = __webpack_require__(800), _getDeviceProblemName2 = _interopRequireDefault(_getDeviceProblemName);
        __webpack_require__(329);
        exports["default"] = _react2["default"].createClass({
            displayName: "DriverRow",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                id: _react.PropTypes.string.isRequired,
                _deviceId: _react.PropTypes.string.isRequired,
                driverDeviceId: _react.PropTypes.string.isRequired,
                date: _react.PropTypes.string,
                manufacturer: _react.PropTypes.string,
                version: _react.PropTypes.string,
                rank: _react.PropTypes.number,
                section: _react.PropTypes.string,
                inf: _react.PropTypes.string,
                systems: _react.PropTypes.array,
                isCurrent: _react.PropTypes.bool,
                isRecommended: _react.PropTypes.bool,
                isChecked: _react.PropTypes.bool,
                menuIsOpened: _react.PropTypes.bool,
                problem: _react.PropTypes.string,
                driver: _react.PropTypes.object,
                currentLanguage: _react.PropTypes.string.isRequired,
                selectDeviceDriver: _react.PropTypes.func.isRequired,
                viewOptions: _react.PropTypes.object,
                openDriverMenu: _react.PropTypes.func.isRequired,
                installSingleDriver: _react.PropTypes.func.isRequired,
                isLast: _react.PropTypes.bool,
                driverIndex: _react.PropTypes.number,
                driverLength: _react.PropTypes.number
            },
            renderDate: function(dateString) {
                if (!dateString) return dateString; else return [].concat(dateString.split("-")).reverse().join(".");
            },
            getStarsCount: function(rank) {
                var result = 0;
                if ("number" == typeof rank) try {
                    result = 1 + Math.round(4 * rank / 3);
                } catch (err) {
                    (0, _logs.log)("[New drivers screen] calculating driver rank failed:", err);
                }
                return result;
            },
            renderStars: function(starsCount) {
                for (var stars = [], i = 0; i < 5; i++) stars.push((0, _Img2["default"])({
                    key: "driver_row_stars_" + i,
                    className: "drivers-screen_caption-star-icon",
                    src: i < starsCount ? "img/programs/star-full.png" : "img/programs/star-empty.png"
                }));
                return stars;
            },
            renderCurrentDriver: function() {
                var _props = this.props, driverDeviceId = _props.driverDeviceId, _props$date = _props.date, date = _props$date === undefined ? "" : _props$date, _props$version = _props.version, version = _props$version === undefined ? "" : _props$version, viewOptions = _props.viewOptions, isLast = _props.isLast, driverIndex = _props.driverIndex, driverLength = _props.driverLength;
                return _react2["default"].DOM.tr({
                    className: "drivers-screen_list-row drivers-screen_list-dropdown " + (isLast ? "is-last" : ""),
                    style: {
                        zIndex: driverLength - driverIndex
                    }
                }, _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-name drivers-screen_driver-text drivers-screen_list-name-hide-radio",
                    title: ""
                }, _react2["default"].DOM.input({
                    type: "radio",
                    className: "custom-control_radio-input",
                    style: {
                        visibility: "hidden"
                    }
                }), _react2["default"].DOM.label({
                    className: "custom-control_radio-input-label"
                }, _react2["default"].DOM.span({
                    className: "drivers-screen_list-name-label"
                }, viewOptions.version ? _react2["default"].DOM.span({
                    title: l("driver_row_version")
                }, l("driver_row_version"), ": ", version) : null, viewOptions.version && viewOptions.date ? " / " : null, viewOptions.date ? _react2["default"].DOM.span({
                    title: l("driver_row_date")
                }, l("driver_row_date"), ": ", this.renderDate(date)) : null, _react2["default"].DOM.br(null), viewOptions.deviceId ? _react2["default"].DOM.span({
                    title: "DeviceID"
                }, driverDeviceId) : null)), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_driver-status"
                }, _react2["default"].DOM.span({
                    className: "drivers-screen_driver-status-text"
                }, l("drivers_row_current_driver")), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell"
                }, _react2["default"].DOM.div({
                    className: "drivers-screen_list-cell-rate"
                }, this.renderStars(0)), _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })), _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell"
                }, _react2["default"].DOM.div({
                    className: "drivers-screen_list-border"
                })));
            },
            renderPromblem: function() {
                var problem = this.props.problem;
                return _react2["default"].DOM.tr({
                    className: "drivers-screen_list-row"
                }, _react2["default"].DOM.td({
                    className: "drivers-screen_list-cell drivers-screen_list-problem",
                    colSpan: "4"
                }, _react2["default"].DOM.div({
                    className: "drivers-screen_list-problem-text"
                }, (0, _getDeviceProblemName2["default"])(l, problem))));
            },
            renderSystems: function(systems) {
                var result = [];
                systems.forEach(function(system) {
                    var _system$split = system.split("x"), ver = _system$split[0], arch = _system$split[1];
                    result.push(_os.osVersions[ver] + " (x" + arch + ")");
                });
                result = "Window " + result.join(", ");
                return result;
            },
            getDriverState: function(state) {
                switch (state) {
                  case "install":
                    return l("driver_row_driver-menu-state-install");

                  case "update":
                    return l("driver_row_driver-menu-state-update");

                  case "rollback":
                    return l("driver_row_driver-menu-state-rollback");
                }
            },
            render: function() {
                var _props2 = this.props, id = _props2.id, _deviceId = _props2._deviceId, driverDeviceId = _props2.driverDeviceId, _props2$date = _props2.date, date = _props2$date === undefined ? "" : _props2$date, manufacturer = _props2.manufacturer, _props2$version = _props2.version, version = _props2$version === undefined ? "" : _props2$version, rank = _props2.rank, inf = _props2.inf, section = _props2.section, systems = _props2.systems, isCurrent = _props2.isCurrent, isRecommended = _props2.isRecommended, isChecked = _props2.isChecked, menuIsOpened = _props2.menuIsOpened, problem = _props2.problem, driver = _props2.driver, currentLanguage = _props2.currentLanguage, selectDeviceDriver = _props2.selectDeviceDriver, viewOptions = _props2.viewOptions, openDriverMenu = _props2.openDriverMenu, installSingleDriver = _props2.installSingleDriver, isLast = _props2.isLast, driverIndex = _props2.driverIndex, driverLength = _props2.driverLength, starsCount = this.getStarsCount(rank), checkboxId = _deviceId + "__" + id;
                if (problem) return this.renderPromblem(); else if (isCurrent) return this.renderCurrentDriver(); else {
                    var device = {
                        id: _deviceId,
                        recommendedDriver: driver,
                        deviceId: driverDeviceId
                    }, state = driver.state, deviceId = driver.deviceId, catalogUrl = "https://drp.su/" + ("ru" === currentLanguage ? "ru" : "en") + "/hwids/" + encodeURIComponent(deviceId) + "?utm_source=driverpack&utm_campaign=kebab_menu&utm_medium=online";
                    return _react2["default"].DOM.tr({
                        className: "drivers-screen_list-row drivers-screen_list-dropdown " + (isRecommended && isChecked ? "is-recommended" : "") + " " + (isChecked ? "is-checked" : "") + " " + (isLast ? "is-last" : ""),
                        style: {
                            zIndex: driverLength - driverIndex
                        },
                        onClick: function(e) {
                            return openDriverMenu(id, _deviceId, !1);
                        }
                    }, _react2["default"].DOM.td({
                        className: "drivers-screen_list-cell drivers-screen_list-name drivers-screen_driver-text",
                        title: ""
                    }, _react2["default"].DOM.input({
                        type: "radio",
                        className: "custom-control_radio-input",
                        id: checkboxId,
                        checked: isChecked,
                        onChange: function(e) {
                            selectDeviceDriver({
                                _deviceId: _deviceId,
                                driverId: id
                            });
                        }
                    }), _react2["default"].DOM.label({
                        htmlFor: checkboxId,
                        className: "custom-control_radio-input-label"
                    }, _react2["default"].DOM.span({
                        className: "drivers-screen_list-name-label"
                    }, viewOptions.version ? _react2["default"].DOM.span({
                        title: l("driver_row_version")
                    }, l("driver_row_version"), ": ", version) : null, viewOptions.version && viewOptions.date ? " / " : null, viewOptions.date ? _react2["default"].DOM.span({
                        title: l("driver_row_date")
                    }, l("driver_row_date"), ": ", this.renderDate(date)) : null, viewOptions.deviceId ? _react2["default"].DOM.span(null, _react2["default"].DOM.br(null), _react2["default"].DOM.span({
                        title: "DeviceID"
                    }, driverDeviceId)) : null, viewOptions.vendor ? _react2["default"].DOM.span(null, _react2["default"].DOM.br(null), _react2["default"].DOM.span({
                        title: l("driver_row_vendor")
                    }, manufacturer)) : null, viewOptions.inf || viewOptions.section ? _react2["default"].DOM.br(null) : null, viewOptions.inf ? _react2["default"].DOM.span({
                        title: l("driver_row_inf")
                    }, inf) : null, viewOptions.inf && viewOptions.section ? " / " : null, viewOptions.section ? _react2["default"].DOM.span({
                        title: l("driver_row_section")
                    }, section) : null, viewOptions.os ? _react2["default"].DOM.span(null, _react2["default"].DOM.br(null), _react2["default"].DOM.span({
                        title: l("driver_row_os")
                    }, this.renderSystems(systems))) : null)), _react2["default"].DOM.div({
                        className: "drivers-screen_list-border"
                    })), _react2["default"].DOM.td({
                        className: "drivers-screen_list-cell drivers-screen_list-driver-recommended drivers-screen_driver-status"
                    }, _react2["default"].DOM.span({
                        className: "drivers-screen_driver-status-text"
                    }, isRecommended ? l("drivers_row_recommended") : ""), _react2["default"].DOM.div({
                        className: "drivers-screen_list-border"
                    })), _react2["default"].DOM.td({
                        className: "drivers-screen_list-cell"
                    }, _react2["default"].DOM.div({
                        className: "drivers-screen_list-cell-rate"
                    }, this.renderStars(starsCount)), _react2["default"].DOM.div({
                        className: "drivers-screen_list-border"
                    })), _react2["default"].DOM.td({
                        className: "drivers-screen_list-cell"
                    }, _react2["default"].DOM.div({
                        className: "drivers-screen_driver-menu"
                    }, _react2["default"].DOM.a({
                        href: "#",
                        className: "drivers-screen_driver-menu-button",
                        onClick: function(e) {
                            e.stopPropagation();
                            e.preventDefault();
                            openDriverMenu(id, _deviceId, !menuIsOpened);
                        }
                    }, (0, _Img2["default"])({
                        src: "img/screens/kebab-icon.png",
                        width: "5",
                        height: "19"
                    })), menuIsOpened ? _react2["default"].DOM.div({
                        className: "drivers-screen_driver-menu-list"
                    }, _react2["default"].DOM.a({
                        href: "#",
                        className: "drivers-screen_driver-menu-list-link",
                        onClick: function(e) {
                            e.stopPropagation();
                            e.preventDefault();
                            installSingleDriver(device, {
                                recommended: isRecommended,
                                alternative: !isRecommended
                            });
                        }
                    }, this.getDriverState(state)), _react2["default"].DOM.a({
                        href: "#",
                        className: "drivers-screen_driver-menu-list-link",
                        onClick: function(e) {
                            e.stopPropagation();
                            e.preventDefault();
                            _statistics2["default"].event({
                                action: "drivers catalog link clicked",
                                counters: [ "debug" ]
                            });
                            (0, _utils.goToUrl)(catalogUrl);
                        }
                    }, l("driver_row_driver-menu-search"))) : null), _react2["default"].DOM.div({
                        className: "drivers-screen_list-border"
                    })));
                }
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
    exports["default"] = _react2["default"].createClass({
        displayName: "DriverUtilRow",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            program: _react.PropTypes.object.isRequired,
            zone: _react.PropTypes.string.isRequired,
            currentLanguage: _react.PropTypes.string.isRequired,
            toggleProgram: _react.PropTypes.func.isRequired
        },
        render: function() {
            var _props = this.props, program = _props.program, zone = _props.zone, toggleProgram = _props.toggleProgram, id = program.ID, isChecked = program.isChecked, name = program.name;
            return _react2["default"].DOM.tr({
                className: "drivers-screen_list-row drivers-screen_list-row-util"
            }, _react2["default"].DOM.td({
                className: "drivers-screen_list-cell drivers-screen_list-name",
                colSpan: "2"
            }, _react2["default"].DOM.table(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                className: "drivers-screen_list-cell-icon"
            }, (0, _Img2["default"])({
                src: "img/device-class/other.png",
                className: "drivers-screen_list-info-link-icon",
                width: "30",
                height: "30"
            })), _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                className: "drivers-screen_list-name-title"
            }, name)))), _react2["default"].DOM.div({
                className: "drivers-screen_list-border-top"
            }), _react2["default"].DOM.div({
                className: "drivers-screen_list-border"
            })), _react2["default"].DOM.td({
                className: "drivers-screen_list-cell drivers-screen_list-arrow-col"
            }, _react2["default"].DOM.input({
                type: "checkbox",
                className: "custom-control_checkbox-input",
                id: name,
                checked: isChecked,
                onChange: function(e) {
                    toggleProgram(id, !isChecked, zone);
                }
            }), _react2["default"].DOM.label({
                htmlFor: name,
                className: "custom-control_checkbox-input-label"
            }), _react2["default"].DOM.div({
                className: "drivers-screen_list-border-top"
            }), _react2["default"].DOM.div({
                className: "drivers-screen_list-border"
            })));
        }
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(818);
        exports["default"] = _react2["default"].createClass({
            displayName: "DriversFooter",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                counter: _react.PropTypes.number.isRequired,
                installClickHandler: _react.PropTypes.func.isRequired
            },
            render: function() {
                var _props = this.props, counter = _props.counter, installClickHandler = _props.installClickHandler, disableButton = !counter;
                return _react2["default"].DOM.button({
                    className: "cta-green-btn cta-btn-68 drivers-footer_btn " + (disableButton ? "cta-green-btn-is-disabled" : ""),
                    disabled: disableButton,
                    onClick: function(e) {
                        installClickHandler();
                    }
                }, (0, _Img2["default"])({
                    src: "img/programs/btn-icon-install-all-soft.png",
                    className: "cta-green-btn-install-all-icon",
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text drivers-footer_btn-span",
                    dangerouslySetInnerHTML: {
                        __html: l("drivers_btn_install_all").replace("{{COUNT}}", counter)
                    }
                }));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(819);
        exports["default"] = _react2["default"].createClass({
            displayName: "DriversHeader",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                counter: _react.PropTypes.number.isRequired,
                isAdminMode: _react.PropTypes.bool.isRequired,
                expertModeClicked: _react.PropTypes.bool.isRequired,
                isNotRecommendedVisible: _react.PropTypes.bool.isRequired,
                toggleNotRecommendedVisibility: _react.PropTypes.func.isRequired,
                toggleAdminMode: _react.PropTypes.func.isRequired,
                installClickHandler: _react.PropTypes.func.isRequired,
                navigate: _react.PropTypes.func.isRequired
            },
            render: function() {
                var _props = this.props, counter = _props.counter, isAdminMode = _props.isAdminMode, isNotRecommendedVisible = _props.isNotRecommendedVisible, toggleNotRecommendedVisibility = _props.toggleNotRecommendedVisibility, toggleAdminMode = _props.toggleAdminMode, installClickHandler = _props.installClickHandler, navigate = _props.navigate, disableButton = !counter;
                return _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                    className: "drivers-header"
                }, _react2["default"].DOM.div({
                    style: {
                        paddingLeft: "32px"
                    }
                }, _react2["default"].DOM.h1({
                    className: "screen-title"
                }, l("drivers_header_driver_for_computer"))), _react2["default"].DOM.table(null, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "drivers-header_header-btn"
                }, _react2["default"].DOM.button({
                    className: "cta-green-btn cta-btn-68 drivers-header_btn " + (disableButton ? "cta-green-btn-is-disabled" : ""),
                    disabled: disableButton,
                    onClick: function(e) {
                        installClickHandler();
                    }
                }, (0, _Img2["default"])({
                    src: "img/programs/btn-icon-install-all-soft.png",
                    className: "cta-green-btn-install-all-icon",
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text drivers-header_btn-span",
                    dangerouslySetInnerHTML: {
                        __html: l("drivers_btn_install_all").replace("{{COUNT}}", counter)
                    }
                })), _react2["default"].DOM.div({
                    className: "drivers-header_btn-caption-holder"
                }, _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        navigate("SETTINGS");
                    },
                    className: "drivers-header_btn-caption"
                }, l("drivers_btn_install_all_caption")))), _react2["default"].DOM.td({
                    className: "drivers-header_controls"
                }, _react2["default"].DOM.div({
                    className: "drivers-header_controls-switch"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "drivers-header_controls-checkbox custom-control_switch-input",
                    checked: isNotRecommendedVisible,
                    id: "drivers-header_controls-checkbox-1",
                    onChange: function(e) {
                        toggleNotRecommendedVisibility();
                    }
                }), _react2["default"].DOM.label({
                    className: "custom-control_switch-label",
                    htmlFor: "drivers-header_controls-checkbox-1"
                }), _react2["default"].DOM.label({
                    className: "drivers-header_controls-text",
                    htmlFor: "drivers-header_controls-checkbox-1"
                }, l("drivers_header_show_already_installed"))), _react2["default"].DOM.div({
                    className: "drivers-header_controls-switch"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "drivers-header_controls-checkbox custom-control_switch-input",
                    checked: isAdminMode,
                    id: "drivers-header_controls-checkbox-2",
                    onChange: function(e) {
                        toggleAdminMode();
                    }
                }), _react2["default"].DOM.label({
                    className: "custom-control_switch-label",
                    htmlFor: "drivers-header_controls-checkbox-2"
                }), _react2["default"].DOM.label({
                    className: "drivers-header_controls-text",
                    htmlFor: "drivers-header_controls-checkbox-2"
                }, l("drivers_header_show_additional_info")))))))));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _driversActions = __webpack_require__(122), _programsActions = __webpack_require__(64), _menuActions = __webpack_require__(38), _DriversHeader = __webpack_require__(698), _DriversHeader2 = _interopRequireDefault(_DriversHeader), _DeviceRow = __webpack_require__(694), _DeviceRow2 = _interopRequireDefault(_DeviceRow), _DriverRow = __webpack_require__(695), _DriverRow2 = _interopRequireDefault(_DriverRow), _DriverUtilRow = __webpack_require__(696), _DriverUtilRow2 = _interopRequireDefault(_DriverUtilRow), _DriversFooter = __webpack_require__(697), _DriversFooter2 = _interopRequireDefault(_DriversFooter), _ZeroDrivers = __webpack_require__(700), _ZeroDrivers2 = _interopRequireDefault(_ZeroDrivers), _getViewOptionName = __webpack_require__(701), _getViewOptionName2 = _interopRequireDefault(_getViewOptionName), _driversPrograms = __webpack_require__(29);
        __webpack_require__(329);
        var DriversScreen = _react2["default"].createClass({
            displayName: "DriversScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                drivers: _react.PropTypes.object.isRequired,
                programs: _react.PropTypes.array.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                selectDeviceDriver: _react.PropTypes.func.isRequired,
                openDeviceManagerFor: _react.PropTypes.func.isRequired,
                toggleDevice: _react.PropTypes.func.isRequired,
                expandDevice: _react.PropTypes.func.isRequired,
                openDriverMenu: _react.PropTypes.func.isRequired,
                toggleNotInstalled: _react.PropTypes.func.isRequired,
                toggleNotUpdated: _react.PropTypes.func.isRequired,
                toggleNotRecommendedVisibility: _react.PropTypes.func.isRequired,
                expandViewOptionsDropdown: _react.PropTypes.func.isRequired,
                toggleViewOption: _react.PropTypes.func.isRequired,
                toggleProgram: _react.PropTypes.func.isRequired,
                toggleDriverUtilities: _react.PropTypes.func.isRequired,
                installAll: _react.PropTypes.func.isRequired,
                installSingleDriver: _react.PropTypes.func.isRequired,
                navigate: _react.PropTypes.func.isRequired,
                openSystemMenu: _react.PropTypes.func.isRequired,
                expertModeClicked: _react.PropTypes.bool.isRequired,
                checkCloudConfirmed: _react.PropTypes.func.isRequired,
                checkCloudInstalled: _react.PropTypes.func.isRequired,
                installCloud: _react.PropTypes.func.isRequired,
                checkZeroDriversCondition: _react.PropTypes.func.isRequired
            },
            install: function(_ref) {
                var checkedNotIntalled = _ref.checkedNotIntalled, checkedNotUpdated = _ref.checkedNotUpdated, checkedVisibleUtils = _ref.checkedVisibleUtils, checkedVisiblePrograms = _ref.checkedVisiblePrograms, devices = [].concat(checkedNotIntalled, checkedNotUpdated), programs = [].concat(checkedVisiblePrograms, checkedVisibleUtils);
                (0, this.props.installAll)({
                    devices: devices,
                    programs: programs,
                    options: {
                        eventAction: "drivers install all clicked"
                    }
                });
            },
            renderDriversBlock: function(devices, type) {
                var _props = this.props, drivers = _props.drivers, selectDeviceDriver = _props.selectDeviceDriver, openDriverMenu = _props.openDriverMenu, openDeviceManagerFor = _props.openDeviceManagerFor, toggleDevice = _props.toggleDevice, expandDevice = _props.expandDevice, installSingleDriver = _props.installSingleDriver, currentLanguage = _props.currentLanguage, viewOptions = drivers.viewOptions, list = [];
                devices.forEach(function(device, index) {
                    var id = device.id, deviceId = device.deviceId, currentDriver = device.currentDriver, otherDrivers = device.otherDrivers, isChecked = device.isChecked, isExpanded = device.isExpanded, problem = device.problem, _deviceId = id, deviceDrivers = (currentDriver ? [ currentDriver ] : []).concat([].concat(otherDrivers)), selectedDriver = "broken" !== type ? deviceDrivers.find(function(driver) {
                        return !!driver.isChecked;
                    }) : null, deviceProps = {
                        key: deviceId + "_rec_" + index,
                        deviceId: deviceId,
                        isChecked: isChecked,
                        isExpanded: isExpanded,
                        currentDriver: currentDriver,
                        selectedDriver: selectedDriver,
                        currentLanguage: currentLanguage,
                        openDeviceManagerFor: openDeviceManagerFor,
                        toggleDevice: toggleDevice,
                        expandDevice: expandDevice,
                        type: type
                    };
                    list.push((0, _DeviceRow2["default"])(deviceProps));
                    if (isExpanded) if ("broken" === type) list.push((0, _DriverRow2["default"])({
                        problem: problem
                    })); else {
                        var driverLength = deviceDrivers.length;
                        deviceDrivers.forEach(function(driver, driverIndex) {
                            var id = driver.id, date = driver.date, manufacturer = driver.manufacturer, version = driver.version, driverDeviceId = driver.deviceId, rank = driver.rank, section = driver.section, inf = driver.inf, systems = driver.systems, isCurrent = driver.isCurrent, isRecommended = driver.isRecommended, isChecked = driver.isChecked, menuIsOpened = driver.menuIsOpened, driverProps = {
                                key: "driver_row_" + deviceId + "_rec_" + index + "_" + id,
                                openDriverMenu: openDriverMenu,
                                id: id,
                                date: date,
                                manufacturer: manufacturer,
                                version: version,
                                rank: rank,
                                section: section,
                                inf: inf,
                                systems: systems,
                                deviceId: deviceId,
                                _deviceId: _deviceId,
                                driverDeviceId: driverDeviceId,
                                isCurrent: isCurrent,
                                isRecommended: isRecommended,
                                isChecked: isChecked,
                                menuIsOpened: menuIsOpened,
                                driver: driver,
                                currentLanguage: currentLanguage,
                                selectDeviceDriver: selectDeviceDriver,
                                installSingleDriver: installSingleDriver,
                                viewOptions: viewOptions,
                                isLast: driverIndex === driverLength - 1,
                                driverLength: driverLength,
                                driverIndex: driverIndex
                            };
                            list.push((0, _DriverRow2["default"])(driverProps));
                        });
                    }
                });
                return list;
            },
            renderNotInstalled: function(_ref2) {
                var notInstalled = _ref2.notInstalled, checkedNotIntalled = _ref2.checkedNotIntalled, _props2 = this.props, drivers = _props2.drivers, toggleNotInstalled = _props2.toggleNotInstalled, viewOptionsDropdownIsVisible = drivers.viewOptionsDropdownIsVisible;
                return _react2["default"].DOM.table({
                    className: "drivers-screen_table",
                    border: "1"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "drivers-screen_list-header"
                }, _react2["default"].DOM.td({
                    colSpan: "2",
                    className: "drivers-screen_list-title"
                }, l("drivers_screen_most_important")), _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "drivers-screen_list-title-dropdown"
                }, viewOptionsDropdownIsVisible ? this.renderDropDown() : null), _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "drivers-screen_title-checkbox"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input custom-control_checkbox-input-common",
                    id: "title-not-installed",
                    checked: checkedNotIntalled.length === notInstalled.length,
                    onChange: function(e) {
                        toggleNotInstalled(e.target.checked);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: "title-not-installed",
                    className: "custom-control_checkbox-input-label"
                })))), _react2["default"].DOM.tbody({
                    className: "drivers-screen_table-tbody"
                }, this.renderDriversBlock(notInstalled, "notInstalled")));
            },
            renderNotUpdated: function(_ref3) {
                var notUpdated = _ref3.notUpdated, checkedNotUpdated = _ref3.checkedNotUpdated, toggleNotUpdated = this.props.toggleNotUpdated;
                return _react2["default"].DOM.table({
                    className: "drivers-screen_table",
                    border: "1"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "drivers-screen_list-header"
                }, _react2["default"].DOM.td({
                    colSpan: "3",
                    className: "drivers-screen_list-title"
                }, l("drivers_screen_updates")), _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "drivers-screen_title-checkbox"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input custom-control_checkbox-input-common",
                    id: "title-not-updated",
                    checked: checkedNotUpdated.length === notUpdated.length,
                    onChange: function(e) {
                        toggleNotUpdated(e.target.checked);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: "title-not-updated",
                    className: "custom-control_checkbox-input-label"
                })))), _react2["default"].DOM.tbody({
                    className: "drivers-screen_table-tbody"
                }, this.renderDriversBlock(notUpdated, "notUpdated")));
            },
            renderUtils: function(_ref4) {
                var visibleUtils = _ref4.visibleUtils, checkedVisibleUtils = _ref4.checkedVisibleUtils, _props3 = this.props, currentLanguage = _props3.currentLanguage, toggleProgram = _props3.toggleProgram, toggleDriverUtilities = _props3.toggleDriverUtilities, list = [];
                visibleUtils.forEach(function(util, index) {
                    var utilProps = {
                        key: util.ID + "_" + index,
                        program: util,
                        zone: "DRIVER_UTILITIES",
                        currentLanguage: currentLanguage,
                        toggleProgram: toggleProgram
                    };
                    list.push((0, _DriverUtilRow2["default"])(utilProps));
                });
                return _react2["default"].DOM.table({
                    className: "drivers-screen_table",
                    border: "1"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "drivers-screen_list-header"
                }, _react2["default"].DOM.td({
                    colSpan: "2",
                    className: "drivers-screen_list-title"
                }, l("drivers_screen_utils")), _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "drivers-screen_title-checkbox"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input custom-control_checkbox-input-common",
                    id: "title-utils",
                    checked: checkedVisibleUtils.length === visibleUtils.length,
                    onChange: function(e) {
                        toggleDriverUtilities(e.target.checked);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: "title-utils",
                    className: "custom-control_checkbox-input-label"
                })))), _react2["default"].DOM.tbody({
                    className: "drivers-screen_table-tbody"
                }, list));
            },
            renderInstalled: function(_ref5) {
                var installed = _ref5.installed;
                return _react2["default"].DOM.table({
                    className: "drivers-screen_table",
                    border: "1"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "drivers-screen_list-header"
                }, _react2["default"].DOM.td({
                    colSpan: "3",
                    className: "drivers-screen_list-title"
                }, l("drivers_screen_installed")), _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "drivers-screen_title-checkbox"
                }))), _react2["default"].DOM.tbody({
                    className: "drivers-screen_table-tbody"
                }, this.renderDriversBlock(installed, "installed")));
            },
            renderNotRecommended: function(_ref6) {
                var lowRankedDevices = _ref6.lowRankedDevices, brokenDevices = _ref6.brokenDevices;
                return _react2["default"].DOM.table({
                    className: "drivers-screen_table drivers-screen_table-not-rec",
                    border: "1"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "drivers-screen_list-header"
                }, _react2["default"].DOM.td({
                    colSpan: "3",
                    className: "drivers-screen_list-title"
                }, l("drivers_screen_alternative")), _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "drivers-screen_title-checkbox"
                }))), _react2["default"].DOM.tbody({
                    className: "drivers-screen_table-tbody"
                }, this.renderDriversBlock(lowRankedDevices, "lowRanked"), this.renderDriversBlock(brokenDevices, "broken")));
            },
            renderDropDown: function() {
                var _props4 = this.props, drivers = _props4.drivers, expandViewOptionsDropdown = _props4.expandViewOptionsDropdown, toggleViewOption = _props4.toggleViewOption, viewOptionsDropdownIsExpanded = drivers.viewOptionsDropdownIsExpanded, viewOptions = drivers.viewOptions;
                return _react2["default"].DOM.div({
                    className: "drivers-screen__dropdown"
                }, _react2["default"].DOM.div({
                    className: "drivers-screen__label " + (!viewOptionsDropdownIsExpanded ? "" : "drivers-screen__dropdown-is-opened"),
                    onClick: function(e) {
                        e.stopPropagation();
                        expandViewOptionsDropdown(!viewOptionsDropdownIsExpanded);
                    }
                }, _react2["default"].DOM.span({
                    className: "drivers-screen__label-text"
                }, l("drivers_screen_show")), (0, _Img2["default"])({
                    src: !viewOptionsDropdownIsExpanded ? "img/screens/driver-filter-arrow.png" : "img/screens/driver-filter-arrow-expanded.png",
                    className: "drivers-screen_list-row-install-icon",
                    width: "9",
                    height: "5"
                })), viewOptionsDropdownIsExpanded ? _react2["default"].DOM.div({
                    className: "drivers-screen__list"
                }, Object.entries(viewOptions).map(function(_ref7) {
                    var option = _ref7[0], value = _ref7[1];
                    return _react2["default"].DOM.div({
                        className: "drivers-screen__list-item"
                    }, _react2["default"].DOM.label({
                        htmlFor: "checkbox-" + option,
                        className: "drivers-screen__list-label",
                        onClick: function(e) {
                            e.stopPropagation();
                        }
                    }, _react2["default"].DOM.input({
                        id: "checkbox-" + option,
                        type: "checkbox",
                        checked: value,
                        onChange: function(e) {
                            toggleViewOption(option);
                        }
                    }), (0, _getViewOptionName2["default"])(l, option)));
                })) : null);
            },
            render: function() {
                var _this = this, _props5 = this.props, page = _props5.page, drivers = _props5.drivers, programs = _props5.programs, currentLanguage = _props5.currentLanguage, hideZeroDrivers = _props5.hideZeroDrivers, toggleAdminMode = _props5.toggleAdminMode, toggleNotRecommendedVisibility = _props5.toggleNotRecommendedVisibility, expandViewOptionsDropdown = _props5.expandViewOptionsDropdown, navigate = _props5.navigate, openSystemMenu = _props5.openSystemMenu, openDriverMenu = _props5.openDriverMenu, expertModeClicked = _props5.expertModeClicked, checkCloudConfirmed = _props5.checkCloudConfirmed, checkCloudInstalled = _props5.checkCloudInstalled, installCloud = _props5.installCloud, checkZeroDriversCondition = _props5.checkZeroDriversCondition, isAdminMode = drivers.isAdminMode, isNotRecommendedVisible = drivers.isNotRecommendedVisible, viewOptionsDropdownIsExpanded = drivers.viewOptionsDropdownIsExpanded, devices = drivers.devices, brokenDevices = drivers.brokenDevices, lowRankedDevices = drivers.lowRankedDevices, isCloudConfirmed = drivers.isCloudConfirmed, isCloudInstalled = drivers.isCloudInstalled, notInstalled = (0, 
                _driversPrograms.filterNotInstalledDriverDevices)(devices), checkedNotIntalled = (0, 
                _driversPrograms.filterCheckedDrivers)(notInstalled), notUpdated = (0, _driversPrograms.filterNotUpdatedDriverDevices)(devices), checkedNotUpdated = (0, 
                _driversPrograms.filterCheckedDrivers)(notUpdated), installed = (0, _driversPrograms.filterInstalledDriverDevices)(devices), visibleUtils = (0, 
                _driversPrograms.filterDriverUtilities)(programs), checkedVisibleUtils = (0, _driversPrograms.filterCheckedDriverUtilities)(programs), checkedVisiblePrograms = (0, 
                _driversPrograms.filterCheckedSoft)((0, _driversPrograms.filterProgramsPage)(programs)), installingElementsCount = checkedNotIntalled.length + checkedNotUpdated.length + checkedVisibleUtils.length + checkedVisiblePrograms.length, installingElements = {
                    checkedNotIntalled: checkedNotIntalled,
                    checkedNotUpdated: checkedNotUpdated,
                    checkedVisibleUtils: checkedVisibleUtils,
                    checkedVisiblePrograms: checkedVisiblePrograms
                }, hideComponent = "DRIVERS" !== page;
                return checkZeroDriversCondition() ? (0, _ZeroDrivers2["default"])({
                    hideComponent: hideComponent,
                    currentLanguage: currentLanguage,
                    hideZeroDrivers: hideZeroDrivers,
                    navigate: navigate,
                    openSystemMenu: openSystemMenu
                }) : _react2["default"].DOM.td({
                    className: (hideComponent ? "display-none" : "") + " drivers-screen__wrapper",
                    onClick: function(e) {
                        e.stopPropagation();
                        if (viewOptionsDropdownIsExpanded) expandViewOptionsDropdown(!1);
                        openDriverMenu(null, null, !1);
                    }
                }, (0, _DriversHeader2["default"])({
                    page: page,
                    counter: installingElementsCount,
                    isAdminMode: isAdminMode,
                    expertModeClicked: expertModeClicked,
                    isNotRecommendedVisible: isNotRecommendedVisible,
                    toggleNotRecommendedVisibility: toggleNotRecommendedVisibility,
                    toggleAdminMode: toggleAdminMode,
                    installClickHandler: function() {
                        return _this.install(installingElements);
                    },
                    isCloudConfirmed: isCloudConfirmed,
                    isCloudInstalled: isCloudInstalled,
                    checkCloudConfirmed: checkCloudConfirmed,
                    checkCloudInstalled: checkCloudInstalled,
                    installCloud: installCloud,
                    navigate: navigate
                }), _react2["default"].DOM.div({
                    className: "drivers-screen"
                }, notInstalled.length ? this.renderNotInstalled({
                    notInstalled: notInstalled,
                    checkedNotIntalled: checkedNotIntalled
                }) : null, notUpdated.length ? this.renderNotUpdated({
                    notUpdated: notUpdated,
                    checkedNotUpdated: checkedNotUpdated
                }) : null, visibleUtils.length ? this.renderUtils({
                    visibleUtils: visibleUtils,
                    checkedVisibleUtils: checkedVisibleUtils
                }) : null), (0, _DriversFooter2["default"])({
                    page: page,
                    counter: installingElementsCount,
                    installClickHandler: function() {
                        return _this.install(installingElements);
                    }
                }), isNotRecommendedVisible ? _react2["default"].DOM.div({
                    className: "drivers-screen"
                }, installed.length ? this.renderInstalled({
                    installed: installed
                }) : null, this.renderNotRecommended({
                    lowRankedDevices: lowRankedDevices,
                    brokenDevices: brokenDevices
                })) : null, _react2["default"].DOM.div({
                    className: "drivers-screen__footer"
                }, _react2["default"].DOM.div({
                    className: "screen-copyright"
                }, "Artur Kuzyakov © 2018")));
            }
        }), mapState = function(state) {
            return {
                drivers: state.drivers,
                programs: state.programs,
                expertModeClicked: state.app.expertModeClicked
            };
        }, actions = {
            openDeviceManagerFor: _driversActions.openDeviceManagerFor,
            selectDeviceDriver: _driversActions.selectDeviceDriver,
            toggleDevice: _driversActions.toggleDevice,
            expandDevice: _driversActions.expandDevice,
            openDriverMenu: _driversActions.openDriverMenu,
            toggleNotInstalled: _driversActions.toggleNotInstalled,
            toggleNotUpdated: _driversActions.toggleNotUpdated,
            toggleNotRecommendedVisibility: _driversActions.toggleNotRecommendedVisibility,
            expandViewOptionsDropdown: _driversActions.expandViewOptionsDropdown,
            toggleViewOption: _driversActions.toggleViewOption,
            toggleProgram: _programsActions.toggleProgram,
            toggleDriverUtilities: _driversActions.toggleDriverUtilities,
            hideZeroDrivers: _driversActions.hideZeroDrivers,
            toggleAdminMode: _driversActions.toggleAdminMode,
            installAll: _driversActions.installAll,
            installSingleDriver: _driversActions.installSingleDriver,
            navigate: _menuActions.navigate,
            openSystemMenu: _menuActions.openSystemMenu,
            checkCloudConfirmed: _driversActions.checkCloudConfirmed,
            checkCloudInstalled: _driversActions.checkCloudInstalled,
            installCloud: _driversActions.installCloud,
            checkZeroDriversCondition: _driversActions.checkZeroDriversCondition
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(DriversScreen);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics);
        __webpack_require__(820);
        exports["default"] = _react2["default"].createClass({
            displayName: "ZeroDrivers",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                hideComponent: _react.PropTypes.bool.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                hideZeroDrivers: _react.PropTypes.func.isRequired,
                openSystemMenu: _react.PropTypes.func.isRequired
            },
            render: function() {
                var _props = this.props, hideComponent = _props.hideComponent, hideZeroDrivers = _props.hideZeroDrivers, openSystemMenu = _props.openSystemMenu, currentLanguage = _props.currentLanguage, msgCaption = void 0;
                msgCaption = l("zero-drivers_cta-msg-caption");
                var _msgCaption$split = msgCaption.split("{{LINK}}"), msgCaptionLeft = _msgCaption$split[0], msgCaptionRight = _msgCaption$split[1];
                return _react2["default"].DOM.td({
                    className: (hideComponent ? "display-none" : "") + " zero-drivers_wrapper"
                }, _react2["default"].DOM.div({
                    className: "zero-drivers"
                }, _react2["default"].DOM.table({
                    className: "zero-drivers_wrapper-inner"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr({
                    style: {
                        height: "100%"
                    }
                }, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                    className: "zero-drivers_cta"
                }, _react2["default"].DOM.div({
                    className: "zero-drivers_cta-logo"
                }, (0, _Img2["default"])({
                    src: "img/screens/zero-drivers_logo.png",
                    width: "634",
                    height: "121"
                })), _react2["default"].DOM.div({
                    className: "zero-drivers_cta-msg"
                }, l("zero-drivers_cta-msg")), _react2["default"].DOM.div({
                    className: "zero-drivers_cta-msg-caption"
                }, msgCaptionLeft, _react2["default"].DOM.a({
                    className: "zero-drivers_cta-msg-caption-link",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _statistics2["default"].event({
                            action: "drivers zero reinstall drivers clicked"
                        });
                        hideZeroDrivers();
                    }
                }, l("zero-drivers_cta-msg-caption-link")), msgCaptionRight), _react2["default"].DOM.button({
                    className: "zero-drivers_cta-btn",
                    onClick: function() {
                        _statistics2["default"].event({
                            action: "drivers zero support clicked"
                        });
                        openSystemMenu("FEEDBACK", {
                            lang: currentLanguage
                        });
                    }
                }, l("zero-drivers_support-btn")), _react2["default"].DOM.button({
                    className: "zero-drivers_secondary-btn",
                    onClick: function() {
                        _statistics2["default"].event({
                            action: "drivers zero show all drivers clicked"
                        });
                        hideZeroDrivers();
                    }
                }, l("zero-drivers_all-drivers-btn"))))), _react2["default"].DOM.tr({
                    style: {
                        height: "1%"
                    }
                }, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                    className: "zero-drivers_footer"
                }, _react2["default"].DOM.table({
                    className: "zero-drivers_footer-inner"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "zero-drivers_footer-link-holder-left"
                }, _react2["default"].DOM.a({
                    className: "zero-drivers_footer-link",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _statistics2["default"].event({
                            action: "drivers zero footer device manager clicked"
                        });
                        openSystemMenu("DEVICE_MANAGER", {
                            preventSendingEvent: !0
                        });
                    }
                }, (0, _Img2["default"])({
                    className: "zero-drivers_footer-link-icon",
                    src: "img/screens/icon-device-manager.png",
                    width: "13",
                    height: "13"
                }), _react2["default"].DOM.span({
                    className: "zero-drivers_footer-link-text"
                }, l("zero-drivers_footer_device-manager")))), _react2["default"].DOM.td({
                    className: "zero-drivers_footer-link-holder-right"
                }, _react2["default"].DOM.a({
                    className: "zero-drivers_footer-link",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _statistics2["default"].event({
                            action: "drivers zero footer system restore clicked"
                        });
                        openSystemMenu("RECOVERY", {
                            preventSendingEvent: !0
                        });
                    }
                }, (0, _Img2["default"])({
                    className: "zero-drivers_footer-link-icon",
                    src: "img/screens/icon-system-restore.png",
                    width: "13",
                    height: "13"
                }), _react2["default"].DOM.span({
                    className: "zero-drivers_footer-link-text"
                }, l("zero-drivers_footer_system-restore")))))))))))));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(l, option) {
        var result = void 0;
        switch (option) {
          case "vendor":
            result = l("drivers_screen_view_options_vendor");
            break;

          case "version":
            result = l("drivers_screen_view_options_version");
            break;

          case "date":
            result = l("drivers_screen_view_options_date");
            break;

          case "deviceId":
            result = l("drivers_screen_view_options_device_id");
            break;

          case "inf":
            result = l("drivers_screen_view_options_inf");
            break;

          case "section":
            result = l("drivers_screen_view_options_section");
            break;

          case "os":
            result = l("drivers_screen_view_options_os");
        }
        return result;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _DriversScreen = __webpack_require__(699), _DriversScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_DriversScreen);
    exports["default"] = _DriversScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(821);
        exports["default"] = _react2["default"].createClass({
            displayName: "FinalPopover",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                item: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            renderDriverDate: function(date) {
                return date ? date.split("-").reverse().join(".") : "";
            },
            renderDevicePopover: function() {
                var device = this.props.item, oldDriver = device.oldDriver, currentDriver = device.currentDriver, recommendedDriver = device.recommendedDriver, name = recommendedDriver.name;
                return _react2["default"].DOM.div({
                    className: "final-popover"
                }, _react2["default"].DOM.div({
                    className: "final-popover_arrow"
                }, (0, _Img2["default"])({
                    src: "img/screens/arrow-bottom.png",
                    className: "final-popover_arrow-img",
                    width: "17",
                    height: "10"
                })), _react2["default"].DOM.div({
                    className: "final-popover_wrapper"
                }, _react2["default"].DOM.div({
                    className: "final-popover_block"
                }, _react2["default"].DOM.div({
                    className: "final-popover_marked-text"
                }, name)), oldDriver ? _react2["default"].DOM.div({
                    className: "final-popover_block"
                }, _react2["default"].DOM.div(null, l("final_popover_old_driver"), ":"), _react2["default"].DOM.div({
                    className: "final-popover_marked-text"
                }, l("version"), ": ", oldDriver.version, " / ", l("date"), ": ", this.renderDriverDate(oldDriver.date))) : null, _react2["default"].DOM.div({
                    className: "final-popover_block"
                }, _react2["default"].DOM.div(null, l("final_popover_new_driver"), ":"), _react2["default"].DOM.div({
                    className: "final-popover_marked-text"
                }, l("version"), ": ", currentDriver.version, " / ", l("date"), ": ", this.renderDriverDate(currentDriver.date))), oldDriver && oldDriver.version === currentDriver.version ? _react2["default"].DOM.div({
                    className: "final-popover_block"
                }, l("final_popover_new_driver_not_installed_caption")) : null));
            },
            renderProgramPopover: function() {
                var _props = this.props, currentLanguage = _props.currentLanguage, item = _props.item, name = item.name, icon = item.icon, version = item.version, description = item.description, localizedDescription = void 0;
                localizedDescription = description["ru" === currentLanguage ? "ru" : "en"];
                return _react2["default"].DOM.div({
                    className: "final-popover"
                }, _react2["default"].DOM.div({
                    className: "final-popover_arrow"
                }, (0, _Img2["default"])({
                    src: "img/screens/arrow-bottom.png",
                    className: "final-popover_arrow-img",
                    width: "17",
                    height: "10"
                })), _react2["default"].DOM.div({
                    className: "final-popover_wrapper"
                }, _react2["default"].DOM.div({
                    className: "final-popover_block"
                }, _react2["default"].DOM.div({
                    className: "final-popover_marked-text"
                }, name), (0, _Img2["default"])({
                    src: icon,
                    className: "final-popover_soft-icon",
                    width: "38",
                    height: "38"
                }), version ? _react2["default"].DOM.div(null, l("version"), " ", version) : null), _react2["default"].DOM.div({
                    className: "final-popover_block"
                }, localizedDescription)));
            },
            render: function() {
                return this.props.item.deviceId ? this.renderDevicePopover() : this.renderProgramPopover();
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l, nl) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                installation: state.installation,
                drivers: state.drivers,
                finalScreen: state.finalScreen,
                protect: state.protect,
                settings: state.settings,
                currentLanguage: state.lang.currentLanguage,
                isConnected: state.app.isConnected,
                isGamer: state.app.isGamer,
                isDriversFake: state.app.isDriversFake
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _FinalPopover = __webpack_require__(703), _FinalPopover2 = _interopRequireDefault(_FinalPopover), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _trimVendorName = __webpack_require__(109), _trimVendorName2 = _interopRequireDefault(_trimVendorName), _deviceClasses = __webpack_require__(106), _deviceClasses2 = _interopRequireDefault(_deviceClasses), _finalActions = __webpack_require__(683), _driversActions = __webpack_require__(122), _menuActions = __webpack_require__(38), _diagnosticsActions = __webpack_require__(204), _appActions = __webpack_require__(55), _driversPrograms = __webpack_require__(29), _settings = __webpack_require__(43), _systemScanner = (_interopRequireDefault(_settings), 
        __webpack_require__(65)), _systemScanner2 = _interopRequireDefault(_systemScanner), _system = __webpack_require__(6);
        __webpack_require__(822);
        var FinalScreen = _react2["default"].createClass({
            displayName: "FinalScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                installation: _react.PropTypes.object.isRequired,
                finalScreen: _react.PropTypes.object.isRequired,
                protect: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                isConnected: _react.PropTypes.bool,
                isGamer: _react.PropTypes.bool,
                isDriversFake: _react.PropTypes.bool,
                getInstallationResult: _react.PropTypes.func.isRequired,
                repeatLastInstallation: _react.PropTypes.func.isRequired,
                checkConnection: _react.PropTypes.func.isRequired,
                loadDiagnosticInfo: _react.PropTypes.func.isRequired,
                navigate: _react.PropTypes.func.isRequired,
                openSystemMenu: _react.PropTypes.func.isRequired,
                installDrivers: _react.PropTypes.func.isRequired,
                hoverFinishedItem: _react.PropTypes.func.isRequired
            },
            componentDidMount: function() {
                var _this = this, _props = this.props, loadDiagnosticInfo = _props.loadDiagnosticInfo, checkConnection = _props.checkConnection, checkGamer = _props.checkGamer, getInstallationResult = _props.getInstallationResult;
                loadDiagnosticInfo();
                checkConnection();
                checkGamer();
                getInstallationResult();
                setTimeout(function() {
                    _logs2["default"].info({
                        action: "final screen opened " + _this.props.finalScreen.resultType.toLowerCase()
                    }, {}, "final:screen:opened");
                }, 0);
            },
            getSoundName: function() {
                switch (this.props.finalScreen.resultType) {
                  case "DRIVERS_OK_PROGRAMS":
                  case "DRIVERS_OK":
                  case "DRIVERS_BETTER":
                  case "SINGLE_DRIVER_OK_PROGRAMS":
                  case "SINGLE_DRIVER_OK":
                  case "SINGLE_DRIVER_BETTER":
                  case "PROGRAMS_ALL_FINISHED":
                  case "PROGRAMS_SOME_FINISHED":
                  case "SINGLE_PROGRAM_FINISHED":
                    return _system.WshShell.ExpandEnvironmentStrings("%windir%\\Media\\notify.wav");

                  case "DRIVERS_NOT_BETTER":
                  case "SINGLE_DRIVER_NOT_BETTER":
                  case "PROGRAMS_ALL_FAILED":
                  case "SINGLE_PROGRAM_FAILED":
                    return _system.WshShell.ExpandEnvironmentStrings("%windir%\\Media\\chord.wav");

                  default:
                    return "";
                }
            },
            renderTitle: function() {
                var finalScreen = this.props.finalScreen, resultType = finalScreen.resultType, finishedPrograms = finalScreen.finishedPrograms, failedPrograms = finalScreen.failedPrograms, finishedDevices = finalScreen.finishedDevices, failedDevices = finalScreen.failedDevices;
                switch (resultType) {
                  case "DRIVERS_OK_PROGRAMS":
                  case "DRIVERS_OK":
                  case "SINGLE_DRIVER_OK_PROGRAMS":
                  case "SINGLE_DRIVER_OK":
                  case "PROGRAMS_ALL_FINISHED":
                  case "SINGLE_PROGRAM_FINISHED":
                    return l("final_computer_setup_ok_title");

                  case "DRIVERS_BETTER":
                  case "DRIVERS_NOT_BETTER":
                    var driversNotBetterMessageText = nl("final_drivers_not_better_title", "final_drivers_not_better_title_n", finishedDevices.length).replace("{{COUNT1}}", finishedDevices.length);
                    return _react2["default"].DOM.span({
                        dangerouslySetInnerHTML: {
                            __html: driversNotBetterMessageText.replace("{{COUNT2}}", finishedDevices.length + failedDevices.length)
                        }
                    });

                  case "SINGLE_DRIVER_BETTER":
                  case "SINGLE_DRIVER_NOT_BETTER":
                    return finishedDevices.length ? l("final_single_driver_better_installed_title") : l("final_single_driver_better_not_installed_title");

                  case "PROGRAMS_SOME_FINISHED":
                    var programsSomeFinishedMessageText = nl("final_programs_some_finished_title", "final_programs_some_finished_title_n", finishedPrograms.length).replace("{{COUNT1}}", finishedPrograms.length);
                    return _react2["default"].DOM.span({
                        dangerouslySetInnerHTML: {
                            __html: programsSomeFinishedMessageText.replace("{{COUNT2}}", finishedPrograms.length + failedPrograms.length)
                        }
                    });

                  case "PROGRAMS_ALL_FAILED":
                    return _react2["default"].DOM.span({
                        dangerouslySetInnerHTML: {
                            __html: l("final_programs_all_failed_title").replace("{{COUNT}}", finishedPrograms.length + failedPrograms.length)
                        }
                    });

                  case "SINGLE_PROGRAM_FAILED":
                    return l("final_single_program_failed_title");

                  default:
                    return "";
                }
            },
            renderSubTitle: function() {
                var _props2 = this.props, isConnected = _props2.isConnected, finalScreen = _props2.finalScreen, resultType = finalScreen.resultType, finishedPrograms = finalScreen.finishedPrograms, failedDevices = finalScreen.failedDevices, missedDevices = finalScreen.missedDevices, offlineConnected = window.delorean.isLocal && isConnected, restartMessage = offlineConnected ? " " + l("final_offline_restart") : "";
                switch (resultType) {
                  case "DRIVERS_OK_PROGRAMS":
                    return l("final_drivers_ok_programs_subtitle") + restartMessage;

                  case "DRIVERS_OK":
                    return l("final_drivers_ok_subtitle") + restartMessage;

                  case "DRIVERS_BETTER":
                  case "DRIVERS_NOT_BETTER":
                  case "SINGLE_DRIVER_BETTER":
                  case "SINGLE_DRIVER_NOT_BETTER":
                    var count = failedDevices.length + missedDevices.length;
                    return _react2["default"].DOM.span({
                        dangerouslySetInnerHTML: {
                            __html: nl("final_drivers_not_better_subtitle", "final_drivers_not_better_subtitle_n", count).replace("{{COUNT}}", count) + restartMessage
                        }
                    });

                  case "SINGLE_DRIVER_OK_PROGRAMS":
                    return l("final_single_driver_ok_programs_subtitle") + restartMessage;

                  case "SINGLE_DRIVER_OK":
                    return l("final_single_driver_ok_subtitle") + restartMessage;

                  case "PROGRAMS_ALL_FINISHED":
                    return _react2["default"].DOM.span({
                        dangerouslySetInnerHTML: {
                            __html: nl("final_programs_all_finished_subtitle", "final_programs_all_finished_subtitle_n", finishedPrograms.length).replace("{{COUNT}}", finishedPrograms.length + restartMessage)
                        }
                    });

                  case "PROGRAMS_SOME_FINISHED":
                    return l("final_programs_some_finished_subtitle") + restartMessage;

                  case "PROGRAMS_ALL_FAILED":
                    return l("final_programs_all_failed_subtitle") + restartMessage;

                  case "SINGLE_PROGRAM_FINISHED":
                    return l("final_single_program_finished_subtitle") + restartMessage;

                  case "SINGLE_PROGRAM_FAILED":
                    return l("final_single_program_failed_subtitle") + restartMessage;

                  default:
                    return "";
                }
            },
            renderStatusImage: function() {
                switch (this.props.finalScreen.resultType) {
                  case "DRIVERS_OK_PROGRAMS":
                  case "DRIVERS_OK":
                  case "SINGLE_DRIVER_OK_PROGRAMS":
                  case "SINGLE_DRIVER_OK":
                  case "PROGRAMS_ALL_FINISHED":
                  case "SINGLE_PROGRAM_FINISHED":
                    return (0, _Img2["default"])({
                        src: "img/final/final_success$2x.png",
                        className: "final_main-image",
                        width: "132",
                        height: "132"
                    });

                  case "DRIVERS_BETTER":
                  case "SINGLE_DRIVER_BETTER":
                  case "PROGRAMS_SOME_FINISHED":
                    return (0, _Img2["default"])({
                        src: "img/final/final_partial-success$2x.png",
                        className: "final_main-image",
                        width: "132",
                        height: "132"
                    });

                  case "DRIVERS_NOT_BETTER":
                  case "SINGLE_DRIVER_NOT_BETTER":
                  case "PROGRAMS_ALL_FAILED":
                  case "SINGLE_PROGRAM_FAILED":
                    return (0, _Img2["default"])({
                        src: "img/final/final_failure$2x.png",
                        className: "final_main-image",
                        width: "132",
                        height: "132"
                    });

                  default:
                    return null;
                }
            },
            harmfulProgramsAreInstalled: function() {
                var protect = this.props.protect, installed = protect.apiData, harmfulPrograms = (0, 
                _driversPrograms.filterHarmfulPrograms)(installed);
                return !(!harmfulPrograms || !harmfulPrograms.length);
            },
            isGameable: function() {
                var _props3 = this.props, currentLanguage = _props3.currentLanguage, isGamer = _props3.isGamer;
                return [].includes(currentLanguage) && isGamer;
            },
            renderCta: function() {
                var _this2 = this, _props4 = this.props, isConnected = _props4.isConnected, finalScreen = _props4.finalScreen, settings = _props4.settings, installDrivers = _props4.installDrivers, repeatLastInstallation = _props4.repeatLastInstallation, resultType = finalScreen.resultType, missedDevices = finalScreen.missedDevices, protectEnabled = settings.general.settings.enableProtect.value, offlineConnected = window.delorean.isLocal && isConnected, buttonCaption = !offlineConnected && protectEnabled && !this.isGameable() ? this.harmfulProgramsAreInstalled() ? _react2["default"].DOM.div({
                    className: "final_main-btn-caption is-harmful"
                }, (0, _Img2["default"])({
                    className: "final_main-btn-caption-icon",
                    src: "img/final/final_button-warning$2x.png"
                }), _react2["default"].DOM.div({
                    className: "final_main-btn-caption-text"
                }, l("final_main_remove_harmful_advice"))) : _react2["default"].DOM.div({
                    className: "final_main-btn-caption"
                }, l("final_main_remove_harmful_caption")) : null, offlineReloadButton = offlineConnected ? _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        window.location.reload();
                    },
                    className: "final_main-btn"
                }, l("final_main_offline_reload")) : null, next = (!1 && this.isGameable(), _react2["default"].DOM.div({
                    className: "final_main-btn-wrapper"
                }, _react2["default"].DOM.button({
                    onClick: function() {
                        _logs2["default"].info({
                            action: "final next clicked"
                        }, {}, "final:next:clicked");
                        _this2.openNextScreen("PROGRAMS");
                    },
                    className: "cta-green-btn cta-btn-59 final_main-cta"
                }, l("final_main_next_btn"), (0, _Img2["default"])({
                    src: "img/final/final_main-cta-arrow$2x.png",
                    className: "final_main-cta-icon",
                    width: "6",
                    height: "9"
                })), buttonCaption, offlineReloadButton)), restart = _react2["default"].DOM.div({
                    className: "final_main-btn-wrapper"
                }, _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        repeatLastInstallation();
                    },
                    className: "final_main-btn"
                }, l("final_restart_installation_btn")), _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final skip clicked"
                        }, {}, "final:skip:clicked");
                        _this2.openNextScreen("PROGRAMS");
                    },
                    className: "final_main-btn"
                }, l("final_skip_btn")), buttonCaption, offlineReloadButton), installMissed = _react2["default"].DOM.div({
                    className: "final_main-btn-wrapper"
                }, _react2["default"].DOM.button({
                    onClick: function() {
                        _logs2["default"].info("final install important drivers clicked", {}, "final:install:important:drivers:clicked");
                        installDrivers({
                            eventAction: "final install important drivers clicked"
                        });
                    },
                    className: "cta-green-btn cta-btn-59 final_main-cta"
                }, l("final_install_required_drivers_btn")), _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final skip clicked"
                        }, {}, "final:skip:clicked");
                        _this2.openNextScreen("PROGRAMS");
                    },
                    className: "final_main-btn"
                }, l("final_skip_btn")), buttonCaption, offlineReloadButton);
                switch (resultType) {
                  case "DRIVERS_OK_PROGRAMS":
                  case "DRIVERS_OK":
                  case "SINGLE_DRIVER_OK_PROGRAMS":
                  case "SINGLE_DRIVER_OK":
                  case "PROGRAMS_ALL_FINISHED":
                  case "PROGRAMS_SOME_FINISHED":
                  case "SINGLE_PROGRAM_FINISHED":
                    return next;

                  case "PROGRAMS_ALL_FAILED":
                  case "SINGLE_PROGRAM_FAILED":
                    return restart;

                  case "DRIVERS_BETTER":
                  case "SINGLE_DRIVER_BETTER":
                    return missedDevices.length ? installMissed : next;

                  case "DRIVERS_NOT_BETTER":
                  case "SINGLE_DRIVER_NOT_BETTER":
                    return missedDevices.length ? installMissed : restart;

                  default:
                    return null;
                }
            },
            renderMainCell: function(nextScreen) {
                var _props5 = this.props, installation = _props5.installation, openSystemMenu = _props5.openSystemMenu, currentLanguage = _props5.currentLanguage, rebootNeeded = installation.rebootNeeded, contentHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) - 48;
                return _react2["default"].DOM.td({
                    className: "final_main top-for-header"
                }, _react2["default"].DOM.table({
                    className: "final_main-table",
                    style: {
                        height: contentHeight
                    }
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr({
                    className: "final_main-content",
                    style: {
                        height: contentHeight - 48
                    }
                }, _react2["default"].DOM.td({
                    colSpan: "3"
                }, _react2["default"].DOM.div({
                    className: "final_main-scrollabe",
                    style: {
                        height: contentHeight - 48
                    }
                }, _react2["default"].DOM.table({
                    className: "final_main-scrollabe-table"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr({
                    className: "final_main-scrollabe-table-cell"
                }, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                    className: "final_main-title"
                }, this.renderTitle()), _react2["default"].DOM.div({
                    className: "final_main-subtitle"
                }, this.renderSubTitle()), this.renderStatusImage(), this.renderCta(), rebootNeeded ? _react2["default"].DOM.p(null, l("loading_reboot")) : null, !1 ? _react2["default"].DOM.embed({
                    src: this.getSoundName(),
                    autoStart: "true",
                    hidden: "true"
                }) : null))))))), _react2["default"].DOM.tr({
                    className: "final_main-footer"
                }, _react2["default"].DOM.td({
                    className: "final_footer-link-holder"
                }, _react2["default"].DOM.a({
                    className: "final_footer-link",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final footer device manager clicked"
                        }, {}, "final:footer:device:manager:clicked");
                        openSystemMenu("DEVICE_MANAGER", {
                            preventSendingEvent: !0
                        });
                    }
                }, (0, _Img2["default"])({
                    className: "final_footer-link-icon",
                    src: "img/screens/icon-device-manager.png",
                    width: "13",
                    height: "13"
                }), _react2["default"].DOM.span({
                    className: "final_footer-link-text"
                }, l("zero-drivers_footer_device-manager")))), _react2["default"].DOM.td({
                    className: "final_footer-link-holder"
                }, _react2["default"].DOM.a({
                    className: "final_footer-link",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final footer support clicked"
                        }, {}, "final:footer:support:clicked");
                        openSystemMenu("FEEDBACK", {
                            preventSendingEvent: !0,
                            lang: currentLanguage
                        });
                    }
                }, (0, _Img2["default"])({
                    className: "final_footer-link-icon",
                    src: "img/screens/icon-support.png",
                    width: "13",
                    height: "13"
                }), _react2["default"].DOM.span({
                    className: "final_footer-link-text"
                }, l("zero-drivers_footer_support")))), _react2["default"].DOM.td({
                    className: "final_footer-link-holder"
                }, _react2["default"].DOM.a({
                    className: "final_footer-link",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final footer system restore clicked"
                        }, {}, "final:footer:system:restore:clicked");
                        openSystemMenu("RECOVERY", {
                            preventSendingEvent: !0
                        });
                    }
                }, (0, _Img2["default"])({
                    className: "final_footer-link-icon",
                    src: "img/screens/icon-system-restore.png",
                    width: "13",
                    height: "13"
                }), _react2["default"].DOM.span({
                    className: "final_footer-link-text"
                }, l("zero-drivers_footer_system-restore"))))))));
            },
            renderFinishedDevices: function() {
                var _this3 = this, _props6 = this.props, finalScreen = _props6.finalScreen, currentLanguage = _props6.currentLanguage, finishedDevices = finalScreen.finishedDevices;
                return finishedDevices && finishedDevices.length ? _react2["default"].DOM.div({
                    className: "final_aside-block",
                    style: {
                        zIndex: "6"
                    }
                }, _react2["default"].DOM.div({
                    className: "final_aside-block-list is-success"
                }, _react2["default"].DOM.div({
                    className: "final_aside-title",
                    dangerouslySetInnerHTML: {
                        __html: nl("final_aside_installed_drivers_title", "final_aside_installed_drivers_title_n", finishedDevices.length).replace("{{COUNT}}", finishedDevices.length)
                    }
                }), finishedDevices.map(function(device, index) {
                    var _device$recommendedDr = device.recommendedDriver, deviceClass = _device$recommendedDr["class"], _device$recommendedDr2 = _device$recommendedDr.manufacturer, manufacturer = _device$recommendedDr2 === undefined ? "" : _device$recommendedDr2, deviceClassName = (0, 
                    _deviceClasses2["default"])(l)[deviceClass].morpher.single.main, deviceName = deviceClassName + " " + (0, 
                    _trimVendorName2["default"])(manufacturer, "", !1);
                    return _react2["default"].DOM.div({
                        className: "final_aside-list-item",
                        onMouseEnter: function(e) {
                            return _this3.handleFinishedItemHover(e, device);
                        },
                        onMouseLeave: function(e) {
                            return _this3.handleFinishedItemHover(e, device, {
                                isLeaving: !0
                            });
                        },
                        style: {
                            zIndex: finishedDevices.length - index
                        }
                    }, "• ", deviceName, device.popoverIsOpened ? (0, _FinalPopover2["default"])({
                        item: device,
                        currentLanguage: currentLanguage
                    }) : null);
                }))) : null;
            },
            renderFailedDevices: function() {
                var _props7 = this.props, finalScreen = _props7.finalScreen, openSystemMenu = _props7.openSystemMenu, failedDevices = finalScreen.failedDevices;
                return failedDevices && failedDevices.length ? _react2["default"].DOM.div({
                    className: "final_aside-block",
                    style: {
                        zIndex: "5"
                    }
                }, _react2["default"].DOM.div({
                    className: "final_aside-block-list is-fail"
                }, _react2["default"].DOM.div({
                    className: "final_aside-title"
                }, (0, _Img2["default"])({
                    src: "img/final/final_aside-failure$2x.png",
                    width: "14",
                    height: "13",
                    className: "final_aside-title-icon"
                }), l("final_some_drivers_not_installed")), failedDevices.map(function(device) {
                    var _device$recommendedDr3 = device.recommendedDriver, deviceClass = _device$recommendedDr3["class"], _device$recommendedDr4 = _device$recommendedDr3.manufacturer, manufacturer = _device$recommendedDr4 === undefined ? "" : _device$recommendedDr4, deviceClassName = (0, 
                    _deviceClasses2["default"])(l)[deviceClass].morpher.single.main, deviceName = deviceClassName + " " + (0, 
                    _trimVendorName2["default"])(manufacturer, "", !1);
                    return _react2["default"].DOM.div({
                        className: "final_aside-list-item"
                    }, "• ", deviceName);
                })), _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final rollback drivers clicked"
                        }, {}, "final:rollback:drivers:clicked");
                        openSystemMenu("RECOVERY", {
                            preventSendingEvent: !0
                        });
                    },
                    className: "final_aside-btn"
                }, _react2["default"].DOM.img({
                    src: "img/blank.gif",
                    className: "final_aside-btn-bg"
                }), l("final_rollback_drivers"))) : null;
            },
            renderMissedDevices: function() {
                var finalScreen = this.props.finalScreen, missedDevices = finalScreen.missedDevices;
                return missedDevices && missedDevices.length ? _react2["default"].DOM.div({
                    className: "final_aside-block",
                    style: {
                        zIndex: "4"
                    }
                }, _react2["default"].DOM.div({
                    className: "final_aside-block-list is-fail"
                }, _react2["default"].DOM.div({
                    className: "final_aside-title"
                }, (0, _Img2["default"])({
                    src: "img/final/final_aside-failure$2x.png",
                    width: "14",
                    height: "13",
                    className: "final_aside-title-icon"
                }), l("final_required_drivers_not_installed")), missedDevices.map(function(device) {
                    var _device$recommendedDr5 = device.recommendedDriver, deviceClass = _device$recommendedDr5["class"], _device$recommendedDr6 = _device$recommendedDr5.manufacturer, manufacturer = _device$recommendedDr6 === undefined ? "" : _device$recommendedDr6, deviceClassName = (0, 
                    _deviceClasses2["default"])(l)[deviceClass].morpher.single.main, deviceName = deviceClassName + " " + (0, 
                    _trimVendorName2["default"])(manufacturer, "", !1);
                    return _react2["default"].DOM.div({
                        className: "final_aside-list-item"
                    }, "• ", deviceName);
                }))) : null;
            },
            renderFinishedPrograms: function() {
                var _this4 = this, _props8 = this.props, finalScreen = _props8.finalScreen, installation = _props8.installation, settings = _props8.settings, currentLanguage = _props8.currentLanguage, finishedPrograms = finalScreen.finishedPrograms, itemsContainDrivers = installation.itemsContainDrivers;
                return finishedPrograms && finishedPrograms.length ? _react2["default"].DOM.div({
                    className: "final_aside-block",
                    style: {
                        zIndex: "3"
                    }
                }, _react2["default"].DOM.div({
                    className: "final_aside-block-list is-success"
                }, _react2["default"].DOM.div({
                    className: "final_aside-title",
                    dangerouslySetInnerHTML: {
                        __html: nl("final_programs_all_finished_subtitle", "final_programs_all_finished_subtitle_n", finishedPrograms.length).replace("{{COUNT}}", finishedPrograms.length)
                    }
                }), finishedPrograms.map(function(program, index) {
                    return _react2["default"].DOM.div({
                        className: "final_aside-list-item",
                        onMouseEnter: function(e) {
                            return _this4.handleFinishedItemHover(e, program);
                        },
                        onMouseLeave: function(e) {
                            return _this4.handleFinishedItemHover(e, program, {
                                isLeaving: !0
                            });
                        },
                        style: {
                            zIndex: finishedPrograms.length - index
                        }
                    }, "• ", program.name, window.isAppEsteem && program.isPartner ? _react2["default"].DOM.sup({
                        className: "program-name-sup-offer bold"
                    }, "offer") : null, program.popoverIsOpened ? (0, _FinalPopover2["default"])({
                        item: program,
                        currentLanguage: currentLanguage
                    }) : null);
                })), itemsContainDrivers ? _react2["default"].DOM.div({
                    className: "final_aside-block-list"
                }, l("final_aside_installed_drivers_caption")) : null, (settings.general.settings.enableProtect.value, 
                !1) ? _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final remove harmful programs clicked"
                        }, {}, "final:remove:harmful:programs:clicked");
                        _this4.openNextScreen("PROTECT");
                    },
                    className: "final_aside-btn"
                }, l("final_aside_remove_harmful_programs")) : _react2["default"].DOM.a({
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "final install more programs clicked"
                        }, {}, "final:install:more:programs:clicked");
                        _this4.openNextScreen("PROGRAMS");
                    },
                    className: "final_aside-btn"
                }, l("final_aside_install_additional_programs"))) : null;
            },
            renderFailedPrograms: function() {
                var finalScreen = this.props.finalScreen, failedPrograms = finalScreen.failedPrograms;
                return failedPrograms && failedPrograms.length ? _react2["default"].DOM.div({
                    className: "final_aside-block",
                    style: {
                        zIndex: "2"
                    }
                }, _react2["default"].DOM.div({
                    className: "final_aside-block-list"
                }, _react2["default"].DOM.div({
                    className: "final_aside-title"
                }, l("final_aside_some_programs_not_installed")), failedPrograms.map(function(program) {
                    return _react2["default"].DOM.div({
                        className: "final_aside-list-item"
                    }, "• ", program.name, window.isAppEsteem && program.isPartner ? _react2["default"].DOM.sup({
                        className: "program-name-sup-offer bold"
                    }, "offer") : null);
                }))) : null;
            },
            renderAsideCell: function() {
                var _props9 = this.props, drivers = _props9.drivers, installation = _props9.installation, brokenDevices = drivers.brokenDevices, itemsContainDrivers = installation.itemsContainDrivers, contentHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) - 48;
                return _react2["default"].DOM.td({
                    className: "final_aside top-for-header"
                }, _react2["default"].DOM.div({
                    className: "final_aside-scrollabe",
                    style: {
                        height: contentHeight
                    }
                }, this.renderFinishedDevices(), this.renderFailedDevices(), this.renderMissedDevices(), this.renderFinishedPrograms(), this.renderFailedPrograms(), brokenDevices.length && itemsContainDrivers ? _react2["default"].DOM.div({
                    className: "final_aside-block",
                    style: {
                        zIndex: "1"
                    }
                }, _react2["default"].DOM.div({
                    className: "final_aside-block-list"
                }, _react2["default"].DOM.div({
                    className: "final_aside-title"
                }, l("final_aside_broken_devices_title")), l("final_aside_broken_devices_caption"))) : null));
            },
            handleFinishedItemHover: function(e, item) {
                var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
                e.stopPropagation();
                this.props.hoverFinishedItem(item, options.isLeaving);
            },
            openNextScreen: function(nextScreen) {
                var navigate = this.props.navigate;
                document.activeElement && document.activeElement.blur();
                if (_systemScanner2["default"].lastScanError) {
                    var err = _systemScanner2["default"].lastScanError;
                    if ("HttpError" === err.type && "status" in err) {
                        (0, _logs.log)("[SystemScanner] screen opened NoInternet", err);
                        _statistics2["default"].event({
                            action: "Screen opened NoInternet"
                        });
                        window.store.dispatch({
                            type: "NO_INTERNET_DETECTED"
                        });
                    } else {
                        (0, _logs.log)("DriverPack running failed", err);
                        window.store.dispatch({
                            type: "RUN_ERROR_DETECTED"
                        });
                        throw err;
                    }
                } else navigate(nextScreen);
            },
            renderDriversFake: function() {
                return _react2["default"].DOM.div(null, _react2["default"].DOM.table({
                    className: "final-fake_screen"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "final-fake_wrapper"
                }, _react2["default"].DOM.div({
                    className: "final-fake_inner"
                }, _react2["default"].DOM.div({
                    className: "final-fake_title"
                }, l("final-fake_title")), _react2["default"].DOM.div({
                    className: "final-fake_text"
                }, l("start-fake-popup_subtitle")), _react2["default"].DOM.div({
                    className: "final-fake_step-text"
                }, _react2["default"].DOM.p({
                    className: "final-fake_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/connect.png",
                    className: "final-fake_icon connect_icon"
                }), l("start-fake-popup_connect")), _react2["default"].DOM.p({
                    className: "final-fake_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/firewall.png",
                    className: "final-fake_icon firewall_icon"
                }), l("start-fake-popup_firewall")), _react2["default"].DOM.p({
                    className: "final-fake_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/torrent.png",
                    className: "final-fake_icon torrent_icon"
                }), l("start-fake-popup_torrent")), _react2["default"].DOM.p({
                    className: "final-fake_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/browser.png",
                    className: "final-fake_icon browser_icon"
                }), l("start-fake-popup_browser")), _react2["default"].DOM.p({
                    className: "final-fake_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/vpn.png",
                    className: "final-fake_icon vpn_icon"
                }), l("start-fake-popup_vpn"))), _react2["default"].DOM.div(null, _react2["default"].DOM.button({
                    onClick: function(e) {
                        window.location.reload();
                    },
                    className: "final-fake_button cta-green-btn"
                }, l("final-fake_button")))))))));
            },
            render: function() {
                var _props10 = this.props, installation = _props10.installation, finalScreen = _props10.finalScreen, isDriversFake = _props10.isDriversFake, result = installation.result, resultType = finalScreen.resultType, nextScreen = void 0;
                switch (result) {
                  case "DRIVERS_DONE":
                    nextScreen = !1 ? "PROTECT" : "DRIVERS";
                    break;

                  case "PROGRAMS_DONE":
                    nextScreen = !1 ? "PROTECT" : "PROGRAMS";
                }
                return isDriversFake ? this.renderDriversFake() : resultType ? _react2["default"].DOM.table({
                    className: "final_wrapper"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr({
                    className: "final_wrapper-fullscreen"
                }, this.renderMainCell(nextScreen), this.renderAsideCell()))) : null;
            }
        }), actions = {
            navigate: _menuActions.navigate,
            openSystemMenu: _menuActions.openSystemMenu,
            getInstallationResult: _finalActions.getInstallationResult,
            repeatLastInstallation: _finalActions.repeatLastInstallation,
            checkConnection: _appActions.checkConnection,
            checkGamer: _appActions.checkGamer,
            loadDiagnosticInfo: _diagnosticsActions.loadDiagnosticInfo,
            installDrivers: _driversActions.installDrivers,
            hoverFinishedItem: _finalActions.hoverFinishedItem
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(FinalScreen);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2), __webpack_require__(315));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _FinalScreen = __webpack_require__(704), _FinalScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_FinalScreen);
    exports["default"] = _FinalScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                topGamesList: state.games.topGamesList,
                playkeyInstalled: state.games.playkeyInstalled,
                playkeyInstalling: state.games.playkeyInstalling
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _partition2 = __webpack_require__(533), _partition3 = _interopRequireDefault(_partition2), _gamesActions = __webpack_require__(684), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(823);
        var GamesScreen = _react2["default"].createClass({
            displayName: "GamesScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                loadGamesList: _react.PropTypes.func.isRequired,
                checkPlaykey: _react.PropTypes.func.isRequired,
                hoverGame: _react.PropTypes.func.isRequired,
                openURL: _react.PropTypes.func.isRequired,
                installPlaykeyAndGo: _react.PropTypes.func.isRequired,
                playkeyInstalling: _react.PropTypes.bool.isRequired,
                playkeyInstalled: _react.PropTypes.bool.isRequired
            },
            componentDidMount: function() {
                var _props = this.props, loadGamesList = _props.loadGamesList, checkPlaykey = _props.checkPlaykey;
                loadGamesList();
                checkPlaykey();
            },
            handleMouseMove: function(e, id) {
                var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
                (0, this.props.hoverGame)(id, options.isLeaving);
            },
            renderGamesList: function(gamesList) {
                var _this = this, _props2 = this.props, openURL = _props2.openURL, installPlaykeyAndGo = _props2.installPlaykeyAndGo, playkeyInstalled = _props2.playkeyInstalled;
                return gamesList.map(function(game) {
                    var id = game.id, name = game.name, isFreeDemo = game.isFreeDemo, url = game.url, image = game.image, originalSeller = game.originalSeller, isHovered = game.isHovered, barText = !isHovered ? name : isFreeDemo ? l("games_top_game_free_demo") : l("games_top_game_free_paid").replace("{{SELLER}}", originalSeller);
                    return _react2["default"].DOM.li({
                        className: "games_top-game " + (game.isTopGame ? "is-top" : null) + " " + (isHovered ? "games_top-game-hovered" : "") + " ie_inline-block",
                        onMouseEnter: function(e) {
                            return _this.handleMouseMove(e, id);
                        },
                        onMouseLeave: function(e) {
                            return _this.handleMouseMove(e, id, {
                                isLeaving: !0
                            });
                        },
                        onClick: function(e) {
                            e.stopPropagation();
                            e.preventDefault();
                            _logs2["default"].info({
                                action: "games top clicked " + name.toLowerCase(),
                                counters: [ "debug" ]
                            }, {}, "games:top:clicked:" + name.toLowerCase());
                            playkeyInstalled ? openURL(url) : installPlaykeyAndGo(url);
                        }
                    }, _react2["default"].DOM.div({
                        className: "games_top-game-overlay"
                    }), _react2["default"].DOM.div({
                        className: "games_top-game-bar"
                    }), _react2["default"].DOM.div({
                        className: "games_top-game-bar-text " + (isFreeDemo || !isHovered ? "" : "games_top-game-bar-text-paid")
                    }, barText), _react2["default"].DOM.div({
                        className: "games_top-game-bar-button"
                    }, game.isTopGame ? "Попробовать бесплатно" : l("games_top_game_play")), (0, _Img2["default"])({
                        src: image,
                        className: "games_top-game-image"
                    }));
                });
            },
            render: function() {
                var _props3 = this.props, page = _props3.page, topGamesList = _props3.topGamesList, openURL = _props3.openURL, playkeyInstalling = _props3.playkeyInstalling, hideComponent = "GAMES" !== page, _partition = (0, 
                _partition3["default"])(topGamesList, function(game) {
                    return game.isTopGame;
                }), topGamesPart = _partition[0], otherGamesPart = _partition[1];
                return _react2["default"].DOM.td({
                    className: (hideComponent ? "display-none" : "") + " games-screen__wrapper"
                }, playkeyInstalling ? _react2["default"].DOM.div({
                    className: "games_top-spinner-overlay"
                }, (0, _Img2["default"])({
                    src: "img/loading.gif",
                    className: "games_top-spinner",
                    style: {
                        marginTop: (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) / 2
                    },
                    width: "32",
                    height: "32"
                })) : null, _react2["default"].DOM.h1({
                    className: "games_title",
                    dangerouslySetInnerHTML: {
                        __html: l("games_playkey_top_title")
                    }
                }), _react2["default"].DOM.ul({
                    className: "games_top-list"
                }, _react2["default"].DOM.h3({
                    className: "games_top-list-title"
                }, "Попробуйте бесплатные демо-версии"), _react2["default"].DOM.div({
                    className: "games_top-game-list"
                }, this.renderGamesList(topGamesPart)), _react2["default"].DOM.h3({
                    className: "games_top-list-title"
                }, "Другие игры"), _react2["default"].DOM.div({
                    className: "games_top-game-list"
                }, this.renderGamesList(otherGamesPart))), _react2["default"].DOM.a({
                    className: "games_top-catalog-button",
                    href: "#",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "games catalog clicked",
                            counters: [ "debug" ]
                        }, {}, "games:catalog:clicked");
                        openURL("https://playkey.net/ru/games/?utm_source=driverpack&utm_medium=referral&utm_campaign=Games");
                    }
                }, (0, _Img2["default"])({
                    src: "img/games/games-button-icon-green.png",
                    className: "games_top-catalog-button-icon",
                    width: "19",
                    height: "19"
                }), (0, _Img2["default"])({
                    src: "img/games/games-button-icon-white.png",
                    className: "games_top-catalog-button-icon-hovered",
                    width: "19",
                    height: "19"
                }), _react2["default"].DOM.span({
                    className: "games_top-catalog-button-text"
                }, l("games_playkey_open_catalog_button"))), _react2["default"].DOM.h1({
                    className: "games_title",
                    dangerouslySetInnerHTML: {
                        __html: l("games_playkey_cloud_title")
                    }
                }), _react2["default"].DOM.div({
                    className: "games_cloud-img-wrap"
                }, _react2["default"].DOM.span({
                    className: "games_cloud-img-pc-caption"
                }, l("games_playkey_cloud_img_pc_caption")), _react2["default"].DOM.span({
                    className: "games_cloud-img-cloud-caption"
                }, l("games_playkey_cloud_img_cloud_caption")), _react2["default"].DOM.span({
                    className: "games_cloud-img-server-caption"
                }, l("games_playkey_cloud_img_server_caption")), _react2["default"].DOM.span({
                    className: "games_cloud-img-joystick-caption"
                }, l("games_playkey_cloud_img_joystick_caption")), (0, _Img2["default"])({
                    src: "img/games/games-cloud.png",
                    className: "games_cloud-img",
                    width: "613",
                    height: "407"
                }), (0, _Img2["default"])({
                    src: "img/games/games-cloud-big.png",
                    className: "games_cloud-img-big",
                    width: "944",
                    height: "496"
                })), _react2["default"].DOM.a({
                    className: "games_account-button",
                    href: "#",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        _logs2["default"].info({
                            action: "games create account clicked",
                            counters: [ "debug" ]
                        }, {}, "games:create:account:clicked");
                        openURL("https://playkey.net/ru/reg/?utm_source=driverpack&utm_medium=referral&utm_term=reg&utm_campaign=driverpack");
                    }
                }, (0, _Img2["default"])({
                    src: "img/games/games-button-icon-white.png",
                    className: "games_account-button-icon",
                    width: "19",
                    height: "19"
                }), _react2["default"].DOM.span({
                    className: "games_account-button-text"
                }, l("games_playkey_create_account_button"))), (0, _Img2["default"])({
                    src: "img/games/games-bottom-logo.png",
                    className: "games_bottom-logo",
                    width: "193",
                    height: "55"
                }));
            }
        }), actions = {
            loadGamesList: _gamesActions.loadGamesList,
            checkPlaykey: _gamesActions.checkPlaykey,
            hoverGame: _gamesActions.hoverGame,
            openURL: _gamesActions.openURL,
            installPlaykeyAndGo: _gamesActions.installPlaykeyAndGo
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(GamesScreen);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = undefined;
    var _GamesScreen = __webpack_require__(706), _GamesScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_GamesScreen);
    exports["default"] = _GamesScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _appActions = __webpack_require__(55);
        __webpack_require__(824);
        var GdprBanner = _react2["default"].createClass({
            displayName: "GdprBanner",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                app: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                toggleGdprBanner: _react.PropTypes.func.isRequired
            },
            render: function() {
                var _props = this.props, app = _props.app, toggleGdprBanner = _props.toggleGdprBanner;
                return app.isGdprBannerOpened ? _react2["default"].DOM.div({
                    className: "gdpr-banner_bg"
                }, _react2["default"].DOM.table({
                    className: "gdpr-banner_centering-table"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "gdpr-banner_centering-cell"
                }, _react2["default"].DOM.table({
                    className: "gdpr-banner_table"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                    className: "gdpr-banner_text"
                }, l("gdpr-banner_text"))), _react2["default"].DOM.td(null, _react2["default"].DOM.a({
                    href: "#",
                    className: "gdpr-banner_btn gdpr-banner_decline-btn cta-btn-28",
                    onMouseDown: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        toggleGdprBanner({
                            eventAction: "gdpr popup cancel clicked",
                            eventNamespace: "gdpr:popup:cancel:clicked",
                            isDeclined: !0
                        });
                    }
                }, l("gdpr-banner_decline-btn"))), _react2["default"].DOM.td(null, _react2["default"].DOM.a({
                    href: "#",
                    className: "gdpr-banner_btn gdpr-banner_accept-btn cta-green-btn cta-btn-28",
                    onMouseDown: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        toggleGdprBanner({
                            eventAction: "gdpr popup ok clicked",
                            eventNamespace: "gdpr:popup:ok:clicked",
                            isConfirmed: !0
                        });
                    }
                }, l("gdpr-banner_accept-btn"))))))))) : null;
            }
        }), mapState = function(state) {
            return {
                app: state.app
            };
        }, actions = {
            toggleGdprBanner: _appActions.toggleGdprBanner
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(GdprBanner);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _ps = __webpack_require__(72), _ps2 = _interopRequireDefault(_ps), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _logs = __webpack_require__(4), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _appActions = __webpack_require__(55), _onboardingActions = __webpack_require__(86), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), internetExplorerVersion = (0, 
        _getInternetExplorerVersion2["default"])();
        __webpack_require__(825);
        var Header = _react2["default"].createClass({
            displayName: "Header",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                children: _react.PropTypes.any,
                currentLanguage: _react.PropTypes.string.isRequired,
                toggleBurgerMenu: _react.PropTypes.func.isRequired,
                minimizeWindow: _react.PropTypes.func.isRequired,
                maximizeWindow: _react.PropTypes.func.isRequired,
                closeWindow: _react.PropTypes.func.isRequired,
                startWindowDragging: _react.PropTypes.func.isRequired,
                page: _react.PropTypes.string.isRequired,
                app: _react.PropTypes.object.isRequired,
                loading: _react.PropTypes.object.isRequired,
                authorize: _react.PropTypes.func.isRequired,
                unauthorize: _react.PropTypes.func.isRequired,
                doNotShowBell: _react.PropTypes.bool.isRequired,
                styling: _react.PropTypes.string
            },
            shouldFixHoverIcon: function() {
                if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 10) return !0; else return !1; else return !1;
            },
            render: function() {
                var _this = this, _props = this.props, toggleBurgerMenu = _props.toggleBurgerMenu, minimizeWindow = _props.minimizeWindow, maximizeWindow = _props.maximizeWindow, startWindowDragging = _props.startWindowDragging, page = _props.page, app = _props.app, loading = _props.loading, addOnboardingEvent = _props.addOnboardingEvent, doNotShowBell = _props.doNotShowBell, styling = _props.styling, user = app.user, now = loading.now, isModern = "modern" === styling;
                return ![ "LOADING", "LOADING_SCREEN" ].includes(page) || [ "NO_INTERNET", "RUN_ERROR" ].includes(now) ? _react2["default"].DOM.table({
                    className: ("INSTALLATION" === page ? "header_installation" : "") + " " + (isModern ? "header_start" : "header")
                }, _react2["default"].DOM.tr({
                    onMouseDown: function(e) {
                        e.stopPropagation();
                        startWindowDragging(e);
                    },
                    onDoubleClick: function(e) {
                        e.preventDefault();
                        maximizeWindow();
                    }
                }, _react2["default"].DOM.td({
                    className: "header_logo"
                }, "``", _react2["default"].DOM.div({
                    className: "header_logo-img",
                    alt: "DriverPack Solution",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                    }
                })), isModern ? this.renderCloseBtn() : _react2["default"].DOM.td({
                    className: "header_controls"
                }, -1 === [ "SCAN_SCREEN", "NO_INTERNET_SCREEN", "START" ].indexOf(page) ? user.profile ? _react2["default"].DOM.a({
                    href: "#",
                    className: "header_controls-btn header_auth-link",
                    onClick: function(e) {
                        _this.handleUnauthorizeClick(e);
                    },
                    onMouseDown: function(e) {
                        return e.stopPropagation();
                    }
                }, user.profile.email) : _react2["default"].DOM.a({
                    href: "#",
                    className: "header_controls-btn header_auth-link",
                    onMouseOver: function(e) {
                        addOnboardingEvent("auth button hovered");
                    },
                    onMouseDown: function(e) {
                        return e.stopPropagation();
                    },
                    onClick: function(e) {
                        _this.handleAuthorizeClick(e);
                    }
                }, l("header_authorize_button")) : null, -1 === [ "SCAN_SCREEN", "NO_INTERNET_SCREEN", "START" ].indexOf(page) && !doNotShowBell ? _react2["default"].DOM.a({
                    href: "#",
                    className: "header_controls-btn icons-controls header_controls-btn--bell header_controls-btn--icon " + (app.isBurgerMenuOpened ? "active" : ""),
                    onMouseDown: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        addOnboardingEvent("header bell clicked");
                    }
                }) : null, -1 === [ "SCAN_SCREEN", "NO_INTERNET_SCREEN", "LOADING", "FINAL_SCREEN" ].indexOf(page) ? _react2["default"].DOM.a({
                    href: "#",
                    className: "header_controls-btn icons-controls header_controls-btn--burger header_controls-btn--icon " + (app.isBurgerMenuOpened ? "active" : ""),
                    onMouseDown: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        toggleBurgerMenu({
                            eventAction: "burgermenu clicked",
                            eventNamespace: "burgermenu:clicked"
                        });
                    }
                }, "☰") : null, _ps2["default"].available ? _react2["default"].DOM.a({
                    href: "#",
                    className: "header_controls-btn icons-controls header_controls-btn--icon",
                    onMouseDown: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        minimizeWindow();
                    }
                }, "⚊") : null, _react2["default"].DOM.a({
                    href: "#",
                    className: "header_controls-btn icons-controls header_controls-btn--icon",
                    onClick: function(e) {
                        e.preventDefault();
                        maximizeWindow();
                    },
                    onMouseDown: function(e) {
                        return e.stopPropagation();
                    }
                }, "maximized" === app.windowState ? _react2["default"].DOM.span(null, "") : _react2["default"].DOM.span(null, "◻")), this.renderCloseBtn()))) : null;
            },
            renderCloseBtn: function() {
                var closeWindow = this.props.closeWindow;
                return _react2["default"].DOM.a({
                    href: "#",
                    className: "header_controls-btn icons-controls header_controls-btn--icon",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        closeWindow();
                    }
                }, "✖");
            },
            handleAuthorizeClick: function(e) {
                e.stopPropagation();
                e.preventDefault();
                var authorize = this.props.authorize;
                _statistics2["default"].event({
                    action: "auth authorize clicked",
                    counters: [ "debug" ]
                });
                (0, _logs.log)("[auth] authorize clicked");
                authorize();
            },
            handleUnauthorizeClick: function(e) {
                e.preventDefault();
                var unauthorize = this.props.unauthorize;
                _statistics2["default"].event({
                    action: "auth unauthorize clicked",
                    counters: [ "debug" ]
                });
                (0, _logs.log)("[auth] unauthorize clicked");
                if (window.confirm(l("authorize_popup_logout_button"))) {
                    _statistics2["default"].event({
                        action: "auth unauthorize confirm ok",
                        counters: [ "debug" ]
                    });
                    (0, _logs.log)("[auth] unauthorize confirm ok");
                    unauthorize();
                } else {
                    _statistics2["default"].event({
                        action: "auth unauthorize confirm cancel",
                        counters: [ "debug" ]
                    });
                    (0, _logs.log)("[auth] unauthorize confirm cancel");
                }
            }
        }), mapState = function(state) {
            return {
                page: state.page,
                app: state.app,
                loading: state.loading,
                doNotShowBell: state.onboarding && state.onboarding.doNotShowPopups || !state.app.expertModeClicked
            };
        }, actions = {
            toggleBurgerMenu: _appActions.toggleBurgerMenu,
            minimizeWindow: _appActions.minimizeWindow,
            maximizeWindow: _appActions.maximizeWindow,
            closeWindow: _appActions.closeWindow,
            startWindowDragging: _appActions.startWindowDragging,
            authorize: _appActions.authorize,
            unauthorize: _appActions.unauthorize,
            addOnboardingEvent: _onboardingActions.addOnboardingEvent
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(Header);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _deviceClasses = __webpack_require__(106), _deviceClasses2 = _interopRequireDefault(_deviceClasses), _SoftCategories = __webpack_require__(786), _SoftCategories2 = _interopRequireDefault(_SoftCategories), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(827);
        exports["default"] = _react2["default"].createClass({
            displayName: "InstallationHeader",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                preparing: _react.PropTypes.bool,
                items: _react.PropTypes.array,
                itemsContainDrivers: _react.PropTypes.bool,
                percents: _react.PropTypes.number.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            getInitialState: function() {
                return {
                    fakePercents: 3
                };
            },
            progressTick: function() {
                try {
                    var _props = this.props, preparing = _props.preparing, itemsContainDrivers = _props.itemsContainDrivers, fakePercents = this.state.fakePercents, nextPercents = void 0;
                    if (itemsContainDrivers && preparing) {
                        nextPercents = Math.min(fakePercents + .3, 10);
                        this.setState({
                            fakePercents: nextPercents
                        });
                    } else clearInterval(this.progressTimer);
                } catch (e) {}
            },
            componentDidMount: function() {
                this.progressTimer = setInterval(this.progressTick, 300);
            },
            componentWillUnmount: function() {
                clearInterval(this.progressTimer);
            },
            getStatusData: function() {
                var items = this.props.items, installing = items.find(function(item) {
                    return "installing" === item.status;
                }), nextStatusData = void 0;
                if (installing) nextStatusData = {
                    isDriver: installing.isDriver,
                    itemCategory: installing.isDriver ? installing.recommendedDriver["class"] : installing.category.toLowerCase()
                }; else nextStatusData = null;
                return nextStatusData;
            },
            getSubtitle: function(_ref) {
                var itemsContainDrivers = _ref.itemsContainDrivers, preparing = _ref.preparing, statusData = _ref.statusData, visiblePercents = _ref.visiblePercents, subtitle = void 0;
                if (itemsContainDrivers && preparing) subtitle = l("installation_header_subtitle"); else if (visiblePercents >= 99) subtitle = ""; else if (statusData) {
                    var isDriver = statusData.isDriver, itemCategory = statusData.itemCategory;
                    if (isDriver) {
                        var deviceClassName = (0, _deviceClasses2["default"])(l)[itemCategory].morpher.single["for"];
                        subtitle = l("installation_header_subtitle_installing-driver").replace("{{CLASS.SINGLE.FOR}}", deviceClassName);
                    } else if ("drivers" === itemCategory || "system" === itemCategory) {
                        var softCategoryName = (0, _SoftCategories2["default"])(l)[itemCategory].morpher.plural["for"];
                        subtitle = l("installation_header_subtitle_installing-program-plural").replace("{{CATEGORY.PLURAL.FOR}}", softCategoryName);
                    } else {
                        var _softCategoryName = (0, _SoftCategories2["default"])(l)[itemCategory].morpher.single["for"];
                        subtitle = l("installation_header_subtitle_installing-program").replace("{{CATEGORY.SINGLE.FOR}}", _softCategoryName);
                    }
                } else subtitle = l("installation_header_subtitle_downloading");
                return subtitle;
            },
            getVisiblePercents: function() {
                var percents = this.props.percents;
                return Math.min(Math.max(Math.round(this.state.fakePercents), percents), 99);
            },
            render: function() {
                var _props2 = this.props, preparing = _props2.preparing, itemsContainDrivers = _props2.itemsContainDrivers, statusData = this.getStatusData(), visiblePercents = this.getVisiblePercents(), title = itemsContainDrivers && preparing ? l("installation_header_preparing") : l("installation_header_title"), subtitle = this.getSubtitle({
                    itemsContainDrivers: itemsContainDrivers,
                    preparing: preparing,
                    statusData: statusData,
                    visiblePercents: visiblePercents
                });
                return _react2["default"].DOM.table({
                    className: "installation-header"
                }, _react2["default"].DOM.tr(null, _react2["default"].DOM.td(null, (0, _Img2["default"])({
                    src: "img/new-logo.png",
                    className: "start-logo"
                }), _react2["default"].DOM.div({
                    className: "installation-header_wrapper"
                }, _react2["default"].DOM.h1({
                    className: "installation-header_title"
                }, title), _react2["default"].DOM.p({
                    className: "installation-header_subtitle",
                    dangerouslySetInnerHTML: {
                        __html: subtitle
                    }
                }), _react2["default"].DOM.div({
                    className: "installation-header_progress-holder"
                }, _react2["default"].DOM.div({
                    className: "installation-header_progress-bg"
                }, _react2["default"].DOM.div({
                    className: "installation-header_progress",
                    style: {
                        width: visiblePercents + "%"
                    }
                }), _react2["default"].DOM.div({
                    className: "installation-header_progress-percents"
                }, visiblePercents, "%")))))));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), _InstallationItemRowIcon = __webpack_require__(713), _InstallationItemRowIcon2 = _interopRequireDefault(_InstallationItemRowIcon), _InstallationItemRowDescription = __webpack_require__(712), _InstallationItemRowDescription2 = _interopRequireDefault(_InstallationItemRowDescription), _InstallationItemRowProgress = __webpack_require__(714), _InstallationItemRowProgress2 = _interopRequireDefault(_InstallationItemRowProgress), _InstallationItemRowStatus = __webpack_require__(715), _InstallationItemRowStatus2 = _interopRequireDefault(_InstallationItemRowStatus), internetExplorerVersion = (0, 
        _getInternetExplorerVersion2["default"])();
        exports["default"] = _react2["default"].createClass({
            displayName: "InstallationItemRow",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                currentLanguage: _react.PropTypes.string.isRequired,
                id: _react.PropTypes.string.isRequired,
                name: _react.PropTypes.string,
                isRestorePoint: _react.PropTypes.bool,
                isDriver: _react.PropTypes.bool,
                isPartner: _react.PropTypes.bool,
                itemCategory: _react.PropTypes.string.isRequired,
                pack: _react.PropTypes.string,
                itemDescription: _react.PropTypes.string,
                softDescription: _react.PropTypes.object,
                softEula: _react.PropTypes.string,
                softPolicy: _react.PropTypes.string,
                status: _react.PropTypes.string.isRequired,
                cancelItemInstallation: _react.PropTypes.func,
                restartItemInstallation: _react.PropTypes.func,
                downloading: _react.PropTypes.object,
                unzipping: _react.PropTypes.object,
                error: _react.PropTypes.object,
                odd: _react.PropTypes.bool.isRequired
            },
            render: function() {
                var _props = this.props, currentLanguage = _props.currentLanguage, name = _props.name, status = _props.status, isRestorePoint = _props.isRestorePoint, isDriver = _props.isDriver, isPartner = _props.isPartner, itemCategory = _props.itemCategory, itemDescription = _props.itemDescription, softDescription = _props.softDescription, softEula = _props.softEula, softPolicy = _props.softPolicy, odd = _props.odd, dictionary = {
                    restore_point: l("installation_item_category_restorepoint"),
                    bluetooth: l("driver_class_bluetooth"),
                    cardreader: l("driver_class_cardreader"),
                    chipset: l("driver_class_chipset"),
                    inputdev: l("driver_class_inputdev"),
                    lan: l("driver_class_lan"),
                    massstorage: l("driver_class_massstorage"),
                    modem: l("driver_class_modem"),
                    monitor: l("driver_class_monitor"),
                    phone: l("driver_class_phone"),
                    printer: l("driver_class_printer"),
                    sound: l("driver_class_sound"),
                    tvtuner: l("driver_class_tvtuner"),
                    video: l("driver_class_video"),
                    webcamera: l("driver_class_webcamera"),
                    wifi: l("driver_class_wifi"),
                    other: l("driver_class_other"),
                    archiver: l("soft_category_archiver"),
                    browser: l("soft_category_browser"),
                    viewer: l("soft_category_viewer"),
                    messenger: l("soft_category_messenger"),
                    internet: l("soft_category_internet"),
                    player: l("soft_category_player"),
                    backup: l("soft_category_backup"),
                    antivirus: l("soft_category_antivirus"),
                    system: l("soft_category_system"),
                    drivers: l("soft_category_drivers")
                }, category = dictionary[itemCategory.toLowerCase()] || dictionary.other, icon = void 0, description = void 0, lang = "ru" === currentLanguage ? "ru" : "en";
                if (isRestorePoint) {
                    icon = "img/installation/drivers/" + itemCategory + ".png";
                    description = itemDescription;
                } else if (isDriver) {
                    icon = "img/installation/drivers/" + itemCategory + ".png";
                    description = name;
                } else {
                    icon = "img/installation/drivers/other.png";
                    description = softDescription[lang];
                }
                var descriptionAdditions = {};
                if (softEula) descriptionAdditions.eula = softEula;
                if (softPolicy) descriptionAdditions.policy = softPolicy;
                return _react2["default"].DOM.tr({
                    className: "installation-list_row " + (odd ? "" : "light")
                }, _react2["default"].DOM.td({
                    style: {
                        padding: "0"
                    }
                }, _react2["default"].DOM.table({
                    className: "installation-list_row-centered"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, (0, _InstallationItemRowIcon2["default"])({
                    icon: icon
                }), (0, _InstallationItemRowDescription2["default"])({
                    isPartner: isPartner,
                    category: category,
                    description: isDriver || !description ? name : description,
                    additions: descriptionAdditions,
                    currentLanguage: currentLanguage
                }), this.renderProgressCol(), (0, _InstallationItemRowStatus2["default"])({
                    status: status,
                    currentLanguage: currentLanguage,
                    isRestorePoint: isRestorePoint
                }), _react2["default"].DOM.td({
                    className: "installation-list_cancel-col"
                }, !isDriver && !isRestorePoint && !isPartner && [ "waiting", "downloading", "downloaded" ].includes(status) ? this.renderCancel() : _react2["default"].DOM.div({
                    style: {
                        width: "24px"
                    }
                }, " ")))))));
            },
            shouldFixHoverIcon: function() {
                if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 7) return !0; else return !1; else return !1;
            },
            renderProgressCol: function() {
                var _props2 = this.props, id = _props2.id, name = _props2.name, isDriver = _props2.isDriver, status = _props2.status, downloading = _props2.downloading, unzipping = _props2.unzipping, error = _props2.error, currentLanguage = _props2.currentLanguage, progressProps = {
                    id: id,
                    name: name,
                    isDriver: isDriver,
                    status: status,
                    downloading: downloading,
                    unzipping: unzipping,
                    error: error,
                    currentLanguage: currentLanguage
                };
                return (0, _InstallationItemRowProgress2["default"])(progressProps);
            },
            renderCancel: function() {
                var _props3 = this.props, id = _props3.id, name = _props3.name, status = _props3.status, cancelItemInstallation = _props3.cancelItemInstallation;
                return _react2["default"].DOM.a({
                    href: "javascript:void(0)",
                    className: "installation-list_cancel",
                    onClick: function(e) {
                        e.preventDefault();
                        cancelItemInstallation(name, id, status);
                    }
                }, (0, _Img2["default"])({
                    src: "img/installation/controls/cancel.png",
                    width: "24",
                    height: "24"
                }));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = function(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }(_react), _utils = __webpack_require__(19);
        exports["default"] = _react2["default"].createClass({
            displayName: "InstallationItemRowDescription",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                isPartner: _react.PropTypes.bool.isRequired,
                category: _react.PropTypes.string.isRequired,
                description: _react.PropTypes.string.isRequired,
                additions: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            render: function() {
                var _props = this.props, isPartner = _props.isPartner, category = _props.category, description = _props.description, additions = _props.additions, eula = additions.eula, policy = additions.policy;
                return _react2["default"].DOM.td({
                    className: "installation-list_desc-col"
                }, _react2["default"].DOM.div({
                    className: "installation-list_category"
                }, _react2["default"].DOM.span({
                    className: "installation-list_category-name",
                    href: "javascript:void(0)",
                    onClick: function(e) {
                        e.preventDefault();
                    }
                }, category, window.isAppEsteem && isPartner ? _react2["default"].DOM.sup({
                    className: "program-name-sup-offer bold"
                }, "offer") : null)), _react2["default"].DOM.div({
                    className: "installation-list_name"
                }, description), eula ? _react2["default"].DOM.div({
                    className: "installation-list_link-wrapper"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "installation-list_link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)(eula);
                    }
                }, l("installation_item_eula"))) : null, policy ? _react2["default"].DOM.div({
                    className: "installation-list_link-wrapper"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "installation-list_link",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)(policy);
                    }
                }, l("installation_item_policy"))) : null);
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
    exports["default"] = _react2["default"].createClass({
        displayName: "InstallationItemRowIcon",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            icon: _react.PropTypes.string.isRequired
        },
        render: function() {
            var icon = this.props.icon;
            return _react2["default"].DOM.td({
                className: "installation-list_icon-col"
            }, _react2["default"].DOM.span({
                className: "installation-list_icon"
            }, (0, _Img2["default"])({
                src: icon,
                width: "56",
                height: "56"
            })));
        }
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), internetExplorerVersion = (0, 
        _getInternetExplorerVersion2["default"])();
        exports["default"] = _react2["default"].createClass({
            displayName: "InstallationItemRowProgress",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                id: _react.PropTypes.string.isRequired,
                name: _react.PropTypes.string,
                isDriver: _react.PropTypes.bool,
                status: _react.PropTypes.string.isRequired,
                downloading: _react.PropTypes.object,
                unzipping: _react.PropTypes.object,
                error: _react.PropTypes.object,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            shouldFixProgress: function() {
                if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 10) return !0; else return !1; else return !1;
            },
            calculateDownloadProgressWidth: function() {
                var _props$downloading = this.props.downloading, downloadedSize = _props$downloading.downloadedSize, totalFileSize = _props$downloading.totalFileSize;
                return totalFileSize ? Math.min(Math.round(100 * downloadedSize / totalFileSize), 100) : 100;
            },
            formatBytes: function(bytes, decimals) {
                var kilo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1024;
                if (0 === bytes) return "0 B";
                var dm = decimals + 1 || 3, sizes = [ "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" ], i = Math.floor(Math.log(bytes) / Math.log(kilo));
                return (bytes / Math.pow(kilo, i)).toPrecision(dm) + " " + sizes[i];
            },
            formatSpeed: function(bytes, decimals) {
                var kilo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1024, bits = 8 * bytes;
                if (0 === bits) return "0 bps";
                var dm = decimals + 1 || 3, sizes = [ "bps", "kbps", "Mbps", "Gbps" ], i = Math.floor(Math.log(bits) / Math.log(kilo));
                return (bits / Math.pow(kilo, i)).toPrecision(dm) + " " + sizes[i];
            },
            render: function() {
                var _props = this.props, isDriver = _props.isDriver, status = _props.status, downloading = _props.downloading, unzipping = _props.unzipping, error = _props.error, dictionary = {
                    download: l("installation_error_download"),
                    unzip: l("installation_error_unzip"),
                    install: l("installation_error_install"),
                    system_restore_disabled: l("installation_error_restore_disabled"),
                    not_created: l("installation_error_restore_not_created")
                };
                switch (status) {
                  case "creating":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, l("installation_progress_stage_creating")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, this.shouldFixProgress() ? _react2["default"].DOM.div({
                        className: "installation-list_progress",
                        style: {
                            width: "100%"
                        }
                    }, _react2["default"].DOM.img({
                        src: "img/installation/statuses/progress.gif",
                        width: "100%"
                    })) : _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-infinite",
                        style: {
                            width: "100%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-bottom-spacer"
                    }));

                  case "created":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, l("installation_progress_stage_created")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-linear",
                        style: {
                            width: "100%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-bottom-spacer"
                    }));

                  case "waiting":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, l("installation_progress_stage_waiting")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-linear",
                        style: {
                            width: "0%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-bottom-spacer"
                    }));

                  case "downloading":
                    var progressInfo = downloading.totalFileSize ? [ l("installation_progress_downloading_speed"), this.formatSpeed(downloading.downloadingSpeed), "&middot;", this.formatBytes(downloading.downloadedSize), l("installation_progress_downloading_of"), this.formatBytes(downloading.totalFileSize) ].join(" ") : [ l("installation_progress_downloaded"), this.formatBytes(downloading.downloadedSize) ].join(" ");
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, "1/", isDriver ? "3" : "2", " ", l("installation_progress_stage_downloading")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-linear",
                        style: {
                            width: this.calculateDownloadProgressWidth() + "%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-info",
                        dangerouslySetInnerHTML: {
                            __html: progressInfo
                        }
                    }));

                  case "downloaded":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, l("installation_progress_stage_downloaded")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-linear",
                        style: {
                            width: "0%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-bottom-spacer"
                    }));

                  case "unzipping":
                  case "unzipped":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, "2/3 ", l("installation_progress_stage_unzipping")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-linear",
                        style: {
                            width: unzipping.unzippedPercents + "%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-info"
                    }, l("installation_progress_unzipping_unzipped"), " ", unzipping.unzippedPercents + " %"));

                  case "installing":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, isDriver ? "3/3" : "2/2", " ", l("installation_progress_stage_installing")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, this.shouldFixProgress() ? _react2["default"].DOM.div({
                        className: "installation-list_progress",
                        style: {
                            width: "100%"
                        }
                    }, _react2["default"].DOM.img({
                        src: "img/installation/statuses/progress.gif",
                        width: "100%"
                    })) : _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-infinite",
                        style: {
                            width: "100%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-bottom-spacer"
                    }));

                  case "done":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, l("installation_progress_stage_done")), _react2["default"].DOM.div({
                        className: "installation-list_progress-bg"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress installation-list_progress-linear",
                        style: {
                            width: "100%"
                        }
                    })), _react2["default"].DOM.div({
                        className: "installation-list_progress-bottom-spacer"
                    }));

                  case "error":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, _react2["default"].DOM.span({
                        style: {
                            color: "not_created" === error.errorType ? "#B5B5B5" : "#d95c4c"
                        }
                    }, dictionary[error.errorType], " ")));

                  case "canceled":
                    return _react2["default"].DOM.td({
                        className: "installation-list_progress-col"
                    }, _react2["default"].DOM.div({
                        className: "installation-list_progress-stage"
                    }, _react2["default"].DOM.span({
                        style: {
                            color: "#555"
                        }
                    }, l("installation_canceled"))));
                }
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
    exports["default"] = _react2["default"].createClass({
        displayName: "InstallationItemRowStatus",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            status: _react.PropTypes.string.isRequired,
            currentLanguage: _react.PropTypes.string.isRequired
        },
        getInitialState: function() {
            return {
                currentStageStart: 0,
                prevStagesDuration: 0,
                secondsElapsed: 0
            };
        },
        tick: function() {
            var status = this.props.status;
            if ("creating" === status || "downloading" === status || "unzipping" === status || "installing" === status) {
                var now = Date.now();
                if (0 === this.state.currentStageStart) this.setState({
                    currentStageStart: now
                });
                var diff = Math.round((now - this.state.currentStageStart) / 1e3);
                this.setState({
                    secondsElapsed: this.state.prevStagesDuration + diff
                });
            } else if ("created" === status || "done" === status || "error" === status || "canceled" === status) {
                this.setState({
                    currentStageStart: 0,
                    prevStagesDuration: 0,
                    secondsElapsed: 0
                });
                clearInterval(this.interval);
            } else if ("downloaded" === status && 0 !== this.state.currentStageStart) {
                this.setState({
                    prevStagesDuration: this.state.secondsElapsed
                });
                this.setState({
                    currentStageStart: 0
                });
            }
        },
        componentDidMount: function() {
            var _this = this;
            this.interval = setInterval(function() {
                try {
                    _this.tick();
                } catch (e) {
                    clearInterval(_this.interval);
                }
            }, 1e3);
        },
        componentWillUnmount: function() {
            clearInterval(this.interval);
        },
        formatTime: function(seconds) {
            var hours = this.formatTwoDigits(parseInt(seconds / 3600, 10) % 24), minutes = this.formatTwoDigits(parseInt(seconds / 60, 10) % 60);
            seconds = this.formatTwoDigits(seconds % 60);
            return (seconds >= 3600 ? hours + ":" : "") + minutes + ":" + seconds;
        },
        formatTwoDigits: function(n) {
            return n < 10 ? "0" + n : n;
        },
        render: function() {
            return _react2["default"].DOM.td({
                className: "installation-list_status-col",
                style: {
                    paddingRight: "48px"
                }
            }, this.renderStatusColContent());
        },
        renderStatusColContent: function() {
            var _props = this.props, status = _props.status, isRestorePoint = _props.isRestorePoint;
            switch (status) {
              case "waiting":
              case "downloaded":
                return (0, _Img2["default"])({
                    className: "installation-list_status-icon",
                    src: "img/installation/statuses/sleep.png",
                    width: "40",
                    height: "24"
                });

              case "creating":
              case "downloading":
              case "unzipping":
              case "unzipped":
              case "installing":
                return _react2["default"].DOM.div({
                    className: "installation-list_status-timer"
                }, this.formatTime(this.state.secondsElapsed));

              case "created":
              case "done":
                return (0, _Img2["default"])({
                    className: "installation-list_status-icon",
                    src: "img/installation/statuses/done.png",
                    width: "40",
                    height: "24"
                });

              case "error":
                if (isRestorePoint) return _react2["default"].DOM.div(null); else return (0, _Img2["default"])({
                    className: "installation-list_status-icon",
                    src: "img/installation/statuses/error.png",
                    width: "40",
                    height: "24"
                });

              case "canceled":
                return _react2["default"].DOM.div(null);
            }
        }
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), internetExplorerVersion = (0, 
        _getInternetExplorerVersion2["default"])();
        exports["default"] = _react2["default"].createClass({
            displayName: "InstallationTitleTable",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                currentLanguage: _react.PropTypes.string.isRequired
            },
            shouldFixHoverIcon: function() {
                if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 10) return !0; else return !1; else return !1;
            },
            render: function() {
                return _react2["default"].DOM.table({
                    id: "installation-title",
                    className: "installation-title"
                }, _react2["default"].DOM.thead(null), _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr({
                    className: "installation-title_row"
                }, _react2["default"].DOM.td({
                    className: "installation-title_name-col"
                }, _react2["default"].DOM.div({
                    className: "installation-title_name"
                }, l("installation_title_name"))), _react2["default"].DOM.td(null), _react2["default"].DOM.td(null), _react2["default"].DOM.td(null))));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                currentLanguage: state.lang.currentLanguage
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _programsActions = __webpack_require__(64), _os = __webpack_require__(14);
        __webpack_require__(828);
        var RestartPopup = _react2["default"].createClass({
            displayName: "RestartPopup",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                currentLanguage: _react.PropTypes.string.isRequired,
                closeRestartPopup: _react.PropTypes.func.isRequired
            },
            render: function() {
                var closeRestartPopup = this.props.closeRestartPopup;
                return _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                    className: "semi-transparent-overlay"
                }), _react2["default"].DOM.table({
                    className: "restart-popup_popup"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "restart-popup_wrapper"
                }, _react2["default"].DOM.div({
                    className: "restart-popup_inner"
                }, _react2["default"].DOM.div({
                    className: "restart-popup_title " + (_os.OSVersion < 6 ? "no-button" : "")
                }, l("restart_popup_title")), _os.OSVersion > 6 && _react2["default"].DOM.div(null, _react2["default"].DOM.button({
                    onClick: function(e) {
                        closeRestartPopup(!0);
                    },
                    className: "restart-popup_button cta-green-btn"
                }, l("restart_popup_button")))))))));
            }
        }), actions = {
            closeRestartPopup: _programsActions.closeRestartPopup
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(RestartPopup);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                installation: state.installation,
                settings: state.settings,
                currentLanguage: state.lang.currentLanguage
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _installationActions = __webpack_require__(685), _InstallationHeader = __webpack_require__(710), _InstallationHeader2 = _interopRequireDefault(_InstallationHeader), _InstallationTitleTable = __webpack_require__(716), _InstallationTitleTable2 = _interopRequireDefault(_InstallationTitleTable), _InstallationItemRow = __webpack_require__(711), _InstallationItemRow2 = _interopRequireDefault(_InstallationItemRow), _Onboarding = __webpack_require__(309), _Onboarding2 = _interopRequireDefault(_Onboarding);
        __webpack_require__(826);
        var Installation = _react2["default"].createClass({
            displayName: "Installation",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                installation: _react.PropTypes.object.isRequired,
                settings: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                cancelItemInstallation: _react.PropTypes.func,
                confirmAvInstallation: _react.PropTypes.bool,
                showLeftArrow: _react.PropTypes.func.isRequired,
                showRightArrow: _react.PropTypes.func.isRequired,
                hideArrows: _react.PropTypes.func.isRequired
            },
            getStageWeight: function(stage, item) {
                switch (stage) {
                  case "downloading":
                    return !1 ? 1 : .3;

                  case "unzipping":
                    return !item.isDriver ? 0 : !1 ? .3 : 1;

                  case "installing":
                    return 1;
                }
            },
            getStageProgress: function(stage, item) {
                var statuses = [ "waiting", "downloading", "downloaded", "unzipping", "unzipped", "installing", "done", "error" ], _item$downloading = item.downloading, downloadedSize = _item$downloading.downloadedSize, totalFileSize = _item$downloading.totalFileSize, unzippedPercents = item.unzipping.unzippedPercents;
                switch (stage) {
                  case "downloading":
                    return totalFileSize ? Math.min(downloadedSize / totalFileSize, 1) : 0;

                  case "unzipping":
                    return !item.isDriver ? 0 : unzippedPercents / 100;

                  default:
                    return statuses.indexOf(item.status) > statuses.indexOf(stage) ? 1 : 0;
                }
            },
            getHeaderPercents: function() {
                var _this = this, installation = this.props.installation, items = installation.items, isProcessFinished = installation.isProcessFinished, stages = [ "downloading", "unzipping", "installing" ], totalValue = 0, currentValue = 0;
                items.forEach(function(item, index) {
                    stages.forEach(function(stage) {
                        totalValue += _this.getStageWeight(stage, item);
                        currentValue += _this.getStageProgress(stage, item) * _this.getStageWeight(stage, item);
                    });
                });
                var percents = totalValue ? Math.round(100 * currentValue / totalValue) : 0;
                return isProcessFinished ? Math.max(percents, 95) : percents;
            },
            shouldShowPromoBanner: function() {
                var _props = this.props, installation = _props.installation, settings = _props.settings, promos = installation.promos;
                if ((settings.general.settings.hideInstallationBanners.value, !0) || !promos || 0 === promos.length) return !1; else return !0;
            },
            renderHeader: function() {
                var _props2 = this.props, currentLanguage = _props2.currentLanguage, installation = _props2.installation, settings = _props2.settings, preparing = installation.preparing, promos = installation.promos, items = installation.items, itemsContainDrivers = installation.itemsContainDrivers, headerProps = {
                    currentLanguage: currentLanguage,
                    settings: settings,
                    preparing: preparing,
                    percents: this.getHeaderPercents(),
                    promos: promos,
                    items: items,
                    itemsContainDrivers: itemsContainDrivers
                };
                return (0, _InstallationHeader2["default"])(headerProps);
            },
            renderInstallationItemsTable: function() {
                var itemsContainDrivers = this.props.installation.itemsContainDrivers;
                return _react2["default"].DOM.table({
                    id: "installation-list",
                    className: "installation-list",
                    border: "1"
                }, _react2["default"].DOM.thead(null), _react2["default"].DOM.tbody(null, itemsContainDrivers ? this.renderRestorePointItem() : null, this.renderInstallationItems()));
            },
            renderRestorePointItem: function() {
                var _props3 = this.props, currentLanguage = _props3.currentLanguage, installation = _props3.installation, preparing = installation.preparing, restorePointStatus = installation.restorePointStatus, itemProps = {
                    currentLanguage: currentLanguage,
                    id: "restore_point",
                    isRestorePoint: !0,
                    itemCategory: "restore_point",
                    itemDescription: l("installation_item_description_restorepoint"),
                    status: preparing ? "creating" : !restorePointStatus || "ok" !== restorePointStatus.status ? "error" : "created",
                    error: {
                        errorType: restorePointStatus && restorePointStatus.status || ""
                    },
                    odd: !1
                };
                return (0, _InstallationItemRow2["default"])(itemProps);
            },
            compareInstallationItems: function(item1, item2) {
                if (item1.isDriver && !item2.isDriver) return -1;
                if (!item1.isDriver && item2.isDriver) return 1;
                if ("Drivers" === item1.category && "Drivers" !== item2.category) return -1;
                if ("Drivers" !== item1.category && "Drivers" === item2.category) return 1; else return item1.priority - item2.priority;
            },
            renderInstallationItems: function() {
                var list = [], _props4 = this.props, currentLanguage = _props4.currentLanguage, installation = _props4.installation, cancelItemInstallation = _props4.cancelItemInstallation, items = installation.items, itemsContainDrivers = installation.itemsContainDrivers;
                items.sort(this.compareInstallationItems).forEach(function(item, index) {
                    var id = item.id, name = item.name, isDriver = item.isDriver, isPartner = item.isPartner, isSilent = item.isSilent, status = item.status, error = item.error, downloading = item.downloading, unzipping = item.unzipping;
                    if (!isSilent) {
                        var itemProps = {
                            currentLanguage: currentLanguage,
                            id: id,
                            name: name,
                            isDriver: isDriver,
                            pack: isDriver ? item.recommendedDriver.pack.replace(/_\d+$/, "") : "",
                            itemCategory: isDriver ? item.recommendedDriver["class"] : item.category,
                            softDescription: !isDriver ? item.description : null,
                            softEula: !isDriver ? item.eula : null,
                            softPolicy: !isDriver ? item.policy : null,
                            isPartner: isPartner,
                            status: status,
                            error: error,
                            downloading: downloading,
                            unzipping: unzipping,
                            cancelItemInstallation: cancelItemInstallation,
                            odd: (!itemsContainDrivers ? index : index + 1) % 2 == 1
                        };
                        list.push((0, _InstallationItemRow2["default"])(itemProps));
                    }
                });
                return list;
            },
            handleMouseMove: function(e, id) {
                var _this2 = this;
                e.stopPropagation();
                if (this.hoveringItemId !== id) {
                    this.hoveringItemId = id;
                    clearInterval(this.hoveringTimer);
                    var closing = null === id;
                    this.hoveringTimer = setTimeout(function() {
                        var _props5 = _this2.props, showLeftArrow = _props5.showLeftArrow, showRightArrow = _props5.showRightArrow, hideArrows = _props5.hideArrows;
                        if ("installation_left_arrow" === id) showLeftArrow(); else if ("installation_right_arrow" === id) showRightArrow(); else hideArrows();
                    }, closing ? 300 : 50);
                }
            },
            render: function() {
                var currentLanguage = this.props.currentLanguage;
                return _react2["default"].DOM.div({
                    className: "top-for-header positioning-for-header",
                    style: {
                        overflow: "hidden"
                    }
                }, _react2["default"].DOM.div({
                    className: "installation_wrapper",
                    id: "installation_wrapper"
                }, this.renderHeader(), _react2["default"].DOM.div({
                    className: "onboarding-static"
                }, (0, _Onboarding2["default"])(null)), _react2["default"].DOM.div({
                    className: "installation-table_wrapper",
                    style: {
                        display: "block"
                    }
                }, (0, _InstallationTitleTable2["default"])({
                    currentLanguage: currentLanguage
                }), this.renderInstallationItemsTable())));
            }
        }), actions = {
            cancelItemInstallation: _installationActions.cancelItemInstallation,
            showLeftArrow: _installationActions.showLeftArrow,
            showRightArrow: _installationActions.showRightArrow,
            hideArrows: _installationActions.hideArrows
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(Installation);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Menu = __webpack_require__(723), _Menu2 = _interopRequireDefault(_Menu);
    __webpack_require__(829);
    var Layout = _react2["default"].createClass({
        displayName: "Layout",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            currentLanguage: _react.PropTypes.string.isRequired,
            children: _react.PropTypes.any
        },
        render: function() {
            return _react2["default"].DOM.div({
                className: "main"
            }, _react2["default"].DOM.div({
                style: {
                    overflow: "auto",
                    height: "100%"
                }
            }, _react2["default"].DOM.table({
                style: {
                    width: "100%",
                    height: "100%"
                }
            }, _react2["default"].DOM.tbody({
                style: {
                    height: "100%"
                }
            }, _react2["default"].DOM.tr({
                style: {
                    height: "100%"
                }
            }, _react2["default"].DOM.td({
                className: "menu"
            }, this.renderMenu()), this.props.children)))));
        },
        renderMenu: function() {
            var currentLanguage = this.props.currentLanguage;
            return (0, _Menu2["default"])({
                currentLanguage: currentLanguage
            });
        }
    });
    exports["default"] = Layout;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                loading: state.loading
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _menuActions = __webpack_require__(38);
        __webpack_require__(830);
        var Loading = _react2["default"].createClass({
            displayName: "Loading",
            propTypes: {
                loading: _react.PropTypes.object.isRequired,
                navigate: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            render: function() {
                var _this = this, loading = this.props.loading, now = loading.now, backgroundImage = void 0, description = void 0;
                switch (now) {
                  case "BACKUP":
                    backgroundImage = "url(Tools/load8.gif)";
                    description = _react2["default"].DOM.span(null, l("loading_backup_drivers"), "...");
                    break;

                  case "BACKUP_DONE":
                    backgroundImage = "none";
                    description = _react2["default"].DOM.span(null, l("loading_backup_done"), _react2["default"].DOM.br(null), _react2["default"].DOM.button({
                        className: "button loading-button",
                        onClick: function() {
                            _this.openNextScreen("DRIVERS");
                        }
                    }, l("loading_button_finish")));
                    break;

                  case "BACKUP_FAILED":
                    backgroundImage = "none";
                    description = _react2["default"].DOM.span(null, l("loading_backup_failed"), _react2["default"].DOM.br(null), _react2["default"].DOM.button({
                        className: "button loading-button",
                        onClick: function() {
                            _this.openNextScreen("DRIVERS");
                        }
                    }, l("loading_button_finish")));
                    break;

                  case "RUN_ERROR":
                    backgroundImage = "none";
                    description = _react2["default"].DOM.span({
                        style: {
                            fontSize: "24px"
                        },
                        dangerouslySetInnerHTML: {
                            __html: l("about_run_error")
                        }
                    });
                    break;

                  default:
                    backgroundImage = "url(Tools/load8.gif)";
                    description = _react2["default"].DOM.span(null);
                }
                return _react2["default"].DOM.div({
                    className: "loading",
                    style: {
                        backgroundImage: backgroundImage
                    }
                }, _react2["default"].DOM.div({
                    className: "loading-progress"
                }, _react2["default"].DOM.span({
                    className: "loading-description"
                }, description)));
            },
            openNextScreen: function(nextScreen) {
                var navigate = this.props.navigate;
                document.activeElement && document.activeElement.blur();
                navigate(nextScreen);
            }
        }), actions = {
            navigate: _menuActions.navigate
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(Loading);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                loading: state.loading
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _utils = __webpack_require__(323);
        __webpack_require__(831);
        var LoadingScreen = _react2["default"].createClass({
            displayName: "LoadingScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                progressPercents: _react.PropTypes.number.isRequired,
                loading: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            getInitialState: function() {
                return {
                    progressPercents: 0
                };
            },
            componentDidMount: function() {
                var _this = this;
                document.documentElement.removeAttribute("style");
                (0, _utils.fitApplicationWindow)();
                this.progressTimer = setInterval(function() {
                    try {
                        _this.setState({
                            progressPercents: _this.state.progressPercents + .3
                        });
                        if (_this.state.progressPercents >= 100) clearInterval(_this.progressTimer);
                    } catch (e) {
                        clearInterval(_this.progressTimer);
                    }
                }, 20);
            },
            componentWillUnmount: function() {
                clearInterval(this.progressTimer);
            },
            render: function() {
                var loading = this.props.loading, status = loading.status, dictionary = {
                    system_scanning: l("loading_preparing"),
                    system_scan_finished: l("loading_system_scanning"),
                    api_response_received: l("loading_sending_api_request"),
                    installed_programs_scan_finished: l("loading_checking_installed_programs"),
                    protect_api_response_received: l("loading_ordering_drivers")
                };
                return _react2["default"].DOM.div({
                    id: "loading-screen",
                    className: "loading-screen"
                }, _react2["default"].DOM.div({
                    className: "loading-screen_logo"
                }), _react2["default"].DOM.div({
                    className: "loading-screen_progress-wrapper"
                }, _react2["default"].DOM.div({
                    className: "loading-screen_progress-status"
                }, dictionary[status]), _react2["default"].DOM.div({
                    className: "loading-screen_progress-bg"
                }, _react2["default"].DOM.div({
                    className: "loading-screen_progress loading-screen_progress-linear",
                    style: {
                        width: this.state.progressPercents + "%"
                    }
                }))));
            }
        });
        exports["default"] = (0, _connect2["default"])(mapState)(LoadingScreen);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _LoadingScreen = __webpack_require__(721), _LoadingScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_LoadingScreen);
    exports["default"] = _LoadingScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                languages: state.lang.languages,
                page: state.page,
                app: state.app,
                settings: state.settings
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _langActions = __webpack_require__(205), _menuActions = __webpack_require__(38), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(832);
        var Menu = _react2["default"].createClass({
            displayName: "Menu",
            propTypes: {
                currentLanguage: _react.PropTypes.string.isRequired,
                changeLang: _react.PropTypes.func,
                languages: _react.PropTypes.array,
                loadLanguageList: _react.PropTypes.func,
                navigate: _react.PropTypes.func,
                openSystemMenu: _react.PropTypes.func,
                page: _react.PropTypes.string.isRequired,
                app: _react.PropTypes.object.isRequired,
                settings: _react.PropTypes.object.isRequired
            },
            render: function() {
                return _react2["default"].DOM.div({
                    className: "menu_wrapper"
                }, this.renderMainMenu(), this.renderBottomMenu());
            },
            renderMainMenu: function() {
                var _props = this.props, navigate = _props.navigate, openSystemMenu = _props.openSystemMenu, page = _props.page, settings = _props.settings, currentLanguage = _props.currentLanguage;
                return _react2["default"].DOM.div({
                    onMouseDown: function(e) {
                        e.preventDefault();
                    },
                    className: "menu-navigation_holder"
                }, _react2["default"].DOM.div({
                    className: "menu-navigation"
                }, _react2["default"].DOM.a({
                    href: "#",
                    onMouseDown: function() {
                        return navigate("DRIVERS");
                    },
                    className: "menu_copyright-btn menu_item_first " + ("DRIVERS" === page ? "active" : ""),
                    title: l("menu_install_drivers")
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-drivers.png",
                    className: "menu_copyright-btn-icon menu_copyright-btn-icon-system",
                    id: "m-pc",
                    width: 22,
                    height: 22
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_drivers"))), _react2["default"].DOM.a({
                    href: "#",
                    onMouseDown: function() {
                        return navigate("PROGRAMS");
                    },
                    className: "menu_copyright-btn " + ("PROGRAMS" === page ? "active" : ""),
                    title: l("menu_install_programs")
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-software.png",
                    className: "menu_copyright-btn-icon menu_copyright-btn-icon-system",
                    id: "m-apps",
                    width: 22,
                    height: 22
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_programs"))), settings.general.settings.enableProtect.value ? _react2["default"].DOM.a({
                    href: "#",
                    onMouseDown: function() {
                        return navigate("PROTECT");
                    },
                    className: "menu_copyright-btn " + ("PROTECT" === page ? "active" : ""),
                    title: l("menu_protect_title")
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-protect.png",
                    className: "menu_copyright-btn-icon menu_copyright-btn-icon-system",
                    id: "m-protect",
                    width: 22,
                    height: 22
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_protect_clean_up"))) : null, settings.general.settings.enableDiagnostics.value ? _react2["default"].DOM.a({
                    href: "#",
                    onMouseDown: function() {
                        return navigate("DIAGNOSTICS");
                    },
                    className: "menu_copyright-btn " + ("DIAGNOSTICS" === page ? "active" : ""),
                    title: l("menu_computer_diagnostics")
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-diagnostics.png",
                    className: "menu_copyright-btn-icon menu_copyright-btn-icon-system",
                    id: "m-toolkit",
                    width: 22,
                    height: 22
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_diagnostics"))) : null, _react2["default"].DOM.a({
                    href: "#",
                    onMouseDown: function() {
                        return navigate("CONFIGURATOR");
                    },
                    className: "menu_copyright-btn " + ("CONFIGURATOR" === page ? "active" : ""),
                    title: "DriverPack Offline"
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-offline.png",
                    className: "menu_copyright-btn-icon menu_copyright-btn-icon-system",
                    id: "m-toolkit",
                    width: 22,
                    height: 22
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, "DriverPack Offline")), [].includes(currentLanguage) ? _react2["default"].DOM.a({
                    href: "#",
                    onMouseDown: function() {
                        return navigate("GAMES");
                    },
                    className: "menu_copyright-btn " + ("GAMES" === page ? "active" : ""),
                    title: l("menu_cloud_games_title")
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder menu_copyright-btn-icon-holder-wide"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-games.png",
                    className: "menu_copyright-btn-icon menu_copyright-btn-icon-system",
                    id: "m-protect",
                    width: 22,
                    height: 22
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_cloud_games")), _react2["default"].DOM.sup({
                    className: "menu_copyright-btn-text-sup"
                }, l("menu_cloud_games_new"))) : null), _react2["default"].DOM.div({
                    className: "menu-system",
                    style: {
                        display: "none"
                    }
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "menu_copyright-btn",
                    title: l("menu_control_panel"),
                    onClick: function() {
                        return openSystemMenu("CONTROL");
                    }
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/control-panel-grey.png",
                    className: "menu_copyright-btn-icon",
                    width: 19,
                    height: 19
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_control_panel"))), _react2["default"].DOM.a({
                    href: "#",
                    className: "menu_copyright-btn",
                    title: l("menu_create_recovery_point"),
                    onClick: function() {
                        return openSystemMenu("RECOVERY");
                    }
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/backup-grey.png",
                    className: "menu_copyright-btn-icon",
                    width: 19,
                    height: 18
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_create_recovery_point"))), _react2["default"].DOM.a({
                    href: "#",
                    className: "menu_copyright-btn",
                    title: l("menu_create_drivers_backup"),
                    onClick: function() {
                        return openSystemMenu("BACKUP");
                    }
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/backup-grey.png",
                    className: "menu_copyright-btn-icon",
                    width: 19,
                    height: 18
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_create_drivers_backup"))), _react2["default"].DOM.a({
                    href: "#",
                    className: "menu_copyright-btn",
                    title: l("menu_add_remove_programs"),
                    onClick: function() {
                        return openSystemMenu("UNINSTALL");
                    }
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/install-programs-grey.png",
                    className: "menu_copyright-btn-icon",
                    width: 16,
                    height: 19
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_add_remove_programs")))));
            },
            renderBottomMenu: function() {
                var _props2 = this.props, navigate = _props2.navigate, page = _props2.page, changeLang = _props2.changeLang, currentLanguage = _props2.currentLanguage, languages = _props2.languages, openSystemMenu = _props2.openSystemMenu, app = _props2.app, language = languages.length ? languages.find(function(_ref) {
                    return _ref.id === currentLanguage;
                }) : null;
                return _react2["default"].DOM.div({
                    className: "menu_copyright"
                }, !1 ? null : null, _react2["default"].DOM.br(null), _react2["default"].DOM.a({
                    href: "#",
                    onMouseDown: function(e) {
                        e.preventDefault();
                        navigate("SETTINGS");
                    },
                    className: "menu_copyright-btn " + ("SETTINGS" === page ? "active" : "")
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-settings-icon.png",
                    className: "menu_copyright-btn-icon",
                    width: "19",
                    height: "20"
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_settings"))), "START" !== page ? _react2["default"].DOM.div({
                    className: "menu_language"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-lang-icon.png",
                    className: "menu_language-icon",
                    width: "18",
                    height: "18"
                }), (0, _Img2["default"])({
                    src: "img/screens/menu-lang-arrow.png",
                    className: "menu_language-label-arrow",
                    width: "10",
                    height: "7"
                }), _react2["default"].DOM.span({
                    className: "menu_language-select"
                }, _react2["default"].DOM.span({
                    className: "menu_language-label"
                }, language ? language.name : "language"), _react2["default"].DOM.select({
                    name: "language-menu",
                    className: !app.isBurgerMenuOpened ? "" : "is-hidden",
                    onChange: function(e) {
                        return changeLang(e.target.value, "language clicked");
                    },
                    value: currentLanguage,
                    style: {
                        fontSize: 14
                    }
                }, this.renderLanguages(languages)))) : null, _react2["default"].DOM.a({
                    href: "#",
                    className: "menu_copyright-btn",
                    onClick: function() {
                        return openSystemMenu("FEEDBACK", {
                            lang: currentLanguage
                        });
                    }
                }, _react2["default"].DOM.span({
                    className: "menu_copyright-btn-icon-holder"
                }, (0, _Img2["default"])({
                    src: "img/screens/menu-report-icon.png",
                    className: "menu_copyright-btn-icon",
                    width: "18",
                    height: "18"
                })), _react2["default"].DOM.span({
                    className: "menu_copyright-btn-text"
                }, l("menu_bugreport"))));
            },
            renderLanguages: function(languages) {
                return languages.map(function(language) {
                    return _react2["default"].DOM.option({
                        key: language.id,
                        value: language.id
                    }, language.name);
                });
            },
            componentDidMount: function() {
                (0, this.props.loadLanguageList)();
            }
        }), actions = {
            changeLang: _langActions.changeLang,
            loadLanguageList: _langActions.loadLanguageList,
            navigate: _menuActions.navigate,
            openSystemMenu: _menuActions.openSystemMenu
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(Menu);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
    __webpack_require__(833);
    exports["default"] = _react2["default"].createClass({
        displayName: "MoveToTop",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            page: _react.PropTypes.string.isRequired,
            currentLanguage: _react.PropTypes.string.isRequired
        },
        render: function() {
            return _react2["default"].DOM.a({
                className: "move-to-top",
                href: "#"
            }, (0, _Img2["default"])({
                src: "../../img/screens/move-to-top_arrow.png",
                className: "move-to-top_arrow",
                width: "7",
                height: "12"
            }), _react2["default"].DOM.span({
                className: "move-to-top_text"
            }, "Наверх"));
        }
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = function(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }(_react);
        __webpack_require__(834);
        var NoInternetScreen = _react2["default"].createClass({
            displayName: "NoInternetScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                currentLanguage: _react.PropTypes.string.isRequired
            },
            render: function() {
                return _react2["default"].DOM.div(null, _react2["default"].DOM.table({
                    className: "no-internet_screen"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "no-internet_wrapper"
                }, _react2["default"].DOM.div({
                    className: "no-internet_inner"
                }, _react2["default"].DOM.img({
                    src: "img/server_err_no_internet/no_internet-connection-cat.png",
                    width: "71",
                    height: "82"
                }), _react2["default"].DOM.div({
                    className: "no-internet_title"
                }, l("no-internet_title")), _react2["default"].DOM.div({
                    className: "no-internet_text"
                }, l("no-internet_subtitle")), _react2["default"].DOM.div({
                    className: "no-internet_step-text"
                }, _react2["default"].DOM.p({
                    className: "no-internet_line-text"
                }, _react2["default"].DOM.img({
                    src: "img/server_err_no_internet/connect.png",
                    className: "no-internet_icon connect_icon"
                }), l("no-internet_connect")), _react2["default"].DOM.p({
                    className: "no-internet_line-text"
                }, _react2["default"].DOM.img({
                    src: "img/server_err_no_internet/firewall.png",
                    className: "no-internet_icon firewall_icon"
                }), l("no-internet_firewall")), _react2["default"].DOM.p({
                    className: "no-internet_line-text"
                }, _react2["default"].DOM.img({
                    src: "img/server_err_no_internet/torrent.png",
                    className: "no-internet_icon torrent_icon"
                }), l("no-internet_torrent")), _react2["default"].DOM.p({
                    className: "no-internet_line-text"
                }, _react2["default"].DOM.img({
                    src: "img/server_err_no_internet/browser.png",
                    className: "no-internet_icon browser_icon"
                }), l("no-internet_browser")), _react2["default"].DOM.p({
                    className: "no-internet_line-text"
                }, _react2["default"].DOM.img({
                    src: "img/server_err_no_internet/vpn.png",
                    className: "no-internet_icon vpn_icon"
                }), l("no-internet_vpn")), _react2["default"].DOM.p({
                    className: "no-internet_line-text"
                }, _react2["default"].DOM.img({
                    src: "img/server_err_no_internet/flash.png",
                    className: "no-internet_icon flash_icon"
                }), l("no-internet_flash")))))))));
            }
        });
        exports["default"] = NoInternetScreen;
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _NoInternetScreen = __webpack_require__(725), _NoInternetScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_NoInternetScreen);
    exports["default"] = _NoInternetScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function mapState(state) {
        return {
            currentLanguage: state.lang.currentLanguage
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _onboardingActions = __webpack_require__(86), _menuActions = __webpack_require__(38), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
    __webpack_require__(330);
    var Screen = _react2["default"].createClass({
        displayName: "Screen",
        liked: !1,
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            currentLanguage: _react.PropTypes.string.isRequired,
            screenName: _react.PropTypes.string.isRequired,
            title: _react.PropTypes.string.isRequired,
            caption: _react.PropTypes.string.isRequired,
            imgName: _react.PropTypes.string,
            mark: _react.PropTypes.string,
            markClass: _react.PropTypes.string,
            hasLikes: _react.PropTypes.bool,
            imgFormat: _react.PropTypes.string
        },
        componentWillReceiveProps: function(newProps) {
            var old = this.props.screenName;
            if (old !== newProps.screenName) this.props.closeOnboardingScreen(old);
        },
        sendLike: function(isLike) {
            var screenName = this.props.screenName;
            if (!this.liked) {
                _statistics2["default"].event({
                    action: "onboarding " + screenName + " screen " + (isLike ? "like" : "dislike") + " button clicked"
                });
                this.liked = !0;
            }
        },
        render: function() {
            var _this = this, _props = this.props, mark = _props.mark, title = _props.title, caption = _props.caption, imgName = _props.imgName, payload = _props.payload, markClass = _props.markClass, hasLikes = _props.hasLikes, imgFormat = _props.imgFormat, format = imgFormat || ".png";
            return _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                className: "onboarding_title"
            }, _react2["default"].DOM.span({
                className: "drp-pluses " + (markClass || "")
            }, mark), title), _react2["default"].DOM.div({
                className: "onboarding_caption"
            }, caption), imgName && (0, _Img2["default"])({
                src: "img/onboarding/" + imgName + format,
                className: "onboarding-img " + (".gif" === format ? "gif" : "")
            }), _react2["default"].DOM.div(null, payload), hasLikes && _react2["default"].DOM.div({
                className: "like-block"
            }, _react2["default"].DOM.span({
                className: "like-img",
                onClick: function() {
                    _this.sendLike(!0);
                }
            }), _react2["default"].DOM.span({
                className: "like-img down",
                onClick: function() {
                    _this.sendLike(!1);
                }
            })));
        }
    }), actions = {
        closeOnboardingScreen: _onboardingActions.closeOnboardingScreen,
        navigate: _menuActions.navigate
    };
    exports["default"] = (0, _connect2["default"])(mapState, actions)(Screen);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _driversPrograms = __webpack_require__(29), _ProgramRow = __webpack_require__(311), _ProgramRow2 = _interopRequireDefault(_ProgramRow), _ActivateRecommendations = __webpack_require__(308), _ActivateRecommendations2 = _interopRequireDefault(_ActivateRecommendations);
        __webpack_require__(836);
        exports["default"] = _react2["default"].createClass({
            displayName: "Programs",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                programs: _react.PropTypes.array.isRequired,
                isProgramsSelectAllChecked: _react.PropTypes.bool.isRequired,
                isProgramsDisabled: _react.PropTypes.bool.isRequired,
                toggleProgram: _react.PropTypes.func.isRequired,
                toggleAllPrograms: _react.PropTypes.func.isRequired,
                installPrograms: _react.PropTypes.func.isRequired,
                confirmProgramInstallation: _react.PropTypes.func.isRequired,
                toggleProgramsRecommendations: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            render: function() {
                var _this = this, _props = this.props, page = _props.page, programs = _props.programs, isProgramsSelectAllChecked = _props.isProgramsSelectAllChecked, isProgramsDisabled = _props.isProgramsDisabled, toggleAllPrograms = _props.toggleAllPrograms, toggleProgramsRecommendations = _props.toggleProgramsRecommendations, currentLanguage = _props.currentLanguage, visiblePrograms = (0, 
                _driversPrograms.filterProgramsPage)(programs), checkedPrograms = (0, _driversPrograms.filterCheckedSoft)(visiblePrograms), checkedProgramsCount = checkedPrograms.length, hideComponent = "PROGRAMS" !== page, _window = window, isAppEsteem = _window.isAppEsteem, windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
                return _react2["default"].DOM.td({
                    className: hideComponent ? "display-none" : ""
                }, _react2["default"].DOM.div({
                    className: "programs"
                }, _react2["default"].DOM.div({
                    style: {
                        paddingLeft: "32px"
                    }
                }, _react2["default"].DOM.h1({
                    className: "screen-title"
                }, l("programs_header_text_title"))), windowWidth > 1350 ? _react2["default"].DOM.div({
                    className: "programs_header_bg"
                }, (0, _Img2["default"])({
                    src: "img/programs/soft-bg.png",
                    width: "144",
                    height: "144"
                })) : "", _react2["default"].DOM.table({
                    className: "programs_wrapper",
                    border: "1"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "programs_header"
                }, _react2["default"].DOM.td({
                    colSpan: "4",
                    className: "programs_header-btn"
                }, _react2["default"].DOM.button({
                    className: "cta-green-btn cta-btn-68 programs_btn " + (!checkedProgramsCount ? "cta-green-btn-is-disabled" : ""),
                    onClick: function() {
                        return _this.handleInstallAllClick(checkedPrograms);
                    },
                    disabled: !checkedProgramsCount
                }, (0, _Img2["default"])({
                    src: "img/programs/start_btn-icon.png",
                    className: "cta-green-btn-install-all-icon",
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text programs_btn-span",
                    dangerouslySetInnerHTML: {
                        __html: l("programs_btn_install_all").replace("{{COUNT}}", checkedProgramsCount)
                    }
                }))), _react2["default"].DOM.td({
                    colSpan: "2",
                    className: "programs_header-text"
                }, _react2["default"].DOM.div({
                    className: "programs_text",
                    dangerouslySetInnerHTML: {
                        __html: l("programs_header_text_caption")
                    }
                }))), isAppEsteem ? _react2["default"].DOM.tr({
                    className: "programs_list-header"
                }, _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "programs_title-checkbox"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input custom-control_checkbox-input-common",
                    id: "title-programs-list",
                    checked: isProgramsSelectAllChecked,
                    onChange: function(e) {
                        return toggleAllPrograms(!isProgramsSelectAllChecked);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: "title-programs-list",
                    className: "custom-control_checkbox-input-label"
                }), isProgramsDisabled ? _react2["default"].DOM.div({
                    className: "programs_title-checkbox-overlay"
                }) : null), _react2["default"].DOM.td({
                    colSpan: "6",
                    className: "programs_list-title"
                }, l("drivers_program_recommend"))) : _react2["default"].DOM.tr({
                    className: "programs_list-header"
                }, _react2["default"].DOM.td({
                    colSpan: "1",
                    className: "programs_title-checkbox"
                }), _react2["default"].DOM.td({
                    colSpan: "6",
                    className: "programs_list-title"
                }, l("drivers_program_counter")))), _react2["default"].DOM.tbody({
                    className: "programs_list"
                }, isProgramsDisabled ? null : this.renderProgramsRows(visiblePrograms, "PROGRAMS_PAGE"), _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    colSpan: "6",
                    height: "62"
                })))), isProgramsDisabled ? (0, _ActivateRecommendations2["default"])({
                    page: page,
                    currentLanguage: currentLanguage,
                    handler: toggleProgramsRecommendations
                }) : null, isProgramsDisabled ? null : _react2["default"].DOM.div({
                    className: "programs_footer"
                }, _react2["default"].DOM.div({
                    className: "screen-copyright"
                }, "Artur Kuzyakov © 2018"))));
            },
            renderProgramsRows: function(visiblePrograms, zone) {
                var list = [], _props2 = this.props, toggleProgram = _props2.toggleProgram, installPrograms = _props2.installPrograms, confirmProgramInstallation = _props2.confirmProgramInstallation, currentLanguage = _props2.currentLanguage;
                visiblePrograms.forEach(function(program, index) {
                    list.push((0, _ProgramRow2["default"])({
                        key: "program" + index,
                        program: program,
                        index: index,
                        confirmProgramInstallation: confirmProgramInstallation,
                        toggleProgram: toggleProgram,
                        installPrograms: installPrograms,
                        zone: zone,
                        currentLanguage: currentLanguage
                    }));
                });
                return list;
            },
            handleInstallAllClick: function(programs) {
                return (0, this.props.installPrograms)(programs, {
                    eventAction: "soft install all clicked"
                });
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _programsActions = __webpack_require__(64), _appActions = __webpack_require__(55), _Programs = __webpack_require__(728), _Programs2 = _interopRequireDefault(_Programs), ProgramsScreen = _react2["default"].createClass({
        displayName: "ProgramsScreen",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            page: _react.PropTypes.string.isRequired,
            programs: _react.PropTypes.array.isRequired,
            isProgramsSelectAllChecked: _react.PropTypes.bool.isRequired,
            isProgramsDisabled: _react.PropTypes.bool.isRequired,
            toggleProgram: _react.PropTypes.func.isRequired,
            toggleAllPrograms: _react.PropTypes.func.isRequired,
            installPrograms: _react.PropTypes.func.isRequired,
            confirmProgramInstallation: _react.PropTypes.func.isRequired,
            toggleProgramsRecommendations: _react.PropTypes.func.isRequired,
            currentLanguage: _react.PropTypes.string.isRequired
        },
        render: function() {
            var _props = this.props, page = _props.page, programs = _props.programs, isProgramsSelectAllChecked = _props.isProgramsSelectAllChecked, isProgramsDisabled = _props.isProgramsDisabled, toggleProgram = _props.toggleProgram, toggleAllPrograms = _props.toggleAllPrograms, installPrograms = _props.installPrograms, confirmProgramInstallation = _props.confirmProgramInstallation, toggleProgramsRecommendations = _props.toggleProgramsRecommendations, currentLanguage = _props.currentLanguage;
            return (0, _Programs2["default"])({
                page: page,
                programs: programs,
                isProgramsSelectAllChecked: isProgramsSelectAllChecked,
                isProgramsDisabled: isProgramsDisabled,
                toggleProgram: toggleProgram,
                toggleAllPrograms: toggleAllPrograms,
                installPrograms: installPrograms,
                confirmProgramInstallation: confirmProgramInstallation,
                toggleProgramsRecommendations: toggleProgramsRecommendations,
                currentLanguage: currentLanguage
            });
        }
    }), mapState = function(state) {
        return {
            programs: state.programs,
            isProgramsSelectAllChecked: state.app.isProgramsSelectAllChecked,
            isProgramsDisabled: state.app.isProgramsDisabled
        };
    }, actions = {
        toggleProgram: _programsActions.toggleProgram,
        toggleAllPrograms: _programsActions.toggleAllPrograms,
        installPrograms: _programsActions.installPrograms,
        confirmProgramInstallation: _programsActions.confirmProgramInstallation,
        toggleProgramsRecommendations: _appActions.toggleProgramsRecommendations
    };
    exports["default"] = (0, _connect2["default"])(mapState, actions)(ProgramsScreen);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _ProgramsScreen = __webpack_require__(729), _ProgramsScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_ProgramsScreen);
    exports["default"] = _ProgramsScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics);
        __webpack_require__(837);
        exports["default"] = _react2["default"].createClass({
            displayName: "InstalledProgramRow",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                index: _react.PropTypes.number.isRequired,
                isActiveRemoving: _react.PropTypes.bool.isRequired,
                isActiveRemovingAll: _react.PropTypes.bool.isRequired,
                program: _react.PropTypes.object.isRequired,
                toggleInstalledProgram: _react.PropTypes.func.isRequired,
                expandInstalledProgram: _react.PropTypes.func.isRequired,
                removeInstalledProgram: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            render: function() {
                var _props = this.props, index = _props.index, isActiveRemoving = _props.isActiveRemoving, isActiveRemovingAll = _props.isActiveRemovingAll, program = _props.program, toggleInstalledProgram = _props.toggleInstalledProgram, expandInstalledProgram = _props.expandInstalledProgram, removeInstalledProgram = _props.removeInstalledProgram, id = program.id, name = program.name, version = program.version, publisher = program.publisher, installDate = program.installDate, icon = program.icon, uninstallString = program.uninstallString, regPath = program.regPath, uninstallPercents = program.uninstallPercents, removalRate = program.removalRate, starsCount = program.starsCount, size = program.size, isHarmful = program.isHarmful, isChecked = program.isChecked, isRemoving = program.isRemoving, isExpanded = program.isExpanded;
                return _react2["default"].DOM.tr({
                    className: (isExpanded ? "installed-program_row-expanded" : "") + " installed-program_row"
                }, _react2["default"].DOM.td({
                    className: "installed-program_border-wrapper"
                }, _react2["default"].DOM.div({
                    className: "installed-program_border",
                    style: {
                        backgroundColor: "large" === removalRate ? window.isAppEsteem ? "#f18024" : "#ee434a" : "middle" === removalRate ? "#fbc32e" : "#139142"
                    }
                })), _react2["default"].DOM.td({
                    className: "installed-program_checkbox"
                }, _react2["default"].DOM.span(null, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "custom-control_checkbox-input",
                    id: "installed_program" + index,
                    checked: isChecked,
                    disabled: isActiveRemoving || isActiveRemovingAll,
                    onChange: function(e) {
                        toggleInstalledProgram(id, e.target.checked);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: "installed_program" + index,
                    className: "custom-control_checkbox-input-label"
                }))), _react2["default"].DOM.td({
                    className: "installed-program_icon"
                }, (0, _Img2["default"])({
                    src: icon || "img/programs/default-soft.png",
                    width: "36",
                    height: "36"
                })), _react2["default"].DOM.td({
                    className: "installed-program_info"
                }, _react2["default"].DOM.div({
                    className: "installed-program_name"
                }, name), _react2["default"].DOM.div({
                    className: "installed-program_caption"
                }, _react2["default"].DOM.p(null, _react2["default"].DOM.span({
                    className: "installed-program_caption-label"
                }, l("protect_row_rating"), " "), this.renderStars(starsCount)), size ? _react2["default"].DOM.p(null, _react2["default"].DOM.span({
                    className: "installed-program_caption-label"
                }, l("protect_row_size"), " "), size) : _react2["default"].DOM.span(null), publisher ? _react2["default"].DOM.p(null, _react2["default"].DOM.span({
                    className: "installed-program_caption-label"
                }, l("protect_row_publisher"), " "), publisher) : _react2["default"].DOM.span(null), version ? _react2["default"].DOM.p(null, _react2["default"].DOM.span({
                    className: "installed-program_caption-label"
                }, l("protect_row_version"), " "), version) : _react2["default"].DOM.span(null), installDate ? _react2["default"].DOM.p(null, _react2["default"].DOM.span({
                    className: "installed-program_caption-label"
                }, l("protect_row_install_date"), " "), installDate) : _react2["default"].DOM.span(null))), _react2["default"].DOM.td({
                    className: "installed-program-row_rating"
                }, _react2["default"].DOM.div(null, "large" === removalRate ? _react2["default"].DOM.div({
                    className: "installed-program-row_rating-label",
                    title: uninstallPercents + "%"
                }, window.isAppEsteem ? l("protect_rating_level_large_appesteem") : l("protect_rating_level_large")) : "middle" === removalRate ? _react2["default"].DOM.div({
                    className: "installed-program-row_rating-label",
                    title: uninstallPercents + "%"
                }, window.isAppEsteem ? l("protect_rating_level_middle_appesteem") : l("protect_rating_level_middle")) : _react2["default"].DOM.div({
                    className: "installed-program-row_rating-label",
                    title: uninstallPercents + "%"
                }, l("protect_rating_level_small")), _react2["default"].DOM.div({
                    className: "installed-program-row_rating-bg"
                }, _react2["default"].DOM.div({
                    className: "installed-program_row_rating-value",
                    style: {
                        width: uninstallPercents + "%",
                        backgroundColor: "large" === removalRate ? window.isAppEsteem ? "#f18024" : "#ee434a" : "middle" === removalRate ? "#fbc32e" : "#139142"
                    }
                }))), isHarmful ? _react2["default"].DOM.div({
                    className: "installed-program-row_rating-caption"
                }, _react2["default"].DOM.p({
                    style: {
                        paddingBottom: "24"
                    }
                }, window.isAppEsteem ? l("protect_rating_level_large_caption_appesteem") : l("protect_rating_level_large_caption"))) : null), _react2["default"].DOM.td({
                    className: "installed-program_uninstall-single-col"
                }, isRemoving || isActiveRemovingAll && isChecked ? _react2["default"].DOM.button({
                    className: "installed-program_uninstall-single installed-program_uninstall-single-is-loading"
                }, _react2["default"].DOM.span({
                    className: "installed-program_install-single-icon icons-controls",
                    style: {
                        visibility: "hidden"
                    }
                }, ""), _react2["default"].DOM.span({
                    style: {
                        visibility: "hidden"
                    }
                }, l("protect_uninstall_single")), _react2["default"].DOM.i({
                    className: "installed-program_uninstall-single-loader",
                    style: {
                        backgroundImage: "url(img/programs/rolling-remove-single.gif)"
                    }
                })) : isActiveRemoving && !isRemoving || isActiveRemovingAll && !isChecked ? _react2["default"].DOM.button({
                    className: "installed-program_uninstall-single installed-program_uninstall-single-is-disabled",
                    disabled: "disabled",
                    onClick: function(e) {
                        var params = {
                            "manual uninstall": uninstallPercents
                        };
                        _statistics2["default"].event({
                            action: "protect uninstall " + name + " clicked",
                            params: params
                        });
                        removeInstalledProgram({
                            id: id,
                            name: name,
                            uninstallPercents: uninstallPercents,
                            uninstallString: uninstallString,
                            regPath: regPath
                        });
                    }
                }, _react2["default"].DOM.span({
                    className: "installed-program_install-single-icon icons-controls"
                }, ""), l("protect_uninstall_single")) : _react2["default"].DOM.button({
                    className: "installed-program_uninstall-single",
                    onClick: function(e) {
                        var params = {
                            "manual uninstall": uninstallPercents
                        };
                        _statistics2["default"].event({
                            action: "protect uninstall " + name + " clicked",
                            params: params
                        });
                        removeInstalledProgram({
                            id: id,
                            name: name,
                            uninstallPercents: uninstallPercents,
                            uninstallString: uninstallString,
                            regPath: regPath
                        });
                    }
                }, _react2["default"].DOM.span({
                    className: "installed-program_install-single-icon icons-controls"
                }, ""), l("protect_uninstall_single"))), _react2["default"].DOM.td({
                    className: "installed-program-row_cell installed-program-row_arrow-col"
                }, _react2["default"].DOM.a({
                    href: "javascript:void(0)",
                    className: "installed-program-row_arrow",
                    onClick: function(e) {
                        e.preventDefault();
                        expandInstalledProgram(id, !isExpanded);
                    }
                }, (0, _Img2["default"])({
                    src: !isExpanded ? "img/programs/arrow-expand.png" : "img/programs/arrow-collapse.png",
                    width: "24",
                    height: "16"
                }))));
            },
            renderStars: function(starsCount) {
                for (var stars = [], i = 0; i < 5; i++) stars.push((0, _Img2["default"])({
                    className: "installed-program_caption-star-icon",
                    src: i < starsCount ? "img/programs/star-full-protect.png" : "img/programs/star-empty-protect.png"
                }));
                return stars;
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function _asyncToGenerator(fn) {
            return function() {
                var gen = fn.apply(this, arguments);
                return new Promise(function(resolve, reject) {
                    function step(key, arg) {
                        try {
                            var info = gen[key](arg), value = info.value;
                        } catch (error) {
                            reject(error);
                            return;
                        }
                        if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                            step("next", value);
                        }, function(err) {
                            step("throw", err);
                        });
                    }
                    return step("next");
                });
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _lodash = __webpack_require__(94), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _InstalledProgramRow = __webpack_require__(731), _InstalledProgramRow2 = _interopRequireDefault(_InstalledProgramRow), _ActivateRecommendations = __webpack_require__(308), _ActivateRecommendations2 = _interopRequireDefault(_ActivateRecommendations), _driversPrograms = __webpack_require__(29);
        __webpack_require__(838);
        exports["default"] = _react2["default"].createClass({
            displayName: "InstalledPrograms",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                isUsefulHidden: _react.PropTypes.bool.isRequired,
                isProtectDisabled: _react.PropTypes.bool.isRequired,
                toggleInstalledProgram: _react.PropTypes.func.isRequired,
                isActiveRemoving: _react.PropTypes.bool.isRequired,
                isActiveRemovingAll: _react.PropTypes.bool.isRequired,
                isAPIFailed: _react.PropTypes.bool.isRequired,
                installedProgramsExpanded: _react.PropTypes.bool.isRequired,
                installed: _react.PropTypes.array.isRequired,
                securityPrograms: _react.PropTypes.array.isRequired,
                confirmProgramInstallation: _react.PropTypes.func.isRequired,
                toggleSecurityProgram: _react.PropTypes.func.isRequired,
                toggleUsefulPrograms: _react.PropTypes.func.isRequired,
                installPrograms: _react.PropTypes.func.isRequired,
                expandInstalledProgram: _react.PropTypes.func.isRequired,
                expandAllInstalledPrograms: _react.PropTypes.func.isRequired,
                removeInstalledProgram: _react.PropTypes.func.isRequired,
                removeAllHarmfulPrograms: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                toggleProtectRecommendations: _react.PropTypes.func.isRequired
            },
            getInstalledPrograms: function() {
                var _props = this.props, isUsefulHidden = _props.isUsefulHidden, installed = _props.installed;
                return isUsefulHidden ? (0, _driversPrograms.filterSuspiciousPrograms)(installed) : installed;
            },
            getSecutiryProgramsToInstall: function() {
                return this.props.securityPrograms.filter(function(program) {
                    return program.isCheckedForProtect;
                });
            },
            renderMainButton: function(args) {
                var isActiveRemoving = args.isActiveRemoving, isActiveRemovingAll = args.isActiveRemovingAll, checkedPrograms = args.checkedPrograms, checkedSecurityPrograms = args.checkedSecurityPrograms, button = void 0;
                if (isActiveRemoving || 0 === checkedPrograms.length && !isActiveRemovingAll && 0 === checkedSecurityPrograms.length) button = _react2["default"].DOM.button({
                    className: "programs-list_head-btn cta-green-btn cta-btn-68 cta-green-btn-is-disabled",
                    disabled: "disabled",
                    onClick: this.handleProtectAndCleanClick
                }, (0, _Img2["default"])({
                    src: "img/programs/btn-icon.png",
                    className: "cta-green-btn-clean-icon",
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "programs-list_head-btn-text"
                }, l("protect_clean_up_btn"))); else if (isActiveRemovingAll) button = _react2["default"].DOM.button({
                    className: "programs-list_head-btn cta-green-btn cta-btn-68 cta-green-btn-is-loading",
                    disabled: "disabled",
                    onClick: this.handleProtectAndCleanClick
                }, (0, _Img2["default"])({
                    src: "img/programs/btn-icon.png",
                    className: "cta-green-btn-clean-icon",
                    style: {
                        visibility: "hidden"
                    },
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text",
                    style: {
                        visibility: "hidden"
                    }
                }, l("protect_clean_up_btn")), _react2["default"].DOM.i({
                    className: "cta-green-btn-icon",
                    style: {
                        backgroundImage: "url(img/programs/rolling.gif)"
                    }
                })); else button = _react2["default"].DOM.button({
                    className: "programs-list_head-btn cta-green-btn cta-btn-68",
                    onClick: this.handleProtectAndCleanClick
                }, (0, _Img2["default"])({
                    src: "img/programs/btn-icon.png",
                    className: "cta-green-btn-clean-icon",
                    style: {
                        visibility: "visible"
                    },
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text"
                }, l("protect_clean_up_btn")));
                return button;
            },
            renderMainButtonCaptions: function(args) {
                var checkedPrograms = args.checkedPrograms, checkedSecurityPrograms = args.checkedSecurityPrograms, checkedInstalledCount = checkedPrograms.length, checkedSecurityCount = checkedSecurityPrograms.length;
                return checkedInstalledCount || checkedSecurityCount ? _react2["default"].DOM.div({
                    className: "programs-list_head-title"
                }, checkedInstalledCount ? _react2["default"].DOM.div({
                    dangerouslySetInnerHTML: {
                        __html: l("protect_remove_all_btn_uninstalling").replace("{{COUNT}}", checkedInstalledCount)
                    }
                }) : null, checkedSecurityCount ? _react2["default"].DOM.div({
                    dangerouslySetInnerHTML: {
                        __html: l("protect_remove_all_btn_installing").replace("{{COUNT}}", checkedSecurityCount)
                    }
                }) : null) : null;
            },
            renderInstalledProgramsRows: function(args) {
                var list = [], _props2 = this.props, isActiveRemoving = _props2.isActiveRemoving, isActiveRemovingAll = _props2.isActiveRemovingAll, installedProgramsExpanded = _props2.installedProgramsExpanded, toggleInstalledProgram = _props2.toggleInstalledProgram, expandInstalledProgram = _props2.expandInstalledProgram, removeInstalledProgram = _props2.removeInstalledProgram, currentLanguage = _props2.currentLanguage, isAPIFailed = args.isAPIFailed, harmfulPrograms = args.harmfulPrograms, programs = args.programs;
                if (isAPIFailed) return _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "installed-programs_info-wrapper"
                }, _react2["default"].DOM.div({
                    className: "installed-programs_info"
                }, (0, _Img2["default"])({
                    src: "img/programs/installed-programs_info-warn.png",
                    className: "installed-programs_info-img"
                }), _react2["default"].DOM.div({
                    className: "installed-programs_info-warn-text"
                }, l("protect_installed-programs_api_failed"))))); else if (!harmfulPrograms.length) return _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "installed-programs_info-wrapper"
                }, _react2["default"].DOM.div({
                    className: "installed-programs_info"
                }, (0, _Img2["default"])({
                    src: "img/programs/installed-programs_info-success.png",
                    className: "installed-programs_info-img"
                }), _react2["default"].DOM.div({
                    className: "installed-programs_info-success-text"
                }, l("protect_installed-programs_no_harmful"))))); else {
                    programs.forEach(function(program, index) {
                        if (installedProgramsExpanded || index < 14) list.push((0, _InstalledProgramRow2["default"])({
                            key: "installed_program" + index,
                            program: program,
                            index: index,
                            isActiveRemoving: isActiveRemoving,
                            isActiveRemovingAll: isActiveRemovingAll,
                            toggleInstalledProgram: toggleInstalledProgram,
                            expandInstalledProgram: expandInstalledProgram,
                            removeInstalledProgram: removeInstalledProgram,
                            currentLanguage: currentLanguage
                        }));
                    });
                    return list;
                }
            },
            collectInstallList: function() {
                var _this = this;
                return _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                    var list, _props3, confirmProgramInstallation, toggleSecurityProgram, checkedPrograms, _iterator, _isArray, _i, _ref, program, confirmResult;
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            list = [];
                            _props3 = _this.props, confirmProgramInstallation = _props3.confirmProgramInstallation, 
                            toggleSecurityProgram = _props3.toggleSecurityProgram;
                            checkedPrograms = _this.getSecutiryProgramsToInstall();
                            _iterator = checkedPrograms, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                          case 4:
                            if (!_isArray) {
                                _context.next = 10;
                                break;
                            }
                            if (!(_i >= _iterator.length)) {
                                _context.next = 7;
                                break;
                            }
                            return _context.abrupt("break", 23);

                          case 7:
                            _ref = _iterator[_i++];
                            _context.next = 14;
                            break;

                          case 10:
                            _i = _iterator.next();
                            if (!_i.done) {
                                _context.next = 13;
                                break;
                            }
                            return _context.abrupt("break", 23);

                          case 13:
                            _ref = _i.value;

                          case 14:
                            program = _ref;
                            confirmResult = !0;
                            if (!(0, _lodash.get)(program, "protect.popup")) {
                                _context.next = 20;
                                break;
                            }
                            _context.next = 19;
                            return confirmProgramInstallation(program);

                          case 19:
                            confirmResult = _context.sent;

                          case 20:
                            if (confirmResult) list.push(program); else toggleSecurityProgram(program.ID, !1);

                          case 21:
                            _context.next = 4;
                            break;

                          case 23:
                            return _context.abrupt("return", list);

                          case 24:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, _this);
                }))();
            },
            handleProtectAndCleanClick: function() {
                var _this2 = this;
                return _asyncToGenerator(regeneratorRuntime.mark(function _callee2() {
                    var _props4, removeAllHarmfulPrograms, installPrograms, programs, checkedPrograms, installList;
                    return regeneratorRuntime.wrap(function(_context2) {
                        for (;;) switch (_context2.prev = _context2.next) {
                          case 0:
                            _props4 = _this2.props, removeAllHarmfulPrograms = _props4.removeAllHarmfulPrograms, 
                            installPrograms = _props4.installPrograms;
                            programs = _this2.getInstalledPrograms();
                            checkedPrograms = (0, _driversPrograms.filterCheckedInstalledPrograms)(programs);
                            _context2.next = 5;
                            return removeAllHarmfulPrograms(checkedPrograms);

                          case 5:
                            _context2.next = 7;
                            return _this2.collectInstallList();

                          case 7:
                            installList = _context2.sent;
                            if (installList.length) installPrograms(installList);

                          case 9:
                          case "end":
                            return _context2.stop();
                        }
                    }, _callee2, _this2);
                }))();
            },
            render: function() {
                var _props5 = this.props, page = _props5.page, isAPIFailed = _props5.isAPIFailed, isActiveRemoving = _props5.isActiveRemoving, isActiveRemovingAll = _props5.isActiveRemovingAll, isUsefulHidden = _props5.isUsefulHidden, isProtectDisabled = _props5.isProtectDisabled, currentLanguage = _props5.currentLanguage, installedProgramsExpanded = _props5.installedProgramsExpanded, toggleUsefulPrograms = _props5.toggleUsefulPrograms, expandAllInstalledPrograms = _props5.expandAllInstalledPrograms, toggleProtectRecommendations = _props5.toggleProtectRecommendations, programs = this.getInstalledPrograms(), harmfulPrograms = (0, 
                _driversPrograms.filterHarmfulPrograms)(programs), checkedSecurityPrograms = this.getSecutiryProgramsToInstall(programs), checkedPrograms = (0, 
                _driversPrograms.filterCheckedInstalledPrograms)(programs), hiddenProgramsNumber = programs.length - 14, switchId = "protect_installed-programs_switch", windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
                return _react2["default"].DOM.div({
                    style: {
                        width: "100%",
                        backgroundColor: "#FFFFFF"
                    }
                }, _react2["default"].DOM.div({
                    className: "program-header clearfix"
                }, windowWidth > 1275 ? _react2["default"].DOM.div({
                    className: "program-header_bg"
                }, (0, _Img2["default"])({
                    src: "img/programs/protector-bg.png",
                    width: "130",
                    height: "160"
                })) : "", _react2["default"].DOM.div({
                    className: "program-header_wrapper"
                }, _react2["default"].DOM.div({
                    className: "program-header_title-wrapper"
                }, _react2["default"].DOM.h1({
                    className: "screen-title",
                    dangerouslySetInnerHTML: {
                        __html: l("protect_clean_up_header_title")
                    }
                }), _react2["default"].DOM.p({
                    className: "program-header_caption"
                }, l("protect_clean_up_header_caption"))), _react2["default"].DOM.div({
                    className: "installed-program_head-title-holder clearfix"
                }, this.renderMainButton({
                    isAPIFailed: isAPIFailed,
                    isActiveRemoving: isActiveRemoving,
                    isActiveRemovingAll: isActiveRemovingAll,
                    programs: programs,
                    checkedPrograms: checkedPrograms,
                    checkedSecurityPrograms: checkedSecurityPrograms
                }), this.renderMainButtonCaptions({
                    checkedPrograms: checkedPrograms,
                    checkedSecurityPrograms: checkedSecurityPrograms
                })))), isProtectDisabled ? null : _react2["default"].DOM.div({
                    className: "installed-program_wrapper"
                }, _react2["default"].DOM.div({
                    className: "clearfix"
                }, _react2["default"].DOM.div({
                    className: "installed-program_list-title"
                }, l("protect_installed_programs_title")), _react2["default"].DOM.div({
                    className: "installed-program_switch-wrapper"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "installed-program_switch-checkbox custom-control_switch-input",
                    id: switchId,
                    checked: isUsefulHidden,
                    onChange: function(e) {
                        toggleUsefulPrograms();
                    }
                }), _react2["default"].DOM.label({
                    className: "custom-control_switch-label",
                    htmlFor: switchId
                }), _react2["default"].DOM.label({
                    className: "drivers-header_controls-text",
                    htmlFor: switchId
                }, window.isAppEsteem ? l("protect_installed_programs_switch_appesteem") : l("protect_installed_programs_switch")))), _react2["default"].DOM.table({
                    border: "1",
                    className: "installed-program"
                }, _react2["default"].DOM.tbody(null, this.renderInstalledProgramsRows({
                    isAPIFailed: isAPIFailed,
                    harmfulPrograms: harmfulPrograms,
                    programs: programs
                }), hiddenProgramsNumber > 0 && !installedProgramsExpanded && harmfulPrograms.length > 0 ? _react2["default"].DOM.tr({
                    className: "installed-program_expand-row"
                }, _react2["default"].DOM.td({
                    colSpan: "7",
                    style: {
                        width: "100%",
                        padding: "0"
                    }
                }, _react2["default"].DOM.a({
                    href: "javascript:void(0)",
                    className: "installed-program_expand-row-link",
                    onMouseDown: function(e) {
                        e.preventDefault();
                        expandAllInstalledPrograms();
                    }
                }, _react2["default"].DOM.table({
                    style: {
                        height: "100%",
                        width: "100%"
                    }
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr({
                    style: {
                        verticalAlign: "middle",
                        textAlign: "center"
                    }
                }, _react2["default"].DOM.td(null, (0, _Img2["default"])({
                    src: "img/programs/expand-all.png",
                    width: "17",
                    height: "10",
                    className: "installed-program_expand-row-icon"
                }), _react2["default"].DOM.span({
                    className: "installed-program_expand-row-link-text"
                }, l("protect_show_more"))))))))) : _react2["default"].DOM.tr({
                    style: {
                        fontSize: "0"
                    }
                }, " ")))), isProtectDisabled ? (0, _ActivateRecommendations2["default"])({
                    page: page,
                    currentLanguage: currentLanguage,
                    handler: toggleProtectRecommendations
                }) : null);
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _programsActions = __webpack_require__(64), _appActions = __webpack_require__(55), _InstalledPrograms = __webpack_require__(732), _InstalledPrograms2 = _interopRequireDefault(_InstalledPrograms), _ProgramRow = __webpack_require__(311), _ProgramRow2 = _interopRequireDefault(_ProgramRow), _driversPrograms = __webpack_require__(29);
        __webpack_require__(839);
        var filterSecutiryPrograms = function(programs) {
            return (0, _driversPrograms.filterProgramsPage)((0, _driversPrograms.filterProtectPrograms)(programs));
        }, ProtectScreen = _react2["default"].createClass({
            displayName: "ProtectScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                isProtectDisabled: _react.PropTypes.bool.isRequired,
                toggleUsefulPrograms: _react.PropTypes.func.isRequired,
                toggleInstalledProgram: _react.PropTypes.func.isRequired,
                expandInstalledProgram: _react.PropTypes.func.isRequired,
                expandAllInstalledPrograms: _react.PropTypes.func.isRequired,
                installPrograms: _react.PropTypes.func.isRequired,
                resetProtectScreen: _react.PropTypes.func.isRequired,
                removeInstalledProgram: _react.PropTypes.func.isRequired,
                removeAllHarmfulPrograms: _react.PropTypes.func.isRequired,
                securityPrograms: _react.PropTypes.array.isRequired,
                confirmProgramInstallation: _react.PropTypes.func.isRequired,
                toggleSecurityProgram: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                toggleProtectRecommendations: _react.PropTypes.func.isRequired
            },
            renderSecurityPrograms: function() {
                var list = [], _props = this.props, securityPrograms = _props.securityPrograms, toggleSecurityProgram = _props.toggleSecurityProgram, installPrograms = _props.installPrograms, confirmProgramInstallation = _props.confirmProgramInstallation, currentLanguage = _props.currentLanguage;
                securityPrograms.forEach(function(program, index) {
                    list.push((0, _ProgramRow2["default"])({
                        key: "program" + index,
                        program: program,
                        index: index,
                        confirmProgramInstallation: confirmProgramInstallation,
                        toggleProgram: toggleSecurityProgram,
                        installPrograms: installPrograms,
                        zone: "PROTECT_SECURITY_PROGRAMS",
                        currentLanguage: currentLanguage
                    }));
                });
                return _react2["default"].DOM.div({
                    className: "protect-screen_programs_list"
                }, _react2["default"].DOM.div({
                    className: "installed-program_list-title"
                }, l("protect_security_programs_title")), _react2["default"].DOM.table({
                    className: "programs_wrapper",
                    border: "1"
                }, _react2["default"].DOM.tbody({
                    className: "programs_list"
                }, list)));
            },
            render: function() {
                var _props2 = this.props, page = _props2.page, protect = _props2.protect, securityPrograms = _props2.securityPrograms, isProtectDisabled = _props2.isProtectDisabled, confirmProgramInstallation = _props2.confirmProgramInstallation, toggleSecurityProgram = _props2.toggleSecurityProgram, installPrograms = _props2.installPrograms, toggleUsefulPrograms = _props2.toggleUsefulPrograms, toggleInstalledProgram = _props2.toggleInstalledProgram, expandInstalledProgram = _props2.expandInstalledProgram, expandAllInstalledPrograms = _props2.expandAllInstalledPrograms, removeInstalledProgram = _props2.removeInstalledProgram, removeAllHarmfulPrograms = _props2.removeAllHarmfulPrograms, toggleProtectRecommendations = _props2.toggleProtectRecommendations, currentLanguage = _props2.currentLanguage, isUsefulHidden = protect.isUsefulHidden, isAPIFailed = protect.isAPIFailed, apiData = protect.apiData, isActiveRemoving = protect.isActiveRemoving, isActiveRemovingAll = protect.isActiveRemovingAll, installedProgramsExpanded = protect.installedProgramsExpanded, isUninstallRatePopoverOpened = protect.isUninstallRatePopoverOpened, hideComponent = "PROTECT" !== page;
                return _react2["default"].DOM.td({
                    className: "app-container " + (hideComponent ? "display-none" : "")
                }, (0, _InstalledPrograms2["default"])({
                    page: page,
                    isUsefulHidden: isUsefulHidden,
                    isActiveRemoving: isActiveRemoving,
                    isActiveRemovingAll: isActiveRemovingAll,
                    installedProgramsExpanded: installedProgramsExpanded,
                    isUninstallRatePopoverOpened: isUninstallRatePopoverOpened,
                    isAPIFailed: isAPIFailed,
                    installed: apiData,
                    securityPrograms: securityPrograms,
                    isProtectDisabled: isProtectDisabled,
                    confirmProgramInstallation: confirmProgramInstallation,
                    toggleSecurityProgram: toggleSecurityProgram,
                    toggleUsefulPrograms: toggleUsefulPrograms,
                    installPrograms: installPrograms,
                    toggleInstalledProgram: toggleInstalledProgram,
                    expandInstalledProgram: expandInstalledProgram,
                    expandAllInstalledPrograms: expandAllInstalledPrograms,
                    removeInstalledProgram: removeInstalledProgram,
                    removeAllHarmfulPrograms: removeAllHarmfulPrograms,
                    toggleProtectRecommendations: toggleProtectRecommendations,
                    currentLanguage: currentLanguage
                }), isProtectDisabled ? null : this.renderSecurityPrograms());
            },
            componentDidMount: function() {
                (0, this.props.resetProtectScreen)();
            }
        }), mapState = function(state) {
            return {
                protect: state.protect,
                securityPrograms: filterSecutiryPrograms(state.programs),
                isProtectDisabled: state.app.isProtectDisabled
            };
        }, actions = {
            toggleUsefulPrograms: _programsActions.toggleUsefulPrograms,
            toggleInstalledProgram: _programsActions.toggleInstalledProgram,
            expandInstalledProgram: _programsActions.expandInstalledProgram,
            expandAllInstalledPrograms: _programsActions.expandAllInstalledPrograms,
            resetProtectScreen: _programsActions.resetProtectScreen,
            removeInstalledProgram: _programsActions.removeInstalledProgram,
            removeAllHarmfulPrograms: _programsActions.removeAllHarmfulPrograms,
            confirmProgramInstallation: _programsActions.confirmProgramInstallation,
            toggleSecurityProgram: _programsActions.toggleSecurityProgram,
            installPrograms: _programsActions.installPrograms,
            toggleProtectRecommendations: _appActions.toggleProtectRecommendations
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(ProtectScreen);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _ProtectScreen = __webpack_require__(733), _ProtectScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_ProtectScreen);
    exports["default"] = _ProtectScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function mapState(state) {
        return {
            page: state.page,
            app: state.app,
            currentLanguage: state.lang.currentLanguage
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _Header = __webpack_require__(709), _Header2 = _interopRequireDefault(_Header), _BurgerMenu = __webpack_require__(689), _BurgerMenu2 = _interopRequireDefault(_BurgerMenu), _ConfirmPopup = __webpack_require__(692), _ConfirmPopup2 = _interopRequireDefault(_ConfirmPopup), _RestartPopup = __webpack_require__(717), _RestartPopup2 = _interopRequireDefault(_RestartPopup), _StartFakePopup = __webpack_require__(746), _StartFakePopup2 = _interopRequireDefault(_StartFakePopup), _Onboarding = __webpack_require__(309), _Onboarding2 = _interopRequireDefault(_Onboarding), _GdprBanner = __webpack_require__(708), _GdprBanner2 = _interopRequireDefault(_GdprBanner), _ServiceMode = __webpack_require__(740), _ServiceMode2 = _interopRequireDefault(_ServiceMode), _Start = __webpack_require__(745), _Start2 = _interopRequireDefault(_Start), _Layout = __webpack_require__(719), _Layout2 = _interopRequireDefault(_Layout), _ScanScreen = __webpack_require__(737), _ScanScreen2 = _interopRequireDefault(_ScanScreen), _DriversScreen = __webpack_require__(702), _DriversScreen2 = _interopRequireDefault(_DriversScreen), _ProgramsScreen = __webpack_require__(730), _ProgramsScreen2 = _interopRequireDefault(_ProgramsScreen), _ProtectScreen = __webpack_require__(734), _ProtectScreen2 = _interopRequireDefault(_ProtectScreen), _Diagnostics = __webpack_require__(693), _Diagnostics2 = _interopRequireDefault(_Diagnostics), _ConfiguratorScreen = __webpack_require__(691), _ConfiguratorScreen2 = _interopRequireDefault(_ConfiguratorScreen), _GamesScreen = __webpack_require__(707), _GamesScreen2 = _interopRequireDefault(_GamesScreen), _SettingsScreen = __webpack_require__(744), _SettingsScreen2 = _interopRequireDefault(_SettingsScreen), _Loading = __webpack_require__(720), _Loading2 = _interopRequireDefault(_Loading), _LoadingScreen = __webpack_require__(722), _LoadingScreen2 = _interopRequireDefault(_LoadingScreen), _Installation = __webpack_require__(718), _Installation2 = _interopRequireDefault(_Installation), _FinalScreen = __webpack_require__(705), _FinalScreen2 = _interopRequireDefault(_FinalScreen), _ServerErrorScreen = __webpack_require__(739), _ServerErrorScreen2 = _interopRequireDefault(_ServerErrorScreen), _NoInternetScreen = __webpack_require__(726), _NoInternetScreen2 = _interopRequireDefault(_NoInternetScreen), _debounce = __webpack_require__(255), _debounce2 = _interopRequireDefault(_debounce), _emulateMediaQuery = __webpack_require__(795), _emulateMediaQuery2 = _interopRequireDefault(_emulateMediaQuery), Router = _react2["default"].createClass({
        displayName: "Router",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            page: _react.PropTypes.string.isRequired,
            app: _react.PropTypes.object.isRequired,
            currentLanguage: _react.PropTypes.string.isRequired
        },
        componentDidMount: function() {
            (0, _emulateMediaQuery2["default"])();
            window.onresize = (0, _debounce2["default"])(_emulateMediaQuery2["default"], 200);
        },
        renderPopup: function(popup) {
            var isOpened = popup.isOpened, name = popup.name, data = popup.data, screenName = popup.screenName, component = null;
            if (isOpened) switch (name) {
              case "START_FAKE":
                component = (0, _StartFakePopup2["default"])(null);
                break;

              case "CONFIRM_INSTALL_PROGRAM":
                component = (0, _ConfirmPopup2["default"])(data);
                break;

              case "RESTART_OS":
                component = (0, _RestartPopup2["default"])(null);
                break;

              case "ONBOARDING":
                component = (0, _Onboarding2["default"])({
                    screenName: screenName,
                    isPopup: "true"
                });
            }
            return component;
        },
        renderPage: function(page, currentLanguage) {
            switch (page) {
              case "SCAN_SCREEN":
                return (0, _ScanScreen2["default"])({
                    currentLanguage: currentLanguage
                });

              case "START":
                return (0, _Start2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                });

              case "DRIVERS":
                return (0, _Layout2["default"])(null, (0, _DriversScreen2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }));

              case "PROGRAMS":
                return (0, _Layout2["default"])(null, (0, _ProgramsScreen2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }));

              case "PROTECT":
                return (0, _Layout2["default"])(null, (0, _ProtectScreen2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }));

              case "DIAGNOSTICS":
                return (0, _Layout2["default"])(null, (0, _Diagnostics2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }));

              case "CONFIGURATOR":
                return (0, _Layout2["default"])(null, (0, _ConfiguratorScreen2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }));

              case "GAMES":
                return "ru" === currentLanguage ? (0, _Layout2["default"])(null, (0, _GamesScreen2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                })) : null;

              case "SETTINGS":
                return (0, _Layout2["default"])(null, (0, _SettingsScreen2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }));

              case "LOADING":
                return (0, _Loading2["default"])({
                    currentLanguage: currentLanguage
                });

              case "LOADING_SCREEN":
                return (0, _LoadingScreen2["default"])({
                    currentLanguage: currentLanguage
                });

              case "INSTALLATION":
                return (0, _Installation2["default"])({
                    currentLanguage: currentLanguage
                });

              case "FINAL_SCREEN":
                return (0, _FinalScreen2["default"])({
                    currentLanguage: currentLanguage
                });

              case "SERVER_FAILOVER_SCREEN":
                return (0, _ServerErrorScreen2["default"])({
                    loading: !0,
                    currentLanguage: currentLanguage
                });

              case "SERVER_ERROR_SCREEN":
                return (0, _ServerErrorScreen2["default"])({
                    currentLanguage: currentLanguage
                });

              case "NO_INTERNET_SCREEN":
                return (0, _NoInternetScreen2["default"])({
                    currentLanguage: currentLanguage
                });

              default:
                return _react2["default"].DOM.div(null);
            }
        },
        render: function() {
            var _props = this.props, app = _props.app, page = _props.page, currentLanguage = _props.currentLanguage;
            return _react2["default"].DOM.div({
                style: {
                    height: "100%",
                    position: "relative"
                }
            }, (0, _Header2["default"])({
                currentLanguage: currentLanguage,
                styling: "START" === page ? "modern" : ""
            }), (0, _GdprBanner2["default"])({
                currentLanguage: currentLanguage
            }), this.renderPage(page, currentLanguage), app.isBurgerMenuOpened ? (0, _BurgerMenu2["default"])({
                currentLanguage: currentLanguage
            }) : null, this.renderPopup(app.popup), app.isServiceModeOpened ? (0, _ServiceMode2["default"])({
                currentLanguage: currentLanguage
            }) : null, _react2["default"].DOM.div({
                className: "app_border-top"
            }), _react2["default"].DOM.div({
                className: "app_border-right"
            }), _react2["default"].DOM.div({
                className: "app_border-bottom"
            }), _react2["default"].DOM.div({
                className: "app_border-left"
            }));
        }
    });
    exports["default"] = (0, _connect2["default"])(mapState)(Router);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _StartFooter = __webpack_require__(312), _StartFooter2 = _interopRequireDefault(_StartFooter);
        __webpack_require__(840);
        var ScanScreen = _react2["default"].createClass({
            displayName: "ScanScreen",
            propTypes: {
                handler: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            render: function() {
                var handler = this.props.handler;
                return _react2["default"].DOM.div({
                    id: "scan-screen",
                    className: "scan-screen"
                }, _react2["default"].DOM.div({
                    className: "start_wrapper"
                }, _react2["default"].DOM.div({
                    className: "start_content-wrapper"
                }, _react2["default"].DOM.div({
                    className: "start_title"
                }, l("scan-screen_start-title")), _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                    className: "start_subtitle"
                }, (0, _Img2["default"])({
                    src: "img/programs/start_arrow.png",
                    className: "start_arrow",
                    width: "37",
                    height: "70"
                }), l("scan-screen_start_subtitle"))), _react2["default"].DOM.div({
                    className: "pseudo-button start_btn",
                    onClick: handler
                }, (0, _Img2["default"])({
                    src: "img/programs/scan.png",
                    className: "start_btn-icon",
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text"
                }, l("scan-screen_start_btn"))))), (0, _StartFooter2["default"])(null));
            }
        });
        exports["default"] = ScanScreen;
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _ScanScreen = __webpack_require__(736), _ScanScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_ScanScreen);
    exports["default"] = _ScanScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = function(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }(_react);
        __webpack_require__(841);
        var ServerErrorScreen = _react2["default"].createClass({
            displayName: "ServerErrorScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                progressPercents: _react.PropTypes.number.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                loading: _react.PropTypes.bool
            },
            getInitialState: function() {
                return {
                    progressPercents: 0
                };
            },
            handlerAppReload: function(e) {
                e.stopPropagation();
                window.location.reload();
            },
            componentDidMount: function() {
                var _this = this, progressPercents = this.state.progressPercents, localPercents = progressPercents, position = .7;
                this.progressTimer = setInterval(function() {
                    _this.setState({
                        progressPercents: _this.state.progressPercents + position
                    });
                    localPercents += position;
                    if (localPercents >= 27 || localPercents <= -1) position *= -1;
                    _this.setState({
                        progressPercents: _this.state.progressPercents + position
                    });
                }, 50);
            },
            componentWillUnmount: function() {
                clearInterval(this.progressTimer);
            },
            render: function() {
                var loading = this.props.loading;
                return _react2["default"].DOM.div({
                    id: "server-err-screen",
                    className: "server-err-screen " + (loading ? "" : "server-err-screen_fail")
                }, _react2["default"].DOM.div({
                    className: "server-err-screen_text"
                }, loading ? l("server-err-screen_title") : l("server-err-screen_title-err")), _react2["default"].DOM.div({
                    className: "server-err-screen_logo"
                }), loading ? _react2["default"].DOM.div({
                    className: "server-err-screen_progress-wrapper"
                }, _react2["default"].DOM.div({
                    className: "server-err-screen_status"
                }, l("server-err-screen_status")), _react2["default"].DOM.div({
                    className: "server-err-screen_progress-bg"
                }, _react2["default"].DOM.div({
                    className: "server-err-screen_progress server-err-screen_progress-linear",
                    style: {
                        width: "50%",
                        position: "relative",
                        left: this.state.progressPercents + "%"
                    }
                }))) : _react2["default"].DOM.button({
                    className: "server-err-screen_wrapper-button",
                    onClick: this.handlerAppReload
                }, _react2["default"].DOM.span(null, l("server-err-screen_btn"))));
            }
        });
        exports["default"] = ServerErrorScreen;
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _ServerErrorScreen = __webpack_require__(738), _ServerErrorScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_ServerErrorScreen);
    exports["default"] = _ServerErrorScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(842);
        var ServiceMode = _react2["default"].createClass({
            displayName: "ServiceMode",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                serviceMode: _react.PropTypes.object.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            componentDidMount: function() {
                _logs2["default"].info({
                    action: "service mode system restore screen opened",
                    namespace: "service:mode:system restore:screen:opened"
                });
            },
            componentDidUpdate: function(prevProps) {
                var currentStatus = this.props.serviceMode.status, prevStatus = prevProps.serviceMode.status, screenName = void 0;
                if ("terminating" === currentStatus && "terminating" !== prevStatus) screenName = "closing processes"; else if ("finished" === currentStatus && "finished" !== prevStatus) screenName = "power cable";
                if (screenName) _logs2["default"].info({
                    action: "service mode " + screenName + " screen opened",
                    namespace: "service:mode:" + screenName + ":screen:opened"
                });
            },
            componentWillUnmount: function() {
                _logs2["default"].info({
                    action: "service mode installation screen opened",
                    namespace: "service:mode:installation:screen:opened"
                });
            },
            getCaption: function(status) {
                switch (status) {
                  case "initial":
                    return l("service-mode_status-initial");

                  case "terminating":
                    return l("service-mode_status-terminating");

                  case "finished":
                    return l("service-mode_status-finished");
                }
            },
            render: function() {
                var _props$serviceMode = this.props.serviceMode, status = _props$serviceMode.status, currentProcess = _props$serviceMode.currentProcess, isFinished = "finished" === status;
                return _react2["default"].DOM.div({
                    className: "service-mode_block"
                }, _react2["default"].DOM.div({
                    className: "semi-transparent-overlay"
                }), _react2["default"].DOM.table({
                    className: "service-mode_popup"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "service-mode_wrapper"
                }, _react2["default"].DOM.div({
                    className: "service-mode_inner"
                }, isFinished ? _react2["default"].DOM.div({
                    className: "service-mode_title"
                }, l("service-mode_finish-title-process")) : _react2["default"].DOM.div({
                    className: "service-mode_title"
                }, l("service-mode_title-process")), _react2["default"].DOM.div({
                    className: "service-mode_sub-title"
                }, this.getCaption(status)), isFinished ? (0, _Img2["default"])({
                    src: "img/loading-finish.png",
                    className: "service-mode_loading service-mode_finished",
                    width: "211",
                    height: "48"
                }) : _react2["default"].DOM.img({
                    src: "img/loading-spiner.gif",
                    className: "service-mode_loading"
                }), currentProcess ? _react2["default"].DOM.div({
                    className: "service-mode_file-status"
                }, l("service-mode_current-process").replace("{{PROCESS}}", currentProcess)) : null))))));
            }
        }), mapState = function(state) {
            return {
                serviceMode: state.installation.serviceMode
            };
        };
        exports["default"] = (0, _connect2["default"])(mapState)(ServiceMode);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _last = __webpack_require__(254), _last2 = _interopRequireDefault(_last), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _utils = __webpack_require__(19), _logs = __webpack_require__(4), _openFolder = __webpack_require__(324), _openFolder2 = _interopRequireDefault(_openFolder);
    exports["default"] = _react2["default"].createClass({
        displayName: "SettingRow",
        propTypes: {
            keyPath: _react.PropTypes.string.isRequired,
            setting: _react.PropTypes.object.isRequired,
            currentLanguage: _react.PropTypes.string.isRequired,
            languages: _react.PropTypes.array,
            changeSetting: _react.PropTypes.func.isRequired,
            changeLang: _react.PropTypes.func.isRequired
        },
        renderLanguages: function(languages) {
            return languages.map(function(language) {
                return _react2["default"].DOM.option({
                    key: language.id,
                    value: language.id
                }, language.name);
            });
        },
        render: function() {
            var _props = this.props, keyPath = _props.keyPath, setting = _props.setting, currentLanguage = _props.currentLanguage, languages = _props.languages, changeSetting = _props.changeSetting, changeLang = _props.changeLang, type = setting.type, value = setting.value, disabled = setting.disabled, title = setting.title, caption = setting.caption, anchor = setting.anchor, href = setting.href, name = (0, 
            _last2["default"])(keyPath.split(".")), customLink = "custom" === href;
            return _react2["default"].DOM.tr({
                className: "settings-screen_row " + (disabled ? "is-disabled" : "")
            }, _react2["default"].DOM.td({
                className: "settings-screen_cell-text"
            }, _react2["default"].DOM.div({
                className: "settings-screen_cell-title"
            }, title), _react2["default"].DOM.div({
                className: "settings-screen_cell-caption"
            }, caption + " ", _react2["default"].DOM.a({
                href: "#",
                className: "settings-screen_link",
                onClick: function(e) {
                    e.stopPropagation();
                    e.preventDefault();
                    !customLink ? (0, _utils.goToUrl)(href) : (0, _openFolder2["default"])(_logs.logFolder);
                }
            }, !customLink ? anchor : _logs.logFolder))), "language" === type ? _react2["default"].DOM.td({
                className: "settings-screen_cell-control"
            }, _react2["default"].DOM.div({
                className: "settings-screen_select"
            }, (0, _Img2["default"])({
                src: "img/screens/arrow-start-screen-toggle.png",
                className: "settings-screen_select-arrow",
                width: "8",
                height: "4"
            }), _react2["default"].DOM.select({
                onChange: function(e) {
                    _statistics2["default"].event({
                        action: "settings clicked " + name.toLowerCase(),
                        counters: [ "debug" ]
                    });
                    var value = e.target.value;
                    changeLang(value);
                    changeSetting(keyPath, setting, value);
                },
                value: currentLanguage
            }, this.renderLanguages(languages)))) : _react2["default"].DOM.td({
                className: "settings-screen_cell-control"
            }, _react2["default"].DOM.div({
                className: "settings-screen_cell-control-switch"
            }, _react2["default"].DOM.input({
                type: "checkbox",
                className: "custom-control_switch-input",
                id: keyPath,
                checked: value,
                disabled: disabled,
                onChange: function(e) {
                    _statistics2["default"].event({
                        action: "settings clicked " + name.toLowerCase()
                    });
                    changeSetting(keyPath, setting, e.target.checked);
                }
            }), _react2["default"].DOM.label({
                className: "custom-control_switch-label",
                htmlFor: keyPath
            }))));
        }
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(843);
        exports["default"] = _react2["default"].createClass({
            displayName: "SettingsHeader",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            render: function() {
                return _react2["default"].DOM.div({
                    className: "settings-header"
                }, _react2["default"].DOM.div({
                    style: {
                        paddingLeft: "32px"
                    }
                }, _react2["default"].DOM.h1({
                    className: "screen-title"
                }, l("settings-header_title")), _react2["default"].DOM.p({
                    className: "settings-header_caption"
                }, l("settings-header_caption"))), _react2["default"].DOM.div({
                    className: "settings-header_bg"
                }, (0, _Img2["default"])({
                    src: "img/screens/settings-bg.png",
                    width: "144",
                    height: "135"
                })));
            }
        });
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _utils = __webpack_require__(19), _settingsActions = __webpack_require__(123), _langActions = __webpack_require__(205), _MoveToTop = __webpack_require__(724), _MoveToTop2 = _interopRequireDefault(_MoveToTop), _SettingsHeader = __webpack_require__(742), _SettingsHeader2 = _interopRequireDefault(_SettingsHeader), _SettingRow = __webpack_require__(741), _SettingRow2 = _interopRequireDefault(_SettingRow);
        __webpack_require__(844);
        var SettingsScreen = _react2["default"].createClass({
            displayName: "SettingsScreen",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                page: _react.PropTypes.string.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired,
                languages: _react.PropTypes.array,
                changeSetting: _react.PropTypes.func.isRequired,
                changeLang: _react.PropTypes.func.isRequired
            },
            renderSection: function(_ref) {
                var sectionId = _ref.sectionId, section = _ref.section, sectionTitle = section.sectionTitle, sectionSettings = section.settings, _props = this.props, currentLanguage = _props.currentLanguage, languages = _props.languages, changeSetting = _props.changeSetting, changeLang = _props.changeLang;
                return _react2["default"].DOM.div({
                    className: "settings-screen"
                }, _react2["default"].DOM.table({
                    className: "settings-screen_table"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    className: "settings-screen_header"
                }, _react2["default"].DOM.td({
                    colSpan: "2",
                    className: "settings-screen_title"
                }, sectionTitle))), _react2["default"].DOM.tbody(null, Object.entries(sectionSettings).map(function(_ref2) {
                    var settingId = _ref2[0], setting = _ref2[1], keyPath = sectionId + "." + settingId;
                    return (0, _SettingRow2["default"])({
                        key: keyPath,
                        keyPath: keyPath,
                        setting: setting,
                        currentLanguage: currentLanguage,
                        languages: languages,
                        changeSetting: changeSetting,
                        changeLang: changeLang
                    });
                }))));
            },
            render: function() {
                var _this = this, _props2 = this.props, page = _props2.page, settings = _props2.settings, currentLanguage = _props2.currentLanguage, hideComponent = "SETTINGS" !== page, licenseUrl = "https://drp.su/" + ("ru" === currentLanguage ? "ru" : "en") + "/info/terms-of-use";
                return _react2["default"].DOM.td({
                    className: (hideComponent ? "display-none" : "") + " settings-screen__wrapper"
                }, (0, _MoveToTop2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }), (0, _SettingsHeader2["default"])({
                    page: page,
                    currentLanguage: currentLanguage
                }), Object.entries(settings).filter(function(_ref3) {
                    return "hidden" !== _ref3[0];
                }).map(function(_ref4) {
                    var sectionId = _ref4[0], section = _ref4[1];
                    return _this.renderSection({
                        sectionId: sectionId,
                        section: section
                    });
                }), _react2["default"].DOM.div({
                    className: "settings-screen__footer clearfix"
                }, _react2["default"].DOM.div({
                    className: "settings-screen__footer-copyright"
                }, "Artur Kuzyakov © 2018"), _react2["default"].DOM.a({
                    href: "#",
                    className: "settings-screen__footer-license",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils.goToUrl)(licenseUrl);
                    }
                }, l("settings-screen_license"))));
            }
        }), mapState = function(state) {
            return {
                settings: state.settings,
                languages: state.lang.languages
            };
        }, actions = {
            changeSetting: _settingsActions.changeSetting,
            changeLang: _langActions.changeLang
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(SettingsScreen);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _SettingsScreen = __webpack_require__(743), _SettingsScreen2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_SettingsScreen);
    exports["default"] = _SettingsScreen2["default"];
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l, nl) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                start: state.start,
                drivers: state.drivers,
                programs: state.programs,
                currentLanguage: state.lang.currentLanguage,
                isDriversFake: state.app.isDriversFake,
                modesData: (0, _start.getModesData)(state.drivers.devices)
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _system = __webpack_require__(6), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _cmd = __webpack_require__(129), _startActions = __webpack_require__(206), _start = __webpack_require__(317), _appActions = __webpack_require__(55), _menuActions = __webpack_require__(38), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _driversPrograms = __webpack_require__(29), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _StartFooter = __webpack_require__(312), _StartFooter2 = _interopRequireDefault(_StartFooter), _StartPopover = __webpack_require__(748), _StartPopover2 = _interopRequireDefault(_StartPopover), _StartSlider = __webpack_require__(750), _StartSlider2 = _interopRequireDefault(_StartSlider), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), _utils = __webpack_require__(323), _processNotifierFile = __webpack_require__(326), _checkIfEuCountry = __webpack_require__(788), _checkIfEuCountry2 = _interopRequireDefault(_checkIfEuCountry), _utils2 = __webpack_require__(19), _prepareDiagnosticsParams = __webpack_require__(325), _prepareDiagnosticsParams2 = _interopRequireDefault(_prepareDiagnosticsParams), _getModelName = __webpack_require__(321), _getModelName2 = _interopRequireDefault(_getModelName), _processes = __webpack_require__(74), _gaming = __webpack_require__(797), _gaming2 = _interopRequireDefault(_gaming);
        __webpack_require__(845);
        var internetExplorerVersion = (0, _getInternetExplorerVersion2["default"])(), Start = _react2["default"].createClass({
            displayName: "Start",
            propTypes: {
                start: _react.PropTypes.object.isRequired,
                drivers: _react.PropTypes.object,
                programs: _react.PropTypes.array,
                startInstallAll: _react.PropTypes.func,
                startInstallCustom: _react.PropTypes.func,
                startExpertMode: _react.PropTypes.func,
                toggleGdprBanner: _react.PropTypes.func,
                expandDrivers: _react.PropTypes.func.isRequired,
                expandPrograms: _react.PropTypes.func.isRequired,
                openDriversPopover: _react.PropTypes.func.isRequired,
                openProgramsPopover: _react.PropTypes.func.isRequired,
                openDiagnosticsPopover: _react.PropTypes.func.isRequired,
                closePopovers: _react.PropTypes.func.isRequired,
                toggleAllAppEsteemDrivers: _react.PropTypes.func.isRequired,
                toggleAppEsteemDriver: _react.PropTypes.func.isRequired,
                openStartFakePopup: _react.PropTypes.func.isRequired,
                isDriversFake: _react.PropTypes.bool.isRequired,
                setInstallationMode: _react.PropTypes.func.isRequired,
                currentLanguage: _react.PropTypes.string.isRequired
            },
            getInitialState: function() {
                return {
                    mode: this.props.modesData.initialMode,
                    isReopened: !1
                };
            },
            shouldFixHoverIcon: function() {
                if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 10) return !0; else return !1; else return !1;
            },
            getButtonText: function(onlyDriverUtils) {
                switch (this.state.mode) {
                  case "none":
                    return l("start_button_install_none");

                  case "chosen":
                    return l("start_button_install_chosen");

                  default:
                    return onlyDriverUtils ? l("start_button_install_drivers") : l("start_button_install");
                }
            },
            computeValues: function() {
                var _props = this.props, drivers = _props.drivers, programs = _props.programs, start = _props.start, driversIsExpanded = start.driversIsExpanded, programsIsExpanded = start.programsIsExpanded, devices = drivers.devices, checkedDrivers = (0, 
                _driversPrograms.filterCheckedDrivers)(devices), nonDeferredPrograms = (0, _driversPrograms.filterNonDeferredPrograms)(programs), checkedNonDeferredPrograms = (0, 
                _driversPrograms.filterCheckedPrograms)(nonDeferredPrograms), visibleDrivers = driversIsExpanded ? checkedDrivers : checkedDrivers.slice(0, 4), visiblePrograms = programsIsExpanded ? checkedNonDeferredPrograms : checkedNonDeferredPrograms.slice(0, 4), driverUtils = (0, 
                _driversPrograms.filterDriverUtilities)(visiblePrograms);
                return {
                    checkedDrivers: checkedDrivers,
                    nonDeferredPrograms: nonDeferredPrograms,
                    checkedNonDeferredPrograms: checkedNonDeferredPrograms,
                    visibleDrivers: visibleDrivers,
                    visiblePrograms: visiblePrograms,
                    driverUtils: driverUtils,
                    onlyDriverUtils: visiblePrograms.length === driverUtils.length
                };
            },
            renderMain: function() {
                var _this = this, _window = window, isAppEsteem = _window.isAppEsteem, isReopened = this.state.isReopened, _props2 = this.props, startInstallAll = _props2.startInstallAll, startExpertMode = _props2.startExpertMode, openStartFakePopup = _props2.openStartFakePopup, isDriversFake = _props2.isDriversFake, setInstallationMode = _props2.setInstallationMode, modesData = _props2.modesData, modeList = modesData.modeList, initialMode = modesData.initialMode, chosenClass = modesData.chosenClass, installButtonText = this.getButtonText();
                return _react2["default"].DOM.td({
                    className: "start_cta-block"
                }, _react2["default"].DOM.p({
                    className: "start_msg start_msg-cta-1",
                    dangerouslySetInnerHTML: {
                        __html: l("start_title").replace("{{MODEL}}", (0, _getModelName2["default"])())
                    }
                }), _react2["default"].DOM.button({
                    className: "cta-green-btn cta-btn-68 start_wrapper-button " + (internetExplorerVersion > 0 && internetExplorerVersion < 9 ? "ie-style" : ""),
                    onClick: function() {
                        return startInstallAll();
                    }
                }, (0, _Img2["default"])({
                    src: "img/programs/start_btn-icon.png",
                    className: "cta-green-btn-install-all-icon start_wrapper-button-icon",
                    width: "46",
                    height: "38"
                }), _react2["default"].DOM.span({
                    className: "cta-green-btn-text"
                }, installButtonText)), modeList.length > 1 ? (0, _StartSlider2["default"])({
                    modeList: modeList,
                    initialMode: initialMode,
                    chosenClass: chosenClass,
                    isReopened: isReopened,
                    onChange: function(mode) {
                        _logs2["default"].info({
                            action: "startpage mode choosed " + mode,
                            counters: [ "yandex.default" ]
                        }, {}, "startpage:mode:choosed:" + mode);
                        _this.setState({
                            mode: mode
                        });
                        setInstallationMode(mode);
                    }
                }) : null, isAppEsteem ? _react2["default"].DOM.div(null, _react2["default"].DOM.a({
                    className: "start_cta-expert",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _statistics2["default"].event({
                            action: "startpage drivers clicked"
                        });
                        if (isDriversFake) openStartFakePopup(); else startExpertMode({
                            eventAction: "startpage expertmode clicked"
                        });
                    }
                }, this.shouldFixHoverIcon() ? (0, _Img2["default"])({
                    src: "img/screens/expert_normal.png",
                    width: "15",
                    height: "15",
                    style: {
                        verticalAlign: "middle",
                        marginRight: "9px"
                    }
                }) : _react2["default"].DOM.i({
                    className: "footer_expert-icon",
                    width: "15",
                    height: "15"
                }), l("start_expert_mode")), _react2["default"].DOM.div({
                    className: "start_cta-expert-label"
                }, l("start_expert_mode_label"))) : null);
            },
            renderSidebar: function() {
                var _this2 = this, _window2 = window, isAppEsteem = _window2.isAppEsteem, _computeValues = this.computeValues(), checkedDrivers = _computeValues.checkedDrivers, checkedNonDeferredPrograms = _computeValues.checkedNonDeferredPrograms, visibleDrivers = _computeValues.visibleDrivers, visiblePrograms = _computeValues.visiblePrograms, onlyDriverUtils = _computeValues.onlyDriverUtils;
                return _react2["default"].DOM.td({
                    className: "start_list start_back-gray",
                    onMouseMove: function(e) {
                        return _this2.handleMouseMove(e, null);
                    },
                    onMouseLeave: function(e) {
                        return _this2.handleMouseMove(e, null);
                    }
                }, _react2["default"].DOM.div({
                    className: "start-list-content"
                }, !isAppEsteem ? this.renderDrivers({
                    devices: visibleDrivers,
                    totalCount: checkedDrivers.length
                }) : this.renderAppEsteemDrivers(), !isAppEsteem ? this.renderPrograms({
                    onlyDriverUtils: onlyDriverUtils,
                    programs: visiblePrograms,
                    totalCount: checkedNonDeferredPrograms.length
                }) : null, this.renderDiagnostics()));
            },
            renderFooter: function() {
                var _window3 = window, isAppEsteem = _window3.isAppEsteem, _props3 = this.props, isDriversFake = _props3.isDriversFake, openStartFakePopup = _props3.openStartFakePopup, startExpertMode = _props3.startExpertMode;
                return (0, _StartFooter2["default"])(null, isAppEsteem ? _react2["default"].DOM.a({
                    className: "footer_site",
                    href: "#",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        (0, _utils2.goToUrl)("http://community.drp.su/topic/8266/how-to-remove-driverpack");
                    }
                }, l("footer_site")) : _react2["default"].DOM.a({
                    className: "footer_expert",
                    href: "#",
                    onClick: function(e) {
                        e.preventDefault();
                        _statistics2["default"].event({
                            action: "startpage drivers clicked"
                        });
                        if (isDriversFake) openStartFakePopup(); else startExpertMode({
                            eventAction: "startpage expertmode clicked"
                        });
                    }
                }, this.shouldFixHoverIcon() ? (0, _Img2["default"])({
                    src: "img/screens/expert_normal.png",
                    width: "15",
                    height: "15",
                    style: {
                        verticalAlign: "middle",
                        marginRight: "9px"
                    }
                }) : _react2["default"].DOM.i({
                    className: "footer_expert-icon",
                    width: "15",
                    height: "15"
                }), l("start_expert_mode")), !isAppEsteem ? this.shouldFixHoverIcon() ? (0, _Img2["default"])({
                    src: "img/screens/trusted.png",
                    className: "footer_meta-trusted",
                    width: "128",
                    height: "24"
                }) : _react2["default"].DOM.i({
                    className: "footer_meta-trusted-icon",
                    width: "128",
                    height: "24"
                }) : null);
            },
            render: function() {
                return _react2["default"].DOM.div({
                    id: "Start",
                    className: "start top-for-header positioning-for-header start_back-white",
                    style: {
                        textAlign: "center"
                    }
                }, (0, _Img2["default"])({
                    src: "img/new-logo.png",
                    className: "start-logo"
                }), _react2["default"].DOM.div({
                    className: "start_wrapper"
                }, _react2["default"].DOM.table({
                    className: "start_wrapper-inner"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, this.renderMain(), this.renderSidebar())))), this.renderFooter());
            },
            renderAppEsteemDrivers: function() {
                var _this3 = this, _props4 = this.props, start = _props4.start, drivers = _props4.drivers, programs = _props4.programs, expandDrivers = _props4.expandDrivers, toggleAllAppEsteemDrivers = _props4.toggleAllAppEsteemDrivers, toggleAppEsteemDriver = _props4.toggleAppEsteemDriver, devices = drivers.devices, isAppEsteemDriversSelectAllChecked = start.isAppEsteemDriversSelectAllChecked, driversIsExpanded = start.driversIsExpanded, driversPopoverIsOpened = start.driversPopoverIsOpened, items = (0, 
                _driversPrograms.filterAppEsteemDrivers)([].concat(devices, programs)), totalCount = items.length, visibleItems = driversIsExpanded ? items : items.slice(0, 4);
                return visibleItems.length ? _react2["default"].DOM.div(null, _react2["default"].DOM.table({
                    className: "start_list-block start_list_appesteem"
                }, _react2["default"].DOM.thead(null, _react2["default"].DOM.tr({
                    key: "start_list-title_drivers",
                    className: "start_list-title"
                }, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                    className: "start_list-title-custom-control"
                }, _react2["default"].DOM.input({
                    type: "checkbox",
                    className: "start_custom-control_checkbox-input",
                    id: "start_list-title-checkbox",
                    checked: isAppEsteemDriversSelectAllChecked,
                    onChange: function(e) {
                        toggleAllAppEsteemDrivers(e.target.checked);
                    }
                }), _react2["default"].DOM.label({
                    htmlFor: "start_list-title-checkbox",
                    className: "start_custom-control_checkbox-input-label"
                }))), _react2["default"].DOM.td(null, _react2["default"].DOM.span({
                    dangerouslySetInnerHTML: {
                        __html: nl("start_drivers_title", "start_drivers_title_n", totalCount).replace("{{COUNT}}", totalCount)
                    }
                }), _react2["default"].DOM.a({
                    href: "#",
                    className: "start_list-block-icon",
                    onMouseMove: function(e) {
                        return _this3.handleMouseMove(e, "start_drivers_popover");
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/start-info.png",
                    className: "list_info-link-icon",
                    width: "18",
                    height: "17"
                }), driversPopoverIsOpened ? (0, _StartPopover2["default"])({
                    message: l("start_drivers_utils_popover"),
                    onMouseMove: function(e) {
                        return _this3.handleMouseMove(e, "start_drivers_popover");
                    }
                }) : null)))), _react2["default"].DOM.tbody({
                    className: "start_list-items"
                }, visibleItems.map(function(item, index) {
                    var isDriver = item.recommendedDriver, name = isDriver ? item.recommendedDriver.name : item.name, checkboxId = "start_list-items-" + index;
                    return _react2["default"].DOM.tr({
                        key: "start_screen_item_" + item.id + "_" + index,
                        className: "start_list-item",
                        onClick: function(e) {
                            _statistics2["default"].event({
                                action: "startpage drivers clicked",
                                counters: [ "debug" ]
                            });
                        }
                    }, _react2["default"].DOM.td(null, _react2["default"].DOM.div({
                        className: "start_list-custom-control"
                    }, _react2["default"].DOM.input({
                        type: "checkbox",
                        className: "start_custom-control_checkbox-input",
                        id: checkboxId,
                        onChange: function(e) {
                            toggleAppEsteemDriver({
                                isDriver: isDriver,
                                isChecked: e.target.checked,
                                id: item.id,
                                deviceId: item.deviceId
                            });
                        }
                    }), _react2["default"].DOM.label({
                        htmlFor: checkboxId,
                        className: "start_custom-control_checkbox-input-label"
                    }))), _react2["default"].DOM.td(null, name));
                }))), !driversIsExpanded && totalCount > 4 ? _react2["default"].DOM.a({
                    href: "#",
                    className: "start_list-item-toggle",
                    onClick: function(e) {
                        e.preventDefault();
                        expandDrivers();
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/arrow-start-screen-toggle.png",
                    width: "15",
                    height: "6",
                    className: "start_list-item-toggle-arrow"
                })) : null) : null;
            },
            renderDrivers: function(_ref) {
                var _this4 = this, devices = _ref.devices, totalCount = _ref.totalCount, _props5 = this.props, start = _props5.start, expandDrivers = _props5.expandDrivers, currentLanguage = _props5.currentLanguage, driversIsExpanded = start.driversIsExpanded, driversPopoverIsOpened = start.driversPopoverIsOpened;
                return devices.length ? _react2["default"].DOM.div({
                    className: "start_list-block"
                }, _react2["default"].DOM.div({
                    className: "start_list-title start_options-title"
                }, _react2["default"].DOM.span({
                    dangerouslySetInnerHTML: {
                        __html: nl("start_drivers_title", "start_drivers_title_n", totalCount).replace("{{COUNT}}", totalCount)
                    }
                }), _react2["default"].DOM.a({
                    href: "#",
                    className: "start_list-block-icon",
                    onMouseMove: function(e) {
                        return _this4.handleMouseMove(e, "start_drivers_popover");
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/start-info.png",
                    className: "list_info-link-icon",
                    width: "18",
                    height: "17"
                }), driversPopoverIsOpened ? (0, _StartPopover2["default"])({
                    message: l("start_drivers_popover"),
                    onMouseMove: function(e) {
                        return _this4.handleMouseMove(e, "start_drivers_popover");
                    }
                }) : null)), _react2["default"].DOM.ul({
                    className: "start_list-items"
                }, devices.map(function(device, index) {
                    return _react2["default"].DOM.li({
                        key: "start_screen_device_" + device.id + "_" + index,
                        className: "start_list-item " + ("ru" !== currentLanguage ? "clickable" : "")
                    }, "ru" === currentLanguage ? _react2["default"].DOM.span(null, "• " + device.recommendedDriver.name) : _react2["default"].DOM.span({
                        onClick: function(e) {
                            e.preventDefault();
                            _statistics2["default"].event({
                                action: "startpage drivers clicked",
                                counters: [ "debug" ]
                            });
                            window.store.dispatch((0, _menuActions.navigate)("DRIVERS"));
                        }
                    }, "• " + device.recommendedDriver.name));
                })), !driversIsExpanded && totalCount > 4 ? _react2["default"].DOM.a({
                    href: "#",
                    className: "start_list-item-toggle",
                    onClick: function(e) {
                        e.preventDefault();
                        expandDrivers();
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/arrow-start-screen-toggle.png",
                    width: "15",
                    height: "6",
                    className: "start_list-item-toggle-arrow"
                })) : null) : null;
            },
            renderPrograms: function(_ref2) {
                var _this5 = this, programs = _ref2.programs, totalCount = _ref2.totalCount, onlyDriverUtils = _ref2.onlyDriverUtils, _props6 = this.props, start = _props6.start, expandPrograms = _props6.expandPrograms, currentLanguage = _props6.currentLanguage, programsIsExpanded = start.programsIsExpanded, programsPopoverIsOpened = start.programsPopoverIsOpened, descriptionLanguage = "ru" === currentLanguage ? "ru" : "en", title = onlyDriverUtils ? nl("start_programs_title_driver_utils", "start_programs_title_n", totalCount).replace("{{COUNT}}", totalCount) : nl("start_programs_title", "start_programs_title_n", totalCount).replace("{{COUNT}}", totalCount);
                return programs.length ? _react2["default"].DOM.div({
                    className: "start_list-block"
                }, _react2["default"].DOM.div({
                    className: "start_list-title"
                }, _react2["default"].DOM.span({
                    dangerouslySetInnerHTML: {
                        __html: title
                    }
                }), _react2["default"].DOM.a({
                    href: "#",
                    className: "start_list-block-icon",
                    onMouseMove: function(e) {
                        return _this5.handleMouseMove(e, "start_programs_popover");
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/start-info.png",
                    className: "list_info-link-icon",
                    width: "18",
                    height: "17"
                }), programsPopoverIsOpened ? (0, _StartPopover2["default"])({
                    message: l("start_programs_popover"),
                    onMouseMove: function(e) {
                        return _this5.handleMouseMove(e, "start_programs_popover");
                    }
                }) : null)), _react2["default"].DOM.ul({
                    className: "start_list-items"
                }, programs.map(function(program) {
                    return _react2["default"].DOM.li({
                        key: program.id,
                        className: "start_list-item " + ("ru" !== currentLanguage ? "clickable" : "")
                    }, "ru" === currentLanguage ? _react2["default"].DOM.span({
                        className: "start_list-item-text"
                    }, "• " + (program.localizedName ? program.localizedName[descriptionLanguage] : program.name)) : _react2["default"].DOM.span({
                        className: "start_list-item-text",
                        onClick: function(e) {
                            e.preventDefault();
                            _statistics2["default"].event({
                                action: "startpage programs clicked",
                                counters: [ "debug" ]
                            });
                            window.store.dispatch((0, _menuActions.navigate)("PROGRAMS"));
                        }
                    }, "• " + (program.localizedName ? program.localizedName[descriptionLanguage] : program.name)), program.eula ? _react2["default"].DOM.a({
                        href: "#",
                        className: "start_list-item-link",
                        onClick: function(e) {
                            e.stopPropagation();
                            e.preventDefault();
                            (0, _utils2.goToUrl)(program.eula);
                        }
                    }, l("start_programs_eula")) : null, program.policy ? _react2["default"].DOM.a({
                        href: "#",
                        className: "start_list-item-link",
                        onClick: function(e) {
                            e.stopPropagation();
                            e.preventDefault();
                            (0, _utils2.goToUrl)(program.policy);
                        }
                    }, l("start_programs_policy")) : null);
                })), !programsIsExpanded && totalCount > 4 ? _react2["default"].DOM.a({
                    href: "#",
                    className: "start_list-item-toggle",
                    onClick: function(e) {
                        e.preventDefault();
                        expandPrograms();
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/arrow-start-screen-toggle.png",
                    width: "15",
                    height: "6",
                    className: "start_list-item-toggle-arrow"
                })) : null) : null;
            },
            renderDiagnostics: function() {
                var _this6 = this, _props7 = this.props, start = _props7.start, currentLanguage = _props7.currentLanguage, diagnosticsPopoverIsOpened = start.diagnosticsPopoverIsOpened;
                return _react2["default"].DOM.div({
                    className: "start_list-block"
                }, _react2["default"].DOM.div({
                    className: "start_list-title"
                }, l("start_diagnostics_title"), _react2["default"].DOM.a({
                    href: "#",
                    className: "start_list-block-icon",
                    onMouseMove: function(e) {
                        return _this6.handleMouseMove(e, "start_diagnostics_popover");
                    }
                }, (0, _Img2["default"])({
                    src: "img/screens/start-info.png",
                    className: "list_info-link-icon",
                    width: "18",
                    height: "17"
                }), diagnosticsPopoverIsOpened ? (0, _StartPopover2["default"])({
                    message: l("start_diagnostics_popover"),
                    onMouseMove: function(e) {
                        return _this6.handleMouseMove(e, "start_diagnostics_popover");
                    }
                }) : null)), _react2["default"].DOM.ul({
                    className: "start_list-items"
                }, _react2["default"].DOM.li({
                    key: "start_diagnostics_network",
                    className: "start_list-item " + ("ru" !== currentLanguage ? "clickable" : "")
                }, "ru" === currentLanguage ? _react2["default"].DOM.span(null, "• " + l("start_diagnostics_network")) : _react2["default"].DOM.span({
                    onClick: function(e) {
                        e.preventDefault();
                        window.store.dispatch((0, _menuActions.navigate)("DIAGNOSTICS"));
                        _statistics2["default"].event({
                            action: "startrpage diagnostics clicked"
                        });
                    }
                }, "• " + l("start_diagnostics_network"))), _react2["default"].DOM.li({
                    key: "start_diagnostics_video",
                    className: "start_list-item " + ("ru" !== currentLanguage ? "clickable" : "")
                }, "ru" === currentLanguage ? _react2["default"].DOM.span(null, "• " + l("start_diagnostics_video")) : _react2["default"].DOM.span({
                    onClick: function(e) {
                        e.preventDefault();
                        window.store.dispatch((0, _menuActions.navigate)("DIAGNOSTICS"));
                        _statistics2["default"].event({
                            action: "startrpage diagnostics clicked"
                        });
                    }
                }, "• " + l("start_diagnostics_video"))), _react2["default"].DOM.li({
                    key: "start_diagnostics_audio",
                    className: "start_list-item " + ("ru" !== currentLanguage ? "clickable" : "")
                }, "ru" === currentLanguage ? _react2["default"].DOM.span(null, "• " + l("start_diagnostics_audio")) : _react2["default"].DOM.span({
                    onClick: function(e) {
                        e.preventDefault();
                        window.store.dispatch((0, _menuActions.navigate)("DIAGNOSTICS"));
                        _statistics2["default"].event({
                            action: "startrpage diagnostics clicked"
                        });
                    }
                }, "• " + l("start_diagnostics_audio"))), _react2["default"].DOM.li({
                    key: "start_diagnostics_other",
                    className: "start_list-item " + ("ru" !== currentLanguage ? "clickable" : "")
                }, "ru" === currentLanguage ? _react2["default"].DOM.span(null, "• " + l("start_diagnostics_other")) : _react2["default"].DOM.span({
                    onClick: function(e) {
                        e.preventDefault();
                        window.store.dispatch((0, _menuActions.navigate)("DIAGNOSTICS"));
                        _statistics2["default"].event({
                            action: "startrpage diagnostics clicked"
                        });
                    }
                }, "• " + l("start_diagnostics_other")))));
            },
            renderSettings: function() {
                return _react2["default"].DOM.div({
                    className: "start_list-block"
                }, _react2["default"].DOM.div({
                    className: "start_list-title"
                }, l("start_settings_title")), _react2["default"].DOM.ul({
                    className: "start_list-items"
                }, _react2["default"].DOM.li({
                    key: "start_settings_hard-drive-clean",
                    className: "start_list-item"
                }, _react2["default"].DOM.span(null, "• " + l("start_settings_hard-drive-clean"))), _react2["default"].DOM.li({
                    key: "start_settings_selection-utilities",
                    className: "start_list-item"
                }, _react2["default"].DOM.span(null, "• " + l("start_settings_selection-utilities"))), _react2["default"].DOM.li({
                    key: "start_settings_off-updates",
                    className: "start_list-item"
                }, _react2["default"].DOM.span(null, "• " + l("start_settings_off-updates")))));
            },
            handleMouseMove: function(e, id) {
                var _this7 = this;
                e.stopPropagation();
                if (this.hoveringItemId !== id) {
                    this.hoveringItemId = id;
                    clearInterval(this.hoveringTimer);
                    var closing = null === id;
                    this.hoveringTimer = setTimeout(function() {
                        var _props8 = _this7.props, openDriversPopover = _props8.openDriversPopover, openProgramsPopover = _props8.openProgramsPopover, openDiagnosticsPopover = _props8.openDiagnosticsPopover, closePopovers = _props8.closePopovers;
                        if ("start_drivers_popover" === id) openDriversPopover(); else if ("start_programs_popover" === id) openProgramsPopover(); else if ("start_diagnostics_popover" === id) openDiagnosticsPopover(); else closePopovers();
                    }, closing ? 300 : 50);
                }
            },
            componentDidMount: function() {
                var _props9 = this.props, setInstallationMode = _props9.setInstallationMode, toggleGdprBanner = _props9.toggleGdprBanner, modesData = _props9.modesData;
                setTimeout(function() {
                    try {
                        _system.WshShell.AppActivate((0, _processes.getMyPID)());
                    } catch (err) {}
                }, 0);
                var isEuCountry = (0, _checkIfEuCountry2["default"])();
                this.sendStartpageOpenedEvent(isEuCountry);
                (0, _utils.fitApplicationWindow)();
                setInstallationMode(modesData.initialMode);
                var Reg = "HKCU\\SOFTWARE\\drpsu\\";
                if (void 0 !== (0, _system.RegRead)(Reg + "RunOnce")) _statistics2["default"].event({
                    action: "webdeploy on old version",
                    counters: [ "debug" ]
                });
                var runOnce = (0, _system.RegRead)(Reg + "RunOnce");
                if ("InstallAll" === runOnce) {
                    (0, _system.RegWrite)(Reg + "RunOnce", "null");
                    this.props.startInstallAll();
                } else if ("InstallCustom" === runOnce) {
                    (0, _system.RegWrite)(Reg + "RunOnce", "null");
                    this.props.startInstallCustom();
                }
                if (void 0 !== (0, _system.RegRead)(Reg + "oldVer")) {
                    var oldVer = (0, _system.RegRead)(Reg + "oldVer");
                    if ("null" !== oldVer) {
                        _statistics2["default"].event({
                            action: "webdeploy on old version: " + oldVer,
                            counters: [ "debug" ]
                        });
                        (0, _system.RegWrite)(Reg + "oldVer", "null");
                    }
                }
                var lastInstallationFinish = (0, _system.RegRead)(Reg + "lastFinish");
                if (lastInstallationFinish) {
                    if (Date.now() - lastInstallationFinish < 864e5) this.setState({
                        isReopened: !0
                    });
                }
                var cmdArgsArr = (0, _cmd.ParseCMD)(decodeURIComponent(window.location.hash));
                if (-1 !== cmdArgsArr.indexOf("InstallAll")) this.props.startInstallAll(); else if (-1 !== cmdArgsArr.indexOf("RunDrivers")) window.store.dispatch((0, 
                _menuActions.navigate)("DRIVERS")); else if (-1 !== cmdArgsArr.indexOf("RunProtect")) window.store.dispatch((0, 
                _menuActions.navigate)("PROTECT"));
                (0, _processNotifierFile.performNotifierAction)();
                if (isEuCountry) toggleGdprBanner({
                    eventAction: "gdpr popup showed",
                    eventNamespace: "gdpr:popup:showed"
                });
                _gaming2["default"].start();
            },
            componentWillUnmount: function() {
                _gaming2["default"].stop();
            },
            sendStartpageOpenedEvent: function(isEuCountry) {
                var _prepareDiagnosticsPa = (0, _prepareDiagnosticsParams2["default"])(), params = _prepareDiagnosticsPa.params, metrikaParams = _prepareDiagnosticsPa.metrikaParams;
                if (isEuCountry) params = metrikaParams = {};
                _logs2["default"].info({
                    action: "startpage screen opened",
                    namespace: "startpage:screen:opened",
                    params: params,
                    override: {
                        yandex: {
                            params: metrikaParams
                        }
                    }
                });
            }
        }), actions = {
            startInstallAll: _startActions.startInstallAll,
            startInstallCustom: _startActions.startInstallCustom,
            startExpertMode: _appActions.startExpertMode,
            toggleGdprBanner: _appActions.toggleGdprBanner,
            expandDrivers: _startActions.expandDrivers,
            expandPrograms: _startActions.expandPrograms,
            openDriversPopover: _startActions.openDriversPopover,
            openProgramsPopover: _startActions.openProgramsPopover,
            openDiagnosticsPopover: _startActions.openDiagnosticsPopover,
            closePopovers: _startActions.closePopovers,
            toggleAllAppEsteemDrivers: _startActions.toggleAllAppEsteemDrivers,
            toggleAppEsteemDriver: _startActions.toggleAppEsteemDriver,
            openStartFakePopup: _startActions.openStartFakePopup,
            setInstallationMode: _startActions.setInstallationMode
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(Start);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2), __webpack_require__(315));
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function mapState(state) {
            return {
                currentLanguage: state.lang.currentLanguage
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _startActions = __webpack_require__(206), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
        __webpack_require__(846);
        var StartFakePopup = _react2["default"].createClass({
            displayName: "StartFakePopup",
            mixins: [ __webpack_require__(3) ],
            propTypes: {
                currentLanguage: _react.PropTypes.string.isRequired,
                closeStartFakePopup: _react.PropTypes.func.isRequired
            },
            render: function() {
                var closeStartFakePopup = this.props.closeStartFakePopup;
                return _react2["default"].DOM.div(null, _react2["default"].DOM.div({
                    className: "semi-transparent-overlay fake-transparent-overlay"
                }), _react2["default"].DOM.table({
                    className: "start-fake-popup_popup"
                }, _react2["default"].DOM.tbody(null, _react2["default"].DOM.tr(null, _react2["default"].DOM.td({
                    className: "start-fake-popup_wrapper"
                }, _react2["default"].DOM.div({
                    className: "start-fake-popup_inner"
                }, _react2["default"].DOM.a({
                    href: "#",
                    className: "confirm-popup_close icons-controls",
                    onClick: function(e) {
                        e.stopPropagation();
                        e.preventDefault();
                        closeStartFakePopup();
                    }
                }, "✖"), _react2["default"].DOM.div({
                    className: "start-fake-popup_title"
                }, l("start-fake-popup_title")), _react2["default"].DOM.div({
                    className: "start-fake-popup_text"
                }, l("start-fake-popup_subtitle")), _react2["default"].DOM.div({
                    className: "start-fake-popup_step-text"
                }, _react2["default"].DOM.p({
                    className: "start-fake-popup_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/connect.png",
                    className: "start-fake-popup_icon connect_icon"
                }), l("start-fake-popup_connect")), _react2["default"].DOM.p({
                    className: "start-fake-popup_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/firewall.png",
                    className: "start-fake-popup_icon firewall_icon"
                }), l("start-fake-popup_firewall")), _react2["default"].DOM.p({
                    className: "start-fake-popup_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/torrent.png",
                    className: "start-fake-popup_icon torrent_icon"
                }), l("start-fake-popup_torrent")), _react2["default"].DOM.p({
                    className: "start-fake-popup_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/browser.png",
                    className: "start-fake-popup_icon browser_icon"
                }), l("start-fake-popup_browser")), _react2["default"].DOM.p({
                    className: "start-fake-popup_line-text"
                }, (0, _Img2["default"])({
                    src: "img/fake-installation/vpn.png",
                    className: "start-fake-popup_icon vpn_icon"
                }), l("start-fake-popup_vpn"))), _react2["default"].DOM.div(null, _react2["default"].DOM.button({
                    onClick: function(e) {
                        closeStartFakePopup();
                    },
                    className: "start-fake-popup_button cta-green-btn"
                }, l("start-fake-popup_button")))))))));
            }
        }), actions = {
            closeStartFakePopup: _startActions.closeStartFakePopup
        };
        exports["default"] = (0, _connect2["default"])(mapState, actions)(StartFakePopup);
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function mapState(state) {
        return {
            languages: state.lang.languages,
            currentLanguage: state.lang.currentLanguage
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _connect = __webpack_require__(13), _connect2 = _interopRequireDefault(_connect), _getInternetExplorerVersion = __webpack_require__(66), _getInternetExplorerVersion2 = _interopRequireDefault(_getInternetExplorerVersion), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img), _langActions = __webpack_require__(205);
    __webpack_require__(847);
    var internetExplorerVersion = (0, _getInternetExplorerVersion2["default"])(), StartFooter = _react2["default"].createClass({
        displayName: "StartFooter",
        propTypes: {
            children: _react.PropTypes.any,
            changeLang: _react.PropTypes.func,
            languages: _react.PropTypes.array,
            currentLanguage: _react.PropTypes.string.isRequired,
            loadLanguageList: _react.PropTypes.func.isRequired
        },
        shouldFixHoverIcon: function() {
            if (-1 !== internetExplorerVersion) if (internetExplorerVersion < 10) return !0; else return !1; else return !1;
        },
        renderLanguages: function(languages) {
            return languages.map(function(language) {
                return _react2["default"].DOM.option({
                    key: language.id,
                    value: language.id
                }, language.name);
            });
        },
        componentDidMount: function() {
            (0, this.props.loadLanguageList)();
        },
        render: function() {
            var _props = this.props, changeLang = _props.changeLang, languages = _props.languages, currentLanguage = _props.currentLanguage, children = _props.children, language = languages.length ? languages.find(function(_ref) {
                return _ref.id === currentLanguage;
            }) : null;
            return _react2["default"].DOM.div({
                className: "footer"
            }, _react2["default"].DOM.div({
                className: "footer_meta"
            }, _react2["default"].DOM.span({
                className: "footer_meta-lang"
            }, this.shouldFixHoverIcon() ? (0, _Img2["default"])({
                src: "img/screens/globe_normal.png",
                className: "footer_meta-lang-icon",
                width: "16",
                height: "16",
                style: {
                    verticalAlign: "top",
                    marginRight: "9px",
                    marginTop: "4px"
                }
            }) : _react2["default"].DOM.i({
                className: "footer_meta-lang-icon",
                width: "16",
                height: "16"
            }), _react2["default"].DOM.span({
                className: "footer_meta-lang-select"
            }, _react2["default"].DOM.span({
                className: "footer_meta-lang-label"
            }, language ? language.name : "English", _react2["default"].DOM.i({
                className: "footer_meta-lang-label-arrow"
            })), _react2["default"].DOM.select({
                name: "language",
                onChange: function(e) {
                    return changeLang(e.target.value, "startpage language clicked");
                },
                value: currentLanguage,
                style: {
                    fontSize: 14
                }
            }, this.renderLanguages(languages))))), children);
        }
    }), actions = {
        changeLang: _langActions.changeLang,
        loadLanguageList: _langActions.loadLanguageList
    };
    exports["default"] = (0, _connect2["default"])(mapState, actions)(StartFooter);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _Img = __webpack_require__(7), _Img2 = _interopRequireDefault(_Img);
    __webpack_require__(848);
    exports["default"] = _react2["default"].createClass({
        displayName: "StartPopover",
        mixins: [ __webpack_require__(3) ],
        propTypes: {
            message: _react.PropTypes.string.isRequired,
            onMouseMove: _react.PropTypes.func.isRequired
        },
        render: function() {
            var _props = this.props, message = _props.message, onMouseMove = _props.onMouseMove;
            return _react2["default"].DOM.div({
                onMouseMove: onMouseMove,
                className: "start-popover"
            }, _react2["default"].DOM.div({
                className: "start-popover_arrow"
            }, (0, _Img2["default"])({
                src: "img/screens/arrow-bottom.png",
                width: "17",
                height: "10"
            })), message);
        }
    });
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        exports.__esModule = !0;
        var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _deviceClasses = __webpack_require__(106), _deviceClasses2 = _interopRequireDefault(_deviceClasses), _eventsHandling = __webpack_require__(210);
        __webpack_require__(849);
        var StartSlider = _react2["default"].createClass({
            displayName: "StartSlider",
            propTypes: {
                modeList: _react.PropTypes.array.isRequired,
                initialMode: _react.PropTypes.string.isRequired,
                chosenClass: _react.PropTypes.string,
                isReopened: _react.PropTypes.bool.isRequired,
                onChange: _react.PropTypes.func.isRequired
            },
            getInitialState: function() {
                var _props = this.props, modeList = _props.modeList, initialMode = _props.initialMode;
                return {
                    isDragging: !1,
                    thumbOffset: null,
                    value: modeList.indexOf(initialMode),
                    step: Math.round(340 / (modeList.length - 1))
                };
            },
            getMode: function() {
                return this.props.modeList[this.state.value];
            },
            getDividersOffsets: function() {
                var modeList = this.props.modeList, step = this.state.step, count = modeList.length;
                return Array.from(Array(count).keys()).map(function(v) {
                    return v * step - 1;
                });
            },
            getControlRect: function() {
                return this.refs.control.getDOMNode().getBoundingClientRect();
            },
            findClosestValue: function(e) {
                var eventX = e.clientX, controlRect = this.getControlRect(), positions = this.getDividersOffsets().map(function(offset) {
                    return controlRect.left + offset;
                }), compare = function(a, b) {
                    return Math.abs(eventX - a) - Math.abs(eventX - b);
                }, closestPosition = [].concat(positions).sort(compare)[0];
                return positions.indexOf(closestPosition);
            },
            setValueByCursor: function(e) {
                var _this = this, value = this.findClosestValue(e);
                if (value >= 0 && value !== this.state.value) this.setState({
                    value: value
                }, function() {
                    _this.props.onChange(_this.getMode());
                });
            },
            setThumbByCursor: function(e) {
                var eventX = e.clientX, controlRect = this.getControlRect(), offset = eventX - controlRect.left;
                offset = Math.max(0, offset);
                offset = Math.min(offset, 340);
                this.setState({
                    thumbOffset: offset
                });
            },
            drag: function(e) {
                if (this.state.isDragging) {
                    if (document.setCapture) document.body.setCapture();
                    this.setThumbByCursor(e);
                }
            },
            stopDragging: function(e) {
                this.setValueByCursor(e || window.event);
                (0, _eventsHandling.removeEvent)(document.body, "mousemove", this.drag);
                (0, _eventsHandling.removeEvent)(document.body, "mouseup", this.stopDragging);
                if (document.setCapture) document.body.releaseCapture();
                this.setState({
                    isDragging: !1,
                    thumbOffset: null
                });
            },
            startDragging: function() {
                this.setState({
                    isDragging: !0
                });
                if (document.setCapture) document.body.setCapture();
                (0, _eventsHandling.addEvent)(document.body, "mousemove", this.drag);
                (0, _eventsHandling.addEvent)(document.body, "mouseup", this.stopDragging);
            },
            renderDividers: function() {
                var offsets = this.getDividersOffsets(), isWarning = "all" === this.getMode();
                return offsets.map(function(offset) {
                    return _react2["default"].DOM.div({
                        className: "start-slider_divider " + (isWarning ? "start_slider_all-warning" : ""),
                        style: {
                            left: offset + "px"
                        }
                    });
                });
            },
            renderTopCaption: function() {
                var isReopened = this.props.isReopened, mode = this.getMode(), emptyBlock = _react2["default"].DOM.div({
                    className: "null-block"
                });
                switch (mode) {
                  case "recommended":
                    return isReopened ? _react2["default"].DOM.div({
                        className: "start_slider_text-block"
                    }, l("start_slider_recommended-top")) : emptyBlock;

                  default:
                    return emptyBlock;
                }
            },
            renderBottomCaption: function() {
                var chosenClass = this.props.chosenClass, deviceClassName = chosenClass && (0, _deviceClasses2["default"])(l)[chosenClass].morpher.single.main;
                switch (this.getMode()) {
                  case "none":
                    return _react2["default"].DOM.div({
                        className: "start_slider_text-block"
                    }, l("start_slider_none"));

                  case "chosen":
                    return _react2["default"].DOM.div({
                        className: "start_slider_text-block"
                    }, l("start_slider_chosen").replace("{{CLASS.SINGLE.MAIN}}", deviceClassName));

                  case "chosen-critical":
                    return _react2["default"].DOM.div({
                        className: "start_slider_text-block"
                    }, l("start_slider_chosen-critical"));

                  case "critical":
                    return _react2["default"].DOM.div({
                        className: "start_slider_text-block"
                    }, l("start_slider_critical"));

                  case "recommended":
                    return _react2["default"].DOM.div({
                        className: "start_slider_text-block"
                    }, _react2["default"].DOM.span({
                        className: "start_slider_recommended-first-letter"
                    }, l("start_slider_recommended-first-letter"), " "), l("start_slider_recommended"));

                  case "all":
                    return _react2["default"].DOM.div({
                        className: "start_slider_text-block"
                    }, l("start_slider_all"), _react2["default"].DOM.p({
                        className: "start_slider_warning"
                    }, " ⚠ ️ ", l("start_slider_all-top")));
                }
            },
            render: function() {
                var _this2 = this, _state = this.state, isDraggin = _state.isDraggin, thumbOffset = _state.thumbOffset, value = _state.value, step = _state.step, thumbLeft = (null !== thumbOffset ? thumbOffset : value * step) - 14;
                return _react2["default"].DOM.div({
                    className: "start-slider_wrap"
                }, this.renderTopCaption(), _react2["default"].DOM.div({
                    className: "start-slider_control",
                    ref: "control",
                    onMouseDown: function(e) {
                        e.preventDefault();
                        _this2.setThumbByCursor(e);
                    },
                    onMouseUp: function(e) {
                        e.preventDefault();
                        _this2.setValueByCursor(e);
                        _this2.setState({
                            thumbOffset: null
                        });
                    }
                }, _react2["default"].DOM.div({
                    className: "start-slider_bar"
                }), _react2["default"].DOM.div({
                    className: "start-slider_thumb " + (isDraggin ? "start-slider_thumb-dragging" : ""),
                    style: {
                        left: thumbLeft + "px"
                    },
                    onMouseDown: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        _this2.startDragging(e);
                    }
                }), this.renderDividers()), this.renderBottomCaption());
            }
        });
        exports["default"] = StartSlider;
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _StartSlider = __webpack_require__(749), _StartSlider2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_StartSlider);
    exports["default"] = _StartSlider2["default"];
    module.exports = exports["default"];
}, , function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    function _possibleConstructorReturn(self, call) {
        if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
        return call && ("object" == typeof call || "function" == typeof call) ? call : self;
    }
    function _inherits(subClass, superClass) {
        if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
        subClass.prototype = Object.create(superClass && superClass.prototype, {
            constructor: {
                value: subClass,
                enumerable: !1,
                writable: !0,
                configurable: !0
            }
        });
        if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
    }
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _os = __webpack_require__(14), _logs = __webpack_require__(4), _external = __webpack_require__(314), _external2 = _interopRequireDefault(_external), _slugify = __webpack_require__(809), _slugify2 = _interopRequireDefault(_slugify), log = (0, 
    _logs.getLogger)("ddriver"), toFixed = function(num) {
        return ("0" + num).slice(-2);
    }, DDriver = function(_External) {
        function DDriver() {
            _classCallCheck(this, DDriver);
            var options = {
                url: window.downloadEndpoint + "/updates/ddriver/ddriver2.zip",
                downloadPath: _system.AppData + "\\DRPSu\\ddriver",
                dirPath: _system.WshShell.CurrentDirectory.split("\\").slice(0, -1).join("\\") + "\\bin\\tools\\ddriver",
                exePath: "ddriver.bat"
            }, _this = _possibleConstructorReturn(this, _External.call(this, options));
            _this.backupPath = _system.WshShell.SpecialFolders("MyDocuments") + "\\DriverPack\\Backups";
            _this.tempDir = _system.WshShell.ExpandEnvironmentStrings("%temp%\\drp\\DRPSuPacker");
            _this.tempZip = _this.tempDir + "\\pack.7z";
            return _this;
        }
        _inherits(DDriver, _External);
        DDriver.prototype.CreateFilename = function() {
            var today = new Date();
            return [ "DriverPack", "Backup", [ today.getFullYear(), toFixed(today.getMonth() + 1), toFixed(today.getDate()) ].join(""), [ toFixed(today.getHours()), toFixed(today.getMinutes()), toFixed(today.getSeconds()) ].join("") ].join("_") + ".exe";
        };
        DDriver.prototype.Collect = function() {
            var dir = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.tempDir, subdir = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "\\pack\\drivers";
            log.info("executing", {
                exePath: this.exePath
            }, "start");
            _system.WshShell.Run('cmd /C RD /S /Q "' + dir + '"', 0, !0);
            var target = "" + dir + subdir;
            _system.WshShell.Run('cmd /C "' + this.exePath + ' "' + target + '""', 0, !0);
            _system.WshShell.Run('cmd /C "FOR /D %D IN ("' + target + '\\*") DO (XCOPY "%D\\*" "' + target + '\\" /E /Y /C && RD /S /Q "%D")"', 0, !0);
        };
        DDriver.prototype.Backup = function() {
            this.Collect();
            var filename = this.CreateFilename();
            log.info("packing to " + filename, {
                filename: filename
            }, "packing");
            _system.WshShell.Run(this.dirPath + '\\7za.exe x -y -o"' + this.tempDir + '\\pack" "' + this.dirPath + '\\packer.7z"', 0, !0);
            _system.WshShell.Run(this.dirPath + '\\7za.exe a "' + this.tempZip + '" "' + this.tempDir + '\\pack\\*"', 0, !0);
            _system.WshShell.Run('cmd /C mkdir "' + this.backupPath + '"', 0, !0);
            _system.WshShell.Run('cmd /C copy /b "' + this.dirPath + '\\7zsd.sfx" + "' + this.dirPath + '\\sfxconfig" + "' + this.tempZip + '" "' + this.backupPath + "\\" + filename + '"', 0, !0);
            log.info("packed to " + filename, {
                filename: filename
            }, "packed");
        };
        DDriver.prototype.RunCollect = function() {
            var _this2 = this, dir = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.tempDir;
            return _External.prototype.Download.call(this).then(function() {
                _this2.Collect(dir, "");
            });
        };
        DDriver.prototype.PackOne = function(toDir, _ref) {
            var deviceId = _ref.deviceId, name = _ref.name, version = _ref.version, date = _ref.date, inf = _ref.inf, dir = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.tempDir;
            try {
                var command = 'dir "' + dir + "\\" + inf + '" /S /B', tempFile = _system.AppData + "\\DRPSu\\temp\\dir-" + inf + ".txt";
                _system.WshShell.Run('cmd /C "' + command + ' > "' + tempFile + '""', 0, !0);
                var file = _system.fso.OpenTextFile(tempFile, 1, !0);
                if (file.AtEndOfStream) return;
                var text = file.ReadAll();
                file.close();
                if (-1 !== text.indexOf(inf)) {
                    var path = text.replace(dir, ""), parts = path.split("\\"), zippingDir = [ dir, parts[1], parts[2] ].join("\\"), zipName = (0, 
                    _slugify2["default"])([ parts[1], _os.OSVersion + "x" + _os.arch, name, "deviceId:" + deviceId, "version:" + version, "date:" + date ].join("_")) + ".zip", zipPath = toDir + "\\" + zipName;
                    _system.WshShell.Run(this.dirPath + '\\driverpack-7za.exe a "' + zipPath + '" "' + zippingDir + '\\*"', 0, !0);
                    return zipPath;
                }
            } catch (err) {
                return;
            }
        };
        DDriver.prototype.Run = function() {
            var _this3 = this;
            return _External.prototype.Download.call(this).then(function() {
                _this3.Backup();
                _system.WshShell.Run('cmd /C explorer "' + _this3.backupPath + '"', 1, !1);
            });
        };
        return DDriver;
    }(_external2["default"]);
    exports["default"] = new DDriver();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function _objectWithoutProperties(obj, keys) {
            var target = {};
            for (var i in obj) if (!(keys.indexOf(i) >= 0)) if (Object.prototype.hasOwnProperty.call(obj, i)) target[i] = obj[i];
            return target;
        }
        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
        }
        var _extends = Object.assign || function(target) {
            for (var i = 1; i < arguments.length; i++) {
                var source = arguments[i];
                for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
            }
            return target;
        }, _system = __webpack_require__(6), _DeloreanTransport = __webpack_require__(224), _DeloreanTransport2 = _interopRequireDefault(_DeloreanTransport), _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _constants = __webpack_require__(208), _constants2 = _interopRequireDefault(_constants), featuresMarkers = [ "hooks", "dependencies" ], Delorean = function() {
            function Delorean() {
                _classCallCheck(this, Delorean);
            }
            Delorean.prototype.generateJobId = function() {
                return +Math.round(1e5 * Math.random());
            };
            Delorean.prototype.pathToInputFile = function(id) {
                return _system.AppData + "\\DRPSu\\temp\\delorean_input_" + id + ".log";
            };
            Delorean.prototype.pathToOutputFile = function(id) {
                return _system.AppData + "\\DRPSu\\temp\\delorean_output_" + id + ".log";
            };
            Delorean.prototype.pathToErrorFile = function(id) {
                return _system.AppData + "\\DRPSu\\temp\\delorean_error_" + id + ".log";
            };
            Delorean.prototype.wrapInCmd = function(command) {
                return 'cmd /c "' + command + '"';
            };
            Delorean.prototype.send = function(endpoint, data) {
                return new _DeloreanTransport2["default"](endpoint, 3).send(data);
            };
            Delorean.prototype.run = function(_ref) {
                var _this = this, markers = _ref.markers, query = _objectWithoutProperties(_ref, [ "markers" ]);
                query = _extends({}, query, {
                    markers: markers ? [].concat(markers, featuresMarkers) : featuresMarkers,
                    useRank: {
                        filter: !1,
                        sort: !0
                    }
                });
                var remoteConfirmShowed = "undefined" != typeof this.confirmRemote;
                _logs2["default"]._write({
                    type: "drivers",
                    data: query,
                    message: "delorean drivers query"
                });
                return (!_system.fso.FileExists("../index/db.sqlite") ? this.runRemote(query) : this.runRemote(query).then(function(result) {
                    if (!remoteConfirmShowed) _this.confirmRemote = confirm(l("delorean_use_remote_confirm"));
                    return _this.confirmRemote ? result : _this.runLocal(query);
                })["catch"](function(err) {
                    if (!remoteConfirmShowed) _this.confirmRemote = !1;
                    return _this.runLocal(query);
                })).then(function(data) {
                    return data.map(function(item, index) {
                        var _query$devices$index = query.devices[index], status = _query$devices$index.status, statusCode = _query$devices$index.statusCode, isProblemDevice = _query$devices$index.isProblemDevice;
                        return _extends({
                            status: status,
                            statusCode: statusCode,
                            isProblemDevice: isProblemDevice
                        }, item);
                    });
                });
            };
            Delorean.prototype.runRemote = function(query) {
                this.isLocal = !1;
                _logs2["default"].info("run remote", {}, "driversApi:request:sent");
                return Promise.all([ this.querySelectApi(query), this.queryUserChoiceApi() ]).then(function(_ref2) {
                    return _ref2[0];
                });
            };
            Delorean.prototype.querySelectApi = function(query) {
                var apiEndpoint = window.apiEndpoint + "/select";
                return this.send(apiEndpoint, query).then(function(_ref3) {
                    var body = _ref3.body, problemDevices = 0, errorDevices = 0, errorDevicesApiFailed = 0;
                    query.devices.forEach(function(_ref4, index) {
                        var statusCode = _ref4.statusCode;
                        if (_ref4.isProblemDevice) problemDevices++; else if (![ 0, 22 ].includes(statusCode)) {
                            errorDevices++;
                            if (body.data[index].drivers.length) errorDevicesApiFailed++;
                        }
                    });
                    _logs2["default"].info({
                        action: "api response received",
                        counters: [ "debug" ]
                    }, {
                        problemDevices: problemDevices,
                        errorDevices: errorDevices,
                        errorDevicesApiFailed: errorDevicesApiFailed
                    }, "driversApi:response:received");
                    return body.data;
                });
            };
            Delorean.prototype.queryUserChoiceApi = function() {
                var _this2 = this, apiEndpoint = window.apiEndpoint + "/user-choice/driver/retrieve";
                return this.send(apiEndpoint, {}).then(function(_ref5) {
                    var body = _ref5.body;
                    if (body.data && 0 !== Object.keys(body.data).length) _this2.userChoice = body.data;
                }, function(error) {
                    _this2.userChoice = {};
                    _logs2["default"].error("user choice API request failed", {
                        error: error
                    }, "userChoiceApi:response:failed");
                });
            };
            Delorean.prototype.checkUserChoice = function(key) {
                var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null, choice = this.userChoice && this.userChoice[key];
                return Array.isArray(choice) ? choice.includes(value) : choice === value;
            };
            Delorean.prototype.resetUserChoice = function() {
                this.chosenDriversOnly = !1;
                var apiEndpoint = window.apiEndpoint + "/user-choice/driver";
                return this.send(apiEndpoint, null)["catch"](function(error) {
                    _logs2["default"].error("user choice API request failed", {
                        error: error
                    }, "userChoiceApi:response:failed");
                });
            };
            Delorean.prototype.runLocal = function(query) {
                var _this3 = this;
                if (!0) {
                    this.isLocal = !0;
                    _logs2["default"].info("run local:", {}, "driversApi:run:local");
                    return new Promise(function(resolve, reject) {
                        var jobId = _this3.generateJobId(), inputFile = _this3.pathToInputFile(jobId), outputFile = _this3.pathToOutputFile(jobId), errorFile = _this3.pathToErrorFile(jobId);
                        if (!_system.fso.FolderExists(_system.AppData + "\\DRPSu\\temp")) _system.fso.CreateFolder(_system.AppData + "\\DRPSu\\temp");
                        var inputFileDescriptor = _system.fso.OpenTextFile(inputFile, _constants2["default"].FSO_FOR_WRITING, _constants2["default"].FSO_CREATE);
                        inputFileDescriptor.WriteLine(JSON.stringify(query));
                        inputFileDescriptor.Close();
                        var deloreanCommand = '..\\catalog\\node ../catalog/cli -d ../index/db.sqlite -i "' + inputFile + '" >"' + outputFile + '" 2>"' + errorFile + '"', command = _this3.wrapInCmd(deloreanCommand);
                        _logs2["default"].info("Running: " + command, {
                            command: command
                        }, "driversApi:run:local:command");
                        _system.WshShell.Run(command, 0, !0);
                        var outputFileDescriptor = _system.fso.OpenTextFile(outputFile, _constants2["default"].FSO_FOR_READING, _constants2["default"].FSO_DONT_CREATE), errorFileDescriptor = _system.fso.OpenTextFile(errorFile, _constants2["default"].FSO_FOR_READING, _constants2["default"].FSO_CREATE);
                        if (!outputFileDescriptor.AtEndOfStream) {
                            var outputContents = outputFileDescriptor.ReadAll();
                            resolve(JSON.parse(outputContents));
                        } else if (!errorFileDescriptor.AtEndOfStream) {
                            var errorContents = errorFileDescriptor.ReadAll();
                            reject(errorContents);
                        } else reject(new Error("No output"));
                    });
                } else throw new Error("Called delorean.runLocal in online");
            };
            Delorean.prototype.formatNumberWithLeadingZero = function(number) {
                return number >= 10 ? number : "0" + number;
            };
            Delorean.prototype.parseDate = function(dateStr) {
                var dt = dateStr.split(/[: T-]/).map(function(x) {
                    return parseFloat(x);
                });
                return new Date(dt[0], dt[1] - 1, dt[2], dt[3] || 0, dt[4] || 0, dt[5] || 0, 0);
            };
            Delorean.prototype.formatDate = function(date) {
                if (!date) return "";
                var parsed = this.parseDate(date);
                return [ parsed.getFullYear(), this.formatNumberWithLeadingZero(parsed.getMonth() + 1), this.formatNumberWithLeadingZero(parsed.getDate()) ].join("-");
            };
            Delorean.prototype.prepareData = function(data, curDriversArray) {
                var _this4 = this;
                _logs2["default"].debug("prepareData", {
                    data: data,
                    curDriversArray: curDriversArray
                }, "driversApi:prepareData");
                var curDrivers = {};
                curDriversArray.forEach(function(current) {
                    curDrivers[current.deviceId] = current;
                });
                var result = {
                    devices: [],
                    lowRanked: [],
                    broken: [],
                    chosenDriversOnly: !1
                }, chosen = {
                    mainId: [],
                    deviceClass: []
                };
                window.newdrivers = [];
                data.forEach(function(_ref6) {
                    var fullDeviceId = _ref6.deviceId, mainId = _ref6.mainId, hardwareId = _ref6.hardwareId, statusCode = _ref6.statusCode, drivers = _ref6.drivers, isProblemDevice = _ref6.isProblemDevice;
                    if (!isProblemDevice) {
                        var current = curDrivers[fullDeviceId];
                        if (drivers[0]) {
                            var recommended = [], notRecommended = [];
                            drivers.forEach(function(_ref7) {
                                var link = _ref7.link, date = _ref7.date, driver = _objectWithoutProperties(_ref7, [ "link", "date" ]), patched = _extends({}, driver, {
                                    fullDeviceId: fullDeviceId,
                                    hardwareId: hardwareId,
                                    statusCode: statusCode,
                                    link: window.downloadEndpoint + "/driverpacks/repack" + link,
                                    date: _this4.formatDate(date)
                                });
                                0 === driver.rank ? notRecommended.push(patched) : recommended.push(patched);
                            });
                            if (recommended.length > 0) {
                                result.devices.push([ recommended, current ]);
                                if (_this4.checkUserChoice("mainId", mainId)) chosen.mainId.push(recommended[0]);
                                if (_this4.checkUserChoice("deviceClass", recommended[0]["class"])) chosen.deviceClass.push(recommended[0]);
                            }
                            if (notRecommended.length > 0) result.lowRanked.push([ notRecommended, current ]);
                        } else if (current && !/microsoft|standard/i.test(current.manufacturer)) window.newdrivers.push(current);
                    } else result.broken.push({
                        deviceId: fullDeviceId,
                        hardwareId: hardwareId,
                        statusCode: statusCode,
                        drivers: drivers,
                        problem: isProblemDevice
                    });
                });
                var chosenDrivers = chosen.mainId.length > 0 ? chosen.mainId : chosen.deviceClass;
                if (chosenDrivers.length > 0) {
                    chosenDrivers.forEach(function(driver) {
                        driver.isChosen = !0;
                    });
                    result.chosenDriversOnly = this.chosenDriversOnly = !0;
                }
                return result;
            };
            Delorean.prototype.runProtect = function(query) {
                _logs2["default"]._write({
                    type: "soft",
                    data: query,
                    message: "Protect - soft query"
                });
                var apiEndpoint = window.apiEndpoint + "/cleaner";
                _logs2["default"].info("run protect", {
                    apiEndpoint: apiEndpoint
                }, "protectApi:request:sent", [ "protect" ]);
                return this.send(apiEndpoint, query).then(function(_ref8) {
                    var body = _ref8.body, data = body.data;
                    _logs2["default"].info({
                        action: "protect api response received",
                        counters: [ "debug" ]
                    }, {}, "protectApi:response:received");
                    return data;
                });
            };
            Delorean.prototype.convertProtectOutput = function(data) {
                _logs2["default"].debug("Protect - convert output", {
                    data: data
                }, "protectApi:convertOutput", [ "protect" ]);
                return data.map(function(program) {
                    return {
                        name: program.Program,
                        version: program.Version || "",
                        publisher: program.Publisher || "",
                        installDate: program["Install Date"] || "",
                        icon: program.imageurl || "",
                        uninstallString: program.Uninstaller || "",
                        uninstallPercents: program.uninstallrate || 0,
                        rating: program.overallsentiment || 0,
                        size: program.Size || "",
                        regPath: program["Registry Path"] || "",
                        isFound: program.isFound
                    };
                });
            };
            return Delorean;
        }();
        window.delorean = new Delorean();
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    exports.runCommandAsync = undefined;
    var _getRandomFromInterval = __webpack_require__(151), _getRandomFromInterval2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_getRandomFromInterval);
    exports.runCommandAsync = function() {
        return new Promise(function(resolve) {
            setTimeout(function() {
                return resolve(0);
            }, (0, _getRandomFromInterval2["default"])(0, 20));
        });
    };
    if ("undefined" != typeof emulatingIE) {
        window.log = console.log.bind(console);
        var _sendYaMetrika;
        if (window.statistics) _sendYaMetrika = window.statistics.sendYaMetrika;
        if (window.statistics) window.statistics.sendUrl = function() {};
        if (window.statistics) window.statistics.sendYaMetrika = function(event) {
            if (window.yaCounter) window.yaCounter.hit = function() {};
            _sendYaMetrika(event);
        };
        var aria = __webpack_require__(104);
        aria.downloadFiles = function() {
            return new Promise(function(resolve, reject) {
                setTimeout(Math.random() < .5 ? resolve : reject, (0, _getRandomFromInterval2["default"])(0, 20));
            });
        };
        aria.addToFirewallAllowed = function() {
            return Promise.resolve(0);
        };
        var unzip = __webpack_require__(124);
        unzip.run7z = function() {
            return unzip.run7z(null, null, null, !0);
        };
        unzip.checkZipArchiveFilesCount = function() {
            return function(dispatch) {};
        };
        unzip.watchUnzippedPartFilesCount = function() {
            return function(dispatch) {};
        };
        __webpack_require__(313).update = function() {
            return Promise.resolve(0);
        };
        __webpack_require__(65).run = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
            var driversData, protect;
            return regeneratorRuntime.wrap(function(_context) {
                for (;;) switch (_context.prev = _context.next) {
                  case 0:
                    driversData = __webpack_require__(856);
                    window.store.dispatch({
                        type: "DRIVERS_SCAN_SUCCESS",
                        payload: driversData
                    });
                    protect = __webpack_require__(857);
                    window.store.dispatch({
                        type: "INSTALLED_PROGRAMS_SCAN_FINISHED",
                        payload: protect
                    });

                  case 4:
                  case "end":
                    return _context.stop();
                }
            }, _callee, undefined);
        }));
        var softPack = __webpack_require__(147);
        softPack.run = function() {
            return new Promise(function(resolve, reject) {
                window.log("softJs called", {}, "softJs:called");
                window.SoftPack.jsonCallback = function(json) {
                    window.log("softJs callback with JSON", {
                        json: json
                    }, "softJs:callback");
                    window.log("GeoIp set", {
                        geoip: window.geoip
                    }, "geoip:set");
                    softPack.soft = json;
                    softPack.applyAll();
                    resolve();
                };
                setTimeout(function() {
                    __webpack_require__(756);
                }, 100);
            });
        };
        softPack.applyTargeting = function(json) {
            json.forEach(function(item, i, json) {
                if (json[i].CheckedDefaultIf) try {
                    json[i].isVisible = json[i].IsChecked = json[i].CheckedDefaultIf({
                        antivirus: window.antivirus,
                        geoip: window.geoip,
                        os: window.os,
                        system: window.system,
                        wmi: window.wmi,
                        diagnostics: window.diagnostics
                    });
                } catch (err) {
                    json[i].isVisible = !0;
                    json[i].IsChecked = json[i].CheckedDefault;
                    window.log("[SoftPack] CheckedDefaultIf failed", err);
                } else {
                    json[i].isVisible = !0;
                    json[i].IsChecked = json[i].CheckedDefault;
                }
            });
            window.log("[SoftPack] Targeting applied", json);
            return json;
        };
        softPack.applyAll = function() {
            var programs = softPack.applyTargeting(softPack.soft);
            window.store.dispatch({
                type: "PROGRAMS_LOADED",
                payload: programs
            });
        };
        var load = function(filename) {
            return new Promise(function(resolve) {
                var script = document.createElement("script");
                script.src = filename;
                script.type = "text/javascript";
                document.documentElement.insertBefore(script, document.documentElement.lastChild);
                script.onload = script.onerror = function() {
                    if (!script.executed) {
                        script.executed = !0;
                        resolve();
                    }
                };
                script.onreadystatechange = function() {
                    if ("complete" === script.readyState) script.onload();
                    if ("loaded" === script.readyState) {
                        setTimeout(script.onload, 0);
                        script.onreadystatechange = null;
                    }
                };
            });
        };
        window.loadLanguage = function() {
            var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(lang) {
                var langQueue, _iterator, _isArray, _i, _ref3, l, language;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        if (!lang) lang = "ru";
                        langQueue = [ lang ];
                        if (-1 !== lang.indexOf("-")) langQueue.unshift(lang.split("-")[0]);
                        if (!lang.startsWith("ru") && !lang.startsWith("en")) [ "uk", "az", "by", "hy", "ka" ].some(function(l) {
                            lang.startsWith(l);
                        }) ? langQueue.unshift("ru") : langQueue.unshift("en");
                        _iterator = langQueue, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                      case 5:
                        if (!_isArray) {
                            _context2.next = 11;
                            break;
                        }
                        if (!(_i >= _iterator.length)) {
                            _context2.next = 8;
                            break;
                        }
                        return _context2.abrupt("break", 21);

                      case 8:
                        _ref3 = _iterator[_i++];
                        _context2.next = 15;
                        break;

                      case 11:
                        _i = _iterator.next();
                        if (!_i.done) {
                            _context2.next = 14;
                            break;
                        }
                        return _context2.abrupt("break", 21);

                      case 14:
                        _ref3 = _i.value;

                      case 15:
                        l = _ref3;
                        if (window.languages[l]) {
                            _context2.next = 19;
                            break;
                        }
                        _context2.next = 19;
                        return load("languages/" + l + ".js");

                      case 19:
                        _context2.next = 5;
                        break;

                      case 21:
                        langQueue = langQueue.filter(function(l) {
                            return window.languages[l];
                        });
                        lang = langQueue[langQueue.length - 1];
                        language = {};
                        langQueue.forEach(function(l) {
                            Object.assign(language, window.languages[l]);
                        });
                        window.lang = lang;
                        window.language = language;
                        Object.entries(language).forEach(function(_ref4) {
                            var key = _ref4[0], value = _ref4[1], el = document.getElementById(key);
                            if (el) el.innerHTML = value;
                        });

                      case 28:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, undefined);
            }));
            return function(_x) {
                return _ref2.apply(this, arguments);
            };
        }();
        window.changeLanguage = function() {
            var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(lang) {
                return regeneratorRuntime.wrap(function(_context3) {
                    for (;;) switch (_context3.prev = _context3.next) {
                      case 0:
                        _context3.next = 2;
                        return window.loadLanguage(lang);

                      case 2:
                      case "end":
                        return _context3.stop();
                    }
                }, _callee3, undefined);
            }));
            return function(_x2) {
                return _ref5.apply(this, arguments);
            };
        }();
        var configurator = __webpack_require__(207);
        configurator.init = _asyncToGenerator(regeneratorRuntime.mark(function _callee4() {
            var configuratorData;
            return regeneratorRuntime.wrap(function(_context4) {
                for (;;) switch (_context4.prev = _context4.next) {
                  case 0:
                    configuratorData = __webpack_require__(855);
                    return _context4.abrupt("return", configuratorData);

                  case 2:
                  case "end":
                    return _context4.stop();
                }
            }, _callee4, undefined);
        }));
        configurator.getTotalSize = function() {
            return (0, _getRandomFromInterval2["default"])(100, 1e8);
        };
    }
}, function(module, exports, __webpack_require__) {
    "use strict";
    var hasActiveX = void 0;
    try {
        hasActiveX = new window.ActiveXObject("WScript.Shell");
    } catch (e) {
        hasActiveX = !1;
    }
    if (!hasActiveX) {
        window.emulatingIE = !0;
        try {
            window._localStorage = window.localStorage || {};
        } catch (e) {
            try {
                window._localStorage = {};
            } catch (e2) {}
        }
        window.console = window.console || {
            log: function() {}
        };
        window.ActiveXObject = function(name) {
            switch (name) {
              case "WScript.Shell":
                return {
                    Environment: function() {
                        return function() {};
                    },
                    ExpandEnvironmentStrings: function() {},
                    RegRead: function(key) {
                        switch (key) {
                          case "HKCU\\Control Panel\\International\\Locale":
                            return "0419";

                          case "HKCU\\SOFTWARE\\drpsu\\lang":
                            return window._localStorage.lang;
                        }
                    },
                    RegWrite: function(key, value) {
                        switch (key) {
                          case "HKCU\\SOFTWARE\\drpsu\\lang":
                            window._localStorage.lang = value;
                        }
                    },
                    Exec: function() {},
                    Run: function() {
                        return 0;
                    },
                    run: function() {},
                    SpecialFolders: function(name) {
                        if ("AppData" === name) return "C:\\Documents and Settings\\Administrator\\Application Data";
                    },
                    CurrentDirectory: ""
                };

              case "Shell.Application":
                return {
                    ShellExecute: function() {
                        return 0;
                    },
                    NameSpace: function() {
                        return {
                            Self: {}
                        };
                    }
                };

              case "WbemScripting.SWbemLocator":
                return {
                    ConnectServer: function() {
                        return {
                            ExecQuery: function(query) {
                                if (/Win32_OperatingSystem/.test(query)) return [ {
                                    Caption: "Windows XP",
                                    Version: "5.1"
                                } ];
                                if (/Win32_ComputerSystem/.test(query)) return [ {
                                    Caption: "Emulator",
                                    Name: "Emulator",
                                    Vendor: "Emulator",
                                    Version: "Emulator",
                                    Model: "Lenovo IdeaPad S110",
                                    TotalPhysicalMemory: 1e9,
                                    Manufacturer: "Emulator"
                                } ];
                                if (/Win32_Processor/.test(query)) return [ {
                                    Name: "Intel(R) Core(TM) i3 CPU M350 @2,27CHz"
                                } ];
                                if (/Win32_BIOS/.test(query)) return [ {
                                    Manufacturer: "ACER",
                                    SMBIOSBIOSVersion: "1.0",
                                    ReleaseDate: "2000-01-01"
                                } ];
                                if (/Win32_VideoController/.test(query)) return [ {
                                    Caption: "NVidia GeForce 9600 GT",
                                    AdapterRAM: 536870912
                                } ];
                                if (/Win32_DiskDrive/.test(query)) return [ {
                                    Model: "ST32171W",
                                    Status: "OK"
                                } ];
                                if (/Win32_PnPSignedDriver/.test(query) || /Win32_PnPEntity/.test(query)) {
                                    return [ "ACPI\\PNP0A03", "PCI\\VEN_8086&DEV_1237&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_7000&SUBSYS_00000000&REV_00", "ACPI\\PNP0303", "ACPI\\PNP0200", "ACPI\\PNP0F03", "ACPI\\PNP0400", "ACPI\\PNP0100", "ACPI\\PNP0000", "PCI\\VEN_8086&DEV_7111&SUBSYS_00000000&REV_01", "PCI\\VEN_80EE&DEV_BEEF&SUBSYS_00000000&REV_00", "PCI\\VEN_1022&DEV_2000&SUBSYS_20001022&REV_40", "PCI\\VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00", "PCI\\VEN_8086&DEV_2415&SUBSYS_00008086&REV_01", "PCI\\VEN_106B&DEV_003F&SUBSYS_00000000&REV_00", "USB\\ROOT_HUB&VID106B&PID003F&REV0000", "USB\\VID_80EE&PID_0021&REV_0100", "ACPI\\ACPI0003", "ACPI\\FIXEDBUTTON", "ACPI\\GENUINEINTEL_\\_X86_FAMILY_6_MODEL_45" ].map(function(x) {
                                        var fn = function() {
                                            return x;
                                        };
                                        fn.toArray = function() {
                                            return [ x ];
                                        };
                                        return {
                                            HardWareID: x,
                                            HardwareID: fn
                                        };
                                    });
                                }
                            },
                            Get: function() {
                                return {
                                    Methods: {
                                        Item: function() {
                                            return {
                                                InParameters: {
                                                    SpawnInstance: function() {
                                                        return {};
                                                    }
                                                }
                                            };
                                        }
                                    }
                                };
                            }
                        };
                    }
                };

              case "Scripting.FileSystemObject":
                var fileObject = {
                    Close: function() {},
                    ReadAll: function() {},
                    Write: function() {},
                    WriteLine: function() {}
                };
                return {
                    CreateFolder: function() {},
                    GetFile: function(file) {
                        switch (file) {
                          case "tools\\modules\\clientid.js":
                            return {
                                Size: window._localStorage.clientId.length,
                                OpenAsTextStream: function() {
                                    return {
                                        ReadAll: function() {
                                            return "'_" + window._localStorage.clientId + ".exe'";
                                        }
                                    };
                                }
                            };
                        }
                    },
                    GetFileName: function() {},
                    GetFolder: function(dir) {
                        switch (dir) {
                          case "C:\\Documents and Settings\\Administrator\\Application Data\\DRPSu\\events":
                            return {
                                Files: []
                            };

                          case "tools\\language":
                            return {
                                Files: [ {
                                    name: "ru.js"
                                }, {
                                    name: "uk.js"
                                }, {
                                    name: "de.js"
                                }, {
                                    name: "en.js"
                                } ]
                            };
                        }
                    },
                    FileExists: function(file) {
                        switch (file) {
                          case "tools\\aria2c.exe":
                            return !0;

                          case "tools\\modules\\clientid.js":
                            return !!window._localStorage.clientId;
                        }
                    },
                    FolderExists: function() {},
                    DeleteFile: function() {},
                    MoveFile: function() {},
                    CreateTextFile: function() {
                        return fileObject;
                    },
                    OpenTextFile: function() {
                        return fileObject;
                    }
                };

              case "WbemScripting.SWbemNamedValueSet":
                return {
                    Add: function() {}
                };

              case "Wbemscripting.SWbemLocator":
                return {
                    ConnectServer: function() {
                        return {
                            Get: function() {
                                return {
                                    Methods_: {
                                        Item: function() {
                                            return {
                                                InParameters: {
                                                    SpawnInstance_: function() {
                                                        return {};
                                                    }
                                                }
                                            };
                                        }
                                    },
                                    ExecMethod_: function() {
                                        return {};
                                    }
                                };
                            }
                        };
                    }
                };

              case "WinHttp.WinHttpRequest.5.1":
                return {
                    open: function() {},
                    send: function() {}
                };

              case "ADODB.Stream":
                return {
                    open: function() {},
                    write: function() {},
                    saveToFile: function() {}
                };

              default:
                throw new Error("undefined ActiveXObject " + name + " in emulator.js");
            }
        };
        window.Enumerator = function(array) {
            if (!array) throw new Error("Enumerator expected array");
            this.index = 0;
            this.array = array;
        };
        window.Enumerator.prototype.atEnd = function() {
            return this.index >= this.array.length;
        };
        window.Enumerator.prototype.item = function() {
            return this.array[this.index];
        };
        window.Enumerator.prototype.moveFirst = function() {};
        window.Enumerator.prototype.moveNext = function() {
            this.index += 1;
        };
    }
}, function(module, exports, __webpack_require__) {
    "use strict";
    function logistic(x, mid, k) {
        if (!mid) mid = 0;
        if (!k) k = 1;
        var t = (x - mid) / k;
        return 1 / (1 + Math.pow(Math.E, -1 * t));
    }
    try {
        var _geoip, geoip = (_geoip = {
            geoip_city_country_code: "RU",
            geoip_area_code: "0",
            geoip_city: "Moscow",
            geoip_city_continent_code: "EU"
        }, _geoip.geoip_city_country_code = "RU", _geoip.geoip_city_country_code3 = "RUS", 
        _geoip.geoip_city_country_name = "Russian Federation", _geoip.geoip_country_code = "RU", 
        _geoip.geoip_country_code3 = "RUS", _geoip.geoip_country_name = "Russian Federation", 
        _geoip.geoip_dma_code = "0", _geoip.geoip_latitude = "55.7522", _geoip.geoip_longitude = "37.6156", 
        _geoip.geoip_org = "", _geoip.geoip_postal_code = "101194", _geoip.geoip_region = "48", 
        _geoip.geoip_region_name = "Moscow City", _geoip);
        window.geoip = geoip;
    } catch (err) {
        window.geoip = {};
    }
    try {
        window.modelData = window.diagnostics.getModel();
    } catch (err) {
        window.modelData = {
            type: "unknown",
            vendor: "unknown"
        };
    }
    var softRandomSeed = Math.random(), soft = [ {
        ID: "10001",
        Name: "WannaCry hotfix for WinXP EN",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windowsxp-kb4012598-x86-custom-enu.exe",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012598"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch, code = parseInt(data.system.RegRead("HKCU\\Control Panel\\International\\Locale"), 16);
            return 5.1 === osVersion && "86" === arch && 1033 === code;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10002",
        Name: "WannaCry hotfix for WinXP RU",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windowsxp-kb4012598-x86-custom-rus.exe",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012598"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch, code = parseInt(data.system.RegRead("HKCU\\Control Panel\\International\\Locale"), 16);
            return 5.1 === osVersion && "86" === arch && 1049 === code;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10003",
        Name: "WannaCry hotfix for Win7x86",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows7-kb4012212-x86.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012212"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch;
            return 6.1 === osVersion && "86" === arch;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10004",
        Name: "WannaCry hotfix for Win7x64",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows7-kb4012212-x64.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012212"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch;
            return 6.1 === osVersion && "64" === arch;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10005",
        Name: "WannaCry hotfix for Win8x86 EN",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows8-rt-kb4012598-x86-custom-enu.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012598"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch, code = parseInt(data.system.RegRead("HKCU\\Control Panel\\International\\Locale"), 16);
            return 6.2 === osVersion && "86" === arch && 1033 === code;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10006",
        Name: "WannaCry hotfix for Win8x86 RU",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows8-rt-kb4012598-x86-custom-rus.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012598"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch, code = parseInt(data.system.RegRead("HKCU\\Control Panel\\International\\Locale"), 16);
            return 6.2 === osVersion && "86" === arch && 1049 === code;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10007",
        Name: "WannaCry hotfix for Win8x64 EN",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows8-rt-kb4012598-x64-custom-enu.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012598"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch, code = parseInt(data.system.RegRead("HKCU\\Control Panel\\International\\Locale"), 16);
            return 6.2 === osVersion && "64" === arch && 1033 === code;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10008",
        Name: "WannaCry hotfix for Win8x64 RU",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows8-rt-kb4012598-x64-custom-rus.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012598"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch, code = parseInt(data.system.RegRead("HKCU\\Control Panel\\International\\Locale"), 16);
            return 6.2 === osVersion && "64" === arch && 1049 === code;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10009",
        Name: "WannaCry hotfix for Win8.1x86",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows8.1-kb4012213-x86.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012213"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch;
            return 6.3 === osVersion && "86" === arch;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10010",
        Name: "WannaCry hotfix for Win8.1x64",
        localizedName: {
            en: "Attention! Windows Hotfix MS17-010",
            ru: "Важно! Патч Windows MS17-010"
        },
        URL: "http://download.drp.su/soft/system/windows8.1-kb4012213-x64.msu",
        Icon: "http://download.drp.su/soft/system/wcry_patch_icon.png",
        Publisher: "Microsoft Inc.",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return data.wmi.getWMIObjects([], "Win32_QuickFixEngineering", 'HotFixID = "KB4012213"').length > 0;
        },
        Keys: "/quiet /norestart",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Windows Update MS17-010 — hotfix for EternalBlue (WannaCry, Petya, Bad Rabbit, etc.) virus protection",
            ru: "Windows Update MS17-010 — срочное обновление для защиты от вирусов EternalBlue (WannaCry, Petya, Bad Rabbit и др.)"
        },
        Targeting: function(data) {
            var osVersion = data.os.OSVersion, arch = data.os.arch;
            return 6.3 === osVersion && "64" === arch;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10001,
        singleOnly: !0,
        rebootNeeded: !0,
        exitCodes: [ 0, 3010, 2359302 ],
        installTimeout: 6e5
    }, {
        ID: "10011",
        Name: "WannaCry SMBv1 turn off",
        localizedName: {
            en: "Attention! SMBv1 protocol vulnerability elimination",
            ru: "Важно! Закрытие уязвимости протокола SMBv1"
        },
        URL: "http://download.drp.su/soft/system/empty.cmd",
        Icon: "http://download.drp.su/soft/system/wcry_smb_icon.png",
        Publisher: "SMBv1 turn off",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-05-16",
        UpdateDate: "2017-05-16",
        CheckInstalled: function(data) {
            return 0 === data.system.RegRead("HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters\\SMB1");
        },
        Keys: "",
        Category: "Antivirus",
        protect: !0,
        confirmPopup: {
            description: {
                en: "ATTENTION! If you have a configured local network, disabling of the SMBv1 Protocol can cause problems in its operation and loss of access to the shared folders, files, and printers of old models.",
                ru: "Обращаем ваше внимание! Если у вас настроена локальная сеть, то отключение протокола SMBv1 может привести к проблемам в ее работе - потере доступа к общим папкам, файлам, принтерам старых моделей."
            }
        },
        Description: {
            en: "Important vulnerability elimination — old SMBv1 protocol turn off",
            ru: "Очень важное закрытие уязвимости — отключение старого протокола SMBv1"
        },
        Targeting: function(data) {
            return data.os.OSVersion < 10;
        },
        Lang: "",
        IsPartner: !1,
        priority: 10002,
        singleOnly: !0,
        rebootNeeded: !0,
        afterHook: function(data) {
            data.system.RegWrite("HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters\\SMB1", 0, "REG_DWORD");
            try {
                var deps = data.system.RegRead("HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanWorkstation\\DependOnService").toArray(), idx = deps.indexOf("mrxsmb10");
                if (idx >= 0) {
                    deps[idx] = "mrxsmb20";
                    data.system.WshShell.Run("sc.exe config lanmanworkstation depend= " + deps.join("/"), 0, !0);
                }
            } catch (err) {}
            try {
                data.system.WshShell.Run("sc.exe config mrxsmb10 start= disabled", 0, !0);
            } catch (err) {}
            try {
                data.system.WshShell.Run("dism.exe /online /disable-feature /featurename:smb1protocol /quiet /norestart", 0, !0);
            } catch (err) {}
        }
    }, {
        ID: "10012",
        Name: "Petya perfc file creation",
        localizedName: {
            en: "Attention! Protection against Petya virus",
            ru: "Важно! Защита от вируса Petya"
        },
        URL: "http://download.drp.su/soft/system/empty.cmd",
        Icon: "http://download.drp.su/soft/system/wcry_smb_icon.png",
        Publisher: "Perfc file creation",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-06-28",
        UpdateDate: "2017-06-28",
        CheckInstalled: function(data) {
            var filePath = data.system.WshShell.ExpandEnvironmentStrings("%windir%\\perfc");
            return data.system.fso.FileExists(filePath);
        },
        Keys: "",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Important vulnerability elimination — perfc file creation for Petya virus protection",
            ru: "Очень важное закрытие уязвимости — создание файла perfc для защиты от вируса Petya"
        },
        Lang: "",
        IsPartner: !1,
        priority: 10003,
        singleOnly: !0,
        rebootNeeded: !1,
        afterHook: function(data) {
            try {
                var filePath = data.system.WshShell.ExpandEnvironmentStrings("%windir%\\perfc");
                data.system.fso.CreateTextFile(filePath, 1).close();
                var file = data.system.fso.GetFile(filePath);
                file.Attributes = 1 | file.Attributes;
            } catch (err) {}
        }
    }, {
        ID: "10013",
        Name: "Bad Rabbit infpub.dat file creation",
        localizedName: {
            en: "Attention! Protection against Bad Rabbit virus",
            ru: "Важно! Защита от вируса Bad Rabbit"
        },
        URL: "http://download.drp.su/soft/system/empty.cmd",
        Icon: "http://download.drp.su/soft/system/wcry_smb_icon.png",
        Publisher: "Infpub.dat file creation",
        Rating: 5,
        Checked: !1,
        Version: "1.0",
        ReleaseDate: "2017-10-26",
        UpdateDate: "2017-10-26",
        CheckInstalled: function(data) {
            var filePath = data.system.WshShell.ExpandEnvironmentStrings("%windir%\\infpub.dat");
            return data.system.fso.FileExists(filePath);
        },
        Keys: "",
        Category: "Antivirus",
        protect: {},
        Description: {
            en: "Important vulnerability elimination — infpub.dat file creation for Bad Rabbit virus protection",
            ru: "Очень важное закрытие уязвимости — создание файла infpub.dat для защиты от вируса Bad Rabbit"
        },
        Lang: "",
        IsPartner: !1,
        priority: 10004,
        singleOnly: !0,
        rebootNeeded: !1,
        afterHook: function(data) {
            try {
                var filePath = data.system.WshShell.ExpandEnvironmentStrings("%windir%\\infpub.dat ");
                data.system.fso.CreateTextFile(filePath, 1).close();
                var file = data.system.fso.GetFile(filePath);
                file.Attributes = 1 | file.Attributes;
            } catch (err) {}
        }
    }, {
        ID: "1",
        Name: "7-Zip",
        URL: "http://download.drp.su/soft/7-Zip.exe",
        Icon: "http://download.drp.su/soft/7-Zip.png",
        Publisher: "Igor Pavlov",
        Rating: 5,
        Checked: !1,
        Version: "18.00",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-01-10",
        Registry_32: "HKCU\\Software\\7-Zip\\Path",
        Keys: "/S",
        Category: "Archiver",
        Description: {
            en: "7-Zip — file archiver with a high compression ratio",
            ru: "7-Zip — файловый архиватор с высокой степенью сжатия"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1001
    }, {
        ID: "3",
        Name: "Opera x64",
        URL: "http://download.drp.su/soft/OperaBlink64.exe",
        Icon: "http://download.drp.su/soft/Opera.png",
        Publisher: "Opera Software",
        Rating: 5,
        Checked: !0,
        Version: "50.0.2762.45",
        ReleaseDate: "2017-10-04",
        UpdateDate: "2018-01-10",
        Registry_32: "HKCU\\Software\\Opera Software\\UUID",
        CheckInstalled: function(data) {
            return data.diagnostics.checkSoft.checkSoftInstalled(/^Opera /i);
        },
        Keys: "-install -silent -launchopera=1 -setdefaultbrowser=1",
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Opera Web Browser is a free web browser that originally started as a research project back in 1995 and today continues to be a fast, safe and secure web browser.",
                ru: "Популярный веб-браузер со встроенным шифрованием соединений через VPN, блокировщиком рекламы, менеджером батареи, всплывающими подсказками YouTube, поддержкой быстрого набора, расширениями - и все это в гибко настраиваевомом интерфейсе."
            },
            eula: "http://www.opera.com/eula/computers",
            isDeferred: !0
        },
        Description: {
            en: "Opera — fast, secure, easy-to-use browser",
            ru: "Opera — быстрый, безопасный и легкий в использовании браузер"
        },
        Targeting: function(data) {
            if (data.os.OSVersion < 6) return !1;
            if (!data.os.is64) return !1;
            var k = 2592e6 / Math.log(4), mid = new Date(2017, 10, 1).valueOf(), x = new Date().valueOf();
            return softRandomSeed < logistic(x, mid, k);
        },
        Lang: "",
        IsPartner: !0,
        priority: 30,
        afterHook: function(data) {
            for (var folder = data.system.WshShell.ExpandEnvironmentStrings("%appdata%\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar"), shortcuts = [ "facebook.lnk" ], i = 0; i < shortcuts.length; i++) {
                try {
                    for (var verbs = data.system.objShell.Namespace(folder).ParseName(shortcuts[i]).Verbs(), j = 0; j < verbs.Count; j++) if (/unpin|открепить/i.test(verbs.Item(j).name)) verbs.Item(j).DoIt();
                } catch (e) {}
                try {
                    data.system.fso.DeleteFile(folder + "\\" + shortcuts[i], !0);
                } catch (e) {}
            }
        }
    }, {
        ID: "4",
        Name: "Opera",
        URL: "http://download.drp.su/soft/OperaBlink.exe",
        Icon: "http://download.drp.su/soft/Opera.png",
        Publisher: "Opera Software",
        Rating: 5,
        Checked: !0,
        Version: "50.0.2762.45",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2018-01-10",
        Registry_32: "HKCU\\Software\\Opera Software\\UUID",
        CheckInstalled: function(data) {
            return data.diagnostics.checkSoft.checkSoftInstalled(/^Opera /i);
        },
        Keys: "-install -silent -launchopera=1 -setdefaultbrowser=1",
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Opera Web Browser is a free web browser that originally started as a research project back in 1995 and today continues to be a fast, safe and secure web browser.",
                ru: "Популярный веб-браузер со встроенным шифрованием соединений через VPN, блокировщиком рекламы, менеджером батареи, всплывающими подсказками YouTube, поддержкой быстрого набора, расширениями - и все это в гибко настраиваевомом интерфейсе."
            },
            eula: "http://www.opera.com/eula/computers",
            isDeferred: !0
        },
        Description: {
            en: "Opera — fast, secure, easy-to-use browser",
            ru: "Opera — быстрый, безопасный и легкий в использовании браузер"
        },
        Targeting: function(data) {
            if (data.os.OSVersion < 6) return !1;
            if (!data.os.is64) return !0;
            var k = 2592e6 / Math.log(4), mid = new Date(2017, 10, 1).valueOf(), x = new Date().valueOf();
            return softRandomSeed >= logistic(x, mid, k);
        },
        Lang: "",
        IsPartner: !0,
        priority: 30,
        afterHook: function(data) {
            for (var folder = data.system.WshShell.ExpandEnvironmentStrings("%appdata%\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar"), shortcuts = [ "facebook.lnk" ], i = 0; i < shortcuts.length; i++) {
                try {
                    for (var verbs = data.system.objShell.Namespace(folder).ParseName(shortcuts[i]).Verbs(), j = 0; j < verbs.Count; j++) if (/unpin|открепить/i.test(verbs.Item(j).name)) verbs.Item(j).DoIt();
                } catch (e) {}
                try {
                    data.system.fso.DeleteFile(folder + "\\" + shortcuts[i], !0);
                } catch (e) {}
            }
        }
    }, {
        ID: "5",
        Name: "Opera XP",
        URL: "http://download.drp.su/soft/OperaXP.exe",
        Icon: "http://download.drp.su/soft/OperaXP.png",
        Publisher: "Opera Software",
        Rating: 5,
        Checked: !0,
        Version: "36.0.2130.32",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-05-24",
        Registry_32: "HKCU\\Software\\Opera Software\\Last Stable Install Path",
        Keys: "-install -silent -launchopera=1 -setdefaultbrowser=1",
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Opera Web Browser is a free web browser that originally started as a research project back in 1995 and today continues to be a fast, safe and secure web browser.",
                ru: "Популярный веб-браузер со встроенным шифрованием соединений через VPN, блокировщиком рекламы, менеджером батареи, всплывающими подсказками YouTube, поддержкой быстрого набора, расширениями - и все это в гибко настраиваевомом интерфейсе."
            },
            isDeferred: !0
        },
        eula: "http://www.opera.com/eula/computers",
        policy: "http://www.opera.com/privacy",
        Description: {
            en: "Opera — fast, secure, easy-to-use browser",
            ru: "Opera — быстрый, безопасный и легкий в использовании браузер"
        },
        Targeting: function(data) {
            return data.os.OSVersion < 6;
        },
        Lang: "",
        IsPartner: !0,
        priority: 30
    }, {
        ID: "6",
        Name: "Firefox",
        URL: "http://download.drp.su/soft/Firefox.exe",
        Icon: "http://download.drp.su/soft/Firefox.png",
        Publisher: "Mozilla Corporation",
        Rating: 5,
        Checked: !0,
        Version: "54.0",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-06-20",
        Registry_32: "HKLM\\Software\\mozilla.org\\Mozilla\\CurrentVersion",
        Keys: "-ms -ira",
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Mozilla Firefox is a fast, free and Open Source web browser that provides you with a highly customizable interface with numerous third-party add-ons, as well as Mozilla authored add-ons to choose from.",
                ru: "Один из самых популярных и быстрых интернет-браузеров, обеспечивающий защиту от вирусов, всплывающих окон и шпионских программ в простом и удобном интерфейсе с богатым выбором настроек для персонализации и различными плагинами."
            },
            eula: "https://www.mozilla.org/en-US/about/legal/eula/"
        },
        Description: {
            en: "Firefox — browser, committed to you, your privacy and an open Web",
            ru: "Firefox — браузер, преданный вам, вашей приватности и открытому Интернету"
        },
        IsPartner: !0,
        Lang: "",
        priority: 21
    }, {
        ID: "7",
        Name: "Yandex.Browser (Russian) + настройки Яндекса",
        URL: "http://download.drp.su/updates/ya-downloader/downloader_browser.exe",
        Icon: "http://download.drp.su/soft/Yandex.png",
        Publisher: "YANDEX LLC",
        Rating: 5,
        Checked: !0,
        Version: "17.6.1",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2016-07-03",
        Registry_32: "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YandexBrowser\\DisplayName",
        CheckInstalled: function(data) {
            return data.system.RegExists("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YandexBrowser\\DisplayName") && data.system.RegExists("HKCU\\Software\\drpsu\\YandexInstalled");
        },
        Keys: '--sync --partner drpsu --distr /quiet /msicl "YABM=y YABROWSER=y YAHOMEPAGE=y YAQSEARCH=y YBSENDSTAT=n ILIGHT=1 VID="306"" --try 10 /log "%temp%\\YaBrInstall.log"',
        OfflineKeys: '/quiet /msicl "YAHOMEPAGE=y YAQSEARCH=y YABM=y YABROWSER=y YBSENDSTAT=n VID="003""',
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Yandex Browser is another Chrome based browser featuring a fast minimalist interface with unique features like Stealth Mode.",
                ru: "Интуитивно понятный веб-браузер, который позволяет пользователям ускорять загрузку сайтов и видеороликов благодаря турбо-режиму, переводить страницы на разные языки, блокировать опасные сайты, а при скачивании файлов проверяет их на вирусы."
            },
            eula: "https://yandex.ru/legal/browser_agreement/?lang=en"
        },
        Description: {
            en: "Yandex.Browser – a quick and safe web-browser with active security system Protect!",
            ru: "Яндекс.Браузер — быстрый браузер с технологией активной защиты Protect!"
        },
        IsPartner: !0,
        Targeting: function(data) {
            if ("ru" === window.lang) return !0;
            var geo = data.geoip.geoip_country_code.toUpperCase();
            if ("RU" === geo) return !0;
            if ("AZ" === geo) return !0;
            if ("AM" === geo) return !0;
            if ("BY" === geo) return !0;
            if ("KZ" === geo) return !0;
            if ("KG" === geo) return !0;
            if ("MD" === geo) return !0;
            if ("TJ" === geo) return !0;
            if ("TM" === geo) return !0;
            if ("UZ" === geo) return !0;
            if ("UA" === geo) return !0;
            if ("GE" === geo) return !0;
            if ("AB" === geo) return !0;
            if ("OS" === geo) return !0; else return !1;
        },
        Lang: "rus",
        priority: 31,
        afterHook: function(data) {
            for (var folder = data.system.WshShell.ExpandEnvironmentStrings("%appdata%\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar"), shortcuts = [ "Кинопоиск.website" ], i = 0; i < shortcuts.length; i++) {
                try {
                    for (var verbs = data.system.objShell.Namespace(folder).ParseName(shortcuts[i]).Verbs(), j = 0; j < verbs.Count; j++) if (/unpin|открепить/i.test(verbs.Item(j).name)) verbs.Item(j).DoIt();
                } catch (e) {}
                try {
                    data.system.fso.DeleteFile(folder + "\\" + shortcuts[i], !0);
                } catch (e) {}
            }
            try {
                data.system.RegWrite("HKCU\\Software\\drpsu\\YandexInstalled", Date.now());
            } catch (e) {}
        }
    }, {
        ID: "8",
        Name: "Yandex.Browser (USA)",
        URL: "http://download.drp.su/soft/YandexLiteUSA.exe",
        Icon: "http://download.drp.su/soft/Yandex.png",
        Publisher: "YANDEX LLC",
        Rating: 5,
        Checked: !0,
        Version: "17.3.0",
        ReleaseDate: "2016-04-14",
        UpdateDate: "2017-05-25",
        Registry_32: "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YandexBrowser\\DisplayName",
        CheckInstalled: function(data) {
            return data.system.RegExists("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YandexBrowser\\DisplayName") && data.system.RegExists("HKCU\\Software\\drpsu\\YandexInstalled");
        },
        Keys: "--silent --do-not-launch-browser --make-browser-default-after-import",
        OfflineKeys: "--silent --do-not-launch-browser --make-browser-default-after-import",
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Yandex Browser is another Chrome based browser featuring a fast minimalist interface with unique features like Stealth Mode.",
                ru: "Интуитивно понятный веб-браузер, который позволяет пользователям ускорять загрузку сайтов и видеороликов благодаря турбо-режиму, переводить страницы на разные языки, блокировать опасные сайты, а при скачивании файлов проверяет их на вирусы."
            },
            eula: "https://yandex.ru/legal/browser_agreement/?lang=en"
        },
        Description: {
            en: "Yandex.Browser – a quick and safe web-browser with active security system Protect!",
            ru: "Яндекс.Браузер — быстрый браузер с технологией активной защиты Protect!"
        },
        IsPartner: !0,
        Targeting: function(data) {
            if ("en" !== window.lang) return !1; else return "US" === data.geoip.geoip_country_code.toUpperCase();
        },
        Lang: "eng",
        exitCodes: [ 0, 1 ],
        priority: 40,
        afterHook: function(data) {
            try {
                data.system.RegWrite("HKCU\\Software\\drpsu\\YandexInstalled", Date.now());
            } catch (e) {}
        }
    }, {
        ID: "9",
        Name: "Yandex.Browser (Turkish) + Yandex settings",
        URL: "http://download.drp.su/updates/ya-downloader/downloader_browser_tr.exe",
        Icon: "http://download.drp.su/soft/Yandex.png",
        Publisher: "YANDEX LLC",
        Rating: 5,
        Checked: !0,
        Version: "17.6.1",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2016-07-03",
        Registry_32: "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YandexBrowser\\DisplayName",
        CheckInstalled: function(data) {
            return data.system.RegExists("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YandexBrowser\\DisplayName") && data.system.RegExists("HKCU\\Software\\drpsu\\YandexInstalled");
        },
        Keys: '--partner drpsu-turk --distr /quiet /msicl "YAHOMEPAGE=y YAQSEARCH=y YABM=y YABROWSER=y YBSENDSTAT=n ILIGHT=1 VID="001"" --try 10 /log "%temp%\\YaBrTrInstall.log"',
        OfflineKeys: '/quiet /msicl "YAHOMEPAGE=y YAQSEARCH=y YABM=y YABROWSER=y YBSENDSTAT=n VID="003""',
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Yandex Browser is another Chrome based browser featuring a fast minimalist interface with unique features like Stealth Mode.",
                ru: "Интуитивно понятный веб-браузер, который позволяет пользователям ускорять загрузку сайтов и видеороликов благодаря турбо-режиму, переводить страницы на разные языки, блокировать опасные сайты, а при скачивании файлов проверяет их на вирусы."
            },
            eula: "https://yandex.ru/legal/browser_agreement/?lang=en"
        },
        Description: {
            en: "Yandex.Browser – a quick and safe web-browser with active security system Protect!",
            ru: "Яндекс.Браузер — быстрый браузер с технологией активной защиты Protect!"
        },
        IsPartner: !0,
        Targeting: function(data) {
            if ("ru" === window.lang) return !1; else return "TR" === data.geoip.geoip_country_code.toUpperCase();
        },
        Lang: "rus",
        priority: 41,
        afterHook: function(data) {
            try {
                data.system.RegWrite("HKCU\\Software\\drpsu\\YandexInstalled", Date.now());
            } catch (e) {}
        }
    }, {
        ID: "10",
        Name: "PDF-XChange Viewer",
        URL: "http://download.drp.su/soft/PDFViewer.exe",
        Icon: "http://download.drp.su/soft/PDFViewer.png",
        Publisher: "Tracker Software Products Ltd",
        Rating: 4,
        Checked: !1,
        Version: "2.5.322.7",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-08-14",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{A278382D-4F1B-4D47-9885-8523F7261E8D}_is1\\DisplayName",
        Keys: "/VERYSILENT /NORESTART /SUPPRESSMSGBOXES",
        Category: "Viewer",
        Description: {
            en: "PDF-XChange Viewer — view, create, annotate, and Print PDF Files",
            ru: "PDF-XChange Viewer — безопасная программа для чтения и редактирования PDF"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1011
    }, {
        ID: "11",
        Name: "K-Lite Codec Pack",
        URL: "http://download.drp.su/soft/K-Lite.exe",
        Icon: "http://download.drp.su/soft/K-Lite.png",
        Publisher: "KLCP",
        Rating: 5,
        Checked: !1,
        Version: "13.5.5",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-09-25",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\KLiteCodecPack_is1\\DisplayName",
        Keys: "/VERYSILENT /NORESTART /SUPPRESSMSGBOXES",
        Category: "Viewer",
        Description: {
            en: "K-Lite Codec Pack contains everything you need to play all popular audio and video file formats",
            ru: "K-Lite Codec Pack позволит проигрывать любые форматы аудио и видео файлов"
        },
        IsPartner: !1,
        Lang: "[ru,tt,uk,az,be,uz,hy,ka]",
        priority: 1021
    }, {
        ID: "12",
        Name: "Skype",
        URL: "http://download.drp.su/soft/SkypeXP.exe",
        Icon: "http://download.drp.su/soft/Skype.png",
        Publisher: "Skype Technologies S.A.",
        Rating: 4,
        Checked: !1,
        Version: "7.36.0.101",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-05-09",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{FC965A47-4839-40CA-B618-18F486F042C6}\\DisplayName",
        Keys: "/VERYSILENT /NOLAUNCH /NOGOOGLE /NOSTARTUP /NOPLUGINS",
        Category: "Messenger",
        Description: {
            en: "Skype keeps the world talking, for free",
            ru: "Skype — бесплатное общение без ограничений"
        },
        Targeting: function(data) {
            return data.os.OSVersion < 6;
        },
        IsPartner: !1,
        Lang: "",
        priority: 1031
    }, {
        ID: "13",
        Name: "Skype",
        URL: "http://download.drp.su/soft/Skype.exe",
        Icon: "http://download.drp.su/soft/Skype.png",
        Publisher: "Skype Technologies S.A.",
        Rating: 4,
        Checked: !1,
        Version: "7.40.0.104",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-11-08",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{FC965A47-4839-40CA-B618-18F486F042C6}\\DisplayName",
        Keys: "/VERYSILENT /NOLAUNCH /NOGOOGLE /NOSTARTUP /NOPLUGINS",
        Category: "Messenger",
        Description: {
            en: "Skype keeps the world talking, for free",
            ru: "Skype — бесплатное общение без ограничений"
        },
        Targeting: function(data) {
            return data.os.OSVersion >= 6;
        },
        IsPartner: !1,
        Lang: "",
        priority: 1031
    }, {
        ID: "16",
        Name: "uTorrent",
        URL: "http://download.drp.su/soft/uTorrent.exe",
        Icon: "http://download.drp.su/soft/uTorrent.png",
        Publisher: "BitTorrent, Inc.",
        Rating: 4,
        Checked: !1,
        Version: "3.4.2.35702",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-02-15",
        Registry_32: "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\uTorrent\\DisplayName",
        Keys: "/VERYSILENT /NORESTART /SUPPRESSMSGBOXES",
        Category: "Internet",
        Description: {
            en: "uTorrent — elegant and efficient torrent downloading",
            ru: "uTorrent — простой, понятный и эффективный торрент-клиент"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1041
    }, {
        ID: "18",
        Name: "PotPlayer",
        URL: "http://download.drp.su/soft/PotPlayer.exe",
        Icon: "http://download.drp.su/soft/PotPlayer.png",
        Publisher: "Kakao Corporation",
        Rating: 5,
        Checked: !1,
        Version: "1.7.5545",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-11-24",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\PotPlayer\\DisplayName",
        Keys: "/S /Video-1 /Audio-0 /Sub-1 /Lists-0 /Shortcut-1010110 /AutoPlayVideo-1 /AutoPlayAudio-0 /ImpIni",
        Category: "Player",
        Description: {
            en: "PotPlayer — universal multimedia player with integrated codecs",
            ru: "PotPlayer — универсальный медиа проигрыватель со встроенными кодеками"
        },
        IsPartner: !1,
        Lang: "rus",
        priority: 1051
    }, {
        ID: "20",
        Name: "AIMP",
        URL: "http://download.drp.su/soft/AIMP.exe",
        Icon: "http://download.drp.su/soft/AIMP.png",
        Publisher: "Artem Izmaylov",
        Rating: 5,
        Checked: !1,
        Version: "4.50.2058",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-12-27",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\AIMP\\DisplayName",
        Keys: '/AUTO="%PROGRAMFILES%\\AIMP"',
        Category: "Player",
        Description: {
            en: "AIMP — simple and high-quality audio player",
            ru: "AIMP — простой и качественный аудио плеер"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1061
    }, {
        ID: "21",
        Name: "FastStone Image Viewer",
        URL: "http://download.drp.su/soft/FSImage.exe",
        Icon: "http://download.drp.su/soft/FSImage.png",
        Publisher: "FastStone Soft",
        Rating: 4,
        Checked: !1,
        Version: "6.4",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-09-14",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\FastStone Image Viewer\\DisplayName",
        Keys: "/S",
        Category: "Viewer",
        Description: {
            en: "FastStone Image Viewer — image browser, converter and editor",
            ru: "FastStone Image Viewer — программа для просмотра и редактирования изображений"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1071
    }, {
        ID: "22",
        Name: "TeamViewer",
        URL: "http://download.drp.su/soft/TeamViewer.exe",
        Icon: "http://download.drp.su/soft/TeamViewer.png",
        Publisher: "TeamViewer GmbH",
        Rating: 5,
        Checked: !1,
        Version: "13.0.6447",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2017-12-18",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\TeamViewer\\DisplayName",
        Keys: "/S",
        Category: "Internet",
        Description: {
            en: "TeamViewer — tool for remote support, access and online meeting",
            ru: "TeamViewer — инструмент удалённого доступа и поддержки через интернет"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1081
    }, {
        ID: "23",
        Name: "AOMEI Backupper",
        URL: "http://download.drp.su/soft/Backupper.exe",
        Icon: "http://download.drp.su/soft/Backupper.png",
        Publisher: "AOMEI Technology Co., Ltd.",
        Rating: 5,
        Checked: !1,
        Version: "3.5",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2016-12-28",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{A83692F5-3E9B-4E95-9E7E-B5DF5536C09F}_is1\\DisplayName",
        Keys: "/VERYSILENT /NORESTART /SUPPRESSMSGBOXES",
        Category: "Backup",
        Description: {
            en: "AOMEI Backupper — the simplest FREE PC backupper",
            ru: "AOMEI Backupper — простой и бесплатный инструмент для создания бэкапов"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1091
    }, {
        ID: "24",
        Name: "Adobe Flash Player",
        URL: "http://download.drp.su/soft/FlashPlayer.exe",
        Icon: "http://download.drp.su/soft/FlashPlayer.png",
        Publisher: "Adobe Systems Incorporated",
        Rating: 5,
        Checked: !1,
        Version: "28.0.0.137",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2018-01-09",
        Registry_32: "HKLM\\Software\\MozillaPlugins\\@adobe.com/FlashPlayer\\Description",
        Keys: "-y -gm2 -fm0",
        Category: "Viewer",
        Description: {
            en: "Adobe Flash Player",
            ru: "Adobe Flash Player"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1101
    }, {
        ID: "26",
        Name: "Yandex.Elements",
        URL: "http://download.drp.su/updates/ya-downloader/downloader_elements.exe",
        Icon: "http://download.drp.su/soft/YandexPack.png",
        Publisher: "YANDEX LLC",
        Rating: 4,
        Checked: !0,
        Version: "8.9",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2015-10-26",
        Registry_32: "1HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{12f34aee-538c-44d5-b33a-12213b7e0197}\\DisplayName",
        Keys: '--partner drpsu --distr /quiet /msicl "YAHOMEPAGE=y YAQSEARCH=y YABM=y YABROWSER=n YBSENDSTAT=n VID="002"" --try 10 /log "%temp%\\YaElInstall.log"',
        OfflineKeys: '/quiet /msicl "YAHOMEPAGE=y YAQSEARCH=y YABM=n YABROWSER=n YBSENDSTAT=n VID="004""',
        Category: "Browser",
        confirmPopup: {
            description: {
                en: "Set of extensions for Mozilla Firefox, Google Chrome and Opera browsers, which makes it easier to work with Yandex services and Internet. Elements contains visual tabs, extensions from Yandex services like Mail, Disk, Music, Weather, etc.",
                ru: "Набор расширений для браузеров Mozilla Firefox, Google Chrome и Opera, который делает работу с сервисами Яндекса и интернетом более комфортной. Элементы включают визуальные закладки, расширения от сервисов Яндекса — Почты, Диска, Музыки, Погоды и т.д."
            },
            eula: "https://yandex.ru/legal/desktop_software_agreement/"
        },
        IsPartner: !0,
        Description: {
            en: "Yandex.Elements extensions",
            ru: "Расширение Яндекс.Элементы"
        },
        Targeting: function(data) {
            var geo = data.geoip.geoip_country_code.toUpperCase();
            if (!window.isCamaro || window.isOnline) return !1;
            if ("ru" === window.lang) return !0;
            if ("RU" === geo) return !0;
            if ("AZ" === geo) return !0;
            if ("AM" === geo) return !0;
            if ("BY" === geo) return !0;
            if ("KZ" === geo) return !0;
            if ("KG" === geo) return !0;
            if ("MD" === geo) return !0;
            if ("TJ" === geo) return !0;
            if ("TM" === geo) return !0;
            if ("UZ" === geo) return !0;
            if ("UA" === geo) return !0;
            if ("GE" === geo) return !0;
            if ("AB" === geo) return !0;
            if ("OS" === geo) return !0; else return !1;
        },
        Lang: "rus"
    }, {
        ID: "27",
        Name: "Yandex.Elements (Turkish)",
        URL: "http://download.drp.su/updates/ya-downloader/downloader_browser_tr.exe",
        Icon: "http://download.drp.su/soft/YandexPack.png",
        Publisher: "YANDEX LLC",
        Rating: 4,
        Checked: !0,
        Version: "8.9",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2015-10-26",
        Registry_32: "1HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{12f34aee-538c-44d5-b33a-12213b7e0197}\\DisplayName",
        Keys: '--partner drpsu-turk --distr /passive /msicl "YAHOMEPAGE=y YAQSEARCH=y YABM=y YABROWSER=y YBSENDSTAT=n VID="002"" --try 10 /log "%temp%\\YaBrTrInstall.log"',
        OfflineKeys: '/quiet /msicl "YAHOMEPAGE=y YAQSEARCH=y YABM=n YABROWSER=n YBSENDSTAT=n VID="004""',
        Category: "Browser",
        IsPartner: !0,
        Description: {
            en: "Yandex.Elements extensions",
            ru: "Расширение Яндекс.Элементы"
        },
        Targeting: function(data) {
            if (!window.isCamaro || window.isOnline) return !1;
            if ("ru" === window.lang) return !1; else return "TR" === data.geoip.geoip_country_code.toUpperCase();
        },
        Lang: ""
    }, {
        ID: "28",
        Name: "Avast Free Antivirus",
        URL: "http://download.drp.su/soft/AvastAntivirusA.exe",
        Icon: "http://download.drp.su/soft/AvastAntivirus.png",
        Publisher: "AVAST Software",
        Rating: 5,
        Checked: function(data) {
            if (data.antivirus) if (data.antivirus.hasAntiviruses() && data.antivirus.scanAntiviruses().find(function(antivirus) {
                return /avast|avg/i.test(antivirus.displayName);
            })) return !1;
            return !0;
        },
        Version: "12.3.2280",
        ReleaseDate: "2016-09-22",
        UpdateDate: "2016-09-22",
        Registry_32: "HKLM\\SOFTWARE\\AVAST Software\\Avast\\Version",
        CheckInstalled: function(data) {
            return data.system.RegExists("HKLM\\SOFTWARE\\AVAST Software\\Avast\\Version") || data.diagnostics.checkSoft.checkSoftInstalled(/Avast/i) || data.system.RegExists("HKLM\\SOFTWARE\\AVG\\Antivirus\\Version") || data.system.RegExists("HKLM\\SOFTWARE\\AVG\\AV\\Dir") || data.diagnostics.checkSoft.checkSoftInstalled(/AVG/i);
        },
        Keys: "/silent",
        Category: "Antivirus",
        protect: !0,
        confirmPopup: {
            description: {
                en: "Avast! Free Antivirus is the perfect package of applications for people who send e-mails and surf popular websites to protect their computers from a possible virus infection or other malware threats.",
                ru: "Бесплатное решение для защиты от вредоносных программ, поставляемое в удобном пакете с инструментами для обеспечения всесторонней безопасности ПК: защита браузера и почты, шифрование соединений через VPN, обслуживание Windows и т.д."
            },
            eula: "https://www.avast.com/eula"
        },
        IsPartner: !0,
        Description: {
            en: "Avast Free Antivirus — free security has never been so lightweight, intuitive, and powerful",
            ru: "Avast Free Antivirus — самый популярный и полностью бесплатный антивирус со всеми необходимым функциями для надежной защиты компьютера и данных"
        },
        Targeting: function(data) {
            if ("RU" === data.geoip.geoip_country_code.toUpperCase()) return !0; else return !1;
        },
        Lang: "rus",
        priority: 1200,
        installTimeout: 6e5,
        singleOnly: !0
    }, {
        ID: "29",
        Name: "Avast Free Antivirus Worldwide",
        URL: "http://download.drp.su/soft/AvastAntivirusWorldwideA.exe",
        Icon: "http://download.drp.su/soft/AvastAntivirus.png",
        Publisher: "AVAST Software",
        Rating: 5,
        Checked: function(data) {
            if (data.antivirus) if (data.antivirus.hasAntiviruses() && data.antivirus.scanAntiviruses().find(function(antivirus) {
                return /avast|avg/i.test(antivirus.displayName);
            })) return !1;
            var geo = data.geoip.geoip_country_code.toUpperCase();
            if ("UA" === geo) return Math.random() <= .7;
            if ("IN" === geo) return Math.random() <= .5;
            if ("EG" === geo) return Math.random() <= .25;
            if ("TR" === geo) return Math.random() <= .7;
            if ("PK" === geo) return Math.random() <= .15;
            if ("KZ" === geo) return Math.random() <= .3;
            if ("DZ" === geo) return Math.random() <= .001;
            if ("PH" === geo) return Math.random() <= .6;
            if ("IQ" === geo) return Math.random() <= .35;
            if ("VN" === geo) return Math.random() <= .001;
            if ("MD" === geo) return Math.random() <= .9;
            if ("NG" === geo) return Math.random() <= .001;
            if ("VE" === geo) return Math.random() <= .001;
            if ("GE" === geo) return Math.random() <= .5;
            if ("TN" === geo) return Math.random() <= .001;
            if ("TZ" === geo) return Math.random() <= .25;
            if ("AZ" === geo) return Math.random() <= .5;
            if ("GH" === geo) return Math.random() <= .7;
            if ("KE" === geo) return Math.random() <= .27;
            if ("JO" === geo) return Math.random() <= .7;
            if ("MN" === geo) return Math.random() <= .3;
            if ("LK" === geo) return Math.random() <= .001;
            if ("PS" === geo) return Math.random() <= .001;
            if ("SN" === geo) return Math.random() <= .001;
            if ("GR" === geo) return Math.random() <= .001;
            if ("DO" === geo) return Math.random() <= .001;
            if ("KG" === geo) return Math.random() <= .001;
            if ("MZ" === geo) return Math.random() <= .001;
            if ("QA" === geo) return Math.random() <= .001;
            if ("BO" === geo) return Math.random() <= .001;
            if ("CM" === geo) return Math.random() <= .3;
            if ("UZ" === geo) return Math.random() <= .001;
            if ("HR" === geo) return Math.random() <= .05;
            if ("LR" === geo) return Math.random() <= .3;
            if ("NP" === geo) return Math.random() <= .001;
            if ("EC" === geo) return Math.random() <= .001;
            if ("CI" === geo) return Math.random() <= .3;
            if ("CN" === geo) return !1;
            if ("HK" === geo) return !1; else return !0;
        },
        Version: "12.3.2280",
        ReleaseDate: "2017-02-17",
        UpdateDate: "2017-02-17",
        Registry_32: "HKLM\\SOFTWARE\\AVAST Software\\Avast\\Version",
        CheckInstalled: function(data) {
            return data.system.RegExists("HKLM\\SOFTWARE\\AVAST Software\\Avast\\Version") || data.diagnostics.checkSoft.checkSoftInstalled(/Avast/i) || data.system.RegExists("HKLM\\SOFTWARE\\AVG\\Antivirus\\Version") || data.system.RegExists("HKLM\\SOFTWARE\\AVG\\AV\\Dir") || data.diagnostics.checkSoft.checkSoftInstalled(/AVG/i);
        },
        Keys: "/silent",
        Category: "Antivirus",
        protect: !0,
        confirmPopup: {
            description: {
                en: "Avast! Free Antivirus is the perfect package of applications for people who send e-mails and surf popular websites to protect their computers from a possible virus infection or other malware threats.",
                ru: "Бесплатное решение для защиты от вредоносных программ, поставляемое в удобном пакете с инструментами для обеспечения всесторонней безопасности ПК: защита браузера и почты, шифрование соединений через VPN, обслуживание Windows и т.д."
            },
            eula: "https://www.avast.com/eula"
        },
        IsPartner: !0,
        Description: {
            en: "Avast Free Antivirus — free security has never been so lightweight, intuitive, and powerful",
            ru: "Avast Free Antivirus — самый популярный и полностью бесплатный антивирус со всеми необходимым функциями для надежной защиты компьютера и данных"
        },
        Targeting: function(data) {
            if ("RU" !== data.geoip.geoip_country_code.toUpperCase()) return !0; else return !1;
        },
        Lang: "eng",
        priority: 1201,
        installTimeout: 6e5,
        singleOnly: !0
    }, {
        ID: "40",
        Name: "WinRAR (English)",
        URL: "http://download.drp.su/soft/WinRARx86Eng.exe",
        Icon: "http://download.drp.su/soft/WinRAR.png",
        Publisher: "Alexander Roshal",
        Rating: 4,
        Checked: !1,
        Version: "5.50",
        ReleaseDate: "2015-12-01",
        UpdateDate: "2017-08-18",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WinRAR archiver\\DisplayName",
        Keys: "/S",
        Targeting: function(data) {
            if ("ru" !== window.lang && "az" !== window.lang && "be" !== window.lang && "hy" !== window.lang && "tt" !== window.lang && "uk" !== window.lang && "uz" !== window.lang && "pt_br" !== window.lang) return !0; else return !1;
        },
        Category: "Archiver",
        Description: {
            en: "WinRAR — powerful archive manager",
            ru: "WinRAR — мощная программа для создания и управления архивами"
        },
        IsPartner: !1,
        Lang: "eng",
        priority: 71
    }, {
        ID: "41",
        Name: "WinRAR (Russian)",
        URL: "http://download.drp.su/soft/WinRARx86Rus.exe",
        Icon: "http://download.drp.su/soft/WinRAR.png",
        Publisher: "Alexander Roshal",
        Rating: 4,
        Checked: !1,
        Version: "5.50",
        ReleaseDate: "2015-12-01",
        UpdateDate: "2017-08-18",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WinRAR archiver\\DisplayName",
        Keys: "/S",
        Targeting: function(data) {
            if ("ru" === window.lang) return !0;
            if ("az" === window.lang) return !0;
            if ("be" === window.lang) return !0;
            if ("hy" === window.lang) return !0;
            if ("tt" === window.lang) return !0;
            if ("uk" === window.lang) return !0;
            if ("uz" === window.lang) return !0; else return !1;
        },
        Category: "Archiver",
        Description: {
            en: "WinRAR — powerful archive manager",
            ru: "WinRAR — мощная программа для создания и управления архивами"
        },
        IsPartner: !1,
        Lang: "rus",
        priority: 81
    }, {
        ID: "42",
        Name: "WinRAR (Portuguese)",
        URL: "http://download.drp.su/soft/WinRARx86Br.exe",
        Icon: "http://download.drp.su/soft/WinRAR.png",
        Publisher: "Alexander Roshal",
        Rating: 4,
        Checked: !1,
        Version: "5.50",
        ReleaseDate: "2015-12-01",
        UpdateDate: "2017-08-18",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WinRAR archiver\\DisplayName",
        Keys: "/S",
        Targeting: function(data) {
            if ("pt_br" === window.lang) return !0; else return !1;
        },
        Category: "Archiver",
        Description: {
            en: "WinRAR — powerful archive manager",
            ru: "WinRAR — мощная программа для создания и управления архивами"
        },
        IsPartner: !1,
        Lang: "pt_br",
        priority: 91
    }, {
        ID: "67",
        Name: "DriverPack Cloud New",
        URL: "http://download.drp.su/soft/DriverPack-Cloud-New.exe",
        Icon: "http://download.drp.su/soft/DriverPack.png",
        Publisher: "DriverPack",
        Rating: 5,
        Checked: function(data) {
            if (data.system.RegExists("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\DriverPack Notifier\\DisplayName")) return !1; else return !0;
        },
        Version: "1.0",
        ReleaseDate: "2017-12-20",
        UpdateDate: "2017-12-20",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\DriverPack Cloud\\DisplayName",
        Keys: "/S /channel=Beetle",
        Targeting: function(data) {
            if (data.os.OSVersion < 6) return !1;
            if ("ru" !== window.lang) return !1; else return softRandomSeed >= 1;
        },
        Category: "Drivers",
        confirmPopup: {
            description: {
                en: "New program from original DriverPack developers team. It is designed for computer perfomance improvement without any additional costs or hardware upgrade.",
                ru: 'Новая программа от команды разработчиков оригинального DriverPack, предназначенная для повышения производительности компьютера без каких-либо дополнительных трат или обновления "железа".'
            },
            eula: "drp.su/en/cloud/terms-of-use"
        },
        Description: {
            en: "DriverPack Cloud improves performance and stability of your PC",
            ru: "DriverPack Cloud — повышение производительности и стабильности компьютера"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1002
    }, {
        ID: "68",
        Name: "DriverPack Cloud",
        URL: "http://download.drp.su/soft/DriverPack-Cloud.exe",
        Icon: "http://download.drp.su/soft/DriverPack.png",
        Publisher: "DriverPack",
        Rating: 5,
        Checked: function(data) {
            if (data.system.RegExists("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\DriverPack Notifier\\DisplayName")) return !1; else return !0;
        },
        Version: "1.0",
        ReleaseDate: "2017-08-21",
        UpdateDate: "2017-08-21",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\DriverPack Cloud\\DisplayName",
        Keys: "",
        Targeting: function(data) {
            if (data.os.OSVersion < 6) return !1;
            if ("ru" !== window.lang) return !1; else return softRandomSeed < 1;
        },
        Category: "Drivers",
        Description: {
            en: "DriverPack Cloud monitors your PC health and drivers relevance",
            ru: "DriverPack Cloud проверяет состояние компьютера и актуальность драйверов"
        },
        IsPartner: !1,
        Lang: "",
        priority: 2
    }, {
        ID: "69",
        Name: "DriverPack Notifier",
        URL: "http://download.drp.su/soft/DriverPack-Notifier.exe",
        Icon: "http://download.drp.su/soft/DriverPack.png",
        Publisher: "DriverPack",
        Rating: 5,
        Checked: !0,
        Version: "2.0",
        ReleaseDate: "2015-10-08",
        UpdateDate: "2015-12-18",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\DriverPack Notifier\\DisplayName",
        Keys: "",
        Targeting: function(data) {
            if (data.os.OSVersion < 6) return !0;
            if ("ru" === window.lang) return !1;
            if (data.system.RegExists("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\DriverPack Cloud\\DisplayName")) return !1; else return !0;
        },
        Category: "Drivers",
        Description: {
            en: "DriverPack Notifier monitors your PC health and drivers relevance",
            ru: "DriverPack Notifier проверяет состояние компьютера и актуальность драйверов"
        },
        IsPartner: !1,
        Lang: "",
        priority: 2
    }, {
        ID: "71",
        Name: "DirectX 9.0c",
        URL: "http://download.drp.su/soft/DirectX.exe",
        Icon: "http://download.drp.su/soft/DirectX.png",
        Publisher: "Microsoft Corporation",
        Rating: 5,
        Checked: !0,
        Version: "9.0c",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2016-02-03",
        Keys: "",
        Targeting: function(data) {
            if (data.system.fso.FileExists(data.system.WshShell.ExpandEnvironmentStrings("%windir%\\Microsoft.NET\\DirectX for Managed Code\\1.0.2911.0\\Microsoft.DirectX.Direct3DX.dll"))) return !1; else return !0;
        },
        Category: "Drivers",
        Description: {
            en: "DirectX lets you to run old games on your pc",
            ru: "DirectX — набор файлов, необходимый для запуска старых игр"
        },
        IsPartner: !1,
        Lang: "",
        priority: 1131,
        exitCodes: [ 0, 2 ]
    }, {
        ID: "72",
        Name: "Microsoft Visual C++",
        URL: "http://download.drp.su/soft/VisualCplus.exe",
        Icon: "http://download.drp.su/soft/VisualCplus.png",
        Publisher: "Microsoft Corporation",
        Rating: 5,
        Checked: !1,
        Version: "2005-2018",
        ReleaseDate: "2014-07-30",
        UpdateDate: "2018-01-16",
        Registry_32: "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}\\DisplayName",
        Keys: "",
        Category: "Drivers",
        Description: {
            en: "Microsoft Visual C++ packages are needed for proper work of some programs",
            ru: "Microsoft Visual C++ — набор файлов для корректной работы некоторых программ"
        },
        IsPartner: !1,
        Lang: "",
        singleOnly: !0,
        priority: 1,
        installTimeout: 18e5,
        bits: !0
    }, {
        ID: "73",
        Name: "System Libraries",
        URL: "http://download.drp.su/soft/RuntimePack.exe",
        Icon: "http://download.drp.su/soft/RuntimePack.png",
        Publisher: "Microsoft Corporation",
        Rating: 5,
        Checked: !0,
        Version: "17.3.14",
        ReleaseDate: "2015-12-07",
        UpdateDate: "2017-03-19",
        Registry_32: "",
        Keys: "-y -gm2 -fm0",
        Targeting: function(data) {
            if (data.system.fso.FileExists(data.system.WshShell.ExpandEnvironmentStrings("%windir%\\System\\Vbrun300.dll"))) return !1; else return !0;
        },
        Category: "Drivers",
        Description: {
            en: "System Libraries are needed for proper work of some drivers",
            ru: "System Libraries — набор системных библиотек для корректной работы некоторых драйверов"
        },
        Lang: "",
        IsPartner: !1,
        priority: 1141
    }, {
        ID: "74",
        Name: ".NET Framework",
        URL: "http://download.drp.su/soft/DotNet.exe",
        Icon: "http://download.drp.su/soft/DotNet.png",
        Publisher: "Microsoft Corporation",
        Rating: 5,
        Checked: !0,
        Version: "4.7.1",
        ReleaseDate: "2015-12-07",
        UpdateDate: "2017-11-15",
        Registry_32: "HKCU\\Software\\DRP\\.NET Framework\\NT-Version",
        Keys: "",
        Category: "Drivers",
        Description: {
            en: ".Net Framework is needed for proper work of some programs",
            ru: ".Net Framework необходим для запуска некоторых программ"
        },
        Targeting: function(data) {
            return data.os.OSVersion >= 6;
        },
        Lang: "",
        IsPartner: !1,
        priority: 1151,
        bits: !0
    }, {
        ID: "75",
        Name: ".NET Framework",
        URL: "http://download.drp.su/soft/DotNetXP.exe",
        Icon: "http://download.drp.su/soft/DotNet.png",
        Publisher: "Microsoft Corporation",
        Checked: !0,
        Version: "1.1-4.0",
        ReleaseDate: "2015-12-07",
        UpdateDate: "2016-07-07",
        Registry_32: "HKCU\\Software\\DRP\\.NET Framework\\XP-Version",
        Keys: "",
        Category: "Drivers",
        Description: {
            en: ".Net Framework is needed for proper work of some programs",
            ru: ".Net Framework необходим для корректной работы некоторых программ"
        },
        Targeting: function(data) {
            return data.os.OSVersion < 6;
        },
        Lang: "",
        IsPartner: !1,
        priority: 1161,
        bits: !0
    }, {
        ID: "910",
        Name: "Asus Tools for Windows XP",
        URL: "http://download.drp.su/tools/AsusXP.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AB5C933E-5C7D-4D30-B314-9C83A49B94BE}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Asus",
            ru: "Драйверные утилиты от Asus"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /asus/i.test(vendor) && 5.1 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "912",
        Name: "Asus Tools for Windows 7",
        URL: "http://download.drp.su/tools/Asus7.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AB5C933E-5C7D-4D30-B314-9C83A49B94BE}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Asus",
            ru: "Драйверные утилиты от Asus"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /asus/i.test(vendor) && 6.1 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "913",
        Name: "Asus Tools for Windows 8",
        URL: "http://download.drp.su/tools/Asus8.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AB5C933E-5C7D-4D30-B314-9C83A49B94BE}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Asus",
            ru: "Драйверные утилиты от Asus"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /asus/i.test(vendor) && 6.2 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "914",
        Name: "Asus Tools for Windows 8.1",
        URL: "http://download.drp.su/tools/Asus81.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AB5C933E-5C7D-4D30-B314-9C83A49B94BE}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Asus",
            ru: "Драйверные утилиты от Asus"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /asus/i.test(vendor) && 6.3 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "915",
        Name: "Asus Tools for Windows 10",
        URL: "http://download.drp.su/tools/Asus10.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AB5C933E-5C7D-4D30-B314-9C83A49B94BE}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Asus",
            ru: "Драйверные утилиты от Asus"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /asus/i.test(vendor) && 10 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "930",
        Name: "Dell Tools for Windows 7",
        URL: "http://download.drp.su/tools/Dell7.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{87CF757E-C1F1-4D22-865C-00C6950B5258}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Dell",
            ru: "Драйверные утилиты от Dell"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /dell/i.test(vendor) && 6.1 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "931",
        Name: "Dell Tools for Windows 8.1",
        URL: "http://download.drp.su/tools/Dell81.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{87CF757E-C1F1-4D22-865C-00C6950B5258}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Dell",
            ru: "Драйверные утилиты от Dell"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /dell/i.test(vendor) && 6.3 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "932",
        Name: "Dell Tools for Windows 10",
        URL: "http://download.drp.su/tools/Dell10.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{87CF757E-C1F1-4D22-865C-00C6950B5258}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Dell",
            ru: "Драйверные утилиты от Dell"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /dell/i.test(vendor) && 10 === osVersion;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "950",
        Name: "Fujitsu Tools for Windows 7-10",
        URL: "http://download.drp.su/tools/FujitsuNT.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2017-02-06",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\InstallShield_{C8E4B31D-337C-483D-822D-16F11441669B}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Fujitsu",
            ru: "Драйверные утилиты от Fujitsu"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /fujitsu/i.test(vendor) && osVersion >= 6;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "960",
        Name: "HP Tools for Windows 7-10",
        URL: "http://download.drp.su/tools/HPNT.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{09D0DB68-90EA-4015-983E-A0BD777D5A02}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by HP",
            ru: "Драйверные утилиты от HP"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /hp/i.test(vendor) && osVersion >= 6;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "965",
        Name: "MSI Tools for Windows x86",
        URL: "http://download.drp.su/tools/MSIx86.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{8B57FEA1-ABC0-4469-9205-856FD0D97C40}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by MSI",
            ru: "Драйверные утилиты от MSI"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor;
            return /notebook/i.test(type) && /msi/i.test(vendor) && !data.os.is64;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "966",
        Name: "MSI Tools for Windows x64",
        URL: "http://download.drp.su/tools/MSIx64.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2016-06-22",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{8B57FEA1-ABC0-4469-9205-856FD0D97C40}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by MSI",
            ru: "Драйверные утилиты от MSI"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor;
            return /notebook/i.test(type) && /msi/i.test(vendor) && data.os.is64;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "980",
        Name: "Toshiba Tools for Windows 7-10",
        URL: "http://download.drp.su/tools/ToshibaNT.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2017-02-06",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\InstallShield_{6F3C8901-EBD3-470D-87F8-AC210F6E5E02}\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Toshiba",
            ru: "Драйверные утилиты от Toshiba"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /toshiba/i.test(vendor) && osVersion >= 6;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    }, {
        ID: "990",
        Name: "Vizio Tools for Windows 7-10",
        URL: "http://download.drp.su/tools/VizioNT.exe",
        Checked: !0,
        Version: "1.0",
        ReleaseDate: "2017-02-06",
        UpdateDate: "2017-02-06",
        Registry_32: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{4F949BD9-1E99-40C7-9102-C67E2D384995}_is1\\DisplayName",
        Keys: "/S",
        Category: "Drivers",
        Description: {
            en: "Driver Utilities by Vizio",
            ru: "Драйверные утилиты от Vizio"
        },
        Targeting: function(data) {
            var type = window.modelData.type, vendor = window.modelData.vendor, osVersion = data.os.OSVersion;
            return /notebook/i.test(type) && /vizio/i.test(vendor) && osVersion >= 6;
        },
        Lang: "",
        IsPartner: !1,
        priority: 9999
    } ];
    try {
        for (var i = 0; i < soft.length; i++) {
            soft[i].CheckedDefaultIf = soft[i].Targeting;
            if ("boolean" == typeof soft[i].Checked) soft[i].CheckedDefault = soft[i].Checked; else soft[i].CheckedDefault = !1;
            if (soft[i].protect && soft[i].confirmPopup) soft[i].protect = {
                popup: soft[i].confirmPopup
            };
        }
    } catch (err) {}
    window.SoftPack.jsonCallback(soft);
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(l) {
        return [ {
            id: "playkey_top_Witcher3demo",
            name: l("games_playkey_top_witcher_3_demo"),
            image: "img/games/games-top-witcher-large.jpg",
            isFreeDemo: !0,
            isTopGame: !0,
            url: "https://playkey.net/ru/intro_witcher3/?utm_source=driverpack&utm_medium=referral&utm_term=witcher3&utm_content=demoplay&utm_campaign=driverpack"
        }, {
            id: "playkey_top_doom_demo",
            name: l("games_playkey_top_doom_demo"),
            image: "img/games/games-top-doom-large.jpg",
            isFreeDemo: !0,
            isTopGame: !0,
            url: "https://playkey.net/ru/intro_doom/?utm_source=driverpack&utm_medium=referral&utm_term=doom&utm_content=demoplay&utm_campaign=driverpack"
        }, {
            id: "playkey_top_hitman_demo",
            name: "Hitman",
            image: "img/games/games-top-hitman.jpg",
            isFreeDemo: !0,
            url: "https://playkey.net/ru/game/Hitman_demo/?utm_source=driverpack&utm_medium=referral&utm_term=Hitman&utm_content=demoplay&utm_campaign=driverpack"
        }, {
            id: "playkey_top_mafia_demo",
            name: "Mafia III",
            image: "img/games/games-top-mafia.jpg",
            isFreeDemo: !0,
            url: "https://playkey.net/ru/game/mafia3_demo/?utm_source=driverpack&utm_medium=referral&utm_term=mafia3&utm_content=demoplay&utm_campaign=driverpack"
        }, {
            id: "playkey_top_sid_meiers_civilization_vi_demo",
            name: l("games_playkey_top_sid_meiers_civilization_vi_demo"),
            image: "img/games/games-top-civilization.jpg",
            isFreeDemo: !0,
            url: "https://playkey.net/ru/game/sid_meiers_civilization_vi_demo/?utm_source=driverpack&utm_medium=referral&utm_term=sid_meiers_civilization_vi&utm_content=demoplay&utm_campaign=driverpack"
        }, {
            id: "playkey_top_Resident_evil_7_Demo",
            name: l("games_playkey_top_resident_evil_7_demo"),
            image: "img/games/games-top-resident-evil.jpg",
            isFreeDemo: !0,
            url: "https://playkey.net/ru/game/Resident_evil_7_Demo/?utm_source=driverpack&utm_medium=referral&utm_term=Resident_evil_7&utm_content=demoplay&utm_campaign=driverpack"
        }, {
            id: "playkey_top_GTA5",
            name: l("games_playkey_top_gta_5"),
            image: "img/games/games-top-gta.jpg",
            isFreeDemo: !1,
            url: "https://playkey.net/ru/game/GTA5/?utm_source=driverpack&utm_medium=referral&utm_campaign=Games",
            originalSeller: "Steam"
        }, {
            id: "playkey_top_overwatch",
            name: l("games_playkey_top_overwatch"),
            image: "img/games/games-top-overwatch.jpg",
            isFreeDemo: !1,
            url: "https://playkey.net/ru/game/overwatch/?utm_source=driverpack&utm_medium=referral&utm_campaign=Games",
            originalSeller: "Battle.net"
        } ];
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    var _os = __webpack_require__(14), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _fixHdpiDisplays = __webpack_require__(796), _fixHdpiDisplays2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_fixHdpiDisplays);
    document.title = document.title + " " + window.version + " " + (!0 ? window.baseVerType : window.verType);
    (0, _localFiles.ensurePath)(_specialFolders.AppData + "\\DRPSu\\Logs");
    (0, _localFiles.ensurePath)(_specialFolders.AppData + "\\DRPSu\\DRIVERS");
    (0, _localFiles.ensurePath)(_specialFolders.AppData + "\\DRPSu\\PROGRAMS");
    if (_os.OSVersion >= 6.1) (0, _fixHdpiDisplays2["default"])();
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    exports.loadLanguage = exports.changeLanguage = undefined;
    var _registry = __webpack_require__(56), _os = __webpack_require__(14), _fso = __webpack_require__(17), regPath = "HKCU\\SOFTWARE\\drpsu\\";
    window.languages = {};
    var load = function(filename) {
        return new Promise(function(resolve) {
            if ("file:" === document.location.protocol) if (!_fso.fso.FileExists(filename)) return resolve();
            var script = document.createElement("script");
            script.src = filename;
            script.type = "text/javascript";
            document.documentElement.insertBefore(script, document.documentElement.lastChild);
            script.onload = script.onerror = function() {
                if (!script.executed) {
                    script.executed = !0;
                    resolve();
                }
            };
            script.onreadystatechange = function() {
                if ("complete" === script.readyState) script.onload();
                if ("loaded" === script.readyState) {
                    setTimeout(script.onload, 0);
                    script.onreadystatechange = null;
                }
            };
        });
    }, loadLanguage = (exports.changeLanguage = window.changeLanguage = function() {
        var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(lang) {
            return regeneratorRuntime.wrap(function(_context) {
                for (;;) switch (_context.prev = _context.next) {
                  case 0:
                    (0, _registry.RegWrite)(regPath + "lang", lang);
                    _context.next = 3;
                    return loadLanguage(lang);

                  case 3:
                  case "end":
                    return _context.stop();
                }
            }, _callee, undefined);
        }));
        return function(_x) {
            return _ref.apply(this, arguments);
        };
    }(), exports.loadLanguage = window.loadLanguage = function() {
        var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(lang) {
            var langQueue, _iterator, _isArray, _i, _ref3, l, language;
            return regeneratorRuntime.wrap(function(_context2) {
                for (;;) switch (_context2.prev = _context2.next) {
                  case 0:
                    if (!lang) lang = getLang();
                    langQueue = [ lang ];
                    if (-1 !== lang.indexOf("-")) langQueue.unshift(lang.split("-")[0]);
                    if (!lang.startsWith("ru") && !lang.startsWith("en")) [ "uk", "az", "by", "hy", "ka" ].some(function(l) {
                        return lang.startsWith(l);
                    }) ? langQueue.unshift("ru") : langQueue.unshift("en");
                    _iterator = langQueue, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                  case 5:
                    if (!_isArray) {
                        _context2.next = 11;
                        break;
                    }
                    if (!(_i >= _iterator.length)) {
                        _context2.next = 8;
                        break;
                    }
                    return _context2.abrupt("break", 21);

                  case 8:
                    _ref3 = _iterator[_i++];
                    _context2.next = 15;
                    break;

                  case 11:
                    _i = _iterator.next();
                    if (!_i.done) {
                        _context2.next = 14;
                        break;
                    }
                    return _context2.abrupt("break", 21);

                  case 14:
                    _ref3 = _i.value;

                  case 15:
                    l = _ref3;
                    if (window.languages[l]) {
                        _context2.next = 19;
                        break;
                    }
                    _context2.next = 19;
                    return load("languages/" + l + ".js");

                  case 19:
                    _context2.next = 5;
                    break;

                  case 21:
                    langQueue = langQueue.filter(function(l) {
                        return window.languages[l];
                    });
                    lang = langQueue[langQueue.length - 1];
                    language = {};
                    langQueue.forEach(function(l) {
                        Object.assign(language, window.languages[l]);
                    });
                    window.lang = lang;
                    window.language = language;
                    Object.entries(language).forEach(function(_ref4) {
                        var key = _ref4[0], value = _ref4[1], el = document.getElementById(key);
                        if (el) el.innerHTML = value;
                    });

                  case 28:
                  case "end":
                    return _context2.stop();
                }
            }, _callee2, undefined);
        }));
        return function(_x2) {
            return _ref2.apply(this, arguments);
        };
    }()), getLang = function() {
        var localeNamePath = "HKCU\\Control Panel\\International\\LocaleName";
        if ((0, _registry.RegExists)(regPath + "lang")) return (0, _registry.RegRead)(regPath + "lang");
        if ((0, _registry.RegExists)(localeNamePath) && _os.OSVersion >= 6) {
            if ("string" == typeof (0, _registry.RegRead)(localeNamePath)) return (0, _registry.RegRead)(localeNamePath).toLowerCase();
        } else {
            if (-1 !== [ 1079, 44, 29740, 2092, 30764, 1068, 25, 1049, 2073, 34, 1058, 1067, 1059 ].indexOf(parseInt((0, 
            _registry.RegRead)("HKCU\\Control Panel\\International\\Locale"), 16))) return "ru";
        }
        return "en";
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var run = function() {
        __webpack_require__(333);
    };
    if (window.__LEGACY_BROWSER__) {
        var doLoad = function() {
            return setTimeout(run, 0);
        };
        if (window.addEventListener) window.addEventListener("load", doLoad, !1); else if (window.attachEvent) window.attachEvent("onload", doLoad); else if (window.onLoad) window.onload = doLoad;
    } else run();
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    function _possibleConstructorReturn(self, call) {
        if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
        return call && ("object" == typeof call || "function" == typeof call) ? call : self;
    }
    function _inherits(subClass, superClass) {
        if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
        subClass.prototype = Object.create(superClass && superClass.prototype, {
            constructor: {
                value: subClass,
                enumerable: !1,
                writable: !0,
                configurable: !0
            }
        });
        if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
    }
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _logs = __webpack_require__(4), _onunload = __webpack_require__(212), _external = __webpack_require__(314), _external2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_external), log = (0, _logs.getLogger)("OHM"), dotNetPaths = [ "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727\\", "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP\\v4\\" ], OHM = function(_External) {
        function OHM() {
            _classCallCheck(this, OHM);
            var options = {
                url: window.downloadEndpoint + "/updates/ohm/openhardwaremonitor.zip",
                downloadPath: _system.AppData + "\\DRPSu\\ohm",
                dirPath: _system.WshShell.CurrentDirectory.split("\\").slice(0, -1).join("\\") + "\\bin\\tools\\openhardwaremonitor",
                exePath: "OpenHardwareMonitor.exe"
            };
            return _possibleConstructorReturn(this, _External.call(this, options));
        }
        _inherits(OHM, _External);
        OHM.prototype.Run = function() {
            var _this2 = this;
            if (this.handler) return Promise.resolve();
            if (dotNetPaths.every(function(dotNetPath) {
                return !(0, _system.RegExists)(dotNetPath);
            })) {
                log.info(".NET Framework not installed", {}, "DotNetNotInstalled", [ "DotNet" ]);
                return Promise.resolve();
            }
            return _External.prototype.Download.call(this).then(function() {
                var exePath = _this2.exePath;
                log.info("executing " + exePath, {
                    exePath: exePath
                }, "executing");
                _this2.handler = _system.WshShell.Exec(exePath);
            })["finally"](function() {
                (0, _onunload.addUnloadListener)(function() {
                    _this2.Stop();
                });
            });
        };
        OHM.prototype.Stop = function() {
            try {
                if (this.handler) {
                    log.info("stopping", {}, "stopping");
                    this.handler.Terminate();
                    delete this.handler;
                }
            } catch (error) {
                log.error("stopping failed", {
                    error: error
                }, "stopping:failed");
            }
        };
        return OHM;
    }(_external2["default"]);
    exports["default"] = new OHM();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    __webpack_require__(352);
    var _bluebird = __webpack_require__(358), _bluebird2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_bluebird);
    window.Promise = _bluebird2["default"];
    var noop = function() {};
    window.console = window.console || {};
    if (!window.console.log) window.console.log = window.echo || noop;
    if (!window.console.warn) window.console.warn = window.echo || noop;
    if (!window.console.error) window.console.error = window.echo || noop;
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        exports.__esModule = !0;
        var _systemScanner = __webpack_require__(65), _systemScanner2 = function(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }(_systemScanner), openSite = function(url) {
            var WshShell = window.WshShell;
            try {
                WshShell.run(url, 1, !1);
            } catch (e) {}
        }, localeSwitch = function(locale, params) {
            if (params[locale]) return params[locale]; else return params["default"];
        };
        exports["default"] = function(locale) {
            return [ {
                id: "Cloud",
                title: l("installation_header_promo_title_cloud"),
                text: l("installation_header_promo_text_cloud"),
                bgImage: "img/installation/banner_cloud-bg.jpg",
                onClick: function() {
                    return openSite("https://drp.su/ru/cloud");
                },
                priority: 0
            }, {
                id: "Avast Free Antivirus",
                softId: "28",
                title: l("installation_header_promo_title_avast"),
                text: l("installation_header_promo_text_avast"),
                bgImage: "img/installation/banner_avast-bg.jpg",
                onClick: function() {
                    return openSite("https://www.avast.ru/free-antivirus-download");
                },
                patchLink: function(link) {
                    return link.replace(/A\.exe$/, "B.exe");
                },
                priority: 0
            }, {
                id: "Avast Free Antivirus",
                softId: "29",
                title: l("installation_header_promo_title_avast"),
                text: l("installation_header_promo_text_avast"),
                bgImage: "img/installation/banner_avast-bg.jpg",
                onClick: function() {
                    return openSite("https://www.avast.com/free-antivirus-download");
                },
                patchLink: function(link) {
                    return link.replace(/A\.exe$/, "C.exe");
                },
                priority: localeSwitch(locale, {
                    ru: 10,
                    en: 10,
                    de: 10,
                    fr: 10,
                    es: 10,
                    "pt-br": 10,
                    "default": 0
                })
            }, {
                id: "Catalog",
                title: l("installation_header_promo_title_catalog"),
                text: l("installation_header_promo_text_catalog"),
                bgImage: localeSwitch(locale, {
                    ru: "img/installation/banner_catalog-bg-ru.jpg",
                    "pt-br": "img/installation/banner_catalog-bg-pt-br.jpg",
                    "default": "img/installation/banner_catalog-bg-en.jpg"
                }),
                onClick: function() {
                    return openSite("https://drp.su/ru/catalog");
                },
                priority: 0
            }, {
                id: "Authorization",
                title: l("installation_header_promo_title_authorization"),
                text: l("installation_header_promo_text_authorization"),
                bgImage: "img/installation/banner_auth-bg.jpg",
                onClick: function() {
                    return openSite("https://vk.com/driverpacksolution?w=wall-29220845_63691");
                },
                priority: 0
            }, {
                id: "Opera",
                softId: "1",
                title: l("installation_header_promo_title_opera"),
                text: l("installation_header_promo_text_opera"),
                bgImage: "img/installation/banner_opera-bg.gif",
                onClick: function() {
                    return openSite("http://www.opera.com/ru/computer/features");
                },
                priority: 35
            }, {
                id: "Opera",
                softId: "1a",
                title: l("installation_header_promo_title_opera"),
                text: l("installation_header_promo_text_opera"),
                bgImage: "img/installation/banner_opera-bg.gif",
                onClick: function() {
                    return openSite("http://www.opera.com/ru/computer/features");
                },
                priority: 35
            }, {
                id: "Opera",
                softId: "2",
                title: l("installation_header_promo_title_opera"),
                text: l("installation_header_promo_text_opera"),
                bgImage: "img/installation/banner_opera-bg.gif",
                onClick: function() {
                    return openSite("http://www.opera.com/ru/computer/features");
                },
                priority: 35
            }, {
                id: "Opera",
                softId: "2a",
                title: l("installation_header_promo_title_opera"),
                text: l("installation_header_promo_text_opera"),
                bgImage: "img/installation/banner_opera-bg.gif",
                onClick: function() {
                    return openSite("http://www.opera.com/ru/computer/features");
                },
                priority: 35
            }, {
                id: "Opera",
                softId: "3",
                title: l("installation_header_promo_title_opera"),
                text: l("installation_header_promo_text_opera"),
                bgImage: "img/installation/banner_opera-bg.gif",
                onClick: function() {
                    return openSite("http://www.opera.com/ru/computer/features");
                },
                priority: 35
            }, {
                id: "Opera",
                softId: "4",
                title: l("installation_header_promo_title_opera"),
                text: l("installation_header_promo_text_opera"),
                bgImage: "img/installation/banner_opera-bg.gif",
                onClick: function() {
                    return openSite("http://www.opera.com/ru/computer/features");
                },
                priority: 35
            }, {
                id: "Opera",
                softId: "5",
                title: l("installation_header_promo_title_opera"),
                text: l("installation_header_promo_text_opera"),
                bgImage: "img/installation/banner_opera-bg.gif",
                onClick: function() {
                    return openSite("http://www.opera.com/ru/computer/features");
                },
                priority: 36
            }, {
                id: "How it works",
                title: l("installation_header_promo_title_how_it_works"),
                text: l("installation_header_promo_text_how_it_works"),
                bgImage: "img/installation/banner_how-it-works-bg.jpg",
                priority: localeSwitch(locale, {
                    ru: 40,
                    "default": 0
                })
            }, {
                id: "Windows 10",
                title: l("installation_header_promo_title_win_10"),
                text: l("installation_header_promo_text_win_10"),
                bgImage: "img/installation/banner_win-10-bg.jpg",
                priority: 0
            }, {
                id: "Social",
                title: l("installation_header_promo_title_social"),
                text: l("installation_header_promo_text_social"),
                bgImage: localeSwitch(locale, {
                    ru: "img/installation/banner_social-bg-ru.jpg",
                    "default": "img/installation/banner_social-bg-en.jpg"
                }),
                priority: 0
            }, {
                id: "DriverPack Protect",
                title: l("installation_header_promo_title_protect"),
                text: l("installation_header_promo_text_protect"),
                onClick: localeSwitch(locale, {
                    ru: function() {
                        return openSite("https://vk.com/driverpacksolution?w=wall-29220845_58256");
                    },
                    "default": undefined
                }),
                bgImage: localeSwitch(locale, {
                    ru: "img/installation/banner_protect-bg-ru.jpg",
                    de: "img/installation/banner_protect-bg-de.jpg",
                    fr: "img/installation/banner_protect-bg-fr.jpg",
                    es: "img/installation/banner_protect-bg-es.jpg",
                    "pt-br": "img/installation/banner_protect-bg-pt-br.jpg",
                    "default": "img/installation/banner_protect-bg-en.jpg"
                }),
                priority: 0
            }, {
                id: "Restore point",
                title: l("installation_header_promo_title_restore"),
                text: l("installation_header_promo_text_restore"),
                bgImage: "img/installation/banner_restore-bg.jpg",
                priority: localeSwitch(locale, {
                    ru: 80,
                    "default": 0
                })
            }, {
                id: "Browsers",
                title: l("installation_header_promo_title_browsers"),
                text: l("installation_header_promo_text_browsers"),
                bgImage: "img/installation/banner_browsers-bg.jpg",
                priority: localeSwitch(locale, {
                    ru: 90,
                    "default": 0
                })
            }, {
                id: "DriverPack for all",
                title: l("installation_header_promo_title_driverpack_for_all"),
                text: l("installation_header_promo_text_driverpack_for_all"),
                bgImage: "img/installation/banner_driverpack-for-all-bg.jpg",
                onClick: function() {
                    return openSite("https://vk.com/driverpacksolution?w=wall-29220845_61453");
                },
                priority: 0
            }, {
                id: "iStart",
                title: l("installation_header_promo_title_istart"),
                text: l("installation_header_promo_text_istart"),
                bgImage: "img/installation/banner_istart-bg.jpg",
                onClick: function() {
                    var query = encodeURIComponent("theory of relativity"), link = "http://new.internet-start.net/?q=" + query + "&utm_source=beatle&utm_medium=banner&utm_campaign=banner1";
                    try {
                        var browser = getInstalledBrowser();
                        if (browser) window.WshShell.run("cmd /c start " + browser + ' "' + link + '"', 0, !1);
                    } catch (e) {}
                },
                priority: getInstalledBrowser() ? 1 : 0
            } ];
        };
        var getInstalledBrowser = function() {
            try {
                for (var installedBrowser = void 0, _iterator = _systemScanner2["default"].installedPrograms, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                    var _ref;
                    if (_isArray) {
                        if (_i >= _iterator.length) break;
                        _ref = _iterator[_i++];
                    } else {
                        _i = _iterator.next();
                        if (_i.done) break;
                        _ref = _i.value;
                    }
                    var programs = _ref;
                    switch (!0) {
                      case "Google Chrome" === programs.name:
                        return "chrome";

                      case /^Mozilla Firefox/i.test(programs.name):
                        installedBrowser = "firefox";
                        break;

                      case /^Opera Stable/i.test(programs.name):
                        if (!installedBrowser) installedBrowser = "opera";
                    }
                }
                return installedBrowser;
            } catch (e) {}
        };
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, initialState = {
        isFullscreen: !1,
        windowState: "maximized",
        isBurgerMenuOpened: !1,
        isGdprBannerOpened: !1,
        isGdprDeclined: !1,
        popup: {
            isOpened: !1,
            isEulaChecked: !0
        },
        authorizing: !1,
        user: {},
        isGamer: !1,
        isActivated: !1,
        expertModeClicked: !1,
        isProgramsSelectAllChecked: !0,
        isProgramsDisabled: !1,
        isProtectDisabled: !1,
        isAntivirusFpTargetUser: !1,
        isServiceModeOpened: !1,
        isDriversFake: !1
    }, payload = void 0;
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState, action = arguments[1];
        switch (action.type) {
          case "WINDOW_PARAMETERS_UPDATED":
            return _extends({}, state, action.payload);

          case "WINDOW_STATE_CHANGED":
            return _extends({}, state, {
                windowState: action.payload.windowState
            });

          case "START_SCREEN_CLOSE_CLICKED":
            return _extends({}, state, {
                isBurgerMenuOpened: !1
            });

          case "BURGER_MENU_TOGGLED":
            return _extends({}, state, {
                isBurgerMenuOpened: !state.isBurgerMenuOpened
            });

          case "TOGGLE_GDPR_BANNER":
            return _extends({}, state, {
                isGdprBannerOpened: !state.isGdprBannerOpened,
                isGdprDeclined: state.isGdprDeclined || action.payload.isDeclined
            });

          case "TOGGLE_SERVICE_MODE":
            return _extends({}, state, {
                isServiceModeOpened: !state.isServiceModeOpened
            });

          case "SERVICE_MODE_FINISH":
            return _extends({}, state, {
                isFullscreen: !0
            });

          case "SERVICE_MODE_REVERT":
            return _extends({}, state, {
                isFullscreen: !1
            });

          case "CONFIRM_POPUP_OPEN":
            return _extends({}, state, {
                popup: {
                    isOpened: !0,
                    isEulaChecked: !0,
                    name: "CONFIRM_INSTALL_PROGRAM",
                    data: _extends({}, action.payload)
                }
            });

          case "NEW_ORDER_DRIVERS_INSTALL_ALL_SUCCESS":
          case "NEW_ORDER_PROGRAMS_INSTALL_ALL_SUCCESS":
          case "CONFIRM_POPUP_CLOSE":
            payload = action.payload || {};
            return _extends({}, state, {
                isProgramsSelectAllChecked: state.isProgramsSelectAllChecked && !payload.isCanceledAll,
                isProgramsDisabled: state.isProgramsDisabled || payload.isCanceledAll,
                isProtectDisabled: state.isProtectDisabled || payload.isCanceledAll,
                popup: {
                    isOpened: !1,
                    name: "CONFIRM_INSTALL_PROGRAM",
                    result: payload.result || !1
                }
            });

          case "CONFIRM_POPUP_OPEN_TOGGLE_EULA":
            return _extends({}, state, {
                popup: _extends({}, state.popup, {
                    isEulaChecked: !state.popup.isEulaChecked
                })
            });

          case "RESTART_POPUP_OPEN":
            return _extends({}, state, {
                popup: {
                    isOpened: !0,
                    name: "RESTART_OS"
                }
            });

          case "RESTART_POPUP_CLOSE":
            payload = action.payload || {};
            return _extends({}, state, {
                popup: {
                    isOpened: !1,
                    name: "RESTART_OS",
                    shouldRestart: payload.shouldRestart
                }
            });

          case "START_FAKE_POPUP_OPEN":
            return _extends({}, state, {
                popup: {
                    isOpened: !0,
                    name: "START_FAKE"
                }
            });

          case "START_FAKE_POPUP_CLOSE":
            return _extends({}, state, {
                popup: {
                    isOpened: !1,
                    name: "START_FAKE"
                }
            });

          case "ONBOARDING_POPUP_OPEN":
            payload = action.payload || {};
            return _extends({}, state, {
                popup: {
                    isOpened: !0,
                    name: "ONBOARDING"
                }
            });

          case "ONBOARDING_POPUP_CLOSE":
            return _extends({}, state, {
                popup: {
                    isOpened: !1,
                    name: "ONBOARDING"
                }
            });

          case "CONNECTION_CHECKED":
            return _extends({}, state, {
                isConnected: action.payload
            });

          case "AUTHORIZATION_STARTED":
            return _extends({}, state, {
                authorizing: !0
            });

          case "AUTHORIZED":
          case "UNAUTHORIZED":
            return _extends({}, state, {
                authorizing: !1,
                user: action.payload
            });

          case "USER_ACTIVATED":
            return _extends({}, state, {
                isActivated: !0
            });

          case "EXPERT_MODE_CLICKED":
            return _extends({}, state, {
                expertModeClicked: !0
            });

          case "GAMER_CHECKED":
            return _extends({}, state, {
                isGamer: action.payload
            });

          case "PROGRAMS_TOGGLE_ALL":
            return _extends({}, state, {
                isProgramsSelectAllChecked: action.payload.isChecked
            });

          case "PROGRAMS_TOGGLED":
            return _extends({}, state, {
                isAntivirusFpTargetUser: !0
            });

          case "TOGGLE_PROGRAMS_RECOMMENDATIONS":
            return _extends({}, state, {
                isProgramsDisabled: !state.isProgramsDisabled
            });

          case "TOGGLE_PROTECT_RECOMMENDATIONS":
            return _extends({}, state, {
                isProtectDisabled: !state.isProtectDisabled
            });

          case "DRIVERS_SCAN_FAKE":
            return _extends({}, state, {
                isDriversFake: !0
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    };
    exports["default"] = function() {
        var _extends2, state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
            progress: {},
            totalSize: 1
        }, action = arguments[1], type = action.type, payload = action.payload;
        switch (type) {
          case "CONFIGURATOR_SET_DATA":
            return _extends({}, state, {
                drivers: payload.drivers.reduce(function(result, value) {
                    var deviceClass = value["class"];
                    if (!result[deviceClass]) result[deviceClass] = {
                        isChecked: !0,
                        list: []
                    };
                    result[deviceClass].list.push(value);
                    return result;
                }, {}),
                programs: {
                    isChecked: !0,
                    list: payload.programs
                }
            });

          case "CONFIGURATOR_SET_TOTAL_SIZE":
            return _extends({}, state, {
                totalSize: payload.totalSize
            });

          case "CONFIGURATOR_TOGGLE_PROGRAMS":
            return _extends({}, state, {
                programs: _extends({}, state.programs, {
                    isChecked: !state.programs.isChecked
                })
            });

          case "CONFIGURATOR_DRIVERS_CLASS":
            var classId = payload.classId, classItem = state.drivers[classId];
            return _extends({}, state, {
                drivers: _extends({}, state.drivers, (_extends2 = {}, _extends2[classId] = _extends({}, classItem, {
                    isChecked: !classItem.isChecked
                }), _extends2))
            });

          case "CONFIGURATOR_DOWNLOAD_OFFLINE_START":
            return _extends({}, state, {
                isDownloading: !0,
                isCompleted: !1,
                isFailed: !1
            });

          case "CONFIGURATOR_DOWNLOAD_OFFLINE_PROGRESS":
            return _extends({}, state, {
                progress: {
                    downloadedSize: payload.downloadedSize
                }
            });

          case "CONFIGURATOR_DOWNLOAD_OFFLINE_DONE":
            return _extends({}, state, {
                isDownloading: !1,
                isCompleted: !0
            });

          case "CONFIGURATOR_DOWNLOAD_OFFLINE_FAIL":
            return _extends({}, state, {
                isDownloading: !1,
                isFailed: !0
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _merge = __webpack_require__(596), _merge2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_merge);
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
            isLoading: !0,
            data: {},
            videos: [ {} ],
            disks: [ {} ]
        }, action = arguments[1];
        switch (action.type) {
          case "DIAGNOSTICS_LOAD_SUCCESS":
            return {
                data: action.payload,
                isLoading: !1
            };

          case "DIAGNOSTICS_UPDATE_SUCCESS":
            return {
                data: (0, _merge2["default"])({}, state.data, action.payload),
                isLoading: !1
            };

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, initialState = {}, finishedDevices = void 0, finishedPrograms = void 0;
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState, action = arguments[1];
        switch (action.type) {
          case "NEW_ORDER_INSTALL_ALL_START":
            return _extends({}, state, {
                resultType: null,
                lastInstallationInput: action.payload.inputData,
                oldDriversState: action.payload.driversState
            });

          case "FINAL_SCREEN_GET_INSTALLATION_RESULT":
            return _extends({}, state, action.payload);

          case "FINAL_SCREEN_HOVER_FINISHED_DEVICE":
            finishedDevices = state.finishedDevices.map(function(item) {
                if (action.payload.deviceId === item.deviceId) return _extends({}, item, {
                    popoverIsOpened: !action.payload.isLeaving
                }); else return item;
            });
            return _extends({}, state, {
                finishedDevices: finishedDevices
            });

          case "FINAL_SCREEN_HOVER_FINISHED_PROGRAM":
            finishedPrograms = state.finishedPrograms.map(function(item) {
                if (action.payload.id === item.id) return _extends({}, item, {
                    popoverIsOpened: !action.payload.isLeaving
                }); else return item;
            });
            return _extends({}, state, {
                finishedPrograms: finishedPrograms
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, defaultState = {
        playkeyInstalling: !1,
        playkeyInstalled: !1,
        topGamesList: []
    };
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState, action = arguments[1];
        switch (action.type) {
          case "GAMES_LIST_LOADED":
            return _extends({}, state, {
                topGamesList: action.payload
            });

          case "GAMES_HOVER_TOP_GAME":
            return _extends({}, state, {
                topGamesList: state.topGamesList.map(function(item) {
                    return _extends({}, item, {
                        isHovered: action.payload.id === item.id && !action.payload.isLeaving
                    });
                })
            });

          case "GAMES_PLAYKEY_INSTALLING":
            return _extends({}, state, {
                playkeyInstalling: !0
            });

          case "GAMES_PLAYKEY_CHECKED":
          case "GAMES_PLAYKEY_INSTALLED":
            return _extends({}, state, {
                playkeyInstalling: !1,
                playkeyInstalled: action.payload
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    exports.onboarding = exports.games = exports.settings = exports.finalScreen = exports.installation = exports.configurator = exports.diagnostics = exports.loading = exports.programs = exports.protect = exports.drivers = exports.lang = exports.page = exports.start = exports.app = undefined;
    var _app = __webpack_require__(764), _app2 = _interopRequireDefault(_app), _start = __webpack_require__(317), _start2 = _interopRequireDefault(_start), _page = __webpack_require__(774), _page2 = _interopRequireDefault(_page), _lang = __webpack_require__(771), _lang2 = _interopRequireDefault(_lang), _drivers = __webpack_require__(316), _drivers2 = _interopRequireDefault(_drivers), _protect = __webpack_require__(776), _protect2 = _interopRequireDefault(_protect), _programs = __webpack_require__(775), _programs2 = _interopRequireDefault(_programs), _loading = __webpack_require__(772), _loading2 = _interopRequireDefault(_loading), _diagnostics = __webpack_require__(766), _diagnostics2 = _interopRequireDefault(_diagnostics), _configurator = __webpack_require__(765), _configurator2 = _interopRequireDefault(_configurator), _installation = __webpack_require__(770), _installation2 = _interopRequireDefault(_installation), _finalScreen = __webpack_require__(767), _finalScreen2 = _interopRequireDefault(_finalScreen), _settings = __webpack_require__(777), _settings2 = _interopRequireDefault(_settings), _games = __webpack_require__(768), _games2 = _interopRequireDefault(_games), _onboarding = __webpack_require__(773), _onboarding2 = _interopRequireDefault(_onboarding);
    exports.app = _app2["default"];
    exports.start = _start2["default"];
    exports.page = _page2["default"];
    exports.lang = _lang2["default"];
    exports.drivers = _drivers2["default"];
    exports.protect = _protect2["default"];
    exports.programs = _programs2["default"];
    exports.loading = _loading2["default"];
    exports.diagnostics = _diagnostics2["default"];
    exports.configurator = _configurator2["default"];
    exports.installation = _installation2["default"];
    exports.finalScreen = _finalScreen2["default"];
    exports.settings = _settings2["default"];
    exports.games = _games2["default"];
    exports.onboarding = _onboarding2["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _driversPrograms = __webpack_require__(29), initialState = {
        serviceMode: {
            status: "initial"
        },
        preparing: !0,
        itemsContainDrivers: !1,
        itemsContainPrograms: !1,
        rebootNeeded: !1,
        leftArrowIsVisible: !1,
        rightArrowIsVisible: !1,
        isProcessFinished: !1
    };
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState, action = arguments[1], items = void 0;
        switch (action.type) {
          case "SERVICE_MODE_TERMINATE":
            return _extends({}, state, {
                serviceMode: {
                    status: "terminating",
                    currentProcess: action.payload.processName
                }
            });

          case "SERVICE_MODE_FINISH":
            return _extends({}, state, {
                serviceMode: {
                    status: "finished"
                }
            });

          case "NEW_ORDER_SHOW_LEFT_ARROW":
            return _extends({}, state, {
                leftArrowIsVisible: !0,
                rightArrowIsVisible: !1
            });

          case "NEW_ORDER_SHOW_RIGTH_ARROW":
            return _extends({}, state, {
                leftArrowIsVisible: !1,
                rightArrowIsVisible: !0
            });

          case "NEW_ORDER_HIDE_ARROWS":
            return _extends({}, state, {
                leftArrowIsVisible: !1,
                rightArrowIsVisible: !1
            });

          case "NEW_ORDER_RESTART_APPLICATIONS_CONFIRMED":
            return _extends({}, state, {
                restartingApplications: action.payload
            });

          case "NEW_ORDER_PREPARING_FINISHED":
            return _extends({}, state, {
                preparing: !1,
                restorePointStatus: action.payload
            });

          case "NEW_ORDER_INSTALL_ALL_START":
            return _extends({}, state, {
                serviceMode: initialState.serviceMode,
                preparing: !0,
                result: null,
                totalDrivers: action.payload.totalDrivers,
                successDrivers: 0,
                isYandexInstalled: !1,
                items: action.payload.items,
                itemsContainDrivers: action.payload.itemsContainDrivers,
                itemsContainPrograms: action.payload.itemsContainPrograms,
                isProcessFinished: !1
            });

          case "NEW_ORDER_DRIVER_DOWNLOAD_STARTED":
          case "NEW_ORDER_DRIVER_DOWNLOAD_FINISHED":
          case "NEW_ORDER_DRIVER_UNZIPPING_STARTED":
          case "NEW_ORDER_DRIVER_UNZIPPING_FINISHED":
          case "NEW_ORDER_DRIVER_INSTALLATION_STARTED":
          case "NEW_ORDER_PROGRAM_DOWNLOAD_STARTED":
          case "NEW_ORDER_PROGRAM_DOWNLOAD_FINISHED":
          case "NEW_ORDER_PROGRAM_INSTALLATION_FINISHED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    status: action.meta.status,
                    rebootNeeded: action.meta.rebootNeeded
                }); else return item;
            });
            return _extends({}, state, {
                items: items,
                rebootNeeded: state.rebootNeeded || action.meta.rebootNeeded
            });

          case "NEW_ORDER_DRIVER_DOWNLOAD_FAILED":
          case "NEW_ORDER_DRIVER_UNZIPPING_FAILED":
          case "NEW_ORDER_DRIVER_INSTALLATION_FAILED":
          case "NEW_ORDER_PROGRAM_DOWNLOAD_FAILED":
          case "NEW_ORDER_PROGRAM_INSTALLATION_FAILED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    status: action.meta.status,
                    error: {
                        errorType: action.meta.errorType
                    }
                }); else return item;
            });
            return _extends({}, state, {
                items: items
            });

          case "NEW_ORDER_PROGRAM_INSTALLATION_STARTED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    status: action.meta.status
                }); else return item;
            });
            return _extends({}, state, {
                items: items,
                isYandexInstalled: state.isYandexInstalled || (0, _driversPrograms.isYandexBrowser)(action.payload)
            });

          case "NEW_ORDER_DRIVER_INSTALLATION_FINISHED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) {
                    var _action$meta = action.meta, status = _action$meta.status, rebootNeeded = _action$meta.rebootNeeded;
                    return _extends({}, item, {
                        status: status,
                        rebootNeeded: rebootNeeded
                    });
                } else return item;
            });
            return _extends({}, state, {
                items: items,
                rebootNeeded: state.rebootNeeded || action.meta.rebootNeeded,
                successDrivers: state.successDrivers + 1
            });

          case "INSTALLATION_PROCESS_FINISHED":
            return _extends({}, state, {
                isProcessFinished: !0
            });

          case "NEW_ORDER_DRIVERS_INSTALL_ALL_SUCCESS":
            return _extends({}, state, {
                result: "DRIVERS_DONE"
            });

          case "NEW_ORDER_PROGRAMS_INSTALL_ALL_SUCCESS":
            return _extends({}, state, {
                result: "PROGRAMS_DONE"
            });

          case "NEW_ORDER_ITEM_CANCELED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    status: "canceled"
                }); else return item;
            });
            return _extends({}, state, {
                items: items
            });

          case "NEW_ORDER_DOWNLOAD_FILE_SIZE_RECEIVED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    downloading: _extends({}, item.downloading, {
                        totalFileSize: action.meta.totalFileSize
                    })
                }); else return item;
            });
            return _extends({}, state, {
                items: items
            });

          case "NEW_ORDER_DOWNLOAD_FILE_UPDATED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    downloading: _extends({}, item.downloading, {
                        timeElapsed: action.meta.timeElapsed,
                        downloadedSize: action.meta.downloadedSize,
                        downloadingSpeed: action.meta.downloadingSpeed
                    })
                }); else return item;
            });
            return _extends({}, state, {
                items: items
            });

          case "NEW_ORDER_ZIP_TOTAL_COUNT_RECEIVED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    unzipping: _extends({}, item.unzipping, {
                        totalCount: action.meta.totalCount
                    })
                }); else return item;
            });
            return _extends({}, state, {
                items: items
            });

          case "NEW_ORDER_UNZIPPED_PART_UPDATED":
            items = state.items.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    unzipping: _extends({}, item.unzipping, {
                        unzippedPercents: item.unzipping.totalCount ? Math.min(Math.max(Math.round(100 * action.meta.unzippedCount / item.unzipping.totalCount), item.unzipping.unzippedPercents), 100) : 0
                    })
                }); else return item;
            });
            return _extends({}, state, {
                items: items
            });

          case "NEW_ORDER_INSTALLATION_PROMOS_LOADED":
            return _extends({}, state, {
                promos: action.promos
            });

          case "NEW_ORDER_INSTALLATION_PROMO_CONFIRMED":
            var promos = state.promos.map(function(promo) {
                if (promo.id === action.payload.id) return _extends({}, promo, {
                    state: "confirmed"
                }); else return promo;
            });
            return _extends({}, state, {
                promos: promos
            });

          case "ERROR_DEVICES_COUNT_RECEIVED":
            return _extends({}, state, {
                errorDevicesCount: action.meta.count
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, defaultState = {
        languages: []
    };
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState, action = arguments[1];
        switch (action.type) {
          case "CURRENT_LANGUAGE_UPDATED":
            return _extends({}, state, {
                currentLanguage: action.payload
            });

          case "MENU_LANGUAGES_LIST_LOADED":
            return _extends({}, state, {
                languages: action.payload
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    };
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
            status: "system_scanning"
        }, action = arguments[1];
        switch (action.type) {
          case "BACKUP_START":
            return _extends({}, state, {
                now: "BACKUP"
            });

          case "BACKUP_SUCCESS":
            return _extends({}, state, {
                now: "BACKUP_DONE"
            });

          case "BACKUP_FAILED":
            return _extends({}, state, {
                now: "BACKUP_FAILED"
            });

          case "RUN_ERROR_DETECTED":
            return _extends({}, state, {
                now: "RUN_ERROR"
            });

          case "LOADING_STATUS_UPDATED":
            return _extends({}, state, {
                status: action.payload.status
            });

          case "DRIVERS_SCAN_SUCCESS":
            return _extends({}, state, {
                status: "api_response_received"
            });

          case "INSTALLED_PROGRAMS_SCAN_FINISHED":
            return _extends({}, state, {
                status: "protect_api_response_received"
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function checkTargeting(_ref) {
        var events = _ref.events, shownScreens = _ref.shownScreens, doNotShowPopups = _ref.doNotShowPopups, lastEvent = events[events.length - 1];
        if (events.includes("startpage expertmode clicked") && !doNotShowPopups) switch (lastEvent) {
          case "header bell clicked":
            return "SOCIAL";

          case "auth button hovered":
            if (!shownScreens.includes("SETTINGS")) return "SETTINGS";
            break;

          case "program toggled off":
            if (!events.includes("program toggled on") && "program toggled off" === events[events.length - 2] && !shownScreens.includes("SOFT")) return "SOFT";
        }
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _lodash = __webpack_require__(94), _screens = __webpack_require__(310), initialState = {
        screenName: null,
        events: [],
        shownScreens: [],
        tempShownScreens: [],
        doNotShowPopups: !1,
        mustOpenPopup: !0
    };
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState, action = arguments[1];
        switch (action.type) {
          case "ONBOARDING_SETTINGS_LOADED":
            return _extends({}, state, action.payload.onboardingSettings);

          case "ONBOARDING_EVENT_ADDED":
            if (action.payload && action.payload.eventName) {
                var eventName = action.payload.eventName, newEvents = [].concat(state.events);
                newEvents.push(eventName);
                var newState = _extends({}, state, {
                    events: newEvents
                }), newScreen = checkTargeting(newState);
                if (newScreen) {
                    newState.screenName = newScreen;
                    newState.mustOpenPopup = !0;
                } else newState.mustOpenPopup = !1;
                return newState;
            }
            break;

          case "ONBOARDING_SCREEN_CLOSED":
            var screenName = action.payload.screenName;
            if (_screens.onBoardingScreens.includes(screenName)) {
                var shownScreens = [].concat(state.shownScreens);
                shownScreens.push(screenName);
                return _extends({}, state, {
                    shownScreens: (0, _lodash.uniq)(shownScreens)
                });
            } else if (_screens.onBoardingScreensInstallation.includes(screenName)) {
                var tempShownScreens = [].concat(state.tempShownScreens);
                tempShownScreens.push(screenName);
                return _extends({}, state, {
                    tempShownScreens: (0, _lodash.uniq)(tempShownScreens)
                });
            }
            return state;

          case "ONBOARDING_DO_NOT_SHOW_CLICKED":
            return _extends({}, state, {
                doNotShowPopups: !0
            });

          case "ONBOARDING_SCREEN_CHANGED":
            return _extends({}, state, action.screenName);

          case "ONBOARDING_UNMOUNTED":
            return _extends({}, state, {
                tempShownScreens: []
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "LOADING_SCREEN", action = arguments[1];
        switch (action.type) {
          case "NAVIGATE":
          case "DRIVERS_SCAN_FAKE":
            return action.page;

          case "NEW_ORDER_INSTALL_ALL_START":
            return "INSTALLATION";

          case "NEW_ORDER_DRIVERS_INSTALL_ALL_SUCCESS":
          case "NEW_ORDER_PROGRAMS_INSTALL_ALL_SUCCESS":
            return "FINAL_SCREEN";

          case "BACKUP_START":
            return "LOADING";

          case "NO_INTERNET_DETECTED":
            return "NO_INTERNET_SCREEN";

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function checkDownloaded(program) {
        var fileName = program.link.split("/").slice(-1)[0], lightFileName = fileName.replace(/.exe$/, "_light.exe"), path = "..\\programs\\" + fileName, lightPath = "..\\programs\\" + lightFileName;
        if (!_system.fso.FileExists(path) && !_system.fso.FileExists(lightPath)) {
            program = Object.assign({}, program, {
                name: "[Not downloaded] " + program.name,
                isChecked: program.isChecked
            });
            if (program.localizedName) for (var _iterator = Object.keys(program.localizedName), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
                var _ref;
                if (_isArray) {
                    if (_i >= _iterator.length) break;
                    _ref = _iterator[_i++];
                } else {
                    _i = _iterator.next();
                    if (_i.done) break;
                    _ref = _i.value;
                }
                var key = _ref;
                program.localizedName[key] = "[Not downloaded] " + program.localizedName[key];
            }
        }
        return program;
    }
    function remapAttrs(item) {
        var isChecked = !item.isInstalled && item.IsChecked && ((0, _driversPrograms.isDriverUtility)(item) || !_settings2["default"].get("general.selectSoftByDefault").value);
        return _extends({}, item, {
            link: item.URL,
            URL: undefined,
            name: item.Name,
            Name: undefined,
            version: item.Version,
            category: item.Category,
            Category: undefined,
            isCheckedByDefault: item.IsChecked,
            isChecked: isChecked,
            IsChecked: undefined,
            isCheckedForProtect: !item.isInstalled && item.IsChecked,
            isPartner: item.IsPartner,
            id: item.ID,
            description: item.Description,
            icon: item.Icon,
            publisher: item.Publisher,
            rating: item.Rating
        });
    }
    function patchIfNotifier(item) {
        if ((0, _driversPrograms.isNotifier)(item)) return _extends({}, item, {
            isChecked: item.isChecked && _settings2["default"].get("general.installNotifier").value
        }); else return item;
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _system = __webpack_require__(6), _driversPrograms = __webpack_require__(29), _settings = __webpack_require__(43), _settings2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_settings);
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [], action = arguments[1];
        switch (action.type) {
          case "PROGRAMS_LOADED":
            return action.payload.map(function(program) {
                program = remapAttrs(program);
                if (!0) program = checkDownloaded(program);
                program = patchIfNotifier(program);
                return program;
            });

          case "PROGRAMS_TOGGLED":
            return state.map(function(item) {
                if (item.ID === action.payload.id) return _extends({}, item, {
                    isChecked: action.payload.checked
                }); else return item;
            });

          case "START_SCREEN_TOGGLE_ALL_APPESTEEM_DRIVERS":
            return state.map(function(item) {
                if ((0, _driversPrograms.isAppEsteemDriver)(item)) return _extends({}, item, {
                    isChecked: action.payload.isChecked
                }); else return item;
            });

          case "PROGRAMS_TOGGLE_ALL":
            return state.map(function(item) {
                if (!(0, _driversPrograms.isDriverUtility)(item)) return _extends({}, item, {
                    isChecked: action.payload.isChecked
                }); else return item;
            });

          case "NEW_ORDER_PROGRAM_INSTALLATION_FINISHED":
            return state.map(function(item) {
                if (item.ID === action.payload.id) return _extends({}, item, {
                    isInstalled: !0
                }); else return item;
            });

          case "TOGGLE_DRIVER_UTILITIES":
            return state.map(function(item) {
                if ((0, _driversPrograms.isDriverUtility)(item)) return _extends({}, item, {
                    isChecked: action.payload.isChecked
                }); else return item;
            });

          case "SETTINGS_SET_SETTING":
            if ("general.installNotifier" === action.payload.keyPath) return state.map(function(item) {
                if ((0, _driversPrograms.isNotifier)(item)) return _extends({}, item, {
                    isChecked: item.isCheckedByDefault && action.payload.data.value
                }); else return item;
            }); else if ("general.selectSoftByDefault" === action.payload.keyPath) return state.map(function(item) {
                if ((0, _driversPrograms.isDriverUtility)(item) || (0, _driversPrograms.isNotifier)(item)) return item; else return _extends({}, item, {
                    isChecked: !action.payload.data.value ? item.isCheckedByDefault : !1
                });
            }); else return state;

          case "PROTECT_TOGGLE_SECURITY_PROGRAM":
            return state.map(function(item) {
                return item.ID === action.payload.id ? _extends({}, item, {
                    isCheckedForProtect: action.payload.isChecked
                }) : item;
            });

          case "CONFIRM_POPUP_DECLINE_PROGRAM":
            return state.map(function(item) {
                if (item.id === action.payload.id) return _extends({}, item, {
                    isChecked: !1,
                    isCheckedForProtect: !1,
                    isVisible: !1
                }); else return item;
            });

          case "CONFIRM_POPUP_CLOSE":
            return state.map(function(item) {
                if (action.payload.deferredIds.includes(item.id)) return _extends({}, item, {
                    isChecked: !1,
                    isCheckedForProtect: !1
                }); else return item;
            });

          case "GAMING_ALL_SOFT_NO_DRIVERS":
            return state.map(function(item) {
                return item.isVisible ? _extends({}, item, {
                    isChecked: !0
                }) : item;
            });

          case "GAMING_DRIVERS_NO_SOFT":
            return state.map(function(item) {
                return item.isVisible ? _extends({}, item, {
                    isChecked: !1
                }) : item;
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, initialState = {
        isUsefulHidden: !0,
        isActiveRemoving: !1,
        isActiveRemovingAll: !1,
        isActiveBrowserCleaning: !1,
        installedProgramsExpanded: !1,
        isUninstallRatePopoverOpened: !1,
        isAPIFailed: !0,
        apiData: []
    }, getRemovalRate = function(item) {
        var removalRate = void 0;
        if (item.uninstallPercents >= 70) removalRate = "large"; else if (item.uninstallPercents >= 50 && item.uninstallPercents < 70) removalRate = "middle"; else removalRate = "small";
        return removalRate;
    }, comparePrograms = function(a, b) {
        return b.uninstallPercents - a.uninstallPercents;
    };
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState, action = arguments[1];
        switch (action.type) {
          case "INSTALLED_PROGRAMS_SCAN_FINISHED":
            var currentId = 0, removalRate = void 0;
            return _extends({}, state, {
                isAPIFailed: !action.payload,
                apiData: action.payload ? action.payload.map(function(program) {
                    currentId++;
                    removalRate = getRemovalRate(program);
                    return _extends({}, program, {
                        id: currentId,
                        removalRate: removalRate,
                        isHarmful: "large" === removalRate,
                        isChecked: "large" === removalRate,
                        starsCount: Math.round(program.rating / 60),
                        isRemoving: !1,
                        isExpanded: !1
                    });
                }).sort(comparePrograms) : []
            });

          case "PROTECT_SCREEN_RESET":
            return _extends({}, state, {
                apiData: state.apiData.map(function(item) {
                    return _extends({}, item, {
                        isChecked: item.isHarmful
                    });
                })
            });

          case "PROTECT_SCREEN_TOGGLE_USEFUL_PROGRAMS":
            return _extends({}, state, {
                isUsefulHidden: !state.isUsefulHidden
            });

          case "INSTALLED_PROGRAM_TOGGLED":
            return _extends({}, state, {
                apiData: state.apiData.map(function(item) {
                    if (item.id === action.payload.id) return _extends({}, item, {
                        isChecked: action.payload.isChecked
                    }); else return item;
                })
            });

          case "INSTALLED_PROGRAM_EXPANDED":
            return _extends({}, state, {
                apiData: state.apiData.map(function(item) {
                    if (item.id === action.payload.id) return _extends({}, item, {
                        isExpanded: action.payload.isExpanded
                    }); else return item;
                })
            });

          case "INSTALLED_PROGRAM_REMOVING_STARTED":
            return _extends({}, state, {
                isActiveRemoving: !0,
                apiData: state.apiData.map(function(item) {
                    if (item.id === action.payload.id) return _extends({}, item, {
                        isRemoving: !0
                    }); else return item;
                })
            });

          case "INSTALLED_PROGRAM_REMOVING_SUCCESS":
          case "INSTALLED_PROGRAM_REMOVING_FAILED":
            return _extends({}, state, {
                isActiveRemoving: !1,
                apiData: state.apiData.filter(function(item) {
                    return item.id !== action.payload.id;
                })
            });

          case "REMOVING_ALL_HARMFUL_PROGRAMS_STARTED":
            return _extends({}, state, {
                isActiveRemovingAll: !0
            });

          case "REMOVING_ALL_HARMFUL_PROGRAMS_FINISHED":
            return _extends({}, state, {
                isActiveRemovingAll: !1
            });

          case "REMOVING_HARMFUL_PROGRAM_SUCCESS":
            return _extends({}, state, {
                apiData: state.apiData.filter(function(item) {
                    return item.id !== action.payload.id;
                })
            });

          case "CHROME_CLEANING_STARTED":
            return _extends({}, state, {
                isActiveBrowserCleaning: !0
            });

          case "CHROME_CLEANING_FINISHED":
            return _extends({}, state, {
                isActiveBrowserCleaning: !1
            });

          case "ALL_INSTALLED_PROGRAMS_EXPANDED":
            return _extends({}, state, {
                installedProgramsExpanded: !state.installedProgramsExpanded
            });

          case "UNINSTALL_RATE_POPOVER_TOGGLED":
            return _extends({}, state, {
                isUninstallRatePopoverOpened: action.payload.isOpened
            });

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, prepareSettings = function(_ref) {
        var settingsData = _ref.settingsData, settings = _ref.settings, result = _extends({}, settingsData);
        Object.entries(settingsData).forEach(function(_ref2) {
            var sectionId = _ref2[0], section = _ref2[1];
            Object.entries(section.settings).forEach(function(_ref3) {
                var settingId = _ref3[0], setting = _ref3[1], currentSetting = settings[sectionId][settingId], extendedSetting = _extends({}, setting, currentSetting);
                result[sectionId].settings[settingId] = extendedSetting;
            });
        });
        return result;
    }, newState = void 0, data = void 0, sectionId = void 0, settingId = void 0;
    exports["default"] = function() {
        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, action = arguments[1];
        switch (action.type) {
          case "SETTINGS_LOADED":
            return _extends({}, state, prepareSettings(action.payload));

          case "SETTINGS_SET_SETTING":
            var _action$payload$keyPa = action.payload.keyPath.split(".");
            sectionId = _action$payload$keyPa[0];
            settingId = _action$payload$keyPa[1];
            data = action.payload.data;
            newState = _extends({}, state);
            newState[sectionId].settings[settingId] = _extends({}, newState[sectionId].settings[settingId], data);
            return newState;

          case "SETTINGS_DISABLE_SETTING":
            var _action$payload$keyPa2 = action.payload.keyPath.split(".");
            sectionId = _action$payload$keyPa2[0];
            settingId = _action$payload$keyPa2[1];
            data = action.payload.data;
            newState = _extends({}, state);
            newState[sectionId].settings[settingId] = _extends({}, newState[sectionId].settings[settingId], data, {
                disabled: !0
            });
            return newState;

          case "SETTINGS_ENABLE_SETTING":
            var _action$payload$keyPa3 = action.payload.keyPath.split(".");
            sectionId = _action$payload$keyPa3[0];
            settingId = _action$payload$keyPa3[1];
            data = action.payload.data;
            newState = _extends({}, state);
            newState[sectionId].settings[settingId] = _extends({}, newState[sectionId].settings[settingId], {
                value: newState[sectionId].settings[settingId].defaultValue,
                disabled: !1
            });
            return newState;

          default:
            return state;
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _react = __webpack_require__(1), _react2 = _interopRequireDefault(_react), _createProvider = __webpack_require__(780), _createProvider2 = _interopRequireDefault(_createProvider);
    exports["default"] = (0, _createProvider2["default"])(_react2["default"]);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(process) {
        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }
        function getDisplayName(Component) {
            return Component.displayName || Component.name || "Component";
        }
        function createConnect(React) {
            var PropTypes = React.PropTypes, storeShape = (0, _createStoreShape2["default"])(PropTypes);
            return function(mapStateToProps, mapDispatchToProps, mergeProps) {
                function computeStateProps(store, props) {
                    var state = store.getState(), stateProps = shouldUpdateStateProps ? finalMapStateToProps(state, props) : finalMapStateToProps(state);
                    (0, _invariant2["default"])((0, _isPlainObject2["default"])(stateProps), "`mapStateToProps` must return an object. Instead received %s.", stateProps);
                    return stateProps;
                }
                function computeDispatchProps(store, props) {
                    var dispatch = store.dispatch, dispatchProps = shouldUpdateDispatchProps ? finalMapDispatchToProps(dispatch, props) : finalMapDispatchToProps(dispatch);
                    (0, _invariant2["default"])((0, _isPlainObject2["default"])(dispatchProps), "`mapDispatchToProps` must return an object. Instead received %s.", dispatchProps);
                    return dispatchProps;
                }
                function _computeNextState(stateProps, dispatchProps, parentProps) {
                    var mergedProps = finalMergeProps(stateProps, dispatchProps, parentProps);
                    (0, _invariant2["default"])((0, _isPlainObject2["default"])(mergedProps), "`mergeProps` must return an object. Instead received %s.", mergedProps);
                    return mergedProps;
                }
                var shouldSubscribe = Boolean(mapStateToProps), finalMapStateToProps = mapStateToProps || defaultMapStateToProps, finalMapDispatchToProps = (0, 
                _isPlainObject2["default"])(mapDispatchToProps) ? (0, _wrapActionCreators2["default"])(mapDispatchToProps) : mapDispatchToProps || defaultMapDispatchToProps, finalMergeProps = mergeProps || defaultMergeProps, shouldUpdateStateProps = finalMapStateToProps.length > 1, shouldUpdateDispatchProps = finalMapDispatchToProps.length > 1, version = nextVersion++;
                return function(WrappedComponent) {
                    var Connect = React.createClass({
                        displayName: "Connect(" + getDisplayName(WrappedComponent) + ")",
                        WrappedComponent: WrappedComponent,
                        contextTypes: {
                            store: storeShape
                        },
                        propTypes: {
                            store: storeShape
                        },
                        shouldComponentUpdate: function(nextProps, nextState) {
                            return !(0, _shallowEqual2["default"])(this.state.props, nextState.props);
                        },
                        getInitialState: function() {
                            var props = this.props, context = this.context;
                            this.version = version;
                            this.store = props.store || context.store;
                            (0, _invariant2["default"])(this.store, 'Could not find "store" in either the context or props of "' + this.constructor.displayName + '". Either wrap the root component in a <Provider>, or explicitly pass "store" as a prop to "' + this.constructor.displayName + '".');
                            this.stateProps = computeStateProps(this.store, props);
                            this.dispatchProps = computeDispatchProps(this.store, props);
                            return {
                                props: this.computeNextState()
                            };
                        },
                        computeNextState: function() {
                            var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
                            return _computeNextState(this.stateProps, this.dispatchProps, props);
                        },
                        updateStateProps: function() {
                            var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props, nextStateProps = computeStateProps(this.store, props);
                            if ((0, _shallowEqual2["default"])(nextStateProps, this.stateProps)) return !1;
                            this.stateProps = nextStateProps;
                            return !0;
                        },
                        updateDispatchProps: function() {
                            var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props, nextDispatchProps = computeDispatchProps(this.store, props);
                            if ((0, _shallowEqual2["default"])(nextDispatchProps, this.dispatchProps)) return !1;
                            this.dispatchProps = nextDispatchProps;
                            return !0;
                        },
                        updateState: function() {
                            var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props, nextState = this.computeNextState(props);
                            if (!(0, _shallowEqual2["default"])(nextState, this.state.props)) this.setState({
                                props: nextState
                            });
                        },
                        isSubscribed: function() {
                            return "function" == typeof this.unsubscribe;
                        },
                        trySubscribe: function() {
                            if (shouldSubscribe && !this.unsubscribe) {
                                this.unsubscribe = this.store.subscribe(this.handleChange);
                                this.handleChange();
                            }
                        },
                        tryUnsubscribe: function() {
                            if (this.unsubscribe) {
                                this.unsubscribe();
                                this.unsubscribe = null;
                            }
                        },
                        componentDidMount: function() {
                            this.trySubscribe();
                        },
                        componentWillReceiveProps: function(nextProps) {
                            if (!(0, _shallowEqual2["default"])(nextProps, this.props)) {
                                if (shouldUpdateStateProps) this.updateStateProps(nextProps);
                                if (shouldUpdateDispatchProps) this.updateDispatchProps(nextProps);
                                this.updateState(nextProps);
                            }
                        },
                        componentWillUnmount: function() {
                            this.tryUnsubscribe();
                        },
                        handleChange: function() {
                            if (this.updateStateProps()) this.updateState();
                        },
                        getWrappedInstance: function() {
                            return this.refs.wrappedInstance;
                        },
                        render: function() {
                            return WrappedComponent(_extends({
                                ref: "wrappedInstance"
                            }, this.state.props));
                        }
                    });
                    if (void 0 !== process && "undefined" != typeof process.env) Connect.prototype.componentWillUpdate = function() {
                        if (this.version !== version) {
                            this.version = version;
                            this.trySubscribe();
                            this.updateStateProps();
                            this.updateDispatchProps();
                            this.updateState();
                        }
                    };
                    return Connect;
                };
            };
        }
        exports.__esModule = !0;
        var _extends = Object.assign || function(target) {
            for (var i = 1; i < arguments.length; i++) {
                var source = arguments[i];
                for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
            }
            return target;
        };
        exports["default"] = createConnect;
        var _createStoreShape = __webpack_require__(303), _createStoreShape2 = _interopRequireDefault(_createStoreShape), _shallowEqual = __webpack_require__(668), _shallowEqual2 = _interopRequireDefault(_shallowEqual), _isPlainObject = __webpack_require__(667), _isPlainObject2 = _interopRequireDefault(_isPlainObject), _wrapActionCreators = __webpack_require__(669), _wrapActionCreators2 = _interopRequireDefault(_wrapActionCreators), _invariant = __webpack_require__(181), _invariant2 = _interopRequireDefault(_invariant), defaultMapStateToProps = function() {
            return {};
        }, defaultMapDispatchToProps = function(dispatch) {
            return {
                dispatch: dispatch
            };
        }, defaultMergeProps = function(stateProps, dispatchProps, parentProps) {
            return _extends({}, parentProps, stateProps, dispatchProps);
        }, nextVersion = 0;
        module.exports = exports["default"];
    }).call(exports, __webpack_require__(186));
}, function(module, exports, __webpack_require__) {
    "use strict";
    function createProvider(React) {
        var PropTypes = React.PropTypes, storeShape = (0, _createStoreShape2["default"])(PropTypes);
        return React.createClass({
            childContextTypes: {
                store: storeShape.isRequired
            },
            propTypes: {
                children: PropTypes.func.isRequired,
                store: storeShape.isRequired
            },
            getChildContext: function() {
                return {
                    store: this.state.store
                };
            },
            getInitialState: function() {
                return {
                    store: this.props.store
                };
            },
            componentWillReceiveProps: function(nextProps) {
                var store = this.state.store, nextStore = nextProps.store;
                if (store !== nextStore) {
                    var nextReducer = nextStore.getReducer();
                    store.replaceReducer(nextReducer);
                }
            },
            render: function() {
                return (0, this.props.children)();
            }
        });
    }
    exports.__esModule = !0;
    exports["default"] = createProvider;
    var _createStoreShape = __webpack_require__(303), _createStoreShape2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_createStoreShape);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _redux = __webpack_require__(305), _reduxThunk = __webpack_require__(671), _reduxThunk2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_reduxThunk), _index = __webpack_require__(769), reducers = function(obj) {
        if (obj && obj.__esModule) return obj; else {
            var newObj = {};
            if (null != obj) for (var key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
            newObj["default"] = obj;
            return newObj;
        }
    }(_index), enhancedCreateStore = void 0;
    if (!1) {
        var _require = require("redux"), compose = _require.compose;
        enhancedCreateStore = compose((0, _redux.applyMiddleware)(_reduxThunk2["default"]), require("redux-devtools").devTools(), require("redux-devtools").persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)), _redux.createStore);
    } else enhancedCreateStore = (0, _redux.applyMiddleware)(_reduxThunk2["default"])(_redux.createStore);
    exports["default"] = function(initialState) {
        var reducer = (0, _redux.combineReducers)(reducers), store = enhancedCreateStore(reducer, initialState);
        if (!1) module.hot.accept("../reducers/index", function() {
            store.replaceReducer((0, _redux.combineReducers)(require("../reducers/index")));
        });
        return store;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _shell = __webpack_require__(16), _fso = __webpack_require__(17), _constants = __webpack_require__(208), _constants2 = _interopRequireDefault(_constants), _timeout = __webpack_require__(213), _timeout2 = _interopRequireDefault(_timeout), _activateAppWindow = __webpack_require__(149), _activateAppWindow2 = _interopRequireDefault(_activateAppWindow), FSO_FOR_READING = _constants2["default"].FSO_FOR_READING, FSO_DONT_CREATE = _constants2["default"].FSO_DONT_CREATE, FSO_TRISTATE_TRUE = _constants2["default"].FSO_TRISTATE_TRUE, WHITELIST_RE = /mshta\.exe|driverpack|powershell\.exe|cmd\.exe|wscript\.exe|node\.exe/i, ServiceMode = function() {
        function ServiceMode() {
            _classCallCheck(this, ServiceMode);
            this.tasklistCommand = 'chcp 65001 & tasklist /v /fi "USERNAME eq %username%" /fi "STATUS eq running" /fo csv';
            this.tempOutputFileName = "service_mode_temp_output.txt";
            this.outputFileName = "service_mode_output.txt";
        }
        ServiceMode.prototype.getListFromText = function(csvText) {
            for (var result = [], lines = csvText.trim().split("\n"), i = 1; i < lines.length; i++) {
                for (var item = [], currentline = lines[i].trim().split(","), j = 0; j < currentline.length; j++) {
                    var value = currentline[j].trim().replace(/^"|"$/g, "");
                    item.push(value);
                }
                result.push(item);
            }
            return result;
        };
        ServiceMode.prototype.parseProcesses = function() {
            var tempOutputFile = (0, _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\" + this.tempOutputFileName, outputFile = (0, 
            _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\" + this.outputFileName, outputCommand = "cmd /c " + this.tasklistCommand + ' > "' + tempOutputFile + '" && cmd /u /c type "' + tempOutputFile + '" > "' + outputFile + '" && timeout 1';
            _shell.WshShell.Run(outputCommand, 0, !0);
            var descriptor = _fso.fso.OpenTextFile(outputFile, FSO_FOR_READING, FSO_DONT_CREATE, FSO_TRISTATE_TRUE);
            if (!descriptor.AtEndOfStream) {
                var text = descriptor.ReadAll();
                return this.getListFromText(text);
            } else throw new Error("Failed to parse ServiceMode output");
        };
        ServiceMode.prototype.run = function() {
            function run(_x) {
                return _ref.apply(this, arguments);
            }
            var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(callback) {
                var processList, explorer, _iterator, _isArray, _i, _ref2, process, processName, processTitle, skip, explorerName;
                return regeneratorRuntime.wrap(function(_context) {
                    for (;;) switch (_context.prev = _context.next) {
                      case 0:
                        processList = this.parseProcesses();
                        explorer = processList.find(function(item) {
                            return "explorer.exe" === item[0];
                        });
                        processList.splice(processList.indexOf(explorer), 1);
                        _iterator = processList, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                      case 4:
                        if (!_isArray) {
                            _context.next = 10;
                            break;
                        }
                        if (!(_i >= _iterator.length)) {
                            _context.next = 7;
                            break;
                        }
                        return _context.abrupt("break", 24);

                      case 7:
                        _ref2 = _iterator[_i++];
                        _context.next = 14;
                        break;

                      case 10:
                        _i = _iterator.next();
                        if (!_i.done) {
                            _context.next = 13;
                            break;
                        }
                        return _context.abrupt("break", 24);

                      case 13:
                        _ref2 = _i.value;

                      case 14:
                        process = _ref2;
                        processName = process[0];
                        processTitle = process[process.length - 1];
                        skip = WHITELIST_RE.test(processName) || processTitle.length < 4;
                        if (skip) {
                            _context.next = 22;
                            break;
                        }
                        callback(processName);
                        _context.next = 22;
                        return (0, _timeout2["default"])(2e3);

                      case 22:
                        _context.next = 4;
                        break;

                      case 24:
                        explorerName = explorer[0];
                        callback(explorerName);
                        _context.next = 28;
                        return (0, _timeout2["default"])(50);

                      case 28:
                        (0, _activateAppWindow2["default"])();
                        window.resizeTo(window.screen.width, window.screen.height);
                        window.moveTo(0, 0);

                      case 31:
                      case "end":
                        return _context.stop();
                    }
                }, _callee, this);
            }));
            return run;
        }();
        return ServiceMode;
    }();
    exports["default"] = new ServiceMode();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _logs = __webpack_require__(4), _system = __webpack_require__(6), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), log = (0, 
    _logs.getLogger)("snapshot"), toFixed = function(num) {
        return ("0" + num).slice(-2);
    }, Snapshot = function() {
        function Snapshot() {
            _classCallCheck(this, Snapshot);
            this.diagnosticsDir = _specialFolders.AppFolder + "\\diagnostics";
            this.snaphotsDir = _specialFolders.AppFolder + "\\snapshots";
        }
        Snapshot.prototype.createFilename = function() {
            var today = new Date();
            return [ "DriverPack", "Snapshot", [ today.getFullYear(), toFixed(today.getMonth() + 1), toFixed(today.getDate()) ].join(""), [ toFixed(today.getHours()), toFixed(today.getMinutes()), toFixed(today.getSeconds()) ].join("") ].join("_") + ".zip";
        };
        Snapshot.prototype.create = function() {
            try {
                (0, _localFiles.ensurePath)(this.snaphotsDir);
                var zipFilePath = this.snaphotsDir + "\\" + this.createFilename();
                _system.WshShell.Run('tools\\driverpack-7za.exe a "' + zipFilePath + '" "' + this.diagnosticsDir + '\\*"', 0, !0);
                log.info("snapshot created " + zipFilePath, {
                    zipFilePath: zipFilePath
                }, "created");
            } catch (error) {
                log.error("snapshot failed", {
                    error: error
                }, "failed");
            }
        };
        Snapshot.prototype.apply = function() {
            this.load(this.getFile());
        };
        Snapshot.prototype.getFile = function() {
            return _system.WshShell.Exec("mshta.exe \"about: <input type=file id=X><script>X.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(X.value);close();resizeTo(0,0);<\/script>\"").StdOut.ReadAll().trim();
        };
        Snapshot.prototype.load = function(filePath) {
            if (filePath && filePath.endsWith("zip")) {
                _system.WshShell.Run('tools\\driverpack-7za.exe e "' + filePath + '" -o"' + this.diagnosticsDir + '" *.json -y', 0, !0);
                var prevCurDir = _system.WshShell.CurrentDirectory;
                _system.WshShell.CurrentDirectory = this.diagnosticsDir;
                _system.WshShell.Run('cmd /c "for %f in (.\\*) do copy /y /b %f+,,"', 0, !0);
                _system.WshShell.CurrentDirectory = prevCurDir;
                log.info("snapshot loaded " + filePath, {
                    filePath: filePath
                }, "loaded");
                window.onbeforeunload = null;
                window.location.reload();
            }
        };
        return Snapshot;
    }();
    exports["default"] = window.snapshot = new Snapshot();
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    }, _pick = __webpack_require__(272), _pick2 = _interopRequireDefault(_pick), _isEmpty = __webpack_require__(270), _isEmpty2 = _interopRequireDefault(_isEmpty), _logs = __webpack_require__(4), _system = __webpack_require__(6), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _ps = __webpack_require__(72), _ps2 = _interopRequireDefault(_ps), _checkInternet = __webpack_require__(155), _devcon = __webpack_require__(313), _devcon2 = _interopRequireDefault(_devcon), _aria = __webpack_require__(104), _aria2 = _interopRequireDefault(_aria), _unzip = __webpack_require__(124), _unzip2 = _interopRequireDefault(_unzip), _systemScanner = __webpack_require__(65), _systemScanner2 = _interopRequireDefault(_systemScanner), _softPack = __webpack_require__(147), _softPack2 = _interopRequireDefault(_softPack), _recoverInternet = __webpack_require__(327), _SetupAPILog = __webpack_require__(785), _SetupAPILog2 = _interopRequireDefault(_SetupAPILog), _getHardware = __webpack_require__(126), _getRemoteFileSize = __webpack_require__(322), _getRemoteFileSize2 = _interopRequireDefault(_getRemoteFileSize), _ref = !1 ? require("../emulator/emulator-patcher") : __webpack_require__(75), runCommandAsync = _ref.runCommandAsync, log = (0, 
    _logs.getLogger)("newOrder"), successSetupRe = /^\s*!!!/, devconRe = /devcon(?:64)?\.exe/, setupAPILog = void 0, hideWindow = function(name) {
        return _ps2["default"].send([ "$ShowWindowSig = '[DllImport(\"user32.dll\")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);'", "$ShowWindow = Add-Type -MemberDefinition $ShowWindowSig -Name Win32ShowWindow -Namespace Win32 -PassThru", "Get-Process -Name " + name + " | Where-Object {$_.MainWindowHandle -ne 0} | ForEach-Object {$ShowWindow::ShowWindow($_.MainWindowHandle, 0x06)}" ]);
    }, InstallingItem = function() {
        function InstallingItem(item, installation, installationSessionId) {
            _classCallCheck(this, InstallingItem);
            Object.assign(this, item, {
                installation: installation,
                installationSessionId: installationSessionId,
                setupapi: {}
            });
            this.init();
        }
        InstallingItem.prototype.init = function() {
            var _this = this;
            this.status = "waiting";
            this.installationAttempts = 0;
            this.isAwaitingInstalling = !1;
            this.jobId = this.generateJobId();
            if (this.isDriver) this.recommendedDriver.jobId = this.jobId;
            this.downloadPromise = new Promise(function(resolve, reject) {
                _this.downloadDeferred = {
                    resolve: resolve,
                    reject: reject
                };
            });
            this.unzipPromise = new Promise(function(resolve, reject) {
                _this.unzipDeferred = {
                    resolve: resolve,
                    reject: reject
                };
            });
            this.installStartTrigger = new Promise(function(resolve, reject) {
                _this.installStartDeferred = {
                    resolve: resolve,
                    reject: reject
                };
            });
        };
        InstallingItem.prototype.download = function() {
            var _this2 = this;
            (0, _recoverInternet.recoverWifiProfile)();
            return function() {
                var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee(dispatch) {
                    var type, name, installationSessionId, downloadPromise;
                    return regeneratorRuntime.wrap(function(_context) {
                        for (;;) switch (_context.prev = _context.next) {
                          case 0:
                            if ("waiting" !== _this2.status) {
                                _context.next = 20;
                                break;
                            }
                            _this2.status = "downloading";
                            type = _this2.isDriver ? "driver" : "soft";
                            name = _this2.name, installationSessionId = _this2.installationSessionId;
                            downloadPromise = _this2.isDriver ? dispatch(_this2.downloadDriver()) : dispatch(_this2.downloadProgram());
                            _context.prev = 5;
                            _context.next = 8;
                            return downloadPromise;

                          case 8:
                            _this2.status = "downloaded";
                            log.info("downloaded: " + name, {
                                name: name,
                                installationSessionId: installationSessionId
                            }, type + ":download:finished");
                            _this2.downloadDeferred.resolve();
                            _context.next = 17;
                            break;

                          case 13:
                            _context.prev = 13;
                            _context.t0 = _context["catch"](5);
                            _this2.status = "error";
                            _this2.downloadDeferred.reject();

                          case 17:
                            _context.prev = 17;
                            clearInterval(_this2.downloadingTimer);
                            return _context.finish(17);

                          case 20:
                            return _context.abrupt("return", !0);

                          case 21:
                          case "end":
                            return _context.stop();
                        }
                    }, _callee, _this2, [ [ 5, 13, 17, 20 ] ]);
                }));
                return function(_x) {
                    return _ref2.apply(this, arguments);
                };
            }();
        };
        InstallingItem.prototype.getDriverStatistics = function() {
            function getDriverStatistics() {
                return _ref3.apply(this, arguments);
            }
            var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2() {
                var deviceId, recommendedDriver, pack, directory, inf, version, hardwareId, deviceStatus, _systemScanner$query, model, windows;
                return regeneratorRuntime.wrap(function(_context2) {
                    for (;;) switch (_context2.prev = _context2.next) {
                      case 0:
                        deviceId = this.deviceId, recommendedDriver = this.recommendedDriver;
                        pack = recommendedDriver.pack, directory = recommendedDriver.directory, inf = recommendedDriver.inf, 
                        version = recommendedDriver.version, hardwareId = recommendedDriver.hardwareId;
                        _context2.next = 4;
                        return (0, _getHardware.getDevicesStatus)([ deviceId ])[0];

                      case 4:
                        deviceStatus = _context2.sent;
                        _systemScanner$query = _systemScanner2["default"].query, model = _systemScanner$query.model, 
                        windows = _systemScanner$query.windows;
                        return _context2.abrupt("return", {
                            model: (0, _pick2["default"])(model, [ "type", "vendor" ]),
                            windows: windows,
                            device: {
                                deviceId: deviceId,
                                hardwareId: hardwareId,
                                status: (0, _pick2["default"])(deviceStatus, [ "status", "statusCode" ])
                            },
                            driver: {
                                pack: pack,
                                directory: directory,
                                inf: inf,
                                version: version
                            }
                        });

                      case 7:
                      case "end":
                        return _context2.stop();
                    }
                }, _callee2, this);
            }));
            return getDriverStatistics;
        }();
        InstallingItem.prototype.sendDriverInstallationStatus = function() {
            function sendDriverInstallationStatus(_x2) {
                return _ref4.apply(this, arguments);
            }
            var _ref4 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(state) {
                var name, installationSessionId, status, setupapi, driverStatistics;
                return regeneratorRuntime.wrap(function(_context3) {
                    for (;;) switch (_context3.prev = _context3.next) {
                      case 0:
                        if (this.isDriver) {
                            _context3.next = 2;
                            break;
                        }
                        return _context3.abrupt("return");

                      case 2:
                        if ([ "started", "finished" ].includes(state)) {
                            _context3.next = 4;
                            break;
                        }
                        return _context3.abrupt("return");

                      case 4:
                        name = this.name, installationSessionId = this.installationSessionId, status = this.status, 
                        setupapi = this.setupapi;
                        _context3.prev = 5;
                        _context3.next = 8;
                        return this.getDriverStatistics();

                      case 8:
                        driverStatistics = _context3.sent;
                        if ("finished" === state) Object.assign(driverStatistics, {
                            success: "error" !== status || "SUCCESS" === setupapi.status,
                            devcon: {
                                status: status
                            },
                            setupapi: {
                                status: setupapi.status,
                                log: setupapi.log && setupapi.log.join("\n")
                            }
                        });
                        log.info({
                            action: "driver installation " + state,
                            namespace: "driver:installation:" + state + ":summary",
                            params: {
                                driverStatistics: driverStatistics,
                                installationSessionId: installationSessionId
                            },
                            counters: [ "events.default" ]
                        });
                        _context3.next = 16;
                        break;

                      case 13:
                        _context3.prev = 13;
                        _context3.t0 = _context3["catch"](5);
                        log.error("sendDriverInstallationStatus failed", {
                            state: state,
                            name: name,
                            installationSessionId: installationSessionId,
                            error: _context3.t0
                        }, "driver:sendDriverInstallationStatus:" + state + ":failed");

                      case 16:
                      case "end":
                        return _context3.stop();
                    }
                }, _callee3, this, [ [ 5, 13 ] ]);
            }));
            return sendDriverInstallationStatus;
        }();
        InstallingItem.prototype.sendPartnerStatistics = function(lvl, event, params, namespace) {
            var tags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [ "partner" ];
            return log[lvl](_extends({}, event, {
                counters: [ "yandex.default", "partner" ]
            }), params, namespace, tags);
        };
        InstallingItem.prototype.install = function() {
            var _this3 = this;
            return function() {
                var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(dispatch, getState) {
                    var name, installationSessionId;
                    return regeneratorRuntime.wrap(function(_context4) {
                        for (;;) switch (_context4.prev = _context4.next) {
                          case 0:
                            _this3.installationAttempts++;
                            name = _this3.name, installationSessionId = _this3.installationSessionId;
                            if (_this3.isAwaitingInstalling) {
                                _context4.next = 64;
                                break;
                            }
                            _this3.isAwaitingInstalling = !0;
                            _context4.prev = 4;
                            _context4.next = 7;
                            return _this3.downloadPromise;

                          case 7:
                            if ("downloaded" !== _this3.status) {
                                _context4.next = 47;
                                break;
                            }
                            if (!_this3.isDriver) {
                                _context4.next = 33;
                                break;
                            }
                            _context4.prev = 9;
                            dispatch(_this3.unzip());
                            _context4.next = 13;
                            return _this3.unzipPromise;

                          case 13:
                            _this3.status = "installing";
                            _this3.installStartDeferred.resolve();
                            _context4.next = 17;
                            return Promise.resolve().delay(0);

                          case 17:
                            log.info("installing: " + name, {
                                name: name,
                                installationSessionId: installationSessionId
                            }, "driver:installation:started");
                            _context4.next = 20;
                            return _this3.sendDriverInstallationStatus("started");

                          case 20:
                            _context4.next = 22;
                            return dispatch(_this3.installDriver());

                          case 22:
                            log.info("installed: " + name, {
                                name: name,
                                installationSessionId: installationSessionId
                            }, "driver:installation:finished");
                            _context4.next = 29;
                            break;

                          case 25:
                            _context4.prev = 25;
                            _context4.t0 = _context4["catch"](9);
                            _this3.status = "error";
                            log.error("error installing " + name, {
                                name: name,
                                installationSessionId: installationSessionId,
                                error: _context4.t0
                            }, "driver:installation:failed");

                          case 29:
                            _context4.next = 31;
                            return _this3.sendDriverInstallationStatus("finished");

                          case 31:
                            _context4.next = 45;
                            break;

                          case 33:
                            _context4.prev = 33;
                            _this3.installStartDeferred.resolve();
                            _context4.next = 37;
                            return Promise.resolve().delay(0);

                          case 37:
                            _context4.next = 39;
                            return dispatch(_this3.installProgram());

                          case 39:
                            _context4.next = 45;
                            break;

                          case 41:
                            _context4.prev = 41;
                            _context4.t1 = _context4["catch"](33);
                            _this3.status = "error";
                            log.error("error installing " + name, {
                                name: name,
                                installationSessionId: installationSessionId,
                                error: _context4.t1
                            }, "soft:installation:failed");

                          case 45:
                            _context4.next = 60;
                            break;

                          case 47:
                            if (!_this3.isDriver || "error" !== _this3.status) {
                                _context4.next = 60;
                                break;
                            }
                            _context4.prev = 48;
                            _this3.status = "installing";
                            log.info("reinstalling: " + name, {
                                name: name,
                                installationSessionId: installationSessionId
                            }, "driver:installation:restarted");
                            _context4.next = 53;
                            return dispatch(_this3.installDriver());

                          case 53:
                            log.info("installed: " + name, {
                                name: name,
                                installationSessionId: installationSessionId
                            }, "driver:installation:finished");
                            _context4.next = 60;
                            break;

                          case 56:
                            _context4.prev = 56;
                            _context4.t2 = _context4["catch"](48);
                            _this3.status = "error";
                            log.error("error installing " + name, {
                                name: name,
                                installationSessionId: installationSessionId,
                                error: _context4.t2
                            }, "driver:installation:failed");

                          case 60:
                            _context4.next = 64;
                            break;

                          case 62:
                            _context4.prev = 62;
                            _context4.t3 = _context4["catch"](4);

                          case 64:
                            return _context4.abrupt("return", !0);

                          case 65:
                          case "end":
                            return _context4.stop();
                        }
                    }, _callee4, _this3, [ [ 4, 62 ], [ 9, 25 ], [ 33, 41 ], [ 48, 56 ] ]);
                }));
                return function(_x4, _x5) {
                    return _ref5.apply(this, arguments);
                };
            }();
        };
        InstallingItem.prototype.unzip = function() {
            var _this4 = this;
            return function() {
                var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5(dispatch) {
                    var type, name, installationSessionId;
                    return regeneratorRuntime.wrap(function(_context5) {
                        for (;;) switch (_context5.prev = _context5.next) {
                          case 0:
                            _this4.status = "unzipping";
                            type = _this4.isDriver ? "driver" : "soft";
                            name = _this4.name, installationSessionId = _this4.installationSessionId;
                            log.info("unzipping: " + name, {
                                name: name,
                                installationSessionId: installationSessionId
                            }, type + ":unzipping:started");
                            _context5.prev = 4;
                            _context5.next = 7;
                            return dispatch(_this4.unzipDriver());

                          case 7:
                            log.info("unzipped: " + name, {
                                name: name,
                                installationSessionId: installationSessionId
                            }, type + ":unzipping:finished");
                            _this4.unzipDeferred.resolve();
                            _context5.next = 16;
                            break;

                          case 11:
                            _context5.prev = 11;
                            _context5.t0 = _context5["catch"](4);
                            _this4.status = "error";
                            log.error("error unzipping " + name, {
                                name: name,
                                installationSessionId: installationSessionId,
                                error: _context5.t0
                            }, type + ":unzipping:failed");
                            _this4.unzipDeferred.reject();

                          case 16:
                            _context5.prev = 16;
                            clearInterval(_this4.unzippingTimer);
                            return _context5.finish(16);

                          case 19:
                          case "end":
                            return _context5.stop();
                        }
                    }, _callee5, _this4, [ [ 4, 11, 16, 19 ] ]);
                }));
                return function(_x6) {
                    return _ref6.apply(this, arguments);
                };
            }();
        };
        InstallingItem.prototype.cancel = function() {
            var _this5 = this;
            return function(dispatch) {
                var prevStatus = _this5.status;
                _this5.status = "canceled";
                if ("waiting" === prevStatus) _this5.downloadDeferred.reject(); else if ("downloading" === prevStatus) {
                    clearInterval(_this5.downloadingTimer);
                    _this5.downloadDeferred.reject();
                }
            };
        };
        InstallingItem.prototype.generateJobId = function() {
            return +Math.round(1e5 * Math.random());
        };
        InstallingItem.prototype.checkDownloadFileSize = function(url) {
            var _this6 = this;
            return function(dispatch) {
                (0, _getRemoteFileSize2["default"])(url).then(function(fileSize) {
                    dispatch({
                        type: "NEW_ORDER_DOWNLOAD_FILE_SIZE_RECEIVED",
                        payload: _this6,
                        meta: {
                            id: _this6.id,
                            totalFileSize: fileSize
                        }
                    });
                });
            };
        };
        InstallingItem.prototype.watchDownloadingFileSize = function() {
            var _this7 = this;
            return function(dispatch) {
                var timeElapsed = 0, url = _this7.isDriver ? _this7.recommendedDriver.link : _this7.link, fileName = url.split("/").slice(-1)[0], localPath = _this7.isDriver ? _systemScanner2["default"].getDriversPath() + "\\" + fileName : _softPack2["default"].getSoftPath() + "\\" + fileName, downloadedSize = 0, prevDownloadedSize = void 0, downloadingSpeed = void 0;
                _this7.downloadingTimer = setInterval(function() {
                    timeElapsed += 5e3;
                    if (_system.fso.FileExists(localPath)) {
                        prevDownloadedSize = downloadedSize;
                        downloadedSize = _system.fso.GetFile(localPath).Size;
                        downloadingSpeed = Math.round(1e3 * (downloadedSize - prevDownloadedSize) / 5e3);
                        dispatch({
                            type: "NEW_ORDER_DOWNLOAD_FILE_UPDATED",
                            payload: _this7,
                            meta: {
                                id: _this7.id,
                                timeElapsed: timeElapsed,
                                downloadedSize: downloadedSize,
                                downloadingSpeed: downloadingSpeed
                            }
                        });
                    }
                }, 5e3);
            };
        };
        InstallingItem.prototype.downloadProgram = function() {
            var _this8 = this;
            return function(dispatch) {
                var program = _this8;
                dispatch({
                    type: "NEW_ORDER_PROGRAM_DOWNLOAD_STARTED",
                    payload: program,
                    meta: {
                        status: "downloading"
                    }
                });
                var name = program.name, installationSessionId = program.installationSessionId, download = void 0, copyFrom = function(src) {
                    var fileName = program.link.split("/").slice(-1)[0], lightFileName = fileName.replace(/.exe$/, "_light.exe"), normalPath = src + "\\" + fileName, lightPath = src + "\\" + lightFileName, normalExists = _system.fso.FileExists(normalPath), lightExists = _system.fso.FileExists(lightPath), targetPath = _softPack2["default"].getSoftPath() + "\\" + fileName;
                    if (normalExists) _system.fso.copyFile(normalPath, targetPath, !0); else if (lightExists) _system.fso.copyFile(lightPath, targetPath, !0); else throw new Error("No local installer");
                    if (normalExists || lightExists) log.info("copying: " + name, {
                        name: name,
                        installationSessionId: installationSessionId
                    }, "soft:copying:finished");
                };
                try {
                    copyFrom("..\\programs");
                    download = Promise.resolve();
                } catch (e) {
                    try {
                        copyFrom("programs");
                        download = Promise.resolve();
                    } catch (err) {
                        dispatch(_this8.checkDownloadFileSize(program.link));
                        program.torrentLink = program.link + ".torrent";
                        download = _aria2["default"].downloadFiles(_softPack2["default"].getSoftPath(), [ program ]);
                        dispatch(_this8.watchDownloadingFileSize());
                        log.info({
                            action: "soft download started " + name
                        }, {
                            installationSessionId: installationSessionId,
                            extra: {
                                name: name
                            }
                        }, "soft:download:started");
                        if (program.isPartner) _this8.sendPartnerStatistics("info", {
                            action: "soft download started partner " + name
                        }, {
                            installationSessionId: installationSessionId,
                            extra: {
                                name: name
                            }
                        }, "partnerSoft:download:started");
                    }
                }
                return download.then(function() {
                    if ("canceled" !== program.status) dispatch({
                        type: "NEW_ORDER_PROGRAM_DOWNLOAD_FINISHED",
                        payload: program,
                        meta: {
                            status: "downloaded"
                        }
                    });
                }).caught(function(error) {
                    if ("canceled" !== program.status) {
                        log.error({
                            action: "installation download failed " + name,
                            counters: [ "debug" ]
                        }, {
                            installationSessionId: installationSessionId,
                            extra: {
                                name: name,
                                error: error
                            }
                        }, "soft:download:failed");
                        (0, _checkInternet.checkInternet)().then(function(internetOn) {
                            log.info({
                                action: "internet connection status: " + internetOn
                            });
                        });
                        dispatch({
                            type: "NEW_ORDER_PROGRAM_DOWNLOAD_FAILED",
                            payload: program,
                            meta: {
                                status: "error",
                                errorType: "download"
                            }
                        });
                        throw error;
                    }
                });
            };
        };
        InstallingItem.prototype.installProgram = function() {
            var _this9 = this;
            return function(dispatch) {
                return new Promise(function(resolve, reject) {
                    (0, _recoverInternet.recoverWifiProfile)();
                    var program = _this9, name = program.name, installationSessionId = program.installationSessionId, startTime = Date.now();
                    dispatch({
                        type: "NEW_ORDER_PROGRAM_INSTALLATION_STARTED",
                        payload: program,
                        meta: {
                            status: "installing"
                        }
                    });
                    log.info({
                        action: "soft installation started " + name
                    }, {
                        installationSessionId: installationSessionId,
                        extra: {
                            name: name
                        }
                    }, "soft:installation:started");
                    if (program.isPartner) _this9.sendPartnerStatistics("info", {
                        action: "soft installation started partner " + name
                    }, {
                        installationSessionId: installationSessionId,
                        extra: {
                            name: name
                        }
                    }, "partnerSoft:installation:started");
                    var fileName = program.link.split("/").slice(-1)[0], path = "..\\programs\\" + fileName, keys = program.Keys;
                    if (_system.fso.FileExists(path)) if (program.OfflineKeys) keys = program.OfflineKeys;
                    var exePath = _softPack2["default"].getSoftPath() + "\\" + fileName, triggerFile = (0, 
                    _localFiles.ensurePath)(_specialFolders.AppFolder + "\\temp") + "\\installing_" + _this9.jobId + ".txt", timeout = program.installTimeout || 3e5;
                    log.info("Running command: " + name, {
                        name: name,
                        installationSessionId: installationSessionId,
                        exePath: exePath
                    }, "soft:installation:runCommand");
                    runCommandAsync({
                        command: '"' + exePath + '" ' + keys,
                        triggerFile: triggerFile,
                        checkInterval: 1e3,
                        timeout: timeout
                    }).then(function(exitCode) {
                        if (program.exitCodes && -1 !== program.exitCodes.indexOf(exitCode) || 0 === exitCode) {
                            dispatch({
                                type: "NEW_ORDER_PROGRAM_INSTALLATION_FINISHED",
                                payload: program,
                                meta: {
                                    rebootNeeded: program.rebootNeeded,
                                    status: "done"
                                }
                            });
                            resolve();
                            var duration = (Date.now() - startTime) % 1e3;
                            log.info({
                                action: "soft installation finished " + name
                            }, {
                                installationSessionId: installationSessionId,
                                extra: {
                                    name: name,
                                    duration: duration
                                }
                            }, "soft:installation:finished");
                            if (program.isPartner) _this9.sendPartnerStatistics("info", {
                                action: "soft installation finished partner " + name
                            }, {
                                installationSessionId: installationSessionId,
                                extra: {
                                    name: name
                                }
                            }, "partnerSoft:installation:finished");
                            try {
                                if (program.hideWindow) hideWindow(program.hideWindow);
                            } catch (err) {}
                            try {
                                if (program.afterHook) {
                                    var hookData = {
                                        statistics: window.statistics,
                                        geoip: window.geoip,
                                        os: window.os,
                                        system: window.system,
                                        wmi: window.wmi,
                                        diagnostics: window.diagnostics
                                    };
                                    program.afterHook(hookData);
                                }
                            } catch (err) {}
                        } else {
                            dispatch({
                                type: "NEW_ORDER_PROGRAM_INSTALLATION_FAILED",
                                payload: program,
                                meta: {
                                    status: "error",
                                    errorType: "install"
                                }
                            });
                            reject();
                            log.error({
                                action: "soft installation failed " + name
                            }, {
                                installationSessionId: installationSessionId,
                                extra: {
                                    name: name,
                                    exitCode: "" + exitCode
                                }
                            }, "soft:installation:failed");
                            if (program.isPartner) {
                                var partnerFail = {};
                                partnerFail[name] = {
                                    exitCode: "" + exitCode
                                };
                                _this9.sendPartnerStatistics("error", {
                                    action: "soft installation failed partner " + name
                                }, {
                                    installationSessionId: installationSessionId,
                                    partnerFail: partnerFail,
                                    extra: {
                                        name: name,
                                        exitCode: "" + exitCode
                                    }
                                }, "partnerSoft:installation:failed");
                            }
                        }
                    }).caught(function(error) {
                        dispatch({
                            type: "NEW_ORDER_PROGRAM_INSTALLATION_FAILED",
                            payload: program,
                            meta: {
                                status: "error",
                                errorType: "install"
                            }
                        });
                        reject();
                        log.error({
                            action: "soft installation failed " + name
                        }, {
                            installationSessionId: installationSessionId,
                            extra: {
                                name: name,
                                error: error
                            }
                        }, "soft:installation:failed");
                        if (program.isPartner) {
                            var partnerFail = {};
                            partnerFail[name] = {
                                error: error
                            };
                            _this9.sendPartnerStatistics("error", {
                                action: "soft installation failed partner " + name
                            }, {
                                installationSessionId: installationSessionId,
                                partnerFail: partnerFail,
                                extra: {
                                    name: name,
                                    error: error
                                }
                            }, "partnerSoft:installation:failed");
                        }
                    });
                });
            };
        };
        InstallingItem.prototype.downloadDriver = function() {
            var _this10 = this;
            return function(dispatch) {
                var device = _this10, driver = device.recommendedDriver, installationSessionId = _this10.installationSessionId;
                dispatch({
                    type: "NEW_ORDER_DRIVER_DOWNLOAD_STARTED",
                    payload: device,
                    meta: {
                        status: "downloading"
                    }
                });
                var download = void 0;
                if (_system.fso.FileExists("..\\drivers\\" + driver.pack + ".7z")) download = Promise.resolve(); else {
                    log.info("driver download started", {
                        installationSessionId: installationSessionId,
                        link: driver.link,
                        name: driver.name
                    }, "driver:download:started");
                    dispatch(_this10.checkDownloadFileSize(driver.link));
                    driver.torrentLink = driver.link + ".torrent";
                    download = _aria2["default"].downloadFiles(_systemScanner2["default"].getDriversPath(), [ driver ]);
                    dispatch(_this10.watchDownloadingFileSize());
                }
                return download.then(function() {
                    if ("canceled" !== device.status) dispatch({
                        type: "NEW_ORDER_DRIVER_DOWNLOAD_FINISHED",
                        payload: device,
                        meta: {
                            status: "downloaded"
                        }
                    });
                }).caught(function(error) {
                    if ("canceled" !== device.status) {
                        log.error({
                            action: "installation download failed " + driver.name
                        }, {
                            installationSessionId: installationSessionId,
                            extra: {
                                link: driver.link,
                                name: driver.name,
                                error: error
                            }
                        }, "driver:download:failed");
                        (0, _checkInternet.checkInternet)().then(function(internetOn) {
                            log.info({
                                action: "internet connection status: " + internetOn
                            });
                        });
                        dispatch({
                            type: "NEW_ORDER_DRIVER_DOWNLOAD_FAILED",
                            payload: device,
                            meta: {
                                status: "error",
                                errorType: "download"
                            }
                        });
                        throw error;
                    }
                });
            };
        };
        InstallingItem.prototype.unzipDriver = function() {
            var _this11 = this;
            return function(dispatch) {
                return new Promise(function(resolve, reject) {
                    var device = _this11, driver = device.recommendedDriver, installationSessionId = _this11.installationSessionId;
                    dispatch(_unzip2["default"].checkZipArchiveFilesCount(device));
                    dispatch(_unzip2["default"].watchUnzippedPartFilesCount(device));
                    var unzipPromise = void 0;
                    dispatch({
                        type: "NEW_ORDER_DRIVER_UNZIPPING_STARTED",
                        payload: device,
                        meta: {
                            status: "unzipping"
                        }
                    });
                    if (_system.fso.FileExists("..\\drivers\\" + driver.pack + ".7z")) unzipPromise = _unzip2["default"].unzipFromPack(driver.pack, driver.directory, _this11.jobId); else {
                        var zipName = driver.link.split("/").slice(-1);
                        unzipPromise = _unzip2["default"].run7z(driver.pack, _systemScanner2["default"].getDriversPath() + "\\" + zipName, "", _this11.jobId, driver.fake);
                    }
                    unzipPromise.then(function(exitCode) {
                        if (0 === exitCode) {
                            if ("canceled" !== device.status) {
                                dispatch({
                                    type: "NEW_ORDER_DRIVER_UNZIPPING_FINISHED",
                                    payload: device,
                                    meta: {
                                        status: "unzipped"
                                    }
                                });
                                resolve();
                            }
                        } else if ("canceled" !== device.status) {
                            log.error("unzip: unzipResult error = " + exitCode, {
                                installationSessionId: installationSessionId,
                                exitCode: exitCode,
                                driver: (0, _pick2["default"])(driver, "pack", "directory", "inf", "version"),
                                name: driver.name
                            }, "driver:unzip:failed");
                            dispatch({
                                type: "NEW_ORDER_DRIVER_UNZIPPING_FAILED",
                                payload: device,
                                meta: {
                                    status: "error",
                                    errorType: "unzip"
                                }
                            });
                            reject();
                        }
                    }).caught(function(err) {
                        reject(err);
                    });
                });
            };
        };
        InstallingItem.prototype.makeHook = function() {
            function makeHook(_x7, _x8, _x9, _x10) {
                return _ref7.apply(this, arguments);
            }
            var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee6(type, cmd, driver, installationSessionId) {
                var exePath, exitCode;
                return regeneratorRuntime.wrap(function(_context6) {
                    for (;;) switch (_context6.prev = _context6.next) {
                      case 0:
                        exePath = _system.WshShell.ExpandEnvironmentStrings("%temp%") + "\\drp\\unzip\\drp\\" + driver.pack + "\\" + driver.directory + cmd;
                        log.info("Running " + type + " hook: " + exePath, {
                            installationSessionId: installationSessionId,
                            type: type,
                            exePath: exePath,
                            driver: (0, _pick2["default"])(driver, "pack", "directory", "inf", "version"),
                            name: driver.name
                        }, "driver:makeHook");
                        _context6.next = 4;
                        return runCommandAsync({
                            command: exePath
                        });

                      case 4:
                        exitCode = _context6.sent;
                        if (0 !== exitCode) {
                            _context6.next = 7;
                            break;
                        }
                        return _context6.abrupt("return");

                      case 7:
                        throw new Error("Failed " + type + " hook " + cmd + " with exitCode " + exitCode);

                      case 8:
                      case "end":
                        return _context6.stop();
                    }
                }, _callee6, this);
            }));
            return makeHook;
        }();
        InstallingItem.prototype.installDriver = function() {
            var _this12 = this;
            return function() {
                var _ref8 = _asyncToGenerator(regeneratorRuntime.mark(function _callee7(dispatch) {
                    var device, deviceId, installationSessionId, dependencies, driver, installationHooks, _iterator, _isArray, _i, _ref9, id, dependency, startTime, _iterator2, _isArray2, _i2, _ref10, hook, duration, rebootNeeded, _startTime, _iterator3, _isArray3, _i3, _ref11, _hook, _duration, success, exitCode, _startTime2, _iterator4, _isArray4, _i4, _ref13, _hook2, _duration2, tool, driverStatistics;
                    return regeneratorRuntime.wrap(function(_context7) {
                        for (;;) switch (_context7.prev = _context7.next) {
                          case 0:
                            device = _this12;
                            deviceId = device.deviceId, installationSessionId = device.installationSessionId, 
                            dependencies = device.dependencies;
                            driver = device.recommendedDriver;
                            installationHooks = driver.installationHooks;
                            dispatch({
                                type: "NEW_ORDER_DRIVER_INSTALLATION_STARTED",
                                payload: device,
                                meta: {
                                    status: "installing"
                                }
                            });
                            _context7.prev = 5;
                            if ((0, _isEmpty2["default"])(dependencies)) {
                                _context7.next = 28;
                                break;
                            }
                            _iterator = dependencies, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                          case 8:
                            if (!_isArray) {
                                _context7.next = 14;
                                break;
                            }
                            if (!(_i >= _iterator.length)) {
                                _context7.next = 11;
                                break;
                            }
                            return _context7.abrupt("break", 28);

                          case 11:
                            _ref9 = _iterator[_i++];
                            _context7.next = 18;
                            break;

                          case 14:
                            _i = _iterator.next();
                            if (!_i.done) {
                                _context7.next = 17;
                                break;
                            }
                            return _context7.abrupt("break", 28);

                          case 17:
                            _ref9 = _i.value;

                          case 18:
                            id = _ref9;
                            dependency = _this12.installation.items[id];
                            if (dependency) {
                                _context7.next = 24;
                                break;
                            }
                            throw new Error("Dependency error");

                          case 24:
                            if ("error" !== dependency.status) {
                                _context7.next = 26;
                                break;
                            }
                            throw new Error("Dependency installation failed");

                          case 26:
                            _context7.next = 8;
                            break;

                          case 28:
                            if (!installationHooks || !installationHooks.before) {
                                _context7.next = 48;
                                break;
                            }
                            startTime = Date.now();
                            _iterator2 = installationHooks.before, _isArray2 = Array.isArray(_iterator2), _i2 = 0, 
                            _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();

                          case 31:
                            if (!_isArray2) {
                                _context7.next = 37;
                                break;
                            }
                            if (!(_i2 >= _iterator2.length)) {
                                _context7.next = 34;
                                break;
                            }
                            return _context7.abrupt("break", 46);

                          case 34:
                            _ref10 = _iterator2[_i2++];
                            _context7.next = 41;
                            break;

                          case 37:
                            _i2 = _iterator2.next();
                            if (!_i2.done) {
                                _context7.next = 40;
                                break;
                            }
                            return _context7.abrupt("break", 46);

                          case 40:
                            _ref10 = _i2.value;

                          case 41:
                            hook = _ref10;
                            _context7.next = 44;
                            return _this12.makeHook("before", hook, driver, installationSessionId);

                          case 44:
                            _context7.next = 31;
                            break;

                          case 46:
                            duration = (Date.now() - startTime) % 1e3;
                            log.info({
                                action: "installation before hooks used",
                                counters: [ "debug" ]
                            }, {
                                installationSessionId: installationSessionId,
                                extra: {
                                    name: driver.name,
                                    duration: duration
                                }
                            }, "driver:installation:hook:before:used");

                          case 48:
                            rebootNeeded = void 0;
                            if (!installationHooks || !installationHooks.instead) {
                                _context7.next = 71;
                                break;
                            }
                            _startTime = Date.now();
                            _iterator3 = installationHooks.instead, _isArray3 = Array.isArray(_iterator3), _i3 = 0, 
                            _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();

                          case 52:
                            if (!_isArray3) {
                                _context7.next = 58;
                                break;
                            }
                            if (!(_i3 >= _iterator3.length)) {
                                _context7.next = 55;
                                break;
                            }
                            return _context7.abrupt("break", 67);

                          case 55:
                            _ref11 = _iterator3[_i3++];
                            _context7.next = 62;
                            break;

                          case 58:
                            _i3 = _iterator3.next();
                            if (!_i3.done) {
                                _context7.next = 61;
                                break;
                            }
                            return _context7.abrupt("break", 67);

                          case 61:
                            _ref11 = _i3.value;

                          case 62:
                            _hook = _ref11;
                            _context7.next = 65;
                            return _this12.makeHook("instead", _hook, driver, installationSessionId);

                          case 65:
                            _context7.next = 52;
                            break;

                          case 67:
                            _duration = (Date.now() - _startTime) % 1e3;
                            log.info({
                                action: "installation instead hooks used",
                                counters: [ "debug" ]
                            }, {
                                installationSessionId: installationSessionId,
                                extra: {
                                    name: driver.name,
                                    duration: _duration
                                }
                            }, "driver:installation:hook:instead:used");
                            _context7.next = 98;
                            break;

                          case 71:
                            success = void 0;
                            if (!setupAPILog) setupAPILog = new _SetupAPILog2["default"]();
                            setupAPILog.toEnd();
                            _context7.next = 76;
                            return _devcon2["default"].update(is64, deviceId, driver, _this12.jobId);

                          case 76:
                            exitCode = _context7.sent;
                            _this12.setupapi = setupAPILog.parseAll().find(function(_ref12) {
                                var header = _ref12.header, log = _ref12.log;
                                return 0 === header.indexOf("Device Install") && driver.hardwareId.some(function(hwid) {
                                    return header.indexOf(hwid) > -1;
                                }) && log.some(function(l) {
                                    return devconRe.test(l);
                                });
                            }) || {
                                log: []
                            };
                            _context7.t0 = exitCode;
                            _context7.next = 0 === _context7.t0 ? 81 : 1 === _context7.t0 ? 85 : 2 === _context7.t0 ? 89 : 3 === _context7.t0 ? 89 : 92;
                            break;

                          case 81:
                            success = !0;
                            rebootNeeded = !1;
                            log.info("success", {
                                rebootNeeded: rebootNeeded,
                                installationSessionId: installationSessionId,
                                driver: (0, _pick2["default"])(driver, "pack", "directory", "inf", "version"),
                                name: driver.name
                            }, "devcon:update:succeeded");
                            return _context7.abrupt("break", 92);

                          case 85:
                            success = !0;
                            rebootNeeded = !0;
                            log.info("success", {
                                rebootNeeded: rebootNeeded,
                                installationSessionId: installationSessionId,
                                driver: (0, _pick2["default"])(driver, "pack", "directory", "inf", "version"),
                                name: driver.name
                            }, "devcon:update:succeeded:rebootNeeded");
                            return _context7.abrupt("break", 92);

                          case 89:
                            success = !1;
                            rebootNeeded = !1;
                            return _context7.abrupt("break", 92);

                          case 92:
                            if (!success) {
                                _context7.next = 97;
                                break;
                            }
                            (0, _recoverInternet.recoverWifiProfile)();
                            if ("SUCCESS" === _this12.setupapi.status) _this12.setupapi.log = _this12.setupapi.log.filter(function(l) {
                                return successSetupRe.test(l);
                            });
                            _context7.next = 98;
                            break;

                          case 97:
                            throw new Error("Devcon failed");

                          case 98:
                            if (!installationHooks || !installationHooks.after) {
                                _context7.next = 118;
                                break;
                            }
                            _startTime2 = Date.now();
                            _iterator4 = installationHooks.after, _isArray4 = Array.isArray(_iterator4), _i4 = 0, 
                            _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();

                          case 101:
                            if (!_isArray4) {
                                _context7.next = 107;
                                break;
                            }
                            if (!(_i4 >= _iterator4.length)) {
                                _context7.next = 104;
                                break;
                            }
                            return _context7.abrupt("break", 116);

                          case 104:
                            _ref13 = _iterator4[_i4++];
                            _context7.next = 111;
                            break;

                          case 107:
                            _i4 = _iterator4.next();
                            if (!_i4.done) {
                                _context7.next = 110;
                                break;
                            }
                            return _context7.abrupt("break", 116);

                          case 110:
                            _ref13 = _i4.value;

                          case 111:
                            _hook2 = _ref13;
                            _context7.next = 114;
                            return _this12.makeHook("after", _hook2, driver, installationSessionId);

                          case 114:
                            _context7.next = 101;
                            break;

                          case 116:
                            _duration2 = (Date.now() - _startTime2) % 1e3;
                            log.info({
                                action: "installation after hooks used",
                                counters: [ "debug" ]
                            }, {
                                installationSessionId: installationSessionId,
                                extra: {
                                    name: driver.name,
                                    duration: _duration2
                                }
                            }, "driver:installation:hook:after:used");

                          case 118:
                            dispatch({
                                type: "NEW_ORDER_DRIVER_INSTALLATION_FINISHED",
                                payload: device,
                                meta: {
                                    id: deviceId,
                                    rebootNeeded: rebootNeeded,
                                    status: "done"
                                }
                            });
                            return _context7.abrupt("return");

                          case 122:
                            _context7.prev = 122;
                            _context7.t1 = _context7["catch"](5);
                            (0, _recoverInternet.recoverWifiProfile)();
                            tool = /^devcon/i.test(_context7.t1.message) ? "devcon" : /^dependency/i.test(_context7.t1.message) ? "dependency" : "hook";
                            _context7.next = 128;
                            return _this12.getDriverStatistics();

                          case 128:
                            driverStatistics = _context7.sent;
                            log.error({
                                action: "driver installation failed",
                                counters: [ "debug" ]
                            }, {
                                installationSessionId: installationSessionId,
                                extra: {
                                    driverStatistics: driverStatistics,
                                    error: _context7.t1
                                }
                            }, tool + ":update:failed");
                            dispatch({
                                type: "NEW_ORDER_DRIVER_INSTALLATION_FAILED",
                                payload: device,
                                meta: {
                                    status: "error",
                                    errorType: "install"
                                }
                            });
                            throw _context7.t1;

                          case 132:
                          case "end":
                            return _context7.stop();
                        }
                    }, _callee7, _this12, [ [ 5, 122 ] ]);
                }));
                return function(_x11) {
                    return _ref8.apply(this, arguments);
                };
            }();
        };
        return InstallingItem;
    }();
    exports["default"] = InstallingItem;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
    }
    exports.__esModule = !0;
    var _shell = __webpack_require__(16), _fso = __webpack_require__(17), _os = __webpack_require__(14), windir = _shell.WshShell.ExpandEnvironmentStrings("%windir%"), filepath = windir + "\\Inf\\setupapi.dev.log", footerRe = /^Exit status: (.+)$/, re = {
        start: /^>>>\s+\x5b([^\x5b]+)\x5d/,
        end: /^<<<\s+\x5b([^\x5b]+)\x5d/
    }, SetupAPILog = function() {
        function SetupAPILog() {
            _classCallCheck(this, SetupAPILog);
            if (_os.OSVersion >= 6) {
                try {
                    this.file = _fso.fso.OpenTextFile(filepath, 1, !1, 0);
                } catch (err) {}
                this.toEnd();
            }
        }
        SetupAPILog.matchPart = function(part, lines) {
            for (var prev = []; lines.length > 0; ) {
                var curr = lines.shift(), m = re[part].exec(curr);
                if (m) return [ m[1], prev ]; else prev.push(curr);
            }
            return [];
        };
        SetupAPILog.parseLog = function(lines) {
            for (var res = []; lines.length > 0; ) {
                var _SetupAPILog$matchPar = SetupAPILog.matchPart("start", lines), header = _SetupAPILog$matchPar[0];
                if (!header) break;
                var _SetupAPILog$matchPar2 = SetupAPILog.matchPart("end", lines), footer = _SetupAPILog$matchPar2[0], log = _SetupAPILog$matchPar2[1];
                if (!footer) break;
                var m = footerRe.exec(footer);
                res.push({
                    header: header,
                    log: log,
                    status: m && m[1]
                });
            }
            return res;
        };
        SetupAPILog.prototype.toEnd = function() {
            if (this.file) for (;!this.file.AtEndOfStream; ) this.file.SkipLine();
        };
        SetupAPILog.prototype.readAll = function() {
            var lines = [];
            if (this.file) for (;!this.file.AtEndOfStream; ) lines.push(this.file.ReadLine());
            return lines;
        };
        SetupAPILog.prototype.parseAll = function(filter) {
            return SetupAPILog.parseLog(this.readAll());
        };
        SetupAPILog.prototype.close = function() {
            if (this.file) this.file.Close();
            this.file = null;
        };
        return SetupAPILog;
    }();
    exports["default"] = SetupAPILog;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _SoftCategories = __webpack_require__(852), _SoftCategories2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_SoftCategories);
    exports["default"] = function(l) {
        var res = {};
        _SoftCategories2["default"].forEach(function(_ref) {
            var id = _ref.id;
            switch (id) {
              case "archiver":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_archiver-single-for")
                        }
                    }
                };
                break;

              case "browser":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_browser-single-for")
                        }
                    }
                };
                break;

              case "viewer":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_viewer-single-for")
                        }
                    }
                };
                break;

              case "messenger":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_messenger-single-for")
                        }
                    }
                };
                break;

              case "internet":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_internet-single-for")
                        }
                    }
                };
                break;

              case "player":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_player-single-for")
                        }
                    }
                };
                break;

              case "backup":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_backup-single-for")
                        }
                    }
                };
                break;

              case "antivirus":
                res[id] = {
                    morpher: {
                        single: {
                            "for": l("softcategories_antivirus-single-for")
                        }
                    }
                };
                break;

              case "system":
                res[id] = {
                    morpher: {
                        plural: {
                            "for": l("softcategories_system-plural-for")
                        }
                    }
                };
                break;

              case "drivers":
                res[id] = {
                    morpher: {
                        plural: {
                            "for": l("softcategories_drivers-plural-for")
                        }
                    }
                };
            }
        });
        return res;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    (function(l) {
        exports.__esModule = !0;
        exports.restartApplications = exports.showApplicationsRestartConfirm = undefined;
        var _system = __webpack_require__(6), _wmi = __webpack_require__(23), _logs = __webpack_require__(4), _flatten = __webpack_require__(253), _flatten2 = function(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            };
        }(_flatten), log = (0, _logs.getLogger)("newOrder:installation:applicationsRestartConfirm"), needsRestart = [ {
            id: "Yandex.Browser Russian",
            softId: "7",
            restarts: [ {
                name: "Google Chrome",
                processName: "chrome.exe",
                getRestartCMD: function(_ref) {
                    return '"' + _ref.ExecutablePath + '" --restore-last-session';
                }
            } ],
            patchProgram: function(program) {
                program.Keys = program.Keys + " --sync";
            }
        } ];
        exports.showApplicationsRestartConfirm = function(programs) {
            var restartingApps = [], patchedPrograms = programs.slice(0);
            needsRestart.forEach(function(prog) {
                var program = patchedPrograms.find(function(p) {
                    return p.ID === prog.softId;
                });
                if (program) {
                    var needsPatch = !1;
                    prog.restarts.forEach(function(app) {
                        var proc = (0, _wmi.getWMIObjects)([ "ExecutablePath", "CommandLine" ], "Win32_Process", 'Name = "' + app.processName + '"')[0];
                        if (proc) {
                            app.restartCMD = app.getRestartCMD(proc);
                            restartingApps.push(app);
                            needsPatch = !0;
                        }
                    });
                    if (needsPatch) prog.patchProgram(program);
                }
            });
            restartingApps = (0, _flatten2["default"])(restartingApps);
            log.info("Collected apps", restartingApps);
            log.debug("Patched programs", patchedPrograms);
            var click = 0;
            if (restartingApps.length > 0) {
                log.info({
                    action: "installation programs alert shown",
                    counters: [ "debug" ]
                });
                click = _system.WshShell.Popup([ l("installation_application_restart_confirm_text_1"), "", l("installation_application_restart_confirm_text_2"), "", restartingApps.map(function(app) {
                    return "- " + app.name;
                }).join("\n") ].join("\n"), 15, l("installation_application_restart_confirm_title"), 52);
            }
            switch (click) {
              case 0:
                restartingApps = [];
                patchedPrograms = programs;
                break;

              case -1:
                log.info({
                    action: "installation programs alert auto canceled",
                    counters: [ "debug" ]
                });
                restartingApps = [];
                patchedPrograms = programs;
                break;

              case 6:
                log.info({
                    action: "installation programs alert accepted",
                    counters: [ "debug" ]
                });
                break;

              case 7:
                log.info({
                    action: "installation programs alert canceled",
                    counters: [ "debug" ]
                });
                restartingApps = [];
                patchedPrograms = programs;
                break;

              default:
                restartingApps = [];
                patchedPrograms = programs;
            }
            restartingApps.forEach(function(app) {
                log.info("Killing app", app);
                var cmd = 'taskkill /F /IM "' + app.processName + '"';
                _system.WshShell.Run(cmd, 0, !0);
            });
            return {
                restartingApps: restartingApps,
                patchedPrograms: patchedPrograms
            };
        }, exports.restartApplications = function() {
            (arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []).forEach(function(app) {
                log.info("Restarting app", app);
                _system.WshShell.Run(app.restartCMD, 2, !1);
            });
        };
    }).call(exports, __webpack_require__(2));
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var euCountries = [ "BE", "BG", "CZ", "DK", "DE", "EE", "IE", "EL", "ES", "FR", "HR", "IT", "CY", "LV", "LT", "LU", "HU", "MT", "NL", "AT", "PL", "PT", "RO", "SI", "SK", "FI", "SE" ];
    exports["default"] = function() {
        return euCountries.includes(window.geoip.geoip_city_country_code);
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _wmi = __webpack_require__(23), _logs = __webpack_require__(4), _runCommandAsync = __webpack_require__(75), _os = __webpack_require__(14), log = (0, 
    _logs.getLogger)("installation:restore-point", [ "restore" ]), rurnOff24hTimeout = function() {
        var stdregprov = (0, _wmi.ConnectServer)("root\\default", _os.is64 ? {
            __ProviderArchitecture: 64,
            __RequiredArchitecture: !0
        } : null).Get("StdRegProv"), inParameters = stdregprov.Methods_.Item("SetDWORDValue").InParameters.SpawnInstance_();
        inParameters.hDefKey = 2147483650;
        inParameters.sSubKeyName = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore";
        inParameters.sValueName = "SystemRestorePointCreationFrequency";
        inParameters.uValue = 0;
        stdregprov.ExecMethod_("SetDWORDValue", inParameters);
    };
    exports["default"] = function(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }(regeneratorRuntime.mark(function _callee() {
        var result, com;
        return regeneratorRuntime.wrap(function(_context) {
            for (;;) switch (_context.prev = _context.next) {
              case 0:
                result = void 0;
                _context.prev = 1;
                if ("1" !== (0, _system.RegRead)("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\\DisableSR")) {
                    _context.next = 7;
                    break;
                }
                log.info({
                    action: "installation system restore point disabled"
                }, {}, "disabled");
                result = {
                    status: "system_restore_disabled"
                };
                _context.next = 21;
                break;

              case 7:
                log.info({
                    action: "installation system restore point started"
                }, {}, "started");
                try {
                    rurnOff24hTimeout();
                } catch (error) {
                    log.info({
                        action: "rurnOff24hTimeout for system restore point failed"
                    }, {
                        error: error
                    }, "started");
                }
                _context.prev = 9;
                _context.next = 12;
                return (0, _runCommandAsync.runCommandAsync)({
                    command: "sc start vss",
                    timeout: 6e4
                });

              case 12:
                _context.next = 16;
                break;

              case 14:
                _context.prev = 14;
                _context.t0 = _context["catch"](9);

              case 16:
                com = 'wmic.exe /Namespace:\\\\root\\default Path SystemRestore Call CreateRestorePoint "DriverPack ' + window.version + '", 100, 10';
                _context.next = 19;
                return (0, _runCommandAsync.runCommandAsync)({
                    command: com,
                    timeout: 6e5
                });

              case 19:
                log.info({
                    action: "installation system restore point finished successful"
                }, {}, "finished");
                result = {
                    status: "ok"
                };

              case 21:
                _context.next = 27;
                break;

              case 23:
                _context.prev = 23;
                _context.t1 = _context["catch"](1);
                log.error({
                    action: "installation system restore point failed"
                }, {
                    error: _context.t1
                }, "failed");
                result = {
                    status: "not_created"
                };

              case 27:
                return _context.abrupt("return", result);

              case 28:
              case "end":
                return _context.stop();
            }
        }, _callee, undefined, [ [ 1, 23 ], [ 9, 14 ] ]);
    }));
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    var _cmd = __webpack_require__(129), _shell = __webpack_require__(16), _specialFolders = __webpack_require__(18), _localFiles = __webpack_require__(22), _raven = __webpack_require__(152), _raven2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_raven), getCommand = function(arg) {
        var m = /^#?("|')?(.*)\1$/.exec(arg);
        return m && m[2] ? m[2] : "";
    };
    if (!1) try {
        !function() {
            var args = (0, _cmd.ParseCMD)(decodeURIComponent(window.location.hash)), command = getCommand(args.shift()), cwd = _shell.WshShell.CurrentDirectory;
            (0, _raven.setRavenExtra)({
                command: command,
                args: args,
                cwd: cwd
            });
            if (!cwd.endsWith("\\bin")) if (command.startsWith("http")) _shell.WshShell.CurrentDirectory = (0, 
            _localFiles.ensurePath)(_specialFolders.AppData + "\\DRPSu\\bin"); else if (command.endsWith("\\bin\\Tools\\run.hta")) _shell.WshShell.CurrentDirectory = command.replace(/\\Tools\\run\.hta$/, ""); else if (command.endsWith("\\bin\\run.hta")) _shell.WshShell.CurrentDirectory = command.replace(/\\run\.hta$/, "");
        }();
    } catch (error) {
        _raven2["default"].captureException(error);
    }
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _common = __webpack_require__(105), download = function(url, filePath) {
        var http = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
        http.open("GET", url);
        http.send();
        var stream = new ActiveXObject("ADODB.Stream");
        stream.type = 1;
        stream.open();
        stream.write(http.responseBody);
        stream.saveToFile(filePath, 2);
    };
    exports["default"] = (0, _common.wrap)(download, !1);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _shell = __webpack_require__(16), _common = __webpack_require__(105), download = function(url, filePath) {
        _shell.WshShell.Run("bitsadmin /transfer download-task-" + filePath + " /download /priority foreground " + url + ' "' + filePath + '"', 0, !0);
    };
    exports["default"] = (0, _common.wrap)(download, !1);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    var _common = __webpack_require__(105), timeout = function(delay) {
        return new Promise(function(resolve) {
            return setTimeout(resolve, delay);
        });
    }, statusRe = /^Status\[(\w+)\] = (True|False)$/, download = function() {
        var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(url, filePath) {
            var ps, id, tries, stdout, lines, _iterator, _isArray, _i, _ref2, line, match;
            return regeneratorRuntime.wrap(function(_context) {
                for (;;) switch (_context.prev = _context.next) {
                  case 0:
                    ps = __webpack_require__(72).init();
                    if (!ps.available) {
                        _context.next = 37;
                        break;
                    }
                    id = Math.random().toString(36).slice(2, 10);
                    ps.send([ '(New-Object System.Net.WebClient).DownloadFile("' + url + '", "' + filePath + '")', 'echo "Status[' + id + '] = $?"' ]);
                    tries = 120;

                  case 5:
                    if (!1) {
                        _context.next = 35;
                        break;
                    }
                    _context.next = 8;
                    return timeout(500);

                  case 8:
                    stdout = ps.stdout();
                    lines = stdout.split("\n");
                    _iterator = lines, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();

                  case 11:
                    if (!_isArray) {
                        _context.next = 17;
                        break;
                    }
                    if (!(_i >= _iterator.length)) {
                        _context.next = 14;
                        break;
                    }
                    return _context.abrupt("break", 31);

                  case 14:
                    _ref2 = _iterator[_i++];
                    _context.next = 21;
                    break;

                  case 17:
                    _i = _iterator.next();
                    if (!_i.done) {
                        _context.next = 20;
                        break;
                    }
                    return _context.abrupt("break", 31);

                  case 20:
                    _ref2 = _i.value;

                  case 21:
                    line = _ref2;
                    match = statusRe.exec(line.trim());
                    if (!match || match[1] !== id) {
                        _context.next = 29;
                        break;
                    }
                    if ("True" !== match[2]) {
                        _context.next = 28;
                        break;
                    }
                    return _context.abrupt("return");

                  case 28:
                    throw new Error("PowerShell download failed");

                  case 29:
                    _context.next = 11;
                    break;

                  case 31:
                    if (!(--tries <= 0)) {
                        _context.next = 33;
                        break;
                    }
                    throw new Error("PowerShell download timed out");

                  case 33:
                    _context.next = 5;
                    break;

                  case 35:
                    _context.next = 38;
                    break;

                  case 37:
                    throw new Error("PowerShell is not available");

                  case 38:
                  case "end":
                    return _context.stop();
                }
            }, _callee, undefined);
        }));
        return function(_x, _x2) {
            return _ref.apply(this, arguments);
        };
    }();
    exports["default"] = (0, _common.wrap)(download, !0);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _logs = __webpack_require__(4), _statistics = __webpack_require__(10), _statistics2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_statistics), _shell = __webpack_require__(16), _processes = __webpack_require__(74), _wmi = __webpack_require__(23), _os = __webpack_require__(14);
    exports["default"] = function() {
        if (_os.OSVersion >= 6 && _os.OSVersion < 10) {
            var processes = (0, _wmi.getWMIObjects)([ "ProcessId", "CommandLine" ], "Win32_Process", 'CommandLine LIKE "%pnpui.dll,InstallSecurityPromptRunDllW%"');
            processes.forEach(function(_ref) {
                var ProcessId = _ref.ProcessId, CommandLine = _ref.CommandLine, reg = /pnpui\.dll,InstallSecurityPromptRunDllW\s+(\d+)/i, keys = "{TAB}{ENTER}";
                switch (reg.exec(CommandLine)[1]) {
                  case "10":
                    keys = "{TAB}{ENTER}";
                    break;

                  case "20":
                    keys = "{TAB 3}{ENTER}";
                }
                if (_shell.WshShell.AppActivate(ProcessId)) {
                    _shell.WshShell.SendKeys(keys);
                    (0, _logs.log)("[driver allow] clicked");
                    _statistics2["default"].event({
                        action: "installation autoallow clicked"
                    });
                }
            });
            if (processes.length > 0) _shell.WshShell.AppActivate((0, _processes.getMyPID)());
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function emulateMediaQuery() {
        var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
        if (windowWidth < 800) {
            (0, _handleClasses.addClass)(document.body, "window-max-width-800");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-800");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-1024");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-1200");
        } else if (windowWidth >= 800 && windowWidth < 1024) {
            (0, _handleClasses.removeClass)(document.body, "window-max-width-800");
            (0, _handleClasses.addClass)(document.body, "window-min-width-800");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-1024");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-1200");
        } else if (windowWidth >= 1024 && windowWidth < 1200) {
            (0, _handleClasses.removeClass)(document.body, "window-max-width-800");
            (0, _handleClasses.addClass)(document.body, "window-min-width-1024");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-800");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-1200");
        } else {
            (0, _handleClasses.removeClass)(document.body, "window-max-width-800");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-800");
            (0, _handleClasses.removeClass)(document.body, "window-min-width-1024");
            (0, _handleClasses.addClass)(document.body, "window-min-width-1200");
        }
    }
    exports.__esModule = !0;
    exports["default"] = emulateMediaQuery;
    var _handleClasses = __webpack_require__(211);
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _asyncToGenerator(fn) {
        return function() {
            var gen = fn.apply(this, arguments);
            return new Promise(function(resolve, reject) {
                function step(key, arg) {
                    try {
                        var info = gen[key](arg), value = info.value;
                    } catch (error) {
                        reject(error);
                        return;
                    }
                    if (info.done) resolve(value); else return Promise.resolve(value).then(function(value) {
                        step("next", value);
                    }, function(err) {
                        step("throw", err);
                    });
                }
                return step("next");
            });
        };
    }
    exports.__esModule = !0;
    var _system = __webpack_require__(6), _processes = __webpack_require__(74), zoomScreen = function() {
        var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(keys) {
            return regeneratorRuntime.wrap(function(_context) {
                for (;;) switch (_context.prev = _context.next) {
                  case 0:
                    _system.WshShell.AppActivate((0, _processes.getMyPID)());
                    _context.next = 3;
                    return Promise.resolve().delay(100);

                  case 3:
                    _system.WshShell.SendKeys(keys);
                    _context.next = 6;
                    return Promise.resolve().delay(50);

                  case 6:
                  case "end":
                    return _context.stop();
                }
            }, _callee, undefined);
        }));
        return function(_x) {
            return _ref.apply(this, arguments);
        };
    }();
    exports["default"] = _asyncToGenerator(regeneratorRuntime.mark(function _callee2() {
        var appliedDPI, isExtraSmallScreen, isSmallScreen, isLargeScreen, keys;
        return regeneratorRuntime.wrap(function(_context2) {
            for (;;) switch (_context2.prev = _context2.next) {
              case 0:
                appliedDPI = (0, _system.RegRead)("HKEY_CURRENT_USER\\Control Panel\\Desktop\\WindowMetrics\\AppliedDPI");
                isExtraSmallScreen = window.screen.width <= 800 || window.screen.height <= 600;
                isSmallScreen = window.screen.width < 1920 || window.screen.height < 1080;
                isLargeScreen = window.screen.width > 1920 || window.screen.height > 1080;
                if (!(isExtraSmallScreen || appliedDPI > 96)) {
                    _context2.next = 7;
                    break;
                }
                _context2.next = 7;
                return zoomScreen("^(0)");

              case 7:
                keys = void 0;
                if (isExtraSmallScreen) keys = "^(0{-})"; else if (appliedDPI > 96) if (isSmallScreen) keys = appliedDPI > 120 ? "^(0{-}{-})" : "^(0{-})"; else if (isLargeScreen) keys = "^(0{+}{+}{+}{+})";
                if (!keys) {
                    _context2.next = 13;
                    break;
                }
                _context2.next = 12;
                return zoomScreen(keys);

              case 12:
                window.scrollTo(0, 0);

              case 13:
              case "end":
                return _context2.stop();
            }
        }, _callee2, undefined);
    }));
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _logs = __webpack_require__(4), _logs2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_logs), _eventsHandling = __webpack_require__(210), triggerMap = {
        noclip: function() {
            window.store.dispatch({
                type: "GAMING_DRIVERS_NO_SOFT"
            });
        },
        iddqd: function() {
            window.store.dispatch({
                type: "GAMING_ALL_SOFT_NO_DRIVERS"
            });
        }
    }, inputValue = "", timer = void 0, isExpired = void 0, handleInput = function(event) {
        var character = String.fromCharCode(event.keyCode);
        if (isExpired || 20 === inputValue.length) inputValue = "";
        inputValue += character.toLowerCase();
        isExpired = !1;
        clearTimeout(timer);
        var action = triggerMap[inputValue];
        if (action) {
            _logs2["default"].info({
                action: "gaming cheat entered " + inputValue
            }, {}, "gaming:cheat:entered:" + inputValue);
            action();
            inputValue = "";
        } else timer = setTimeout(function() {
            isExpired = !0;
        }, 5e3);
    };
    exports["default"] = {
        start: function() {
            (0, _eventsHandling.addEvent)(document.body, "keydown", handleInput);
        },
        stop: function() {
            inputValue = "";
            clearTimeout(timer);
            isExpired = !1;
            (0, _eventsHandling.removeEvent)(document.body, "keydown", handleInput);
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _wmi = __webpack_require__(23), countryCodes = {
        1: "US",
        20: "EG",
        212: "MA",
        213: "DZ",
        216: "TN",
        218: "LY",
        220: "GM",
        221: "SN",
        222: "MR",
        223: "ML",
        224: "GN",
        225: "CI",
        226: "BF",
        227: "NE",
        228: "TG",
        229: "BJ",
        230: "MU",
        231: "LR",
        232: "SL",
        233: "GH",
        234: "NG",
        235: "TD",
        236: "CF",
        237: "CM",
        238: "CV",
        239: "ST",
        240: "GQ",
        241: "GA",
        242: "CG",
        243: "CD",
        244: "AO",
        245: "GW",
        246: "IO",
        247: "AC",
        248: "SC",
        249: "SD",
        250: "RW",
        251: "ET",
        252: "SO",
        253: "DJ",
        254: "KE",
        255: "TZ",
        256: "UG",
        257: "BI",
        258: "MZ",
        260: "ZM",
        261: "MG",
        263: "ZW",
        264: "NA",
        265: "MW",
        266: "LS",
        267: "BW",
        268: "SQ",
        269: "KM",
        27: "ZA",
        290: "SH",
        291: "ER",
        297: "AW",
        298: "FO",
        299: "GL",
        30: "GR",
        31: "NL",
        32: "BE",
        33: "FR",
        34: "ES",
        350: "GI",
        351: "PT",
        352: "LU",
        353: "IE",
        354: "IS",
        355: "AL",
        356: "MT",
        357: "CY",
        358: "FI",
        359: "BG",
        36: "HU",
        370: "LT",
        371: "LV",
        372: "EE",
        373: "MD",
        374: "AM",
        375: "BY",
        376: "AD",
        377: "MC",
        378: "SM",
        379: "VA",
        380: "UA",
        381: "RS",
        382: "ME",
        385: "HR",
        386: "SI",
        387: "BA",
        388: "EU",
        389: "MK",
        39: "IT",
        40: "RO",
        41: "CH",
        420: "CZ",
        421: "SK",
        423: "LI",
        43: "AT",
        44: "UK",
        45: "DK",
        46: "SE",
        47: "NO",
        48: "PL",
        49: "DE",
        500: "FK",
        501: "BZ",
        502: "GT",
        503: "SV",
        504: "HN",
        505: "NI",
        506: "CR",
        507: "PA",
        508: "PM",
        509: "HT",
        51: "PE",
        52: "MX",
        53: "CU",
        54: "AR",
        55: "BR",
        56: "CL",
        57: "CO",
        58: "VE",
        590: "GP",
        591: "BO",
        592: "GY",
        593: "EC",
        594: "GF",
        595: "PY",
        596: "MQ",
        597: "SR",
        598: "UY",
        599: "AN",
        60: "MY",
        61: "AU",
        62: "ID",
        63: "PH",
        64: "NZ",
        65: "SG",
        66: "TH",
        670: "TL",
        673: "BN",
        674: "NR",
        675: "PG",
        676: "TO",
        677: "SB",
        678: "VU",
        679: "FJ",
        680: "PW",
        681: "WF",
        682: "CK",
        683: "NU",
        685: "WS",
        686: "KI",
        687: "NC",
        688: "TV",
        689: "PF",
        690: "TK",
        691: "FM",
        692: "MH",
        7: "RU",
        81: "JP",
        82: "KR",
        84: "VN",
        850: "KP",
        855: "KH",
        856: "LA",
        86: "CN",
        880: "BD",
        886: "TW",
        90: "TR",
        91: "IN",
        92: "PK",
        93: "AF",
        94: "LK",
        95: "MM",
        960: "MV",
        961: "LB",
        962: "JO",
        963: "SY",
        964: "IQ",
        965: "KW",
        966: "SA",
        967: "YE",
        968: "OM",
        970: "PS",
        971: "AE",
        972: "IL",
        973: "BH",
        974: "QA",
        975: "BT",
        976: "MN",
        977: "NP",
        98: "IR",
        992: "TJ",
        993: "TM",
        994: "AZ",
        995: "GE",
        996: "KY",
        998: "UZ"
    }, code = (0, _wmi.getWMIObjects)([ "CountryCode" ], "Win32_OperatingSystem")[0].CountryCode, geo = {
        geoip_country_code: countryCodes[code]
    };
    exports["default"] = geo;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _deviceClasses = __webpack_require__(331), _deviceClasses2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_deviceClasses), _lodash = __webpack_require__(94), classes = new Set((0, _lodash.map)(_deviceClasses2["default"], "id")), aliases = {};
    _deviceClasses2["default"].forEach(function(_ref) {
        var id = _ref.id;
        _ref.idAliases.forEach(function(alias) {
            aliases[alias] = id;
        });
    });
    exports["default"] = function(pack) {
        var _pack$toLowerCase$spl = pack.toLowerCase().split("_").slice(1), basename = _pack$toLowerCase$spl[0];
        return classes.has(basename) ? basename : aliases[basename] || "other";
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(l, problem) {
        var result = void 0;
        switch (problem) {
          case "usb_connection":
            result = l("deviceproblems_usb_connection");
            break;

          case "root_legacy":
            result = l("deviceproblems_root_legacy");
            break;

          case "vpn_no_need_drivers":
            result = l("deviceproblems_vpn_no_need_drivers");
            break;

          case "damaged_system_driver":
            result = l("deviceproblems_damaged_system_driver");
            break;

          case "usb_unknown_vendor":
            result = l("deviceproblems_usb_unknown_vendor");
            break;

          case "sound_card":
            result = l("deviceproblems_sound_card");
        }
        return result;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var _processNotifierFile = __webpack_require__(326);
    exports["default"] = function() {
        var result = void 0, notifierSouce = (0, _processNotifierFile.getNotifierSource)();
        if (notifierSouce) result = {
            "Internal Channel": {
                Notifier: notifierSouce
            }
        };
        return result;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    var mapDevice = function(device, isBroken) {
        var result = {}, deviceId = device.deviceId, currentDriver = device.currentDriver, problem = device.problem, current = null;
        if (currentDriver) {
            current = {
                driverDeviceId: currentDriver.deviceId,
                name: currentDriver.name,
                date: currentDriver.date,
                version: currentDriver.version,
                manufacturer: currentDriver.manufacturer
            };
        }
        result.deviceId = deviceId;
        if (isBroken) result.problem = problem; else result.currentDriver = current;
        return result;
    };
    exports["default"] = function() {
        var result = {}, state = window.store.getState(), driversState = state.drivers;
        if (driversState) {
            var devices = driversState.devices, lowRankedDevices = driversState.lowRankedDevices, brokenDevices = driversState.brokenDevices;
            result.devices = devices.map(function(device) {
                return mapDevice(device);
            });
            result.lowRankedDevices = lowRankedDevices.map(function(device) {
                return mapDevice(device);
            });
            result.brokenDevices = brokenDevices.map(function(device) {
                return mapDevice(device, !0);
            });
        }
        return result;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.getOffered = function(_ref, softId) {
        var programs = _ref.programs;
        if (programs) return programs.find(function(_ref2) {
            var id = _ref2.id, isVisible = _ref2.isVisible;
            return id === softId && isVisible;
        });
    }, exports.getInstalling = function(_ref3, softId) {
        var installation = _ref3.installation;
        if (installation && installation.items) return installation.items.find(function(_ref4) {
            return _ref4.id === softId;
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.startBitsDownloading = exports.joinBitsString = undefined;
    var _system = __webpack_require__(6);
    exports.joinBitsString = function(bitsSoftArr) {
        var jobName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "drp_bits_job", bitsString = "bitsadmin /cancel " + jobName + " & timeout 3 && bitsadmin /create " + jobName + " ", downloadString = "", execString = "";
        bitsSoftArr.forEach(function(program) {
            var programName = program.link.split("/").slice(-1)[0];
            downloadString += " && bitsadmin /addfile " + jobName + ' "' + program.link + '" "%AppData%\\DRPsu\\PROGRAMS\\' + programName + '"';
            execString += '& start \\"\\" \\"%AppData%\\DRPsu\\PROGRAMS\\' + programName + '\\" ' + program.Keys.replace(/"/g, '\\"') + " ";
        });
        bitsString += downloadString;
        bitsString += " && bitsadmin /SETMINRETRYDELAY " + jobName + " 88000 && bitsadmin /SETNOTIFYCMDLINE " + jobName + ' "cmd.exe" "/c start /min cmd /c bitsadmin /complete ' + jobName + " && timeout 3 &";
        bitsString += execString;
        bitsString += ' " && bitsadmin /resume ' + jobName;
        return bitsString;
    }, exports.startBitsDownloading = function(bitsString) {
        if (bitsString) _system.WshShell.Run("cmd /c " + bitsString, 0, !1);
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    var _logs = __webpack_require__(4), _logs2 = _interopRequireDefault(_logs), _statistics = __webpack_require__(10), _statistics2 = _interopRequireDefault(_statistics), _settings = __webpack_require__(43), _settings2 = _interopRequireDefault(_settings), showBugreportHTA = function(msg, url, linenumber, lfnE) {
        var errorInfo = {
            DRPVersion: window.version,
            DRPVerType: window.verType,
            sessionId: _statistics2["default"].sessionId,
            lang: window.lang,
            logfile: _logs2["default"].logfile ? _logs2["default"].logfile : null,
            dialogMode: 2,
            msg: msg,
            url: url,
            linenumber: linenumber,
            lfnE: lfnE
        };
        window.showModelessDialog("Tools/modules/bugreport.hta", errorInfo, "status:false;dialogWidth:670px;dialogHeight:600px;resizable:yes;scroll:yes;");
    };
    window.onerror = function(msg, url, linenumber) {
        var shortUrl = url.split("/").slice(-1)[0];
        shortUrl = shortUrl.split("\\").slice(-1)[0];
        var lfn = "";
        try {
            if (arguments.callee.caller) lfn = arguments.callee.caller.toString().match(/function ([^(]*)\(/)[1];
        } catch (e) {}
        try {
            var _shortUrl, _javascriptException, params = {
                "javascript exception": (_javascriptException = {}, _javascriptException[shortUrl] = (_shortUrl = {}, 
                _shortUrl[linenumber] = msg, _shortUrl), _javascriptException)
            };
            _statistics2["default"].event({
                action: "javascript exception",
                params: params,
                counters: [ "debug" ]
            });
        } catch (e) {}
        if (_settings2["default"].get("errors.showBugReport").value) showBugreportHTA(msg, shortUrl, linenumber, lfn);
        (0, _logs.log)("!!! ERROR !!! " + msg + "\r\n Module: " + url + " \r\n  Line: " + linenumber);
        return !0;
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _os = __webpack_require__(14), _getDiagnostics = __webpack_require__(108), _getDiagnostics2 = _interopRequireDefault(_getDiagnostics), _getSoftChanges = __webpack_require__(154), _getSoftChanges2 = _interopRequireDefault(_getSoftChanges), _getDrivers = __webpack_require__(219), _getHardware = __webpack_require__(126), _getModel = __webpack_require__(153);
    exports["default"] = function(task, data) {
        switch (task) {
          case "localdiagnostics":
            return (0, _getDiagnostics2["default"])("diagnostics");

          case "drivers":
            return (0, _getDrivers.getDrivers)();

          case "newsoft":
            return (0, _getDiagnostics2["default"])("soft");

          case "softchanges":
            return (0, _getSoftChanges2["default"])(data);

          case "hardware":
            return {
                devices: (0, _getHardware.getHardware)(),
                model: (0, _getModel.getModel)(),
                windows: {
                    ver: _os.OSVersionS,
                    arch: _os.is64 ? "64" : "86",
                    build: _os.OSBuild
                },
                limit: 5
            };

          default:
            throw new Error("Unknown task " + task);
        }
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }
    exports.__esModule = !0;
    var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
        return typeof obj;
    } : function(obj) {
        return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    }, _getNotebookVendor = __webpack_require__(127), _getNotebookVendor2 = _interopRequireDefault(_getNotebookVendor), _compact = __webpack_require__(532), _compact2 = _interopRequireDefault(_compact), _cloneDeep = __webpack_require__(588), _cloneDeep2 = _interopRequireDefault(_cloneDeep), formatDate = function(date) {
        var res = {
            timestamp: date.valueOf()
        };
        res["" + date.getFullYear()] = {};
        res["" + date.getFullYear()]["" + (date.getMonth() + 1)] = "" + date.getDate();
        return res;
    }, formatSecurity = function(value) {
        var vendor = value.Name.split(" ")[0], type = /windows|microsoft/i.test(vendor) ? "Native" : "Other", res = {};
        res[type] = {
            Active: value.Active,
            UpToDate: value.UpToDate
        };
        res[type][vendor] = {};
        res[type][vendor][value.Name] = {
            Active: value.Active,
            UpToDate: value.UpToDate
        };
        return res;
    }, modifyMap = {
        Computer: {
            Summary: {
                Computer: {
                    "Computer Name": undefined,
                    "User Name": undefined,
                    "Date / Time": undefined,
                    "Logon Domain": undefined,
                    "Operating System": undefined,
                    "OS Service Pack": undefined,
                    "Internet Explorer": function(version) {
                        var res = {};
                        if (version) {
                            var _version$split = version.split("."), prim = _version$split[0], sec = _version$split.slice(1);
                            res[prim] = sec.join(".");
                        } else res.other = version;
                        return res;
                    }
                },
                Display: {
                    "Video Adapter": undefined,
                    Monitor: undefined
                },
                Motherboard: {
                    "Motherboard Name": undefined,
                    "CPU Type": function(value) {
                        var _value$split = value.split(",");
                        return {
                            Name: _value$split[0],
                            MaxClockSpeed: _value$split[1],
                            NumberOfCores: _value$split[2]
                        };
                    },
                    "System Memory": function(value) {
                        return parseInt(value, 10);
                    },
                    "BIOS Type": function(value) {
                        var parts = /\((\d+)\.(\d+)\.(\d+)\)$/.exec(value);
                        if (parts && 4 === parts.length) return formatDate(new Date(parseInt(parts[1]), parseInt(parts[2]) - 1, parseInt(parts[3]))); else return {};
                    },
                    "BIOS Date": "BIOS Type"
                },
                DMI: {
                    "DMI System UUID": undefined,
                    "DMI System Serial Number": undefined,
                    "DMI Chassis Serial Number": undefined,
                    "DMI Motherboard Serial Number": undefined,
                    "DMI Motherboard Version": undefined,
                    "DMI System Version": undefined,
                    "DMI Chassis Version": undefined,
                    "DMI Chassis Asset Tag": undefined,
                    "DMI BIOS Version": undefined,
                    "DMI BIOS Vendor": function(value) {
                        return (0, _getNotebookVendor2["default"])(value);
                    }
                },
                "Power Management": {
                    "Battery Properties": {
                        "Unique ID": undefined,
                        "Device Name": undefined,
                        "Current Capacity": function(value) {
                            return parseInt(value, 10);
                        },
                        "Fully Charged Capacity": function(value) {
                            return parseInt(value, 10);
                        },
                        "Designed Capacity": function(value) {
                            return parseInt(value, 10);
                        },
                        "Battery Voltage": function(value) {
                            return parseInt(value, 10);
                        }
                    },
                    "Power Management Properties": {
                        "Current Power Source": undefined,
                        "Battery Status": function(value) {
                            return parseInt(value, 10);
                        },
                        "Remaining Battery Lifetime": function(value) {
                            return parseInt(value, 10);
                        }
                    }
                },
                Input: {
                    Keyboard: undefined,
                    Mouse: undefined
                },
                Multimedia: {
                    "Audio Adapter": undefined
                },
                Network: {
                    "Network Adapter": undefined
                },
                Storage: {
                    "IDE Controller": undefined,
                    "Disk Drive": function(value) {
                        var parts = /^(.+) \(SMART (\w+)\)$/.exec(value);
                        if (parts && 3 === parts.length) return {
                            SMART: parts[2]
                        }; else return null;
                    }
                },
                Peripherals: {
                    Battery: undefined,
                    "USB Controller": function(value) {
                        var parts = /^(.+) USB 3\./.exec(value);
                        if (parts && 2 === parts.length) return {
                            "USB 3": (0, _getNotebookVendor2["default"])(parts[1])
                        }; else return null;
                    }
                },
                Partitions: {
                    Partition: function(value) {
                        var parts = /^(\w)(:|) \((\w+)\) (.+) GB \((.+) GB free\)$/.exec(value);
                        if (parts && 6 === parts.length) {
                            if ("undefined" === parts[3]) parts[3] = "Other";
                            if ("NaN" === parts[4] && "NaN" === parts[5]) return null;
                            var res = {
                                "File System": {}
                            };
                            res["File System"][parts[3]] = {};
                            res["File System"][parts[3]][parts[1]] = {
                                Total: parseFloat(parts[4]),
                                Free: parseFloat(parts[5])
                            };
                            return res;
                        }
                        return null;
                    }
                },
                Temperature: undefined
            }
        },
        "Operating System": {
            "Operating System": {
                "Current Session": {
                    "Computer Name": undefined,
                    "User Name": undefined,
                    "Logon Domain": undefined,
                    UpTime: undefined,
                    "Last Reboot Reason": function(value) {
                        return value.split(":")[0];
                    }
                },
                "Operating System Properties": {
                    "OS Name": undefined,
                    "OS Kernel Type": undefined,
                    "OS Version": function(value) {
                        var _value$split2 = value.split(".");
                        return _value$split2[0] + "." + _value$split2[1];
                    },
                    "OS Root": function(value) {
                        return value.toLowerCase();
                    },
                    "OS Service Pack": function(value) {
                        var parts = /^Service Pack (\w+)/.exec(value);
                        if (parts && 2 === parts.length) return parts[1]; else return "0";
                    },
                    "OS Installation Date": function(value) {
                        return formatDate(new Date(value));
                    }
                }
            },
            UpTime: {
                "Current Session": {
                    "Last Boot Time": function(value) {
                        return formatDate(new Date(value));
                    },
                    "Current Time": function(value) {
                        return formatDate(new Date(value));
                    },
                    UpTime: function(value) {
                        var parts = /^(\d+) sec/.exec(value);
                        if (parts && 2 === parts.length) return Math.floor(parseInt(parts[1]) / 60); else return null;
                    },
                    "UpTime Minutes": "UpTime"
                }
            },
            "Weekly Errors": function(error) {
                var _error$Type = error.Type, Type = _error$Type === undefined ? "Critical" : _error$Type, Level = error.Level, Source = error.Source, _error$Code = error.Code, Code = _error$Code === undefined ? "unknown" : _error$Code, Count = error.Count, res = {};
                res[Type] = {};
                res[Type][Level] = {};
                res[Type][Level][Source] = {};
                res[Type][Level][Source][Code] = Count;
                return res;
            },
            "Daily Errors": function(error) {
                var _error$Type2 = error.Type, Type = _error$Type2 === undefined ? "Critical" : _error$Type2, Level = error.Level, Source = error.Source, _error$Code2 = error.Code, Code = _error$Code2 === undefined ? "unknown" : _error$Code2, Count = error.Count;
                if ("Критический" === Type) Type = "Critical";
                if ("Ошибка" === Type) Type = "Error";
                var res = {};
                res[Type] = {};
                res[Type][Level] = {};
                res[Type][Level][Source] = {};
                res[Type][Level][Source][Code] = Count;
                return res;
            }
        },
        Display: {
            "Windows Video": {
                "Driver Name": undefined,
                "Video Mode": undefined,
                "Memory Size": function(value) {
                    return parseInt(value, 10);
                },
                "Driver Date": function(value) {
                    return formatDate(new Date(value));
                },
                Description: function(value) {
                    if (/intel/i.test(value)) return {
                        Intel: value
                    };
                    if (/nvidia/i.test(value)) return {
                        NVIDIA: value
                    };
                    if (/ati|amd/i.test(value)) return {
                        AMD: value
                    }; else return {
                        Other: value
                    };
                },
                Vendor: "Description"
            },
            Monitor: {
                "Monitor Name": undefined,
                "Monitor Type": undefined
            }
        },
        Security: {
            "Windows Security": {
                "Operating System Properties": {
                    "OS Name": undefined,
                    "OS Service Pack": undefined
                }
            },
            "Anti-Virus": function(value) {
                return formatSecurity(value);
            },
            "Anti-Spyware": function(value) {
                return formatSecurity(value);
            },
            Firewall: function(value) {
                return formatSecurity(value);
            }
        },
        "Power Management": {
            "Battery Properties": {
                Manufacturer: undefined
            }
        }
    }, modifyByMap = function modifyByMap(obj, modifyMapObj) {
        Object.keys(modifyMapObj).forEach(function(key) {
            switch (_typeof(modifyMapObj[key])) {
              case "object":
                if (obj[key]) if (Array.isArray(obj[key])) obj[key].forEach(function(elem) {
                    return modifyByMap(elem, modifyMapObj[key]);
                }); else modifyByMap(obj[key], modifyMapObj[key]);
                break;

              case "function":
                try {
                    if (Array.isArray(obj[key])) obj[key] = (0, _compact2["default"])(obj[key].map(modifyMapObj[key])); else obj[key] = modifyMapObj[key](obj[key]);
                } catch (err) {}
                break;

              case "string":
                try {
                    obj[key] = obj[modifyMapObj[key]];
                    delete obj[modifyMapObj[key]];
                } catch (err) {}
                break;

              case "undefined":
                try {
                    delete obj[key];
                } catch (err) {}
            }
        });
    };
    exports["default"] = function(raw) {
        var data = (0, _cloneDeep2["default"])(raw);
        try {
            modifyByMap(data, modifyMap);
        } catch (err) {}
        return data;
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    function compareItems(a, b) {
        return a.priority - b.priority;
    }
    function compareDriversByPackName(a, b) {
        return a.packName < b.packName ? -1 : 1;
    }
    function prepatchDriver(driver) {
        return _extends({}, driver, {
            id: driver.id || driver.deviceId,
            fullDeviceId: driver.recommendedDriver.fullDeviceId,
            singleOnly: !0,
            isDriver: !0,
            packName: driver.recommendedDriver.pack,
            name: driver.recommendedDriver.name
        });
    }
    function patchDrivers(drivers, startPriorityValue) {
        for (var nextPriorityValue = startPriorityValue, prepatchedDrivers = drivers.map(prepatchDriver), sortedByPackName = prepatchedDrivers.sort(compareDriversByPackName), patchedDrivers = sortedByPackName.map(function(driver) {
            nextPriorityValue++;
            return _extends({}, driver, {
                priority: "lan" === driver.recommendedDriver["class"] ? MAX_VALUE - 1 : "wifi" === driver.recommendedDriver["class"] ? MAX_VALUE : nextPriorityValue
            });
        }), driversQueue = [], _iterator = patchedDrivers, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
            var _ref;
            if ("break" === function() {
                if (_isArray) {
                    if (_i >= _iterator.length) return "break";
                    _ref = _iterator[_i++];
                } else {
                    _i = _iterator.next();
                    if (_i.done) return "break";
                    _ref = _i.value;
                }
                var driver = _ref;
                if (driver.recommendedDriver.dependencies) {
                    var dependencies = driver.recommendedDriver.dependencies.map(function(dependency, index) {
                        return prepatchDriver(_extends({}, driver, {
                            recommendedDriver: dependency,
                            id: "dependency:" + index + ":" + driver.id
                        }));
                    });
                    driversQueue.push.apply(driversQueue, dependencies);
                    driver.dependencies = dependencies.map(function(_ref2) {
                        return _ref2.id;
                    });
                }
                driversQueue.push(driver);
            }()) break;
        }
        return driversQueue;
    }
    function patchPrograms(programs) {
        return programs.slice(0).map(function(program) {
            return _extends({}, program, {
                priority: "Antivirus" !== program.category && program.priority || MAX_VALUE - 2
            });
        });
    }
    function getStartPriorityValue(programs) {
        var partnerPrograms = programs.filter(function(program) {
            return program.isPartner && "Antivirus" !== program.category;
        });
        return partnerPrograms.length ? (0, _max2["default"])(partnerPrograms, "priority").priority : 2;
    }
    function setItemsState(items) {
        return items.slice(0).map(function(item) {
            return _extends({}, item, {
                status: "waiting",
                downloading: {
                    totalFileSize: 0,
                    downloadedSize: 0,
                    downloadingSpeed: 0
                },
                unzipping: {
                    totalCount: 0,
                    unzippedPercents: 0
                },
                error: {
                    errorType: null
                }
            });
        });
    }
    exports.__esModule = !0;
    var _extends = Object.assign || function(target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
        }
        return target;
    };
    exports["default"] = function(_ref3) {
        var drivers = _ref3.drivers, programs = _ref3.programs;
        return setItemsState([].concat(patchDrivers(drivers, getStartPriorityValue(programs)), patchPrograms(programs)).sort(compareItems));
    };
    var _max = __webpack_require__(595), _max2 = function(obj) {
        return obj && obj.__esModule ? obj : {
            "default": obj
        };
    }(_max), MAX_VALUE = 1e9;
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports["default"] = function(str) {
        return str.replace(/(^\W+|\W+$)/, "").replace(/\W+/g, "-").toLowerCase();
    };
    module.exports = exports["default"];
}, function(module, exports, __webpack_require__) {
    "use strict";
    exports.__esModule = !0;
    exports.uninstallProgram = undefined;
    var _system = __webpack_require__(6), _wmiRegistry = __webpack_require__(130), _wmi = __webpack_require__(23), _logs = __webpack_require__(4);
    exports.uninstallProgram = function(_ref) {
        var uninstallString = _ref.uninstallString, regPath = _ref.regPath;
        return new Promise(function(resolve, reject) {
            if (-1 !== uninstallString.search(/uninst\.exe/i)) uninstallString += " -s "; else if (-1 !== uninstallString.search(/unins\d\d\d\.exe/i)) uninstallString += " /VERYSILENT /SUPPRESSMSGBOXES /NORESTART "; else if (-1 !== uninstallString.search(/MsiExec\.exe/i)) uninstallString = uninstallString.replace(/\/I/, " /x ").concat(" /qn /norestart ");
            (0, _logs.log)("[Protect] running: " + uninstallString);
            var command = uninstallString, wshExec = _system.WshShell.Exec(command), parentPid = wshExec.ProcessId, checkTimeoutTimer = void 0, uninstallProcesses = void 0, checkIntevalTimer = setInterval(function() {
                uninstallProcesses = (0, _wmi.getWMIObjects)([ "ParentProcessId" ], "Win32_Process", 'ProcessId = "' + parentPid + '" OR ParentProcessId = "' + parentPid + '"');
                if (!uninstallProcesses.length) {
                    clearInterval(checkIntevalTimer);
                    clearTimeout(checkTimeoutTimer);
                    !(0, _wmiRegistry.wmiRegRead)(regPath + "DisplayName") ? resolve() : reject();
                }
            }, 3e3);
            checkTimeoutTimer = setTimeout(function() {
                clearInterval(checkIntevalTimer);
                clearTimeout(checkTimeoutTimer);
                reject(new Error("[Protect] uninstall timeout"));
            }, 3e5);
        });
    };
}, function(module, exports, __webpack_require__) {
    "use strict";
    var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
        return typeof obj;
    } : function(obj) {
        return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
    !function(window, undefined) {
        function triggerEvent(eventType, options) {
            var event, key;
            options = options || {};
            eventType = "raven" + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
            if (document.createEvent) {
                event = document.createEvent("HTMLEvents");
                event.initEvent(eventType, !0, !0);
            } else {
                event = document.createEventObject();
                event.eventType = eventType;
            }
            for (key in options) if (hasKey(options, key)) event[key] = options[key];
            if (document.createEvent) document.dispatchEvent(event); else try {
                document.fireEvent("on" + event.eventType.toLowerCase(), event);
            } catch (e) {}
        }
        function RavenConfigError(message) {
            this.name = "RavenConfigError";
            this.message = message;
        }
        function parseDSN(str) {
            var m = dsnPattern.exec(str), dsn = {}, i = 7;
            try {
                for (;i--; ) dsn[dsnKeys[i]] = m[i] || "";
            } catch (e) {
                throw new RavenConfigError("Invalid DSN: " + str);
            }
            if (dsn.pass) throw new RavenConfigError("Do not specify your private key in the DSN!");
            return dsn;
        }
        function isUndefined(what) {
            return void 0 === what;
        }
        function isFunction(what) {
            return "function" == typeof what;
        }
        function isString(what) {
            return "[object String]" === objectPrototype.toString.call(what);
        }
        function isObject(what) {
            return "object" === (void 0 === what ? "undefined" : _typeof(what)) && null !== what;
        }
        function isEmptyObject(what) {
            for (var k in what) return !1;
            return !0;
        }
        function isError(what) {
            return isObject(what) && "[object Error]" === objectPrototype.toString.call(what) || what instanceof Error;
        }
        function hasKey(object, key) {
            return objectPrototype.hasOwnProperty.call(object, key);
        }
        function each(obj, callback) {
            var i, j;
            if (isUndefined(obj.length)) {
                for (i in obj) if (hasKey(obj, i)) callback.call(null, i, obj[i]);
            } else {
                j = obj.length;
                if (j) for (i = 0; i < j; i++) callback.call(null, i, obj[i]);
            }
        }
        function handleStackInfo(stackInfo, options) {
            var frames = [];
            if (stackInfo.stack && stackInfo.stack.length) each(stackInfo.stack, function(i, stack) {
                var frame = normalizeFrame(stack);
                if (frame) frames.push(frame);
            });
            triggerEvent("handle", {
                stackInfo: stackInfo,
                options: options
            });
            processException(stackInfo.name, stackInfo.message, stackInfo.url, stackInfo.lineno, frames, options);
        }
        function normalizeFrame(frame) {
            if (frame.url) {
                var i, normalized = {
                    filename: frame.url,
                    lineno: frame.line,
                    colno: frame.column,
                    "function": frame.func || "?"
                }, context = extractContextFromFrame(frame);
                if (context) {
                    var keys = [ "pre_context", "context_line", "post_context" ];
                    i = 3;
                    for (;i--; ) normalized[keys[i]] = context[i];
                }
                normalized.in_app = !(globalOptions.includePaths.test && !globalOptions.includePaths.test(normalized.filename) || /(Raven|TraceKit)\./.test(normalized["function"]) || /raven\.(min\.)?js$/.test(normalized.filename));
                return normalized;
            }
        }
        function extractContextFromFrame(frame) {
            if (frame.context && globalOptions.fetchContext) {
                for (var context = frame.context, pivot = ~~(context.length / 2), i = context.length, isMinified = !1; i--; ) if (context[i].length > 3e3) {
                    isMinified = !0;
                    break;
                }
                if (isMinified) {
                    if (isUndefined(frame.column)) return;
                    return [ [], context[pivot].substr(frame.column, 50), [] ];
                }
                return [ context.slice(0, pivot), context[pivot], context.slice(pivot + 1) ];
            }
        }
        function processException(type, message, fileurl, lineno, frames, options) {
            var stacktrace, fullMessage;
            if (!globalOptions.ignoreErrors.test || !globalOptions.ignoreErrors.test(message)) {
                message += "";
                message = truncate(message, globalOptions.maxMessageLength);
                fullMessage = type + ": " + message;
                fullMessage = truncate(fullMessage, globalOptions.maxMessageLength);
                if (frames && frames.length) {
                    fileurl = frames[0].filename || fileurl;
                    frames.reverse();
                    stacktrace = {
                        frames: frames
                    };
                } else if (fileurl) stacktrace = {
                    frames: [ {
                        filename: fileurl,
                        lineno: lineno,
                        in_app: !0
                    } ]
                };
                if (!globalOptions.ignoreUrls.test || !globalOptions.ignoreUrls.test(fileurl)) if (!globalOptions.whitelistUrls.test || globalOptions.whitelistUrls.test(fileurl)) send(objectMerge({
                    exception: {
                        type: type,
                        value: message
                    },
                    stacktrace: stacktrace,
                    culprit: fileurl,
                    message: fullMessage
                }, options));
            }
        }
        function objectMerge(obj1, obj2) {
            if (!obj2) return obj1;
            each(obj2, function(key, value) {
                obj1[key] = value;
            });
            return obj1;
        }
        function truncate(str, max) {
            return str.length <= max ? str : str.substr(0, max) + "…";
        }
        function now() {
            return +new Date();
        }
        function getHttpData() {
            if (document.location && document.location.href) {
                var http = {
                    headers: {
                        "User-Agent": navigator.userAgent
                    }
                };
                http.url = document.location.href;
                if (document.referrer) http.headers.Referer = document.referrer;
                return http;
            }
        }
        function send(data) {
            var baseData = {
                project: globalProject,
                logger: globalOptions.logger,
                platform: "javascript"
            }, http = getHttpData();
            if (http) baseData.request = http;
            data = objectMerge(baseData, data);
            data.tags = objectMerge(objectMerge({}, globalOptions.tags), data.tags);
            data.extra = objectMerge(objectMerge({}, globalOptions.extra), data.extra);
            data.extra = objectMerge({
                "session:duration": now() - startTime
            }, data.extra);
            if (isEmptyObject(data.tags)) delete data.tags;
            if (globalUser) data.user = globalUser;
            if (globalOptions.release) data.release = globalOptions.release;
            if (isFunction(globalOptions.dataCallback)) data = globalOptions.dataCallback(data) || data;
            if (data && !isEmptyObject(data)) if (!isFunction(globalOptions.shouldSendCallback) || globalOptions.shouldSendCallback(data)) {
                _lastEventId = data.event_id || (data.event_id = uuid4());
                logDebug("debug", "Raven about to send:", data);
                if (_isSetup()) (globalOptions.transport || makeRequest)({
                    url: globalServer,
                    auth: {
                        sentry_version: "4",
                        sentry_client: "raven-js/" + Raven.VERSION,
                        sentry_key: globalKey
                    },
                    data: data,
                    options: globalOptions,
                    onSuccess: function() {
                        triggerEvent("success", {
                            data: data,
                            src: globalServer
                        });
                    },
                    onError: function() {
                        triggerEvent("failure", {
                            data: data,
                            src: globalServer
                        });
                    }
                });
            }
        }
        function makeRequest(opts) {
            opts.auth.sentry_data = JSON.stringify(opts.data);
            var img = newImage(), src = opts.url + "?" + urlencode(opts.auth);
            if (opts.options.crossOrigin || "" === opts.options.crossOrigin) img.crossOrigin = opts.options.crossOrigin;
            img.onload = opts.onSuccess;
            img.onerror = img.onabort = opts.onError;
            img.src = src;
        }
        function newImage() {
            return document.createElement("img");
        }
        function _isSetup() {
            if (!hasJSON) return !1;
            if (!globalServer) {
                if (!ravenNotConfiguredError) logDebug("error", "Error: Raven has not been configured.");
                ravenNotConfiguredError = !0;
                return !1;
            }
            return !0;
        }
        function joinRegExp(patterns) {
            for (var pattern, sources = [], i = 0, len = patterns.length; i < len; i++) {
                pattern = patterns[i];
                if (isString(pattern)) sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1")); else if (pattern && pattern.source) sources.push(pattern.source);
            }
            return new RegExp(sources.join("|"), "i");
        }
        function uuid4() {
            var crypto = window.crypto || window.msCrypto;
            if (!isUndefined(crypto) && crypto.getRandomValues) {
                var arr = new Uint16Array(8);
                crypto.getRandomValues(arr);
                arr[3] = 4095 & arr[3] | 16384;
                arr[4] = 16383 & arr[4] | 32768;
                var pad = function(num) {
                    for (var v = num.toString(16); v.length < 4; ) v = "0" + v;
                    return v;
                };
                return pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]);
            } else return "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, function(c) {
                var r = 16 * Math.random() | 0;
                return ("x" == c ? r : 3 & r | 8).toString(16);
            });
        }
        function logDebug(level) {
            if (originalConsoleMethods[level] && Raven.debug) originalConsoleMethods[level].apply(originalConsole, _slice.call(arguments, 1));
        }
        function urlencode(o) {
            var pairs = [];
            each(o, function(key, value) {
                pairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
            });
            return pairs.join("&");
        }
        var TraceKit = {
            remoteFetching: !1,
            collectWindowErrors: !0,
            linesOfContext: 7,
            debug: !1
        };
        window.TraceKit = TraceKit;
        var _slice = [].slice, UNKNOWN_FUNCTION = "?";
        TraceKit.wrap = function(func) {
            function wrapped() {
                try {
                    return func.apply(this, arguments);
                } catch (e) {
                    TraceKit.report(e);
                    throw e;
                }
            }
            return wrapped;
        };
        TraceKit.report = function() {
            function subscribe(handler) {
                installGlobalHandler();
                handlers.push(handler);
            }
            function unsubscribe(handler) {
                for (var i = handlers.length - 1; i >= 0; --i) if (handlers[i] === handler) handlers.splice(i, 1);
            }
            function unsubscribeAll() {
                uninstallGlobalHandler();
                handlers = [];
            }
            function notifyHandlers(stack, isWindowError) {
                var exception = null;
                if (!isWindowError || TraceKit.collectWindowErrors) {
                    for (var i in handlers) if (hasKey(handlers, i)) try {
                        handlers[i].apply(null, [ stack ].concat(_slice.call(arguments, 2)));
                    } catch (inner) {
                        exception = inner;
                    }
                    if (exception) throw exception;
                }
            }
            function traceKitWindowOnError(message, url, lineNo, colNo, ex) {
                var stack = null;
                if (lastExceptionStack) {
                    TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);
                    processLastException();
                } else if (ex) {
                    stack = TraceKit.computeStackTrace(ex);
                    notifyHandlers(stack, !0);
                } else {
                    var location = {
                        url: url,
                        line: lineNo,
                        column: colNo
                    };
                    if (-1 !== location.url.indexOf(".hta") || -1 !== location.url.indexOf(".html")) location.url = "drp.js";
                    location.func = TraceKit.computeStackTrace.guessFunctionName(location.url, location.line);
                    location.context = TraceKit.computeStackTrace.gatherContext(location.url, location.line);
                    stack = {
                        message: message,
                        url: document.location.href,
                        stack: [ location ]
                    };
                    var other = TraceKit.computeStackTrace(stack);
                    stack.stack = stack.stack.concat(other.stack);
                    notifyHandlers(stack, !0);
                }
                if (_oldOnerrorHandler) return _oldOnerrorHandler.apply(this, arguments); else return !1;
            }
            function installGlobalHandler() {
                if (!_onErrorHandlerInstalled) {
                    _oldOnerrorHandler = window.onerror;
                    window.onerror = traceKitWindowOnError;
                    _onErrorHandlerInstalled = !0;
                }
            }
            function uninstallGlobalHandler() {
                if (_onErrorHandlerInstalled) {
                    window.onerror = _oldOnerrorHandler;
                    _onErrorHandlerInstalled = !1;
                    _oldOnerrorHandler = undefined;
                }
            }
            function processLastException() {
                var _lastExceptionStack = lastExceptionStack, _lastArgs = lastArgs;
                lastArgs = null;
                lastExceptionStack = null;
                lastException = null;
                notifyHandlers.apply(null, [ _lastExceptionStack, !1 ].concat(_lastArgs));
            }
            function report(ex, rethrow) {
                var args = _slice.call(arguments, 1);
                if (lastExceptionStack) if (lastException === ex) return; else processLastException();
                var stack = TraceKit.computeStackTrace(ex);
                lastExceptionStack = stack;
                lastException = ex;
                lastArgs = args;
                window.setTimeout(function() {
                    if (lastException === ex) processLastException();
                }, stack.incomplete ? 2e3 : 0);
                if (!1 !== rethrow) throw ex;
            }
            var _oldOnerrorHandler, _onErrorHandlerInstalled, handlers = [], lastArgs = null, lastException = null, lastExceptionStack = null;
            report.subscribe = subscribe;
            report.unsubscribe = unsubscribe;
            report.uninstall = unsubscribeAll;
            return report;
        }();
        TraceKit.computeStackTrace = function() {
            function loadSource(url) {
                if (!TraceKit.remoteFetching) return "";
                if (0 === url.indexOf("http")) return "";
                try {
                    var request = function() {
                        try {
                            return new window.XMLHttpRequest();
                        } catch (e) {
                            return new window.ActiveXObject("Microsoft.XMLHTTP");
                        }
                    }();
                    request.open("GET", url, !1);
                    request.send("");
                    return request.responseText;
                } catch (e) {
                    return "";
                }
            }
            function getSource(url) {
                if (!isString(url)) return [];
                if (!hasKey(sourceCache, url)) {
                    var source = "", domain = "";
                    try {
                        domain = document.domain;
                    } catch (e) {}
                    if (-1 !== url.indexOf(domain)) source = loadSource(url);
                    sourceCache[url] = source ? source.split("\n") : [];
                }
                return sourceCache[url];
            }
            function guessFunctionName(url, lineNo) {
                var m, reFunctionArgNames = /function ([^(]*)\(([^)]*)\)/, reGuessFunction = /['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/, line = "", source = getSource(url);
                if (!source.length) return UNKNOWN_FUNCTION;
                for (var i = 0; i < 10; ++i) {
                    line = source[lineNo - i] + line;
                    if (!isUndefined(line)) if (m = reGuessFunction.exec(line)) return m[1]; else if (m = reFunctionArgNames.exec(line)) return m[1];
                }
                return UNKNOWN_FUNCTION;
            }
            function gatherContext(url, line) {
                var source = getSource(url);
                if (!source.length) return null;
                var context = [], linesBefore = Math.floor(TraceKit.linesOfContext / 2), linesAfter = linesBefore + TraceKit.linesOfContext % 2, start = Math.max(0, line - linesBefore - 1), end = Math.min(source.length, line + linesAfter - 1);
                line -= 1;
                for (var i = start; i < end; ++i) if (!isUndefined(source[i])) context.push(source[i]);
                return context.length > 0 ? context : null;
            }
            function escapeRegExp(text) {
                return text.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g, "\\$&");
            }
            function escapeCodeAsRegExpForMatchingInsideHTML(body) {
                return escapeRegExp(body).replace("<", "(?:<|&lt;)").replace(">", "(?:>|&gt;)").replace("&", "(?:&|&amp;)").replace('"', '(?:"|&quot;)').replace(/\s+/g, "\\s+");
            }
            function findSourceInUrls(re, urls) {
                for (var source, m, i = 0, j = urls.length; i < j; ++i) if ((source = getSource(urls[i])).length) {
                    source = source.join("\n");
                    if (m = re.exec(source)) return {
                        url: urls[i],
                        line: source.substring(0, m.index).split("\n").length,
                        column: m.index - source.lastIndexOf("\n", m.index) - 1
                    };
                }
                return null;
            }
            function findSourceInLine(fragment, url, line) {
                var m, source = getSource(url), re = new RegExp("\\b" + escapeRegExp(fragment) + "\\b");
                line -= 1;
                if (source && source.length > line && (m = re.exec(source[line]))) return m.index; else return null;
            }
            function findSourceByFunctionBody(func) {
                for (var body, re, parts, result, urls = [ window.location.href ], scripts = document.getElementsByTagName("script"), code = "" + func, codeRE = /^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/, eventRE = /^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/, i = 0; i < scripts.length; ++i) {
                    var script = scripts[i];
                    if (script.src) urls.push(script.src);
                }
                if (!(parts = codeRE.exec(code))) re = new RegExp(escapeRegExp(code).replace(/\s+/g, "\\s+")); else {
                    var name = parts[1] ? "\\s+" + parts[1] : "", args = parts[2].split(",").join("\\s*,\\s*");
                    body = escapeRegExp(parts[3]).replace(/;$/, ";?");
                    re = new RegExp("function" + name + "\\s*\\(\\s*" + args + "\\s*\\)\\s*{\\s*" + body + "\\s*}");
                }
                if (result = findSourceInUrls(re, urls)) return result;
                if (parts = eventRE.exec(code)) {
                    var event = parts[1];
                    body = escapeCodeAsRegExpForMatchingInsideHTML(parts[2]);
                    re = new RegExp("on" + event + "=[\\'\"]\\s*" + body + "\\s*[\\'\"]", "i");
                    if (result = findSourceInUrls(re, urls[0])) return result;
                    re = new RegExp(body);
                    if (result = findSourceInUrls(re, urls)) return result;
                }
                return null;
            }
            function computeStackTraceFromStackProp(ex) {
                if (!isUndefined(ex.stack) && ex.stack) {
                    for (var parts, element, chrome = /^\s*at (.*?) ?\(?((?:(?:file|https?|chrome-extension):.*?)|<anonymous>):(\d+)(?::(\d+))?\)?\s*$/i, gecko = /^\s*(.*?)(?:\((.*?)\))?@((?:file|https?|chrome).*?):(\d+)(?::(\d+))?\s*$/i, winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:ms-appx|http|https):.*?):(\d+)(?::(\d+))?\)?\s*$/i, lines = ex.stack.split("\n"), stack = [], reference = /^(.*) is undefined$/.exec(ex.message), i = 0, j = lines.length; i < j; ++i) {
                        if (parts = gecko.exec(lines[i])) element = {
                            url: parts[3],
                            func: parts[1] || UNKNOWN_FUNCTION,
                            args: parts[2] ? parts[2].split(",") : "",
                            line: +parts[4],
                            column: parts[5] ? +parts[5] : null
                        }; else if (parts = chrome.exec(lines[i])) element = {
                            url: parts[2],
                            func: parts[1] || UNKNOWN_FUNCTION,
                            line: +parts[3],
                            column: parts[4] ? +parts[4] : null
                        }; else if (parts = winjs.exec(lines[i])) element = {
                            url: parts[2],
                            func: parts[1] || UNKNOWN_FUNCTION,
                            line: +parts[3],
                            column: parts[4] ? +parts[4] : null
                        }; else continue;
                        if (!element.func && element.line) element.func = guessFunctionName(element.url, element.line);
                        if (element.line) element.context = gatherContext(element.url, element.line);
                        stack.push(element);
                    }
                    if (!stack.length) return null;
                    if (stack[0].line && !stack[0].column && reference) stack[0].column = findSourceInLine(reference[1], stack[0].url, stack[0].line); else if (!stack[0].column && !isUndefined(ex.columnNumber)) stack[0].column = ex.columnNumber + 1;
                    return {
                        name: ex.name,
                        message: ex.message,
                        url: document.location.href,
                        stack: stack
                    };
                }
            }
            function computeStackTraceFromStacktraceProp(ex) {
                var stacktrace = ex.stacktrace;
                if (!isUndefined(ex.stacktrace) && ex.stacktrace) {
                    for (var parts, testRE = / line (\d+), column (\d+) in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i, lines = stacktrace.split("\n"), stack = [], i = 0, j = lines.length; i < j; i += 2) if (parts = testRE.exec(lines[i])) {
                        var element = {
                            line: +parts[1],
                            column: +parts[2],
                            func: parts[3] || parts[4],
                            args: parts[5] ? parts[5].split(",") : [],
                            url: parts[6]
                        };
                        if (!element.func && element.line) element.func = guessFunctionName(element.url, element.line);
                        if (element.line) try {
                            element.context = gatherContext(element.url, element.line);
                        } catch (exc) {}
                        if (!element.context) element.context = [ lines[i + 1] ];
                        stack.push(element);
                    }
                    if (!stack.length) return null; else return {
                        name: ex.name,
                        message: ex.message,
                        url: document.location.href,
                        stack: stack
                    };
                }
            }
            function computeStackTraceFromOperaMultiLineMessage(ex) {
                var lines = ex.message.split("\n");
                if (lines.length < 4) return null;
                var parts, i, len, source, lineRE1 = /^\s*Line (\d+) of linked script ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i, lineRE2 = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i, lineRE3 = /^\s*Line (\d+) of function script\s*$/i, stack = [], scripts = document.getElementsByTagName("script"), inlineScriptBlocks = [];
                for (i in scripts) if (hasKey(scripts, i) && !scripts[i].src) inlineScriptBlocks.push(scripts[i]);
                for (i = 2, len = lines.length; i < len; i += 2) {
                    var item = null;
                    if (parts = lineRE1.exec(lines[i])) item = {
                        url: parts[2],
                        func: parts[3],
                        line: +parts[1]
                    }; else if (parts = lineRE2.exec(lines[i])) {
                        item = {
                            url: parts[3],
                            func: parts[4]
                        };
                        var relativeLine = +parts[1], script = inlineScriptBlocks[parts[2] - 1];
                        if (script) {
                            source = getSource(item.url);
                            if (source) {
                                source = source.join("\n");
                                var pos = source.indexOf(script.innerText);
                                if (pos >= 0) item.line = relativeLine + source.substring(0, pos).split("\n").length;
                            }
                        }
                    } else if (parts = lineRE3.exec(lines[i])) {
                        var url = window.location.href.replace(/#.*$/, ""), line = parts[1], re = new RegExp(escapeCodeAsRegExpForMatchingInsideHTML(lines[i + 1]));
                        source = findSourceInUrls(re, [ url ]);
                        item = {
                            url: url,
                            line: source ? source.line : line,
                            func: ""
                        };
                    }
                    if (item) {
                        if (!item.func) item.func = guessFunctionName(item.url, item.line);
                        var context = gatherContext(item.url, item.line), midline = context ? context[Math.floor(context.length / 2)] : null;
                        if (context && midline.replace(/^\s*/, "") === lines[i + 1].replace(/^\s*/, "")) item.context = context; else item.context = [ lines[i + 1] ];
                        stack.push(item);
                    }
                }
                if (!stack.length) return null; else return {
                    name: ex.name,
                    message: lines[0],
                    url: document.location.href,
                    stack: stack
                };
            }
            function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
                var initial = {
                    url: url,
                    line: lineNo
                };
                if (initial.url && initial.line) {
                    stackInfo.incomplete = !1;
                    if (-1 !== initial.url.indexOf(".hta") || -1 !== initial.url.indexOf(".html")) initial.url = "drp.js";
                    if (!initial.func) initial.func = guessFunctionName(initial.url, initial.line);
                    if (!initial.context) initial.context = gatherContext(initial.url, initial.line);
                    var reference = / '([^']+)' /.exec(message);
                    if (reference) initial.column = findSourceInLine(reference[1], initial.url, initial.line);
                    if (stackInfo.stack.length > 0) if (stackInfo.stack[0].url === initial.url) if (stackInfo.stack[0].line === initial.line) return !1; else if (!stackInfo.stack[0].line && stackInfo.stack[0].func === initial.func) {
                        stackInfo.stack[0].line = initial.line;
                        stackInfo.stack[0].context = initial.context;
                        return !1;
                    }
                    stackInfo.stack.unshift(initial);
                    stackInfo.partial = !0;
                    return !0;
                } else stackInfo.incomplete = !0;
                return !1;
            }
            function computeStackTraceByWalkingCallerChain(ex, depth) {
                for (var parts, item, source, functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, stack = [], funcs = {}, recursion = !1, curr = computeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) if (curr !== computeStackTrace && curr !== TraceKit.report) {
                    item = {
                        url: null,
                        func: UNKNOWN_FUNCTION,
                        line: null,
                        column: null
                    };
                    if (curr.name) item.func = curr.name; else if (parts = functionName.exec(curr.toString())) item.func = parts[1];
                    if ("undefined" == typeof item.func) try {
                        item.func = parts.input.substring(0, parts.input.indexOf("{"));
                    } catch (e) {}
                    if (source = findSourceByFunctionBody(curr)) {
                        item.url = source.url;
                        if (-1 !== item.url.indexOf(".hta") || -1 !== item.url.indexOf(".html")) item.url = "drp.js";
                        item.line = source.line;
                        item.context = gatherContext(item.url, item.line);
                        if (item.func === UNKNOWN_FUNCTION) item.func = guessFunctionName(item.url, item.line);
                        var reference = / '([^']+)' /.exec(ex.message || ex.description);
                        if (reference) item.column = findSourceInLine(reference[1], source.url, source.line);
                    }
                    if (funcs["" + curr]) recursion = !0; else funcs["" + curr] = !0;
                    stack.push(item);
                }
                if (depth) stack.splice(0, depth);
                var result = {
                    name: ex.name,
                    message: ex.message,
                    url: document.location.href,
                    stack: stack
                };
                augmentStackTraceWithInitialElement(result, ex.sourceURL || ex.fileName, ex.line || ex.lineNumber, ex.message || ex.description);
                return result;
            }
            function computeStackTrace(ex, depth) {
                var stack = null;
                depth = null == depth ? 0 : +depth;
                try {
                    stack = computeStackTraceFromStacktraceProp(ex);
                    if (stack) return stack;
                } catch (e) {
                    if (TraceKit.debug) throw e;
                }
                try {
                    stack = computeStackTraceFromStackProp(ex);
                    if (stack) return stack;
                } catch (e) {
                    if (TraceKit.debug) throw e;
                }
                try {
                    stack = computeStackTraceFromOperaMultiLineMessage(ex);
                    if (stack) return stack;
                } catch (e) {
                    if (TraceKit.debug) throw e;
                }
                try {
                    stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
                    if (stack) return stack;
                } catch (e) {
                    if (TraceKit.debug) throw e;
                }
                return {
                    name: ex.name,
                    message: ex.message,
                    url: document.location.href
                };
            }
            var sourceCache = {};
            computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
            computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
            computeStackTrace.guessFunctionName = guessFunctionName;
            computeStackTrace.gatherContext = gatherContext;
            return computeStackTrace;
        }();
        var lastCapturedException, _lastEventId, globalServer, globalUser, globalKey, globalProject, _Raven = window.Raven, hasJSON = !("object" !== ("undefined" == typeof JSON ? "undefined" : _typeof(JSON)) || !JSON.stringify), globalOptions = {
            logger: "javascript",
            ignoreErrors: [],
            ignoreUrls: [],
            whitelistUrls: [],
            includePaths: [],
            crossOrigin: "anonymous",
            collectWindowErrors: !0,
            tags: {},
            maxMessageLength: 100,
            extra: {}
        }, isRavenInstalled = !1, objectPrototype = Object.prototype, originalConsole = window.console || {}, originalConsoleMethods = {}, startTime = now();
        for (var method in originalConsole) originalConsoleMethods[method] = originalConsole[method];
        var Raven = {
            VERSION: "1.1.22",
            debug: !0,
            noConflict: function() {
                window.Raven = _Raven;
                return Raven;
            },
            config: function(dsn, options) {
                if (globalServer) {
                    logDebug("error", "Error: Raven has already been configured");
                    return Raven;
                }
                if (!dsn) return Raven;
                var uri = parseDSN(dsn), lastSlash = uri.path.lastIndexOf("/"), path = uri.path.substr(1, lastSlash);
                if (options) each(options, function(key, value) {
                    globalOptions[key] = value;
                });
                globalOptions.ignoreErrors.push(/^Script error\.?$/);
                globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);
                globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
                globalOptions.ignoreUrls = globalOptions.ignoreUrls.length ? joinRegExp(globalOptions.ignoreUrls) : !1;
                globalOptions.whitelistUrls = globalOptions.whitelistUrls.length ? joinRegExp(globalOptions.whitelistUrls) : !1;
                globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
                globalKey = uri.user;
                globalProject = uri.path.substr(lastSlash + 1);
                globalServer = "//" + uri.host + (uri.port ? ":" + uri.port : "") + "/" + path + "api/" + globalProject + "/store/";
                if (uri.protocol) globalServer = uri.protocol + ":" + globalServer;
                if (globalOptions.fetchContext) TraceKit.remoteFetching = !0;
                if (globalOptions.linesOfContext) TraceKit.linesOfContext = globalOptions.linesOfContext;
                TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
                return Raven;
            },
            install: function() {
                if (_isSetup() && !isRavenInstalled) {
                    TraceKit.report.subscribe(handleStackInfo);
                    isRavenInstalled = !0;
                }
                return Raven;
            },
            context: function(options, func, args) {
                if (isFunction(options)) {
                    args = func || [];
                    func = options;
                    options = undefined;
                }
                return Raven.wrap(options, func).apply(this, args);
            },
            wrap: function(options, func) {
                function wrapped() {
                    for (var args = [], i = arguments.length, deep = !options || options && !1 !== options.deep; i--; ) args[i] = deep ? Raven.wrap(options, arguments[i]) : arguments[i];
                    try {
                        return func.apply(this, args);
                    } catch (e) {
                        Raven.captureException(e, options);
                        throw e;
                    }
                }
                if (isUndefined(func) && !isFunction(options)) return options;
                if (isFunction(options)) {
                    func = options;
                    options = undefined;
                }
                if (!isFunction(func)) return func;
                if (func.__raven__) return func;
                for (var property in func) if (hasKey(func, property)) wrapped[property] = func[property];
                wrapped.__raven__ = !0;
                wrapped.__inner__ = func;
                return wrapped;
            },
            uninstall: function() {
                TraceKit.report.uninstall();
                isRavenInstalled = !1;
                return Raven;
            },
            captureException: function(ex, options) {
                if (!isError(ex)) return Raven.captureMessage(ex, options);
                lastCapturedException = ex;
                try {
                    handleStackInfo(TraceKit.computeStackTrace(ex), options);
                } catch (ex1) {
                    if (ex !== ex1) throw ex1;
                }
                return Raven;
            },
            captureMessage: function(msg, options) {
                if (!globalOptions.ignoreErrors.test || !globalOptions.ignoreErrors.test(msg)) {
                    send(objectMerge({
                        message: msg + ""
                    }, options));
                    return Raven;
                }
            },
            setUserContext: function(user) {
                globalUser = user;
                return Raven;
            },
            setExtraContext: function(extra) {
                globalOptions.extra = extra || {};
                return Raven;
            },
            setTagsContext: function(tags) {
                globalOptions.tags = tags || {};
                return Raven;
            },
            setReleaseContext: function(release) {
                globalOptions.release = release;
                return Raven;
            },
            setDataCallback: function(callback) {
                globalOptions.dataCallback = callback;
                return Raven;
            },
            setShouldSendCallback: function(callback) {
                globalOptions.shouldSendCallback = callback;
                return Raven;
            },
            lastException: function() {
                return lastCapturedException;
            },
            lastEventId: function() {
                return _lastEventId;
            },
            isSetup: function() {
                return _isSetup();
            }
        };
        Raven.setUser = Raven.setUserContext;
        var dsnKeys = "source protocol user pass host port path".split(" "), dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;
        RavenConfigError.prototype = new Error();
        RavenConfigError.prototype.constructor = RavenConfigError;
        var ravenNotConfiguredError;
        !function() {
            var RavenConfig = window.RavenConfig;
            if (RavenConfig) Raven.config(RavenConfig.dsn, RavenConfig.config).install();
        }();
        if (!0) {
            window.Raven = Raven;
            __WEBPACK_AMD_DEFINE_ARRAY__ = [], (__WEBPACK_AMD_DEFINE_RESULT__ = function() {
                return Raven;
            }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
        } else if ("object" === (void 0 === module ? "undefined" : _typeof(module))) module.exports = Raven; else if ("object" === (void 0 === exports ? "undefined" : _typeof(exports))) exports = Raven; else window.Raven = Raven;
    }("undefined" != typeof window ? window : undefined);
}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {}, function(module, exports) {
    module.exports = [ {
        name: "HP",
        altNames: [ "hewlett-packard", "hp", "probook", "hp-pavilion" ],
        prioritized: 1
    }, {
        name: "Asus",
        altNames: [ "asus", "asustek" ],
        prioritized: 1
    }, {
        name: "Lenovo",
        altNames: [ "lenovo", "lenovo notebook", "lnv" ],
        prioritized: 1
    }, {
        name: "Acer",
        altNames: [ "acer" ],
        prioritized: 1
    }, {
        name: "Dell",
        altNames: [ "dell", "dellinc", "wyse" ],
        prioritized: 1
    }, {
        name: "Toshiba",
        altNames: [ "toshiba", "semp toshiba", "semp toshiba informaticaa", "semp toshiba informatica ltda" ],
        prioritized: 1
    }, {
        name: "Samsung",
        altNames: [ "samsung" ],
        prioritized: 1
    }, {
        name: "Sony",
        altNames: [ "sony", "vaio" ],
        prioritized: 1
    }, {
        name: "Packard Bell",
        altNames: [ "packard bell", "packard bells", "packard bell bv", "packard bell nec", "parkard bell" ],
        prioritized: 1
    }, {
        name: "eMachines",
        altNames: [ "emachines" ],
        prioritized: 0
    }, {
        name: "Fujitsu",
        altNames: [ "fujitsu", "fujitsu siemens", "fujitsu siemems" ],
        prioritized: 1
    }, {
        name: "Pegatron",
        altNames: [ "pegatron" ],
        prioritized: 0
    }, {
        name: "Intel",
        altNames: [ "intel", "intelr", "intel(r)atom" ],
        prioritized: 0
    }, {
        name: "MSI",
        altNames: [ "micro-star", "msi_nb", "msi", "micro-star int'l" ],
        prioritized: 1
    }, {
        name: "Clevo",
        altNames: [ "clevo" ],
        prioritized: 0
    }, {
        name: "Positivo",
        altNames: [ "positivo", "positivo informatica", "positivo informaticaa", "positivo bgh", "positivo informatica s/a" ],
        prioritized: 0
    }, {
        name: "Gateway",
        altNames: [ "gateway" ],
        prioritized: 0
    }, {
        name: "Apple",
        altNames: [ "apple" ],
        prioritized: 1
    }, {
        name: "LG",
        altNames: [ "lg" ],
        prioritized: 1
    }, {
        name: "DNS",
        altNames: [ "dns", "dns center", "dns computer center" ],
        prioritized: 0
    }, {
        name: "Quanta",
        altNames: [ "quanta", "kn1", "qci" ],
        prioritized: 0
    }, {
        name: "IBM",
        altNames: [ "ibm" ],
        prioritized: 0
    }, {
        name: "Digibras",
        altNames: [ "digibras" ],
        prioritized: 0
    }, {
        name: "Compal",
        altNames: [ "compal" ],
        prioritized: 0
    }, {
        name: "Medion",
        altNames: [ "medion", "medionag", "medionpc", "medionnb" ],
        prioritized: 0
    }, {
        name: "Casper",
        altNames: [ "casper", "casper bilgisayar", "casper bilgisayar sistemleri", "casper bilgisayar sistemleri.a.s", "casper bilgisayar sistemleria", "casper bilgisayar sistemleris" ],
        prioritized: 0
    }, {
        name: "Insyde",
        altNames: [ "insyde" ],
        prioritized: 0
    }, {
        name: "Itautec",
        altNames: [ "itautec", "itauteca", "itautec philco", "itautec philcoa" ],
        prioritized: 0
    }, {
        name: "Axioo",
        altNames: [ "axioo" ],
        prioritized: 0
    }, {
        name: "VIT",
        altNames: [ "vit" ],
        prioritized: 0
    }, {
        name: "Alienware",
        altNames: [ "alienware" ],
        prioritized: 0
    }, {
        name: "NEC",
        altNames: [ "nec", "necs", "nec csd", "necs sas" ],
        prioritized: 0
    }, {
        name: "HCL",
        altNames: [ "hcl", "hcl infosystems" ],
        prioritized: 0
    }, {
        name: "DEXP",
        altNames: [ "dexp" ],
        prioritized: 0
    }, {
        name: "Arcelik",
        altNames: [ "arcelik", "arceliks", "arcelik-a.s" ],
        prioritized: 0
    }, {
        name: "Microsoft",
        altNames: [ "microsoft" ],
        prioritized: 0
    }, {
        name: "Panasonic",
        altNames: [ "panasonic", "matsushita electric industrial" ],
        prioritized: 1
    }, {
        name: "ECS",
        altNames: [ "ecs" ],
        prioritized: 0
    }, {
        name: "Benq",
        altNames: [ "benq" ],
        prioritized: 0
    }, {
        name: "Haier",
        altNames: [ "haier", "haiercomputer", "haier information" ],
        prioritized: 0
    }, {
        name: "Prestigio",
        altNames: [ "prestigio" ],
        prioritized: 0
    }, {
        name: "Gigabyte",
        altNames: [ "gigabyte", "gbt", "gigabyte tecohnology" ],
        prioritized: 0
    }, {
        name: "Compaq",
        altNames: [ "compaq" ],
        prioritized: 0
    }, {
        name: "Bangho",
        altNames: [ "bangho" ],
        prioritized: 0
    }, {
        name: "ExoPC",
        altNames: [ "exo", "exopc" ],
        prioritized: 0
    }, {
        name: "Megaware",
        altNames: [ "megaware" ],
        prioritized: 0
    }, {
        name: "Wipro",
        altNames: [ "wipro" ],
        prioritized: 0
    }, {
        name: "Exper",
        altNames: [ "exper", "expers", "exper@datateknik", "karizma a5v" ],
        prioritized: 0
    }, {
        name: "CCE",
        altNames: [ "cce", "cceinf" ],
        prioritized: 0
    }, {
        name: "Rover",
        altNames: [ "rover", "roverbook", "infomash", "ooo infomash", "ooo infomach" ],
        prioritized: 0
    }, {
        name: "Oysters",
        altNames: [ "oysters" ],
        prioritized: 0
    }, {
        name: "Spa Condor",
        altNames: [ "spa condor" ],
        prioritized: 0
    }, {
        name: "Irbis",
        altNames: [ "irbis" ],
        prioritized: 0
    }, {
        name: "Hasee",
        altNames: [ "hasee", "hasee co,.ltd" ],
        prioritized: 0
    }, {
        name: "Siragon",
        altNames: [ "siragon" ],
        prioritized: 0
    }, {
        name: "RM",
        altNames: [ "rm plc", "rm education" ],
        prioritized: 0
    }, {
        name: "Alaska",
        altNames: [ "alaska" ],
        prioritized: 0
    }, {
        name: "Monster",
        altNames: [ "monster", "monster notebook" ],
        prioritized: 0
    }, {
        name: "Micromax",
        altNames: [ "micromax" ],
        prioritized: 0
    }, {
        name: "MTC",
        altNames: [ "mtc" ],
        prioritized: 0
    }, {
        name: "Advance",
        altNames: [ "advance", "advan", "advanc" ],
        prioritized: 0
    }, {
        name: "Gericom",
        altNames: [ "gericom" ],
        prioritized: 0
    }, {
        name: "i-Life",
        altNames: [ "ilife", "i-life", "i-life digital llc" ],
        prioritized: 0
    }, {
        name: "Noblex",
        altNames: [ "noblex", "noblex argentina" ],
        prioritized: 0
    }, {
        name: "Deltron",
        altNames: [ "deltron" ],
        prioritized: 0
    }, {
        name: "DixonsXP",
        altNames: [ "dixonsxp" ],
        prioritized: 0
    }, {
        name: "Wortmann",
        altNames: [ "wortmann" ],
        prioritized: 0
    }, {
        name: "YiFang",
        altNames: [ "yifang" ],
        prioritized: 0
    }, {
        name: "PTLTD",
        altNames: [ "ptltd" ],
        prioritized: 0
    }, {
        name: "FIC",
        altNames: [ "fic" ],
        prioritized: 0
    }, {
        name: "CZC",
        altNames: [ "czc" ],
        prioritized: 0
    }, {
        name: "Onda",
        altNames: [ "onda" ],
        prioritized: 0
    }, {
        name: "DBM",
        altNames: [ "dbm", "dbm maroc" ],
        prioritized: 0
    }, {
        name: "Maxdata",
        altNames: [ "maxdata" ],
        prioritized: 0
    }, {
        name: "PinnacleMicro",
        altNames: [ "pinnaclemicro", "pinnacle micro" ],
        prioritized: 0
    }, {
        name: "Login",
        altNames: [ "login", "login informaticaa", "login informática", "login informáticaa" ],
        prioritized: 0
    }, {
        name: "Vestel",
        altNames: [ "vestel", "vestel dijitals" ],
        prioritized: 0
    }, {
        name: "PC Smart",
        altNames: [ "pcsmart", "pcsmarta", "pcsmarta.s" ],
        prioritized: 0
    }, {
        name: "Compumax",
        altNames: [ "compumax", "compumaxa" ],
        prioritized: 0
    }, {
        name: "Mustek",
        altNames: [ "mustek", "mustek6376mst6376" ],
        prioritized: 0
    }, {
        name: "Olidata",
        altNames: [ "olidata", "olidata chilea", "olidatap", "computacion olidata" ],
        prioritized: 0
    }, {
        name: "Radio Victoria Fueguina",
        altNames: [ "radio victoria fueguina", "radio victoria fueguinaa" ],
        prioritized: 0
    }, {
        name: "Shenzhen",
        altNames: [ "shenzhen", "shenzhen da&fong", "shenzhen emc", "shenzhen yungtai imp. and exp. co", "shenzhen yungtai imp. and exp. co," ],
        prioritized: 0
    }, {
        name: "Depo",
        altNames: [ "depo", "depos" ],
        prioritized: 0
    }, {
        name: "Digitron",
        altNames: [ "digitron", "digitron da amazonia" ],
        prioritized: 0
    }, {
        name: "Lanix",
        altNames: [ "lanix", "lanix todos los derechos reservados", "corporativo lanix", "corporativo lanix,a. de c.v" ],
        prioritized: 0
    }, {
        name: "TCL",
        altNames: [ "tcl", "tcl cor.,ltd" ],
        prioritized: 0
    }, {
        name: "THD",
        altNames: [ "thd", "thd(thread)" ],
        prioritized: 0
    }, {
        name: "BGH",
        altNames: [ "bgh", "bgh e-nova" ],
        prioritized: 0
    }, {
        name: "Founder",
        altNames: [ "founder", "founder pc" ],
        prioritized: 0
    }, {
        name: "Microboard",
        altNames: [ "microboard", "microboard ind.e com.de produtos elet.itda" ],
        prioritized: 0
    }, {
        name: "Neo",
        altNames: [ "neo", "neo manufacturing & services", "neophl" ],
        prioritized: 0
    }, {
        name: "Standard",
        altNames: [ "standard", "stand" ],
        prioritized: 0
    }, {
        name: "Zepto",
        altNames: [ "zepto", "zeptol" ],
        prioritized: 0
    }, {
        name: "Zyrex",
        altNames: [ "zyrex", "zyrex system" ],
        prioritized: 0
    }, {
        name: "Crea",
        altNames: [ "crea", "creas" ],
        prioritized: 0
    }, {
        name: "Axdia",
        altNames: [ "axdia", "axdia gmbh" ],
        prioritized: 0
    }, {
        name: "Bytespeed",
        altNames: [ "bytespeed", "bytespeed llc" ],
        prioritized: 0
    }, {
        name: "Advantech",
        altNames: [ "advantech", "advantec" ],
        prioritized: 0
    }, {
        name: "Airis",
        altNames: [ "airis", "airs srl" ],
        prioritized: 0
    }, {
        name: "Beko",
        altNames: [ "beko", "bekopc" ],
        prioritized: 0
    }, {
        name: "Essentiel B",
        altNames: [ "essentiel b", "essentielb" ],
        prioritized: 0
    }, {
        name: "GoClever",
        altNames: [ "goclever" ],
        prioritized: 0
    }, {
        name: "iBall",
        altNames: [ "iball" ],
        prioritized: 0
    }, {
        name: "GD Itronix",
        altNames: [ "itronix", "gd itronix" ],
        prioritized: 0
    }, {
        name: "JP SA Couto",
        altNames: [ "jpsacouto", "jp sa couto" ],
        prioritized: 0
    }, {
        name: "MIPI",
        altNames: [ "mipi", "mipi pc" ],
        prioritized: 0
    }, {
        name: "Mouse Computer",
        altNames: [ "mouse computer", "mousecomputer" ],
        prioritized: 0
    }, {
        name: "Getac",
        altNames: [ "getac", "ncstech" ],
        prioritized: 0
    }, {
        name: "Phoenix",
        altNames: [ "phoenix", "phoenix/sis" ],
        prioritized: 0
    }, {
        name: "Stone",
        altNames: [ "stone", "stone-computers" ],
        prioritized: 0
    }, {
        name: "Sun",
        altNames: [ "sun", "sun microsystems" ],
        prioritized: 0
    }, {
        name: "Third Wave",
        altNames: [ "third wave", "thirdwave" ],
        prioritized: 0
    }, {
        name: "Biostar",
        altNames: [ "biostar", "biostar group" ]
    }, {
        name: "Noname",
        altNames: [ "a14cr", "a14cu", "a15cr03", "accm", "actebis", "algorithm", "american megatrends", "aral oyun ve konsols", "ati", "bauhn", "blank", "bluelight", "britania", "brunenit", "buster", "byt80cp", "centra", "cevena", "common version d12", "complet electro serv", "connect", "coradira", "creative vision", "default string", "dialogue", "dummymanufacturer", "ea", "efirstview", "egreat", "equus systems", "eurl saterex", "eurotradellc", "foxconn", "garbarino saic", "generic", "grupo nucleo", "h-buster", "head-links", "houter", "ifsa", "inco co,a. de c.v", "infinity", "insyde", "inupur", "jingwah-kaoge", "kampen", "kanji", "kennex", "l3000 y300", "logycoms", "merlion trade overseas", "mpman", "multilaser", "n3", "n/a", "navigator", "nca group", "n d", "nikon battery", "noname", "none", "notebook", "novatech", "o", "o.e.m", "o.e.m.", "odm", "oem", "oem pc", "oem default", "ox", "parallels software", "pcsy09", "pega pc", "plaisio", "quanmax", "soltech", "stem manufacturer", "system manufacturer", "telecomitalia", "tenco ind. com", "times", "timi", "to be filled by o.e.m", "top it industries sdn bhd", "tora", "tps", "trinity", "tsinghua tongfang", "uli", "uniwill", "unknown", "v5", "xxxxxx" ],
        prioritized: 0
    } ];
}, function(module, exports) {
    module.exports = {
        general: {
            settings: {
                language: {
                    type: "language",
                    defaultValue: ""
                },
                enableLogging: {
                    type: "switch",
                    defaultValue: !0
                },
                activateFirebug: {
                    type: "switch",
                    disabled: !0,
                    defaultValue: !1,
                    patched: 1
                },
                removeIntallationTempFiles: {
                    type: "switch",
                    defaultValue: !1
                },
                enableSoftAndDriverUtilities: {
                    type: "switch",
                    defaultValue: !0
                },
                enableProtect: {
                    type: "switch",
                    defaultValue: !0
                },
                enableDiagnostics: {
                    type: "switch",
                    defaultValue: !0
                },
                startOnExpertMode: {
                    type: "switch",
                    defaultValue: !1
                },
                minifyMenu: {
                    type: "switch",
                    defaultValue: !1
                },
                enableAuthorization: {
                    type: "switch",
                    defaultValue: !0,
                    disabled: !0
                },
                enableNews: {
                    type: "switch",
                    defaultValue: !0,
                    disabled: !0
                },
                selectDriversByDefault: {
                    type: "switch",
                    defaultValue: !1,
                    patched: 1
                },
                selectSoftByDefault: {
                    type: "switch",
                    defaultValue: !1,
                    patched: 1
                },
                hideInstallationBanners: {
                    type: "switch",
                    defaultValue: !1
                },
                installNotifier: {
                    type: "switch",
                    defaultValue: !0
                }
            }
        },
        errors: {
            settings: {
                showBugReport: {
                    type: "switch",
                    defaultValue: !0
                },
                createRestorePoint: {
                    type: "switch",
                    defaultValue: !0
                },
                createDriversBackup: {
                    type: "switch",
                    defaultValue: !0,
                    disabled: !0
                },
                enableSystemCheck: {
                    type: "switch",
                    defaultValue: !0
                }
            }
        },
        driverSelection: {
            settings: {
                sendStatistics: {
                    type: "switch",
                    defaultValue: !0,
                    patched: 1,
                    dependentSettings: [ "driverSelection.useMachineLearning", "driverSelection.analyzeBsods" ]
                },
                useMachineLearning: {
                    type: "switch",
                    defaultValue: !0,
                    disabled: !1,
                    patched: 1
                },
                analyzeBsods: {
                    type: "switch",
                    defaultValue: !0,
                    patched: 1
                },
                collectUserDrivers: {
                    type: "switch",
                    defaultValue: !1,
                    disabled: !0
                }
            }
        },
        hidden: {
            settings: {
                onboarding: {
                    type: "string",
                    defaultValue: "{}"
                }
            }
        }
    };
}, function(module, exports) {
    module.exports = [ {
        id: "archiver"
    }, {
        id: "browser"
    }, {
        id: "viewer"
    }, {
        id: "messenger"
    }, {
        id: "internet"
    }, {
        id: "player"
    }, {
        id: "backup"
    }, {
        id: "antivirus"
    }, {
        id: "system"
    }, {
        id: "drivers"
    } ];
}, function(module, exports) {
    module.exports = 'Function SetScreenResolution {\n\n<#\n  .Synopsis\n    Sets the Screen Resolution of the primary monitor\n  .Description\n    Uses Pinvoke and ChangeDisplaySettings Win32API to make the change\n  .Example\n    SetScreenResolution -Width 1024 -Height 768\n#>\n\nparam (\n[Parameter(Mandatory=$true,\n  Position = 0)]\n[int]\n$Width,\n\n[Parameter(Mandatory=$true,\n  Position = 1)]\n[int]\n$Height\n)\n\n$pinvokeCode = @"\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace Resolution\n{\n  [StructLayout(LayoutKind.Sequential)]\n  public struct DEVMODE1\n  {\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]\n    public string dmDeviceName;\n    public short dmSpecVersion;\n    public short dmDriverVersion;\n    public short dmSize;\n    public short dmDriverExtra;\n    public int dmFields;\n\n    public short dmOrientation;\n    public short dmPaperSize;\n    public short dmPaperLength;\n    public short dmPaperWidth;\n\n    public short dmScale;\n    public short dmCopies;\n    public short dmDefaultSource;\n    public short dmPrintQuality;\n    public short dmColor;\n    public short dmDuplex;\n    public short dmYResolution;\n    public short dmTTOption;\n    public short dmCollate;\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]\n    public string dmFormName;\n    public short dmLogPixels;\n    public short dmBitsPerPel;\n    public int dmPelsWidth;\n    public int dmPelsHeight;\n\n    public int dmDisplayFlags;\n    public int dmDisplayFrequency;\n\n    public int dmICMMethod;\n    public int dmICMIntent;\n    public int dmMediaType;\n    public int dmDitherType;\n    public int dmReserved1;\n    public int dmReserved2;\n\n    public int dmPanningWidth;\n    public int dmPanningHeight;\n  };\n\n  class User_32\n  {\n    [DllImport("user32.dll")]\n    public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);\n    [DllImport("user32.dll")]\n    public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);\n\n    public const int ENUM_CURRENT_SETTINGS = -1;\n    public const int CDS_UPDATEREGISTRY = 0x01;\n    public const int CDS_TEST = 0x02;\n    public const int DISP_CHANGE_SUCCESSFUL = 0;\n    public const int DISP_CHANGE_RESTART = 1;\n    public const int DISP_CHANGE_FAILED = -1;\n  }\n\n  public class PrimaryScreenResolution\n  {\n    static public string ChangeResolution(int width, int height)\n    {\n      DEVMODE1 dm = GetDevMode1();\n\n      if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))\n      {\n        dm.dmPelsWidth = width;\n        dm.dmPelsHeight = height;\n\n        int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);\n\n        if (iRet == User_32.DISP_CHANGE_FAILED)\n        {\n          return "Unable To Process Your Request. Sorry For This Inconvenience.";\n        }\n        else\n        {\n          iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);\n          switch (iRet)\n          {\n            case User_32.DISP_CHANGE_SUCCESSFUL:\n              {\n                return "Success";\n              }\n            case User_32.DISP_CHANGE_RESTART:\n              {\n                return "You Need To Reboot For The Change To Happen.\\n If You Feel Any Problem After Rebooting Your Machine\\nThen Try To Change Resolution In Safe Mode.";\n              }\n            default:\n              {\n                return "Failed To Change The Resolution";\n              }\n          }\n\n        }\n      }\n      else\n      {\n        return "Failed To Change The Resolution.";\n      }\n    }\n\n    private static DEVMODE1 GetDevMode1()\n    {\n      DEVMODE1 dm = new DEVMODE1();\n      dm.dmDeviceName = new String(new char[32]);\n      dm.dmFormName = new String(new char[32]);\n      dm.dmSize = (short)Marshal.SizeOf(dm);\n      return dm;\n    }\n  }\n}\n\n"@\n\nAdd-Type $pinvokeCode -ErrorAction SilentlyContinue\n[Resolution.PrimaryScreenResolution]::ChangeResolution($width,$height)\n}\n';
}, function(module, exports) {
    (function(__webpack_amd_options__) {
        module.exports = __webpack_amd_options__;
    }).call(exports, {});
}, function(module, exports) {
    module.exports = {
        drivers: [ {
            index: 1,
            size: {
                pretty: "2.2GiB",
                value: 2427368792
            },
            root: "DriverPack",
            path: "drivers\\DP_Video_nVIDIA_Server_18050.7z",
            name: "Video_nVIDIA_Server",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 2,
            size: {
                pretty: "2.1GiB",
                value: 2351071958
            },
            root: "DriverPack",
            path: "drivers\\DP_Videos_AMD-NT_18050.7z",
            name: "Videos_AMD-NT",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 3,
            size: {
                pretty: "1.9GiB",
                value: 2122599594
            },
            root: "DriverPack",
            path: "drivers\\DP_Video_nVIDIA-NT_18050.7z",
            name: "Video_nVIDIA-NT",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 4,
            size: {
                pretty: "1.1GiB",
                value: 1228013026
            },
            root: "DriverPack",
            path: "drivers\\DP_Video_Intel-NT_18050.7z",
            name: "Video_Intel-NT",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 5,
            size: {
                pretty: "1.1GiB",
                value: 1202823248
            },
            root: "DriverPack",
            path: "drivers\\DP_Printer_18050.7z",
            name: "Printer",
            build: "18.05.0",
            "class": "printer"
        }, {
            index: 6,
            size: {
                pretty: "1.0GiB",
                value: 1119550110
            },
            root: "DriverPack",
            path: "drivers\\DP_Video_nVIDIA-XP_18050.7z",
            name: "Video_nVIDIA-XP",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 7,
            size: {
                pretty: "0.9GiB",
                value: 998807216
            },
            root: "DriverPack",
            path: "drivers\\DP_Videos_AMD_Server_18050.7z",
            name: "Videos_AMD_Server",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 8,
            size: {
                pretty: "653MiB",
                value: 685262876
            },
            root: "DriverPack",
            path: "drivers\\DP_Touchpad_Elan_18050.7z",
            name: "Touchpad_Elan",
            build: "18.05.0",
            "class": "inputdev"
        }, {
            index: 9,
            size: {
                pretty: "368MiB",
                value: 386516335
            },
            root: "DriverPack",
            path: "drivers\\DP_Touchpad_Synaptics_18050.7z",
            name: "Touchpad_Synaptics",
            build: "18.05.0",
            "class": "inputdev"
        }, {
            index: 10,
            size: {
                pretty: "362MiB",
                value: 379963586
            },
            root: "DriverPack",
            path: "drivers\\DP_Sounds_Realtek_18050.7z",
            name: "Sounds_Realtek",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 11,
            size: {
                pretty: "321MiB",
                value: 337128526
            },
            root: "DriverPack",
            path: "drivers\\DP_WLAN-WiFi_18050.7z",
            name: "WLAN-WiFi",
            build: "18.05.0",
            "class": "wifi"
        }, {
            index: 12,
            size: {
                pretty: "319MiB",
                value: 335292283
            },
            root: "DriverPack",
            path: "drivers\\DP_Videos_AMD-XP_18050.7z",
            name: "Videos_AMD-XP",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 13,
            size: {
                pretty: "291MiB",
                value: 306016249
            },
            root: "DriverPack",
            path: "drivers\\DP_Videos_Others_18050.7z",
            name: "Videos_Others",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 16,
            size: {
                pretty: "232MiB",
                value: 243767150
            },
            root: "DriverPack",
            path: "drivers\\DP_WebCam_18050.7z",
            name: "WebCam",
            build: "18.05.0",
            "class": "webcamera"
        }, {
            index: 17,
            size: {
                pretty: "192MiB",
                value: 202053439
            },
            root: "DriverPack",
            path: "drivers\\DP_Misc_18050.7z",
            name: "Misc",
            build: "18.05.0",
            "class": "other"
        }, {
            index: 18,
            size: {
                pretty: "189MiB",
                value: 198288575
            },
            root: "DriverPack",
            path: "drivers\\DP_Chipset_18050.7z",
            name: "Chipset",
            build: "18.05.0",
            "class": "chipset"
        }, {
            index: 19,
            size: {
                pretty: "178MiB",
                value: 186794221
            },
            root: "DriverPack",
            path: "drivers\\DP_Sound_Conexant_18050.7z",
            name: "Sound_Conexant",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 20,
            size: {
                pretty: "172MiB",
                value: 180367902
            },
            root: "DriverPack",
            path: "drivers\\DP_xUSB_EXE_18050.7z",
            name: "xUSB_EXE",
            build: "18.05.0",
            "class": "chipset"
        }, {
            index: 21,
            size: {
                pretty: "156MiB",
                value: 164254981
            },
            root: "DriverPack",
            path: "drivers\\DP_Sound_Creative_18050.7z",
            name: "Sound_Creative",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 22,
            size: {
                pretty: "148MiB",
                value: 155987693
            },
            root: "DriverPack",
            path: "drivers\\DP_Biometric_18050.7z",
            name: "Biometric",
            build: "18.05.0",
            "class": "other"
        }, {
            index: 23,
            size: {
                pretty: "122MiB",
                value: 128472978
            },
            root: "DriverPack",
            path: "drivers\\DP_Sound_Others_18050.7z",
            name: "Sound_Others",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 24,
            size: {
                pretty: "120MiB",
                value: 125856282
            },
            root: "DriverPack",
            path: "drivers\\DP_Touchpad_Alps_18050.7z",
            name: "Touchpad_Alps",
            build: "18.05.0",
            "class": "inputdev"
        }, {
            index: 25,
            size: {
                pretty: "108MiB",
                value: 114277553
            },
            root: "DriverPack",
            path: "drivers\\DP_LAN_Others_18050.7z",
            name: "LAN_Others",
            build: "18.05.0",
            "class": "lan"
        }, {
            index: 26,
            size: {
                pretty: "108MiB",
                value: 113390997
            },
            root: "DriverPack",
            path: "drivers\\DP_Sound_CMedia_18050.7z",
            name: "Sound_CMedia",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 28,
            size: {
                pretty: "87MiB",
                value: 91728480
            },
            root: "DriverPack",
            path: "drivers\\DP_Vendor_18050.7z",
            name: "Vendor",
            build: "18.05.0",
            "class": "other"
        }, {
            index: 29,
            size: {
                pretty: "84MiB",
                value: 88958813
            },
            root: "DriverPack",
            path: "drivers\\DP_Video_Intel-XP_18050.7z",
            name: "Video_Intel-XP",
            build: "18.05.0",
            "class": "video"
        }, {
            index: 30,
            size: {
                pretty: "83MiB",
                value: 87197574
            },
            root: "DriverPack",
            path: "drivers\\DP_TV_Others_18050.7z",
            name: "TV_Others",
            build: "18.05.0",
            "class": "tvtuner"
        }, {
            index: 33,
            size: {
                pretty: "75MiB",
                value: 78825558
            },
            root: "DriverPack",
            path: "drivers\\DP_Sound_IDT_18050.7z",
            name: "Sound_IDT",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 34,
            size: {
                pretty: "71MiB",
                value: 75038085
            },
            root: "DriverPack",
            path: "drivers\\DP_Modem_18050.7z",
            name: "Modem",
            build: "18.05.0",
            "class": "modem"
        }, {
            index: 35,
            size: {
                pretty: "69MiB",
                value: 72966650
            },
            root: "DriverPack",
            path: "drivers\\DP_Sound_VIA_18050.7z",
            name: "Sound_VIA",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 36,
            size: {
                pretty: "64MiB",
                value: 67205528
            },
            root: "DriverPack",
            path: "drivers\\DP_Telephone_18050.7z",
            name: "Telephone",
            build: "18.05.0",
            "class": "phone"
        }, {
            index: 37,
            size: {
                pretty: "63MiB",
                value: 67104381
            },
            root: "DriverPack",
            path: "drivers\\DP_WWAN-4G_18050.7z",
            name: "WWAN-4G",
            build: "18.05.0",
            "class": "wifi"
        }, {
            index: 42,
            size: {
                pretty: "50MiB",
                value: 52435634
            },
            root: "DriverPack",
            path: "drivers\\DP_CardReader_18050.7z",
            name: "CardReader",
            build: "18.05.0",
            "class": "cardreader"
        }, {
            index: 44,
            size: {
                pretty: "44MiB",
                value: 46482915
            },
            root: "DriverPack",
            path: "drivers\\DP_Bluetooth_18050.7z",
            name: "Bluetooth",
            build: "18.05.0",
            "class": "bluetooth"
        }, {
            index: 49,
            size: {
                pretty: "39MiB",
                value: 41658641
            },
            root: "DriverPack",
            path: "drivers\\DP_MassStorage_18050.7z",
            name: "MassStorage",
            build: "18.05.0",
            "class": "massstorage"
        }, {
            index: 53,
            size: {
                pretty: "37MiB",
                value: 39666534
            },
            root: "DriverPack",
            path: "drivers\\DP_Touchpad_Others_18050.7z",
            name: "Touchpad_Others",
            build: "18.05.0",
            "class": "inputdev"
        }, {
            index: 57,
            size: {
                pretty: "28MiB",
                value: 29766604
            },
            root: "DriverPack",
            path: "drivers\\DP_TV_DVB_18050.7z",
            name: "TV_DVB",
            build: "18.05.0",
            "class": "tvtuner"
        }, {
            index: 58,
            size: {
                pretty: "26MiB",
                value: 28063676
            },
            root: "DriverPack",
            path: "drivers\\DP_TV_Aver_18050.7z",
            name: "TV_Aver",
            build: "18.05.0",
            "class": "tvtuner"
        }, {
            index: 60,
            size: {
                pretty: "23MiB",
                value: 24472776
            },
            root: "DriverPack",
            path: "drivers\\DP_Monitor_18050.7z",
            name: "Monitor",
            build: "18.05.0",
            "class": "monitor"
        }, {
            index: 62,
            size: {
                pretty: "20MiB",
                value: 21738626
            },
            root: "DriverPack",
            path: "drivers\\DP_Touchpad_Cypress_18050.7z",
            name: "Touchpad_Cypress",
            build: "18.05.0",
            "class": "inputdev"
        }, {
            index: 63,
            size: {
                pretty: "19MiB",
                value: 20384749
            },
            root: "DriverPack",
            path: "drivers\\DP_LAN_Intel_18050.7z",
            name: "LAN_Intel",
            build: "18.05.0",
            "class": "lan"
        }, {
            index: 66,
            size: {
                pretty: "17MiB",
                value: 17890435
            },
            root: "DriverPack",
            path: "drivers\\DP_xUSB_18050.7z",
            name: "xUSB",
            build: "18.05.0",
            "class": "chipset"
        }, {
            index: 68,
            size: {
                pretty: "16MiB",
                value: 17187570
            },
            root: "DriverPack",
            path: "drivers\\DP_LAN_Realtek-NT_18050.7z",
            name: "LAN_Realtek-NT",
            build: "18.05.0",
            "class": "lan"
        }, {
            index: 69,
            size: {
                pretty: "12MiB",
                value: 13369353
            },
            root: "DriverPack",
            path: "drivers\\DP_Sounds_HDMI_18050.7z",
            name: "Sounds_HDMI",
            build: "18.05.0",
            "class": "sound"
        }, {
            index: 71,
            size: {
                pretty: "7.2MiB",
                value: 7618606
            },
            root: "DriverPack",
            path: "drivers\\DP_LAN_Realtek-XP_18050.7z",
            name: "LAN_Realtek-XP",
            build: "18.05.0",
            "class": "lan"
        }, {
            index: 80,
            size: {
                pretty: "1.4MiB",
                value: 1506897
            },
            root: "DriverPack",
            path: "drivers\\DP_TV_Beholder_18050.7z",
            name: "TV_Beholder",
            build: "18.05.0",
            "class": "tvtuner"
        } ],
        programs: [ {
            index: 14,
            size: {
                pretty: "233MiB",
                value: 244431184
            },
            root: "DriverPack",
            path: "programs\\AvastAntivirusA.exe",
            name: "AvastAntivirusA"
        }, {
            index: 15,
            size: {
                pretty: "233MiB",
                value: 244431184
            },
            root: "DriverPack",
            path: "programs\\AvastAntivirusWorldwideA.exe",
            name: "AvastAntivirusWorldwideA"
        }, {
            index: 27,
            size: {
                pretty: "90MiB",
                value: 94625032
            },
            root: "DriverPack",
            path: "programs\\DotNetXP.exe",
            name: "DotNetXP"
        }, {
            index: 31,
            size: {
                pretty: "80MiB",
                value: 84233024
            },
            root: "DriverPack",
            path: "programs\\YandexLiteUSA.exe",
            name: "YandexLiteUSA"
        }, {
            index: 32,
            size: {
                pretty: "78MiB",
                value: 82824008
            },
            root: "DriverPack",
            path: "programs\\Backupper.exe",
            name: "Backupper"
        }, {
            index: 39,
            size: {
                pretty: "56MiB",
                value: 58834376
            },
            root: "DriverPack",
            path: "programs\\Skype.exe",
            name: "Skype"
        }, {
            index: 40,
            size: {
                pretty: "55MiB",
                value: 58133584
            },
            root: "DriverPack",
            path: "programs\\DotNet.exe",
            name: "DotNet"
        }, {
            index: 41,
            size: {
                pretty: "54MiB",
                value: 57338848
            },
            root: "DriverPack",
            path: "programs\\SkypeXP.exe",
            name: "SkypeXP"
        }, {
            index: 43,
            size: {
                pretty: "49MiB",
                value: 51770880
            },
            root: "DriverPack",
            path: "programs\\Firefox.exe",
            name: "Firefox"
        }, {
            index: 45,
            size: {
                pretty: "43MiB",
                value: 46078280
            },
            root: "DriverPack",
            path: "programs\\Opera64cis_woGoogle.exe",
            name: "Opera64cis_woGoogle"
        }, {
            index: 46,
            size: {
                pretty: "43MiB",
                value: 46062584
            },
            root: "DriverPack",
            path: "programs\\OperaBlink64.exe",
            name: "OperaBlink64"
        }, {
            index: 47,
            size: {
                pretty: "41MiB",
                value: 43613496
            },
            root: "DriverPack",
            path: "programs\\downloader_browser.exe",
            name: "downloader_browser"
        }, {
            index: 48,
            size: {
                pretty: "41MiB",
                value: 43613496
            },
            root: "DriverPack",
            path: "programs\\downloader_elements.exe",
            name: "downloader_elements"
        }, {
            index: 50,
            size: {
                pretty: "39MiB",
                value: 41381880
            },
            root: "DriverPack",
            path: "programs\\VisualCplus.exe",
            name: "VisualCplus"
        }, {
            index: 51,
            size: {
                pretty: "37MiB",
                value: 39776072
            },
            root: "DriverPack",
            path: "programs\\OperaBlink.exe",
            name: "OperaBlink"
        }, {
            index: 52,
            size: {
                pretty: "37MiB",
                value: 39770808
            },
            root: "DriverPack",
            path: "programs\\Opera86cis_woGoogle.exe",
            name: "Opera86cis_woGoogle"
        }, {
            index: 54,
            size: {
                pretty: "37MiB",
                value: 39005496
            },
            root: "DriverPack",
            path: "programs\\downloader_browser_tr.exe",
            name: "downloader_browser_tr"
        }, {
            index: 55,
            size: {
                pretty: "34MiB",
                value: 36504024
            },
            root: "DriverPack",
            path: "programs\\OperaXP.exe",
            name: "OperaXP"
        }, {
            index: 56,
            size: {
                pretty: "30MiB",
                value: 32337264
            },
            root: "DriverPack",
            path: "programs\\FlashPlayer.exe",
            name: "FlashPlayer"
        }, {
            index: 59,
            size: {
                pretty: "26MiB",
                value: 27466864
            },
            root: "DriverPack",
            path: "programs\\DirectX.exe",
            name: "DirectX"
        }, {
            index: 61,
            size: {
                pretty: "22MiB",
                value: 23190224
            },
            root: "DriverPack",
            path: "programs\\PotPlayer.exe",
            name: "PotPlayer"
        }, {
            index: 64,
            size: {
                pretty: "19MiB",
                value: 20367104
            },
            root: "DriverPack",
            path: "programs\\TeamViewer.exe",
            name: "TeamViewer"
        }, {
            index: 65,
            size: {
                pretty: "17MiB",
                value: 17961560
            },
            root: "DriverPack",
            path: "programs\\PDFViewer.exe",
            name: "PDFViewer"
        }, {
            index: 67,
            size: {
                pretty: "16MiB",
                value: 17383725
            },
            root: "DriverPack",
            path: "programs\\K-Lite.exe",
            name: "K-Lite"
        }, {
            index: 70,
            size: {
                pretty: "10MiB",
                value: 10689976
            },
            root: "DriverPack",
            path: "programs\\AIMP.exe",
            name: "AIMP"
        }, {
            index: 72,
            size: {
                pretty: "6.6MiB",
                value: 6967830
            },
            root: "DriverPack",
            path: "programs\\FSImage.exe",
            name: "FSImage"
        }, {
            index: 73,
            size: {
                pretty: "4.1MiB",
                value: 4350652
            },
            root: "DriverPack",
            path: "programs\\RuntimePack.exe",
            name: "RuntimePack"
        }, {
            index: 74,
            size: {
                pretty: "3.4MiB",
                value: 3609255
            },
            root: "DriverPack",
            path: "programs\\uTorrent.exe",
            name: "uTorrent"
        }, {
            index: 75,
            size: {
                pretty: "3.3MiB",
                value: 3564400
            },
            root: "DriverPack",
            path: "programs\\WinRARx86Br.exe",
            name: "WinRARx86Br"
        }, {
            index: 76,
            size: {
                pretty: "2.0MiB",
                value: 2167152
            },
            root: "DriverPack",
            path: "programs\\WinRARx86Rus.exe",
            name: "WinRARx86Rus"
        }, {
            index: 77,
            size: {
                pretty: "1.9MiB",
                value: 2013168
            },
            root: "DriverPack",
            path: "programs\\WinRARx86Eng.exe",
            name: "WinRARx86Eng"
        }, {
            index: 78,
            size: {
                pretty: "1.4MiB",
                value: 1534632
            },
            root: "DriverPack",
            path: "programs\\DriverPack-Cloud.exe",
            name: "DriverPack-Cloud"
        }, {
            index: 79,
            size: {
                pretty: "1.4MiB",
                value: 1530472
            },
            root: "DriverPack",
            path: "programs\\360tsNew.exe",
            name: "360tsNew"
        }, {
            index: 81,
            size: {
                pretty: "1.3MiB",
                value: 1438086
            },
            root: "DriverPack",
            path: "programs\\7-Zip64.exe",
            name: "7-Zip64"
        }, {
            index: 82,
            size: {
                pretty: "1.1MiB",
                value: 1181017
            },
            root: "DriverPack",
            path: "programs\\7-Zip.exe",
            name: "7-Zip"
        }, {
            index: 83,
            size: {
                pretty: "345KiB",
                value: 354288
            },
            root: "DriverPack",
            path: "programs\\WCInstaller.exe",
            name: "WCInstaller"
        }, {
            index: 84,
            size: {
                pretty: "4.0KiB",
                value: 4194
            },
            root: "DriverPack",
            path: "programs\\PotPlayerMini.ini",
            name: "PotPlayerMini"
        } ]
    };
}, function(module, exports) {
    module.exports = {
        devices: [ [ [ {
            link: "http://download.drp.su/driverpacks/repack/Sound_IDT/IDT/AllNTx64x86/HP_6.10.6233.266/IDT-AllNTx64x86-HP_6.10.6233.266-drp.zip",
            date: "2011-03-21",
            manufacturer: "IDT",
            "class": "sound",
            version: "6.10.6233.266",
            name: "IDT High Definition Audio CODEC",
            deviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680",
            pack: "DP_Sound_IDT_17000",
            directory: "IDT\\AllNTx64x86\\HP_6.10.6233.266\\",
            inf: "STWRT.INF",
            rank: 3,
            fullDeviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034\\4&31E60982&0&0001",
            hardwareId: [ "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034", "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680" ],
            statusCode: 28,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/Sound_IDT/IDT/AllNTx64x86/ECS_6.10.6207.2/IDT-AllNTx64x86-ECS_6.10.6207.2-drp.zip",
            date: "2009-06-10",
            manufacturer: "IDT",
            "class": "sound",
            version: "6.10.6207.2",
            name: "IDT High Definition Audio CODEC",
            deviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680",
            pack: "DP_Sound_IDT_17000",
            directory: "IDT\\AllNTx64x86\\ECS_6.10.6207.2\\",
            inf: "STWRT.INF",
            rank: 2,
            fullDeviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034\\4&31E60982&0&0001",
            hardwareId: [ "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034", "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680" ],
            statusCode: 28,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/Sound_IDT/IDT/AllNTx64x86/Asus_6.10.6233.224/IDT-AllNTx64x86-Asus_6.10.6233.224-drp.zip",
            date: "2010-01-15",
            manufacturer: "IDT",
            "class": "sound",
            version: "6.10.6233.224",
            name: "IDT High Definition Audio CODEC",
            deviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680",
            pack: "DP_Sound_IDT_17000",
            directory: "IDT\\AllNTx64x86\\Asus_6.10.6233.224\\",
            inf: "STWRT.INF",
            rank: 1,
            fullDeviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034\\4&31E60982&0&0001",
            hardwareId: [ "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034", "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680" ],
            statusCode: 28,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        } ], null ], [ [ {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/Allx86/10.1.0.1008_rst/Intel-FORCED-Allx86-10.1.0.1008_rst-drp.zip",
            date: "2010-11-06",
            manufacturer: "Intel",
            "class": "massstorage",
            version: "10.1.0.1008",
            name: "Intel(R) ICH8M-E/M SATA AHCI Controller",
            deviceId: "PCI\\VEN_8086&DEV_2829&CC_0106",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\Allx86\\10.1.0.1008_rst\\",
            inf: "iaAHCI.inf",
            rank: 3,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/NTx86/12.8.6.1000_TWEAK/Intel-FORCED-NTx86-12.8.6.1000_TWEAK-drp.zip",
            date: "2004-09-20",
            manufacturer: "Intel Corporation",
            "class": "massstorage",
            version: "12.8.6.1000",
            name: "Intel(R) ICH8M SATA AHCI Controller",
            deviceId: "PCI\\VEN_8086&DEV_2829&CC_0106",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\NTx86\\12.8.6.1000_TWEAK\\",
            inf: "iaAHCIC.inf",
            rank: 3,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/Allx86/11.2.0.1006_TWEAK/Intel-FORCED-Allx86-11.2.0.1006_TWEAK-drp.zip",
            date: "2004-04-30",
            manufacturer: "Intel",
            "class": "massstorage",
            version: "11.2.0.1006",
            name: "Intel(R) ICH8M-E/M SATA AHCI Controller (added by Fernando)",
            deviceId: "PCI\\VEN_8086&DEV_2829&CC_0106",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\Allx86\\11.2.0.1006_TWEAK\\",
            inf: "iaAHCI.inf",
            rank: 1.1,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/Allx86/8.9.8.1005_TWEAK/Intel-FORCED-Allx86-8.9.8.1005_TWEAK-drp.zip",
            date: "2003-03-05",
            manufacturer: "Intel",
            "class": "massstorage",
            version: "8.9.8.1005",
            name: "Intel(R) ICH8M-E/M SATA AHCI Controller",
            deviceId: "PCI\\VEN_8086&DEV_2829&CC_0106",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\Allx86\\8.9.8.1005_TWEAK\\",
            inf: "iaAHCI.inf",
            rank: 3,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/Chipset/Intel/WinAll/Chipset/9.3.2.1020_NEW/Intel-WinAll-Chipset-9.3.2.1020_NEW-drp.zip",
            date: "2013-07-25",
            manufacturer: "Intel",
            "class": "chipset",
            version: "9.1.9.1005",
            name: "Intel(R) ICH8M SATA AHCI Controller - 2829",
            deviceId: "PCI\\VEN_8086&DEV_2829",
            pack: "DP_Chipset_17000",
            directory: "Intel\\WinAll\\Chipset\\9.3.2.1020_NEW\\",
            inf: "ibexahci.inf",
            rank: 3,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        } ], {
            deviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            date: "2006-06-21",
            version: "6.1.7601.18231",
            name: "Standard AHCI 1.0 Serial ATA Controller",
            manufacturer: "Standard AHCI 1.0 Serial ATA Controller",
            inf: "mshdc.inf"
        } ], [ [ {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/Allx86/11.2.0.1006_TWEAK/Intel-FORCED-Allx86-11.2.0.1006_TWEAK-drp.zip",
            date: "2004-04-30",
            manufacturer: "Intel",
            "class": "massstorage",
            version: "11.2.0.1006",
            name: "Intel(R) ICH8M-E/M SATA AHCI Controller (added by Fernando)",
            deviceId: "PCI\\VEN_8086&DEV_2829&CC_0106",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\Allx86\\11.2.0.1006_TWEAK\\",
            inf: "iaAHCI.inf",
            rank: 3,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/Allx86/8.9.8.1005_TWEAK/Intel-FORCED-Allx86-8.9.8.1005_TWEAK-drp.zip",
            date: "2003-03-05",
            manufacturer: "Intel",
            "class": "massstorage",
            version: "8.9.8.1005",
            name: "Intel(R) ICH8M-E/M SATA AHCI Controller",
            deviceId: "PCI\\VEN_8086&DEV_2829&CC_0106",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\Allx86\\8.9.8.1005_TWEAK\\",
            inf: "iaAHCI.inf",
            rank: 3,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/Chipset/Intel/WinAll/Chipset/9.3.2.1020_NEW/Intel-WinAll-Chipset-9.3.2.1020_NEW-drp.zip",
            date: "2013-07-25",
            manufacturer: "Intel",
            "class": "chipset",
            version: "9.1.9.1005",
            name: "Intel(R) ICH8M SATA AHCI Controller - 2829",
            deviceId: "PCI\\VEN_8086&DEV_2829",
            pack: "DP_Chipset_17000",
            directory: "Intel\\WinAll\\Chipset\\9.3.2.1020_NEW\\",
            inf: "ibexahci.inf",
            rank: 3,
            fullDeviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        } ], {
            deviceId: "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02\\3&267A616A&0&68",
            date: "2006-06-21",
            version: "12.2.0.1006",
            name: "Intel(R) ICH8M SATA AHCI Controller - 2829",
            manufacturer: "Intel",
            inf: "mshdc.inf"
        } ], [ [ {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/Allx86/10.1.0.1008_rst/Intel-FORCED-Allx86-10.1.0.1008_rst-drp.zip",
            date: "2010-11-06",
            manufacturer: "Intel",
            "class": "massstorage",
            version: "10.1.0.1008",
            name: "Intel(R) ICH8M-E/M SATA AHCI Controller",
            deviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\Allx86\\10.1.0.1008_rst\\",
            inf: "iaAHCI.inf",
            rank: 3,
            fullDeviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/NTx86/12.8.6.1000_TWEAK/Intel-FORCED-NTx86-12.8.6.1000_TWEAK-drp.zip",
            date: "2004-09-20",
            manufacturer: "Intel Corporation",
            "class": "massstorage",
            version: "12.8.6.1000",
            name: "Intel(R) ICH8M SATA AHCI Controller",
            deviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\NTx86\\12.8.6.1000_TWEAK\\",
            inf: "iaAHCIC.inf",
            rank: 3,
            fullDeviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        } ], {
            deviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            date: "2006-06-21",
            version: "5.1.7601.18231",
            name: "Test Microsoft Driver",
            manufacturer: "Microsoft",
            inf: "mshdc.inf"
        } ] ],
        lowRanked: [ [ [ {
            link: "http://download.drp.su/driverpacks/repack/Sound_IDT/IDT/AllNTx64x86/Lenovo_6.10.6233/IDT-AllNTx64x86-Lenovo_6.10.6233-drp.zip",
            date: "2009-12-10",
            manufacturer: "IDT",
            "class": "sound",
            version: "6.10.6233.219",
            name: "IDT High Definition Audio CODEC",
            deviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680",
            pack: "DP_Sound_IDT_17000",
            directory: "IDT\\AllNTx64x86\\Lenovo_6.10.6233\\",
            inf: "STWRT.INF",
            rank: 0,
            fullDeviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034\\4&31E60982&0&0001",
            hardwareId: [ "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034", "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680" ],
            statusCode: 28,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/Sound_IDT/IDT/AllNTx64x86/ECS_6.10.6207.2/IDT-AllNTx64x86-ECS_6.10.6207.2-drp.zip",
            date: "2009-06-10",
            manufacturer: "IDT",
            "class": "sound",
            version: "6.10.6207.2",
            name: "IDT High Definition Audio CODEC",
            deviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_00000100",
            pack: "DP_Sound_IDT_17000",
            directory: "IDT\\AllNTx64x86\\ECS_6.10.6207.2\\",
            inf: "STWRT.INF",
            rank: 0,
            fullDeviceId: "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034\\4&31E60982&0&0001",
            hardwareId: [ "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034", "HDAUDIO\\FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680" ],
            statusCode: 28,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        } ], null ], [ [ {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/Allx86/10.1.0.1008_rst/Intel-FORCED-Allx86-10.1.0.1008_rst-drp.zip",
            date: "2010-11-06",
            manufacturer: "Intel",
            "class": "massstorage",
            version: "10.1.0.1008",
            name: "Intel(R) ICH8M-E/M SATA AHCI Controller",
            deviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\Allx86\\10.1.0.1008_rst\\",
            inf: "iaAHCI.inf",
            rank: 0,
            fullDeviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        }, {
            link: "http://download.drp.su/driverpacks/repack/MassStorage/Intel/FORCED/NTx86/12.8.6.1000_TWEAK/Intel-FORCED-NTx86-12.8.6.1000_TWEAK-drp.zip",
            date: "2004-09-20",
            manufacturer: "Intel Corporation",
            "class": "massstorage",
            version: "12.8.6.1000",
            name: "Intel(R) ICH8M SATA AHCI Controller",
            deviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            pack: "DP_MassStorage_17000",
            directory: "Intel\\FORCED\\NTx86\\12.8.6.1000_TWEAK\\",
            inf: "iaAHCIC.inf",
            rank: 0,
            fullDeviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            hardwareId: [ "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000&REV_02", "PCI\\VEN_8086&DEV_2829&SUBSYS_00000000", "PCI\\VEN_8086&DEV_2829&REV_02", "PCI\\VEN_8086&DEV_2829", "PCI\\VEN_8086&DEV_2829&CC_010601", "PCI\\VEN_8086&DEV_2829&CC_0106" ],
            statusCode: 0,
            installationHooks: null,
            section: "INTEL_HDC.ntx86",
            systems: [ "6.1x86", "10.0x64" ]
        } ], {
            deviceId: "PCIIDE\\IDECHANNEL\\4&2F42C713&0&1",
            date: "2006-06-21",
            version: "5.1.7601.18231",
            name: "Test Microsoft Driver",
            manufacturer: "Microsoft",
            inf: "mshdc.inf"
        } ] ],
        broken: [ {
            deviceId: "USB\\UNKNOWN",
            problem: "usb_connection"
        }, {
            deviceId: "ROOT\\LEGACY_QUTMIPC",
            problem: "root_legacy"
        }, {
            deviceId: "PTUN0901",
            problem: "vpn_no_need_drivers"
        }, {
            deviceId: "BTH\\MS_BTHPAN",
            problem: "damaged_system_driver"
        }, {
            deviceId: "WPDBUSENUMROOT\\UMB",
            problem: "usb_unknown_vendor"
        }, {
            deviceId: "HDAUDIO\\FUNC_FF&VEN_9FFF&DEV_FFFF&SUBSYS_1FFFFFFF&REV_FFFF",
            problem: "sound_card"
        }, {
            deviceId: "ROOT\\*ISATAP",
            problem: "unknown_problem"
        }, {
            deviceId: "ROOT\\*TEREDO",
            problem: "unknown_problem"
        } ]
    };
}, function(module, exports) {
    module.exports = [ {
        name: "7-Zip 16.04",
        version: "16.04",
        publisher: "Igor Pavlov",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/137B107B11BC904FCCEFE14AB625FA7F.png",
        uninstallString: "C:\\Program Files\\7-Zip\\Uninstall.exe",
        uninstallPercents: 21,
        rating: 180,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\7-Zip\\"
    }, {
        name: "AIMP",
        version: "v4.13.1886, 14.02.2017",
        publisher: "AIMP DevTeam",
        installDate: "20170217",
        icon: "http://download.drp.su/clean-icons/FEF2BD7EC16BC959302A18A342650D53.png",
        uninstallString: "C:\\Program Files\\AIMP\\Uninstall.exe",
        uninstallPercents: 10,
        rating: 237,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\AIMP\\"
    }, {
        name: "DriverPack Notifier",
        version: "2.2.1",
        publisher: "DriverPack Solution",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/D1618DE8AA6B69CB87DD29DCF0EAF769.png",
        uninstallString: '"C:\\Program Files\\DriverPack Notifier\\Uninstall.exe" --uninstall',
        uninstallPercents: 5,
        rating: 294,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\DriverPack Notifier\\"
    }, {
        name: "FastStone Image Viewer 6.1",
        version: "6.1",
        publisher: "FastStone Soft",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/1074CBD200BFFA29C675BCCDD3D57800.png",
        uninstallString: "C:\\Program Files\\FastStone Image Viewer\\uninst.exe",
        uninstallPercents: 16,
        rating: 276,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\FastStone Image Viewer\\"
    }, {
        name: "Google Chrome",
        version: "56.0.2924.87",
        publisher: "Google Inc.",
        installDate: "20170205",
        icon: "http://download.drp.su/clean-icons/1C4C655B028F246E77B97465CDE78B02.png",
        uninstallString: '"C:\\Program Files\\Google\\Chrome\\Application\\56.0.2924.87\\Installer\\setup.exe" --uninstall --system-level --verbose-logging',
        uninstallPercents: 10,
        rating: 138,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Google Chrome\\"
    }, {
        name: "Mozilla Firefox 51.0 (x86 ru)",
        version: "51.0",
        publisher: "Mozilla",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/44E73F3C92E551742A13ED5FE352DE77.png",
        uninstallString: '"C:\\Program Files\\Mozilla Firefox\\uninstall\\helper.exe"',
        uninstallPercents: 18,
        rating: 198,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Mozilla Firefox 51.0 (x86 ru)\\"
    }, {
        name: "Mozilla Maintenance Service",
        version: "51.0",
        publisher: "Mozilla",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/298FA6E90D6DAE33BBEBE4ABD99307FF.png",
        uninstallString: '"C:\\Program Files\\Mozilla Maintenance Service\\uninstall.exe"',
        uninstallPercents: 81,
        rating: 273,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MozillaMaintenanceService\\"
    }, {
        name: "Notepad++ (32-bit x86)",
        version: "7.3.1",
        publisher: "Notepad++ Team",
        installDate: "",
        icon: "",
        uninstallString: "C:\\Program Files\\Notepad++\\uninstall.exe",
        uninstallPercents: 0,
        rating: 0,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Notepad++\\"
    }, {
        name: "Oracle VM VirtualBox Guest Additions 4.3.12",
        version: "4.3.12.0",
        publisher: "Oracle Corporation",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/91EC006ED46884324AEE90DF1D331644.png",
        uninstallString: "C:\\Program Files\\Oracle\\VirtualBox Guest Additions\\uninst.exe",
        uninstallPercents: 13,
        rating: 300,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Oracle VM VirtualBox Guest Additions\\"
    }, {
        name: "PotPlayer v1.7.327 x86",
        version: "v1.7.327 x86",
        publisher: "Daum Corp.",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/456022F12008313E6B7E1412FFE3FE1B.png",
        uninstallString: "C:\\Program Files\\Daum\\PotPlayer\\UnInst.exe",
        uninstallPercents: 5,
        rating: 252,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\PotPlayer\\"
    }, {
        name: "WinRAR 5.30 (32-bit)",
        version: "5.30.0",
        publisher: "win.rar GmbH",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/winrar.png",
        uninstallString: "C:\\Program Files\\WinRAR\\uninstall.exe",
        uninstallPercents: 18,
        rating: 258,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WinRAR archiver\\"
    }, {
        name: "Менеджер браузеров",
        version: "3.0.4.825",
        publisher: "Яндекс",
        installDate: "20170217",
        icon: "http://download.drp.su/clean-icons/yandex_browser_manager.png",
        uninstallString: "MsiExec.exe /X{36E317A1-1384-4FC5-92CD-D4731B651859}",
        uninstallPercents: 59,
        rating: 51,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{36E317A1-1384-4FC5-92CD-D4731B651859}\\"
    }, {
        name: "Google Update Helper",
        version: "1.3.32.7",
        publisher: "Google Inc.",
        installDate: "20170217",
        icon: "",
        uninstallString: "MsiExec.exe /I{60EC980A-BDA2-4CB6-A427-B07A5498B4CA}",
        uninstallPercents: 83,
        rating: 195,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{60EC980A-BDA2-4CB6-A427-B07A5498B4CA}\\"
    }, {
        name: "PDF-Viewer",
        version: "2.5.320.0",
        publisher: "Tracker Software Products Ltd",
        installDate: "20170217",
        icon: "http://download.drp.su/clean-icons/F803D99FCBEE0DAEEDDF626262584917.png",
        uninstallString: '"C:\\Program Files\\Tracker Software\\PDF Viewer\\unins000.exe"',
        uninstallPercents: 58,
        rating: 168,
        size: "",
        regPath: "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{A278382D-4F1B-4D47-9885-8523F7261E8D}_is1\\"
    }, {
        name: "Opera Stable 43.0.2442.806",
        version: "43.0.2442.806",
        publisher: "Opera Software",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/986ADC545FA5BFDD736DBF5AFB90D384.png",
        uninstallString: '"C:\\Users\\IEUser\\AppData\\Local\\Programs\\Opera\\Launcher.exe" /uninstall',
        uninstallPercents: 7,
        rating: 201,
        size: "",
        regPath: "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Opera 43.0.2442.806\\"
    }, {
        name: "µTorrent",
        version: "3.4.2.35702",
        publisher: "NEO",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/A7E0E51E2D06CBE71986E6E5100E7151.png",
        uninstallString: "C:\\Users\\IEUser\\AppData\\Roaming\\uTorrent\\uTorrent.exe /UNINSTALL",
        uninstallPercents: 13,
        rating: 117,
        size: "",
        regPath: "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\uTorrent\\"
    }, {
        name: "Yandex",
        version: "17.1.1.1003",
        publisher: "ООО «ЯНДЕКС»",
        installDate: "20170217",
        icon: "http://download.drp.su/clean-icons/E38CFFEAD913423A620C3914CEF36C7C.png",
        uninstallString: '"C:\\Users\\IEUser\\AppData\\Local\\Yandex\\YandexBrowser\\Application\\17.1.1.1003\\Installer\\setup.exe" --uninstall --verbose-logging',
        uninstallPercents: 16,
        rating: 189,
        size: "",
        regPath: "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YandexBrowser\\"
    }, {
        name: "Yandex taskbar button",
        version: "2.0.1.2130",
        publisher: "Yandex",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/4157251F9FB77BBB33508F8AE6F93E4D.png",
        uninstallString: "C:\\Users\\IEUser\\AppData\\Local\\Yandex\\yapin\\YandexWorking.exe --uninstall --nopinned",
        uninstallPercents: 81,
        rating: 300,
        size: "",
        regPath: "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\YaPinLancher\\"
    }, {
        name: "Менеджер браузеров",
        version: "3.0.4.825",
        publisher: "Яндекс",
        installDate: "",
        icon: "http://download.drp.su/clean-icons/yandex_browser_manager.png",
        uninstallString: '"C:\\Users\\IEUser\\AppData\\Local\\Package Cache\\{bb31fd2d-c872-46dd-8175-7c15e320f021}\\BrowserManagerInstaller.exe"  /uninstall',
        uninstallPercents: 59,
        rating: 51,
        size: "",
        regPath: "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{bb31fd2d-c872-46dd-8175-7c15e320f021}\\"
    } ];
} ]);