{"version":3,"sources":["webpack://scanovate_card_capture/webpack/universalModuleDefinition","webpack://scanovate_card_capture/webpack/bootstrap","webpack://scanovate_card_capture/./node_modules/debug/src/browser.js","webpack://scanovate_card_capture/./lib/video.js","webpack://scanovate_card_capture/./lib/browserDetector.js","webpack://scanovate_card_capture/./lib/customErrors.js","webpack://scanovate_card_capture/./lib/index.js","webpack://scanovate_card_capture/./node_modules/process/browser.js","webpack://scanovate_card_capture/./node_modules/debug/src/common.js","webpack://scanovate_card_capture/./node_modules/ms/index.js","webpack://scanovate_card_capture/./lib/mediaDeviceAdapter.js","webpack://scanovate_card_capture/./lib/backCamerasKeywords.js","webpack://scanovate_card_capture/./lib/translations/languageManager.js","webpack://scanovate_card_capture/./node_modules/component-emitter/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","log","args","console","formatArgs","this","useColors","namespace","humanize","diff","color","splice","index","lastC","replace","match","save","namespaces","storage","setItem","removeItem","error","load","getItem","process","env","DEBUG","type","__nwjs","navigator","userAgent","toLowerCase","document","documentElement","style","WebkitAppearance","firebug","exception","table","parseInt","RegExp","$1","localStorage","localstorage","colors","formatters","j","v","JSON","stringify","message","debug","require","mediaDeviceAdapter","browserDetector","backCamerasChecks","ScanovateCameraError","Video","constructor","element","constraintsObj","_stream","canvas","context","lastDeviceId","ctx","drawingFunc","ang","setTransform","width","height","capture","quality","Promise","res","rej","createElement","getContext","max","Math","videoWidth","videoHeight","min","isHeightGreaterThanWidth","drawRotatedImageOnCanvas","drawImage","toDataURL","_initVideo","exactId","controls","constrains","video","facingMode","audio","deviceId","exact","destroy","then","stream","e","_attachStreamToElement","NO_VIDEO_ELEMENT_MESSAGE","undefined","Error","_finishVideoSetup","canPlayEventListener","promise","play","catch","playEventListener","loadedMetadataEventListener","addEventListener","videoReadyState","readyState","srcObject","urlObj","URL","webkitURL","mozURL","msURL","src","createObjectURL","err","mediaDevices","enumerateDevices","devices","filteredVideoDevices","filter","elem","kind","finalFilteredDevices","label","isBackLabelFound","isLabelBackLabel","length","reject","customErrors","CameraNoRelevantDeviceFound","init","reopenCameraIfNeeded","isSecondTime","shouldEnumerateDevices","enum","CHROME","detectBroswer","findLastEnumeratedDeviceId","resolve","_","originalError","GetUserMediaNotImplemented","array","optionalExtraLog","tempArrayRef","Array","isArray","forEach","getTracks","track","stop","stopStreaming","forceStreamEnding","SAFARI","removeListeners","removeEventListener","removeElement","removeElementFunc","parentNode","removeChild","ScanovateError","stack","enumObjForExport","FIREFOX","OPERA","TRIDENT","EDGE","UNKNOWN","sUsrAg","sBrowser","indexOf","videoFromCamera","translations","Emitter","instance","applyConfig","data","COLORS","instructionsColor","setProperty","loaderColor","popupBackgroundColor","popupTextColor","primaryColor","backArrow","instructionsTextColor","positionInstructionTextBackground","FONT","NUMBER_OF_IMAGES","configObj","matches","location","origin","serverDomain","serverPort","port","protocol","Capture","super","translation","getTranslationObject","language","numOfPics","initPromise","videoObj","firstPage","img_1","img_2","applyNewConfig","createDiv","id","className","visibility","opacity","attributes","div","setAttribute","classList","add","img","setTimeout","emit","destroyFirstPage","querySelector","background","images","bodyElement","loaderElement","backButtonElement","onclick","backButtonElementImg","mainContainerElement","videoContainerElement","videoBoxElement","autoplay","muted","playsinline","tempImgResult","instructionsTextElement","appendChild","captureButtonContainer","captureButtonElement","modalElement","modalContentElement","escapeButton","innerHTML","CONFIRM_BUTTON","modalText","POPUP_TEXT","modalGif","elementsArray","aspectRatio","dontCreateVideo","postVideoInitFunc","checkOrientation","POSITION_INSTRUCTION_FRONT_SIDE","innerWidth","innerHeight","marginBottom","marginRight","maxHeight","maxWidth","fontSize","right","top","bottom","left","marginLeft","flexDirection","transform","escapemodal","display","captureImage","POSITION_INSTRUCTION_BACK_SIDE","push","SHOW_RESULTS","redirectToResults","getComputedStyle","getPropertyValue","secondPage","texts","mainContainer","imgResultMainContainer","resultsContainer","ancherTag","redirectToCapture","backButton","backButtonImg","imageContiner","imgResultWrap_1","imageTitle1","imgResult1","imgResultWrap_2","imageTitle2","imgResult2","title","RESULTS_PAGE_TITLE","innerTitle","RESULTS_CONDITIONS_TITLE","CONDITIONS","text","indexLogo","CONDITION","captureButtonsContinaer","ancherTag1","destroySecondPage","okButton","ancherTag2","tryAgainButton","TRY_AGAIN_BUTTON","justifyContent","alignItems","flex","paddingLeft","paddingright","body","padding","margin","position","remove","bd","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","noop","nextTick","arguments","apply","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","selectColor","hash","charCodeAt","createDebug","abs","prevTime","enabled","self","curr","Number","Date","ms","prev","coerce","unshift","format","formatter","val","extend","instances","delimiter","newDebug","toNamespace","regexp","toString","substring","default","disable","names","map","skips","join","enable","split","substr","test","keys","h","plural","msAbs","isPlural","round","options","str","String","exec","parseFloat","parse","isFinite","long","fmtLong","fmtShort","constraints","getUserMedia","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","backCamerasKeywords","includes","obj","mixin","event","fn","_callbacks","cb","callbacks","slice","hasListeners"],"mappings":"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","file":"script.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"scanovate_card_capture\"] = factory();\n\telse\n\t\troot[\"scanovate_card_capture\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\nfunction log(...args) {\n\t// This hackery is required for IE8/9, where\n\t// the `console.log` function doesn't have 'apply'\n\treturn typeof console === 'object' &&\n\t\tconsole.log &&\n\t\tconsole.log(...args);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nconst debug = require('debug')('active-ocr-client:video'),\n    mediaDeviceAdapter = require('./mediaDeviceAdapter'),\n    browserDetector = require('./browserDetector'),\n    backCamerasChecks =  require('./backCamerasKeywords'),\n    {ScanovateCameraError} = require('./customErrors');\n\nclass Video {\n    constructor(element, constraintsObj) {\n        this.constraintsObj = constraintsObj;\n        this._stream = this.canvas = this.context = this.lastDeviceId = null;\n        this.element = element;\n    }\n\n    static drawRotatedImageOnCanvas(ctx, drawingFunc, ang = 90) {\n        if (ang === 90 || ang === 270) {\n            if (ang === 90) {\n                ctx.setTransform(0, 1, -1, 0, ctx.canvas.width, 0)\n            } else {\n                ctx.setTransform(0, -1, 1, 0, 0, ctx.canvas.height)\n            }\n        } else {\n            if (ang === 0) {\n                ctx.setTransform(1, 0, 0, 1, 0, 0)\n            } else {\n                ctx.setTransform(-1, 0, 0, -1, ctx.canvas.width, ctx.canvas.height)\n            }\n        }\n        drawingFunc && drawingFunc();\n        ctx.setTransform(1, 0, 0, 1, 0, 0);   // reset default transform\n    }\n\n    capture(quality) {\n        return new Promise((res, rej) => {\n            if (!this.canvas) {\n                this.canvas = document.createElement('canvas');\n            }\n            if (!this.context) {\n                this.context = this.canvas.getContext('2d');\n            }\n            const max = Math.max(this.element.videoWidth, this.element.videoHeight),\n                min = Math.min(this.element.videoWidth, this.element.videoHeight);\n\n            if (this.canvas.width !== max) {\n                this.canvas.width = max;\n                // debug(`media recorder updateSize, width: ${canvas.width}, height: ${canvas.height}`);\n            }\n            if (this.canvas.height !== min) {\n                this.canvas.height = min;\n                // debug(`media recorder updateSize, width: ${canvas.width}, height: ${canvas.height}`);\n            }\n            // this.canvas.width = this.element.videoWidth;\n            // this.canvas.height = this.element.videoHeight;\n            const isPortrait = this.isHeightGreaterThanWidth();\n            if (isPortrait) {\n                Video.drawRotatedImageOnCanvas(this.context, () => {\n                    this.context.drawImage(this.element, 0, 0)\n                }, 270);\n                // this.context.drawImage(this.element, 0, 0, this.canvas.width, this.canvas.height);\n            } else {\n                this.context.drawImage(this.element, 0, 0, this.canvas.width, this.canvas.height);\n            }\n\n            const base64Thing = this.canvas.toDataURL('image/jpeg', quality);\n            return res(base64Thing);\n            // this.canvas.toBlob((blob) => {\n            //     console.log(blob);\n            //     res(blob);\n            // }, 'image/jpeg', quality);\n        });\n    }\n\n    isHeightGreaterThanWidth() {\n        if (!this.element) {\n            return null;\n        }\n        return (this.element.videoHeight > this.element.videoWidth);\n    }\n\n    _initVideo(exactId) {\n        return new Promise((res, rej) => {\n            debug('video init start');\n            this.element.controls = false;\n\n            // {facingMode: 'environment', width: 720, height: 1280}\n\n            let constrains = {\n                video: {\n                    facingMode: 'environment',\n                    width: this.constraintsObj.width,\n                    height: this.constraintsObj.height\n                }, audio: false\n            };\n            if (exactId) {\n                constrains.video.deviceId = {exact: exactId};\n            }\n\n            this.destroy(false);\n            if (exactId !== null && exactId !== undefined && this.lastDeviceId !== exactId) {\n                // Video._destroyOriginalVideoStream();\n                this.lastDeviceId = exactId;\n            }\n            debug(`constrains: ${JSON.stringify(constrains)}`);\n            if (this._stream === null) {\n                mediaDeviceAdapter(constrains).then((stream) => {\n                    debug('navigator.mediaDevices.getUserMedia called');\n                    this._stream = stream;\n                    res(this._stream);\n                }, (e) => {\n                    debug(`getUserMedia error, name: ${e && e.name}, message: ${e && e.message}`);\n                    rej(new ScanovateCameraError(e && e.message));\n                });\n            } else {\n                debug('Reusing previous stream');\n                res(this._stream);\n            }\n        });\n    }\n\n    _attachStreamToElement() {\n        debug(`_attachStreamToElement called`);\n        const NO_VIDEO_ELEMENT_MESSAGE = \"video element was destroyed or wasn't set\";\n        return new Promise((res, rej) => {\n            if (this.element === null || this.element === undefined) {\n                return rej(new Error(NO_VIDEO_ELEMENT_MESSAGE));\n            }\n            const _finishVideoSetup = () => {\n                if (this.element === null || this.element === undefined) {\n                    return rej(new Error(NO_VIDEO_ELEMENT_MESSAGE));\n                }\n                debug('calling _finishVideoSetup');\n                this.element.width = this.element.videoWidth || 320;\n                this.element.height = this.element.videoHeight || 240;\n                // Camera init completed\n                res(this.element);\n            };\n\n            this.canPlayEventListener = () => {\n                if (this.element === null || this.element === undefined) {\n                    return rej(new Error(NO_VIDEO_ELEMENT_MESSAGE));\n                }\n                const promise = this.element.play();\n\n                if (promise !== undefined) {\n                    promise.then(() => {\n                        debug('Autoplay started');\n                    }).catch(() => {\n                        debug('Autoplay was prevented');\n                        // Show a \"Play\" button so that user can start playback.\n                    });\n                }\n            };\n            this.playEventListener = () => {\n                debug('canPlayEventListener called');\n                _finishVideoSetup();\n            };\n            this.loadedMetadataEventListener = () => {\n                if (this.element === null || this.element === undefined) {\n                    return rej(new Error(NO_VIDEO_ELEMENT_MESSAGE));\n                }\n                debug('loadedMetadataEventListener called');\n            };\n            this.element.addEventListener('play', this.playEventListener, false);\n            const videoReadyState = this.element.readyState;\n            debug(`Video element readyState: ${videoReadyState}`);\n            if (videoReadyState === 3 || videoReadyState === 4) {\n                this.loadedMetadataEventListener();\n                this.canPlayEventListener();\n            } else {\n                this.element.addEventListener('canplay', this.canPlayEventListener, false);\n                this.element.addEventListener('loadedmetadata', this.loadedMetadataEventListener, false);\n            }\n            try {\n                // Older browsers may not have srcObject\n                if (\"srcObject\" in this.element) {\n                    this.element.srcObject = this._stream;\n                    debug('srcObject in video element was set');\n                } else {\n                    // Avoid using this in new browsers, as it is going away.\n                    const urlObj = window.URL || window.webkitURL || window.mozURL || window.msURL;\n                    this.element.src = urlObj.createObjectURL(this._stream);\n                    debug('src in video element was set');\n                }\n            } catch (err) {\n                debug(`can't send a stream to a video element. err name: ${err.name}, err message: ${err.message}`);\n                rej(err)\n            }\n        });\n    }\n\n\n    static findLastEnumeratedDeviceId(){\n        return navigator.mediaDevices.enumerateDevices().then(function (devices) {\n            const filteredVideoDevices = devices.filter(function(elem){\n                return (elem.kind === 'videoinput');\n            });\n            let finalFilteredDevices = filteredVideoDevices.filter(function(elem){\n                const label = elem.label;\n                const isBackLabelFound = backCamerasChecks.isLabelBackLabel(label);\n                debug(`Label \"${label}\" is found to be backside? ${isBackLabelFound}`);\n                return isBackLabelFound;\n            });\n            if(finalFilteredDevices.length === 0){\n                finalFilteredDevices = filteredVideoDevices;\n            }\n            debug(`Found #${finalFilteredDevices.length} relevant devices`);\n            if (finalFilteredDevices.length === 0) {\n                return Promise.reject(new customErrors.CameraNoRelevantDeviceFound())\n            }\n            // if (finalFilteredDevices.length === 1) {\n            //      return null;\n            // }\n            return finalFilteredDevices[finalFilteredDevices.length-1].deviceId;\n        });\n    }\n\n    init() {\n        const reopenCameraIfNeeded = (isSecondTime) => {\n            const shouldEnumerateDevices = (browserDetector.enum.CHROME === browserDetector.detectBroswer());\n            const initialPromise = shouldEnumerateDevices ? Video.findLastEnumeratedDeviceId() : Promise.resolve();\n            return initialPromise.then((lastDeviceId) => {\n                const shouldAttamptInitAgain = !!(isSecondTime || (lastDeviceId && lastDeviceId !== this.lastDeviceId && shouldEnumerateDevices));\n                let promise = shouldAttamptInitAgain ? this._initVideo(lastDeviceId) : Promise.resolve();\n                return promise.then(()=>{\n                    this._attachStreamToElement();\n                });\n            });\n        };\n\n        return this._initVideo(this.lastDeviceId)\n            .then((_) => {\n                return reopenCameraIfNeeded(false);\n            })\n            .catch((originalError) => {\n                if (originalError instanceof GetUserMediaNotImplemented) {\n                    throw originalError;\n                }\n                return reopenCameraIfNeeded(true).catch((err) => {\n                    throw err;\n                });\n            }).catch((err) => {\n                debug(`Error enumerating devices: ${err.message}`);\n                throw err;\n            });\n    }\n\n    static killStream(array, optionalExtraLog) {\n        optionalExtraLog && debug(`killStream optionalExtraLog: ${optionalExtraLog}`);\n        let tempArrayRef = array;\n        if (!array) {\n            return;\n        } else if (!Array.isArray(array)) {\n            tempArrayRef = [array];\n        }\n        tempArrayRef.forEach((stream, index) => {\n            debug(`Stops camera stream #${index}`);\n            let tracks = (stream && stream.getTracks()) || [];\n            tracks.forEach(function (track) {\n                track.stop();\n            });\n        });\n    }\n\n    stopStreaming(forceStreamEnding) {\n        debug(`stopStreaming has called`);\n        if(forceStreamEnding === true || browserDetector.enum.SAFARI !== browserDetector.detectBroswer()) {\n            ((this._stream && this._stream.getTracks()) || []).forEach(function (track) {\n                track.stop();\n            });\n            this._stream = null;\n        }\n        if (this.element && this.element.srcObject) {\n            this.element.srcObject = null;\n        } else if (this.element && this.element.src) {\n            this.element.src = null;\n        }\n    }\n\n    removeListeners() {\n        if (this.element) {\n            this.element.removeEventListener('play', this.playEventListener, false);\n            this.element.removeEventListener('canplay', this.canPlayEventListener, false);\n            this.element.removeEventListener('loadedmetadata', this.loadedMetadataEventListener, false);\n            // this.element.removeEventListener('loadedmetadata', this.canPlayEventListener, false);\n            // this.element.removeEventListener('loadeddata', this.canPlayEventListener, false);\n            // this.element.removeEventListener('progress', this.canPlayEventListener, false);\n        }\n    }\n\n    destroy(removeElement) {\n        debug(`Destroying video, removeElement: ${removeElement}`);\n        this.stopStreaming(removeElement !== false);\n        this.removeListeners();\n        const removeElementFunc = () => {\n            if (this.element) {\n                debug(\"Removing video element\");\n                this.element.parentNode.removeChild(this.element);\n                this.element = null;\n            }\n        };\n        if (removeElement !== null && removeElement !== undefined) {\n            if (removeElement === true) {\n                removeElementFunc();\n            }\n        } else {\n            removeElementFunc();\n        }\n    }\n}\nfunction ScanovateError() {\n}\n\nScanovateError.prototype = new Error;\n\nfunction GetUserMediaNotImplemented() {\n    this.name = 'getUserMediaNotImplemented';\n    this.message = 'getUserMedia is not implemented in this browser';\n    this.stack = (new Error()).stack;\n}\n\nfunction CameraNoRelevantDeviceFound() {\n    this.name = 'CameraNoRelevantDeviceFound';\n    this.message = 'No relevant device found during enumeration';\n    this.stack = (new Error()).stack;\n}\n\nGetUserMediaNotImplemented.prototype = new ScanovateError;\n\nCameraNoRelevantDeviceFound.prototype = new ScanovateError;\n\nmodule.exports = Video;","'use strict';\n\nlet debug = require('debug')('active-ocr-client:browserDetector');\n\nconst enumObjForExport = {\n    FIREFOX: 'Mozilla Firefox',\n    OPERA: 'Opera',\n    TRIDENT: 'Microsoft Internet Explorer',\n    EDGE: 'Microsoft Edge',\n    CHROME: 'Google Chrome or Chromium',\n    SAFARI: 'Apple Safari',\n    UNKNOWN: 'unknown'\n};\n\nmodule.exports = {\n    detectBroswer,\n    enum: enumObjForExport\n};\n\nfunction detectBroswer() {\n    const sUsrAg = navigator.userAgent;\n    let sBrowser;\n\n//The order matters here, and this may report false positives for unlisted browsers.\n\n    if (sUsrAg.indexOf(\"Firefox\") > -1) {\n        sBrowser = enumObjForExport.FIREFOX;\n        //\"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0\"\n    } else if (sUsrAg.indexOf(\"Opera\") > -1) {\n        sBrowser = enumObjForExport.OPERA;\n    } else if (sUsrAg.indexOf(\"Trident\") > -1) {\n        sBrowser = enumObjForExport.TRIDENT;\n        //\"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 3.6.0; wbx 1.0.0; rv:11.0) like Gecko\"\n    } else if (sUsrAg.indexOf(\"Edge\") > -1) {\n        sBrowser = enumObjForExport.EDGE;\n        //\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299\"\n    } else if (sUsrAg.indexOf(\"Chrome\") > -1) {\n        sBrowser = enumObjForExport.CHROME;\n        //\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36\"\n    } else if (sUsrAg.indexOf(\"Safari\") > -1) {\n        sBrowser = enumObjForExport.SAFARI;\n        //\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1 980x1306\"\n    } else {\n        sBrowser = enumObjForExport.UNKNOWN;\n    }\n    \n    return sBrowser;\n}","'use strict';\n\nmodule.exports = {\n    ScanovateCameraError\n}\n\nfunction ScanovateCameraError(message) {\n    this.message = message;\n    this.name = 'ScanovateCameraError';\n}\nScanovateCameraError.prototype = new Error;","'use strict';\n\nconst videoFromCamera = require('./video'),\n    browserDetector = require('./browserDetector'),\n    // data = require('./translations/text.json'),\n    {ScanovateCameraError} = require('./customErrors'),\n    debug = require('debug')('active-ocr-client:manager'),\n    video = require('./video'),\n    translations = require('./translations/languageManager'),\n    Emitter = require('component-emitter');\n\nconst dom = document.documentElement;\nlet instance = null;\n\n//\n// function _openFullscreen(elem) {\n//     try {\n//         const requestFullScreen = elem.requestFullscreen || elem.mozRequestFullScreen || elem.webkitRequestFullScreen || elem.msRequestFullscreen;\n//         if (requestFullScreen) {\n//             const fullScreenCall = requestFullScreen.call(elem);\n//             if (fullScreenCall != null && typeof fullScreenCall.then === 'function') {\n//                 fullScreenCall.then(function () {\n//                     debug(`Successfully enabled full-screen mode`);\n//                 }).catch(err => {\n//                     debug(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);\n//                 });\n//             }\n//         }\n//     } catch (e) {\n//     }\n// }\n\nfunction scanovateLoadCss(url) {\n    return new Promise((resolve, reject) => {\n        try {\n            const link = document.createElement('link');\n            link.type = 'text/css';\n            link.rel = 'stylesheet';\n            link.onload = function () {\n                resolve();\n            };\n            link.onerror = () => {\n                reject(new Error('CSS loading error'))\n            };\n            link.href = url;\n            document.head.appendChild(link);\n        } catch (err) {\n            reject(err);\n        }\n\n    });\n}\n\nfunction applyConfig(data){\n    const root = document.documentElement;\n    if (data.COLORS) {\n        data.COLORS.instructionsColor && root.style.setProperty('--scanovate-card-capture-instructions-color', data.COLORS.instructionsColor);\n        data.COLORS.loaderColor && root.style.setProperty('--scanovate-card-capture-loader-color', data.COLORS.loaderColor);\n        data.COLORS.popupBackgroundColor && root.style.setProperty('--scanovate-card-capture-popup-background-color', data.COLORS.popupBackgroundColor);\n        data.COLORS.popupTextColor && root.style.setProperty('--scanovate-card-capture-popup-text-color', data.COLORS.popupTextColor);\n        data.COLORS.primaryColor && root.style.setProperty('--scanovate-card-capture-primary-color', `${data.COLORS.primaryColor}`);\n        data.COLORS.backArrow && root.style.setProperty('--scanovate-card-capture-back-arrow-color', `${data.COLORS.backArrow}`);\n        data.COLORS.instructionsTextColor && root.style.setProperty('--scanovate-card-capture-instructions-text-color', `${data.COLORS.instructionsTextColor}`);\n        data.COLORS.positionInstructionTextBackground && root.style.setProperty('--scanovate-card-capture-instructions-background-color', `${data.COLORS.positionInstructionTextBackground}`);\n    }\n    if (data.FONT) {\n        data.FONT && root.style.setProperty('--scanovate-card-capture-font', `${data.FONT}`);\n    }\n    console.log(`card_capture is configured to capture #${(data && data.NUMBER_OF_IMAGES) || 1} images`);\n    return data;\n}\n\nmodule.exports = function connect(configObj) {\n\n    const matches = document.location.origin.match(/^https?\\:\\/\\/([^\\/:?#]+)(?:[\\/:?#]|$)/i),\n        serverDomain = matches && matches[1],\n        serverPort = location.port,// || 443,\n        serverFullAddress = `${location.protocol}//${serverDomain}:${serverPort}`;\n    // scanovateLoadCss(`scanovate_card_capture/assets/main.css`);\n\n\n    class Capture extends Emitter {\n        constructor(configObj) {\n            super();\n            this.data = applyConfig.call(this, configObj || {});\n            this.translation = translations.getTranslationObject((this.data && this.data.language) ?this.data && this.data.language : 'en');\n            this.numOfPics = this.data.NUMBER_OF_IMAGES;\n            this.initPromise;\n            this.videoObj;\n            this.firstPage.bind(this);\n            this.img_1 = null;\n            this.img_2 = null;\n        }\n\n        applyNewConfig(configObj){\n            this.data = applyConfig.call(this, configObj || this.data || {});\n        }\n\n        createDiv(element, id, className, visibility, opacity, src, attributes) {\n            let div = document.createElement(element);\n            if (id) {\n                div.setAttribute('id', id);\n            }\n            if (className) {\n                div.classList.add(className);\n            }\n            if (visibility) {\n                div.style.visibility = visibility;\n            }\n            if (opacity) {\n                div.style.opacity = opacity;\n            }\n            if (element === 'img' && src) {\n                div.src = src;\n            }\n            if (attributes && typeof attributes === 'object') {\n                debug(`Will put the following attributes on element: ${JSON.stringify(attributes)}`);\n                for (let property in attributes) {\n                    debug(`Attribute '${property}' will have the following property: ${attributes[property] || ''}`)\n                    div.setAttribute(property, attributes[property] || '')\n                }\n            }\n\n            return div;\n        }\n\n        firstPage(img) {\n            if(img) {\n                setTimeout(()=>{\n                    this.emit('success', {\n                        \"firstCapture\":img,\n                        \"secondCapture\": null\n                    });\n                    instance = null;\n                    this.destroyFirstPage();\n                    return document.createElement('div');\n                },10000)\n            }\n            document.querySelector('html').style.background = 'black';\n            const constraints = {\n                // width: 1280,\n                // height: 720,\n                width: 1920,\n                height: 1080,\n                aspectRatio: 1.777777778\n            };\n            this.numOfPics =  this.data.NUMBER_OF_IMAGES = typeof this.data.NUMBER_OF_IMAGES === 'number' ? this.data.NUMBER_OF_IMAGES : 1;\n            const images = [];\n            let bodyElement;\n\n            if (bodyElement) {\n                return bodyElement\n            }\n            bodyElement = document.createElement('section');\n\n\n            const loaderElement = this.createDiv('img', 'loader', 'scanovate-card-capture-index-loader', undefined, 1.0)\n            const backButtonElement = this.createDiv('button', 'back-button', 'scanovate-card-capture-index-back-button', 'hidden', undefined);\n            backButtonElement.onclick = this.destroyFirstPage.bind(this);\n            const backButtonElementImg = this.createDiv('img', undefined, 'scanovate-card-capture-index-arrow', undefined, undefined)\n            const mainContainerElement = this.createDiv('div', 'main-container', 'scanovate-card-capture-index-main-container', 'hidden');\n            const videoContainerElement = this.createDiv('div', undefined, 'scanovate-card-capture-index-video-container');\n            const videoBoxElement = this.createDiv('video', 'video', 'scanovate-card-capture-index-video', 'hidden', undefined, undefined, {\n                autoplay: null,\n                muted: null,\n                playsinline: null\n            });\n            videoBoxElement.muted = true;\n            const tempImgResult = this.createDiv('img', 'resultImg', 'scanovate-card-capture-index-video');\n            tempImgResult.classList.add('scanovate-card-capture-index-temp-background-img');\n            const instructionsTextElement = this.createDiv('h1', 'video-title', 'scanovate-card-capture-index-video-title');\n            videoContainerElement.appendChild(videoBoxElement);\n            videoContainerElement.appendChild(instructionsTextElement);\n            const captureButtonContainer = this.createDiv('div', undefined, 'scanovate-card-capture-index-capture-button-container');\n            const captureButtonElement = this.createDiv('button', 'capture-button', 'scanovate-card-capture-index-capture-button', 'hidden')\n            const modalElement = this.createDiv('div', 'myModal', 'scanovate-card-capture-index-modal');\n            const modalContentElement = this.createDiv('div', 'modal-content', 'scanovate-card-capture-index-modal-content')\n            const escapeButton = this.createDiv('div', undefined, 'scanovate-card-capture-index-close');\n            escapeButton.innerHTML += (this.data && this.data.CONFIRM_BUTTON) || this.translation.CONFIRM_BUTTON;\n            // escapeButton.onclick = escapeModal();\n            const modalText = this.createDiv('p', undefined, 'scanovate-card-capture-index-modal-text')\n            modalText.innerHTML += (this.data && this.data.POPUP_TEXT) || this.translation.POPUP_TEXT;\n            //for local running\n            const modalGif = this.createDiv('img', undefined, 'scanovate-card-capture-index-modal-gif', undefined, undefined, \"scanovate_card_capture/assets/flip_ocr.gif\");\n            bodyElement.appendChild(loaderElement);\n            // bodyElement.appendChild(backButtonElement);\n            bodyElement.appendChild(mainContainerElement);\n            bodyElement.appendChild(modalElement);\n            backButtonElement.appendChild(backButtonElementImg);\n            mainContainerElement.appendChild(backButtonElement);\n            mainContainerElement.appendChild(videoContainerElement);\n            mainContainerElement.appendChild(captureButtonContainer);\n            videoContainerElement.appendChild(instructionsTextElement);\n            videoContainerElement.appendChild(tempImgResult);\n            captureButtonContainer.appendChild(captureButtonElement);\n            modalElement.appendChild(modalContentElement);\n            modalContentElement.appendChild(modalGif);\n            modalContentElement.appendChild(modalText);\n            modalContentElement && (modalContentElement.innerHTML += '<hr>');\n            modalContentElement.appendChild(escapeButton);\n\n            const elementsArray = [bodyElement, backButtonElement, mainContainerElement, videoContainerElement, modalElement];\n\n            this.videoObj = new videoFromCamera(videoBoxElement, constraints);\n\n            const init = (dontCreateVideo) => {\n                for (let i = 0; i < elementsArray.length; i++) {\n                    if (elementsArray[i] === 'undefined' || elementsArray[i] === 'null') {\n                        return;\n                    }\n                }\n                // loaderElement.style.opacity = '1';\n                backButtonElement.style.visibility = 'hidden';\n                mainContainerElement.style.visibility = 'hidden';\n                videoBoxElement.style.visibility = 'hidden';\n                captureButtonElement.style.visibility = 'hidden';\n                const postVideoInitFunc = function(){\n                    videoContainerElement.appendChild(videoBoxElement);\n                    checkOrientation();\n                    loaderElement.style.opacity = '0';\n                    backButtonElement.style.visibility = 'visible';\n                    mainContainerElement.style.visibility = 'visible';\n                    videoBoxElement.style.visibility = 'visible';\n                }\n                if(dontCreateVideo !== true){\n                    this.initPromise = this.videoObj.init().then(res => {\n                        postVideoInitFunc();\n                    }).catch(e => {\n                        debug(`Error name: ${e && e.name}, message: ${e && e.message}`)\n                        this.emit('error', e);\n                    });\n                } else {\n                    postVideoInitFunc();\n                }\n                instructionsTextElement.innerHTML = (this.data && this.data.POSITION_INSTRUCTION_FRONT_SIDE) || this.translation.POSITION_INSTRUCTION_FRONT_SIDE;\n            }\n            const checkOrientation = () => {\n                if (window.innerWidth > window.innerHeight) {\n                    // bodyElement.style.height = 'unset';\n                    backButtonElement.style.marginBottom = '225px'\n                    backButtonElement.style.marginRight = '15px'\n                    videoBoxElement.style.maxHeight = '248px'\n                    videoBoxElement.style.maxWidth = '440px'\n                    instructionsTextElement.style.fontSize = '17px'\n                    tempImgResult.style.maxHeight = '248px'\n                    tempImgResult.style.maxWidth = '440px'\n                    captureButtonContainer.style.right = '10px';\n                    captureButtonContainer.style.top = '45%';\n                    captureButtonContainer.style.bottom = 'unset';\n                    captureButtonContainer.style.left = 'unset';\n                    captureButtonContainer.style.width = '35'\n                    captureButtonContainer.style.height = '35'\n                    captureButtonContainer.style.marginLeft = '15'\n                    mainContainerElement.style.flexDirection = \"row\";\n                    instructionsTextElement.style.transform = 'rotate(0deg)';\n                    tempImgResult.style.transform = 'rotate(0deg)';\n                    // modalContentElement.style.margin = \"7% auto\";\n                    // modalContentElement.style.height = \"255\";\n                } else {\n                    backButtonElement.style.marginBottom = '10px'\n                    backButtonElement.style.marginRight = '300px'\n                    bodyElement.style.height = '100%';\n                    videoBoxElement.style.maxHeight = '440px'\n                    videoBoxElement.style.maxWidth = '248px'\n                    instructionsTextElement.style.fontSize = '14px'\n                    tempImgResult.style.maxHeight = '440px'\n                    tempImgResult.style.maxWidth = '440px'\n                    captureButtonContainer.style.bottom = '20px';\n                    captureButtonContainer.style.left = '45%';\n                    captureButtonContainer.style.right = 'unset';\n                    captureButtonContainer.style.top = 'unset';\n                    tempImgResult.style.transform = 'rotate(90deg)'\n                    captureButtonContainer.style.width = '35'\n                    captureButtonContainer.style.height = '35'\n                    mainContainerElement.style.flexDirection = \"column\";\n                    instructionsTextElement.style.transform = 'rotate(90deg)';\n                    // modalContentElement.style.margin = \"50% auto\"\n                    // modalContentElement.style.height = \"265px\";\n                }\n            }\n            init();\n            const reusedInit = () => {\n                init(true);\n            }\n            window.addEventListener('resize', reusedInit, false);\n\n            const escapemodal = () => {\n                modalElement.style.display = \"none\";\n                tempImgResult.style.display = 'none';\n                videoBoxElement.style.display = 'block';\n            }\n\n            const captureImage = () => {\n                videoBoxElement.style.display = 'none'\n                // videoContainerElement.appendChild(tempImgResult);\n                tempImgResult.style.display = 'block';\n                modalElement.style.display = \"flex\";\n                instructionsTextElement.innerHTML = (this.data && this.data.POSITION_INSTRUCTION_BACK_SIDE) || this.translation.POSITION_INSTRUCTION_BACK_SIDE;\n                let promiseImg = this.videoObj.capture();\n                promiseImg.then(res => {\n                    images.push(res);\n                    tempImgResult.src = images[0];\n                    if (images.length === this.numOfPics) {\n                        modalElement.style.display = \"none\";\n                        videoBoxElement.style.display = 'block';\n                        tempImgResult.style.display = 'none';\n                        this.img_1 = images[0];\n                        this.img_2 = images[1];\n                        this.emit('success', {\n                            \"firstCapture\": images[0],\n                            \"secondCapture\": images[1] === undefined ? null : images[1]\n                        });\n                        if (document.querySelector('body')) {\n                            document.querySelector('body').style.background = 'unset';\n                        }\n                        if (this.data && this.data.SHOW_RESULTS) {\n                            this.redirectToResults();\n\n                        }\n                        instance = null;\n                        // debug(`KILL_STREAM_AFTER_USAGE: ${this.data.KILL_STREAM_AFTER_USAGE}`);\n                        // this.destroyFirstPage(this.data && this.data.KILL_STREAM_AFTER_USAGE);\n                        this.destroyFirstPage();\n                    }\n                })\n            }\n\n            const destroy = () => {\n                window.removeEventListener('resize', checkOrientation);\n            }\n\n            // captureButtonElement.onclick = captureImage;\n            if(!img){\n                mainContainerElement.onclick = () => {\n                    let style = window.getComputedStyle(modalElement);\n                    if (style.getPropertyValue(\"display\") === \"none\") {\n                        captureImage();\n                    }\n                }\n                escapeButton.onclick = escapemodal;\n            }\n\n            return bodyElement;\n\n        }\n\n        secondPage() {\n            let texts = [];\n\n            let img_1 = this.img_1\n            let img_2 = null;\n            if (this.numOfPics > 1) {\n                img_2 = this.img_2;\n            }\n            let res = {\n                \"firstCapture\": img_1,\n                \"secondCapture\": img_2\n            }\n            this.emit('success', res);\n            const bodyElement = document.createElement('main');\n            const mainContainer = this.createDiv('div', 'main-container', 'scanovate-card-capture-main-container')\n            const imgResultMainContainer = this.createDiv('div', undefined, 'scanovate-card-capture-image-result-container');\n            const resultsContainer = this.createDiv('div', 'data-result', 'scanovate-card-capture-data-result')\n            const ancherTag = this.createDiv('a');\n            ancherTag.onclick = () => {\n                this.redirectToCapture();\n\n            }\n            const backButton = this.createDiv('button', undefined, 'scanovate-card-capture-back-button');\n            const backButtonImg = this.createDiv('img', undefined, 'scanovate-card-capture-arrow', undefined, undefined);\n            const imageContiner = this.createDiv('div', 'image-result-container', 'scanovate-card-capture-image-result-container');\n            const imgResultWrap_1 = this.createDiv('div', undefined, 'scanovate-card-capture-image-result-wrap');\n            const imageTitle1 = this.createDiv('p', 'image-title-1', 'scanovate-card-capture-img-title');\n            const imgResult1 = this.createDiv('img', 'image_1', 'scanovate-card-capture-img-result', undefined, undefined, img_1);\n            const imgResultWrap_2 = this.createDiv('div', undefined, 'scanovate-card-capture-image-result-wrap');\n            const imageTitle2 = this.createDiv('p', 'image-title-2', 'scanovate-card-capture-img-title');\n            let imgResult2;\n            if (this.numOfPics > 1) {\n                imgResult2 = this.createDiv('img', 'image_2', 'scanovate-card-capture-img-result', undefined, undefined, img_2);\n            }\n            const title = this.createDiv('p', 'title', 'scanovate-card-capture-title')\n            title.innerHTML = this.data.RESULTS_PAGE_TITLE\n            const innerTitle = this.createDiv('p', 'text', 'scanovate-card-capture-inner-title')\n            innerTitle.innerHTML = this.data.RESULTS_CONDITIONS_TITLE\n            for (let i = 0; i < this.data.CONDITIONS.length; i++) {\n                let text = this.createDiv('p', undefined, 'scanovate-card-capture-text')\n                const indexLogo = this.createDiv('span', undefined, 'scanovate-card-capture-row-number');\n                indexLogo.innerHTML += `${i + 1}`;\n                const textData = this.createDiv('span', `inner-text-${i + 1}`);\n                textData.innerHTML += this.data.CONDITIONS[i].CONDITION;\n                text.appendChild(indexLogo);\n                text.innerHTML += `&nbsp;&nbsp; ${this.data.CONDITIONS[i].CONDITION}`;\n                texts.push(text);\n            }\n            const captureButtonsContinaer = this.createDiv('div', undefined, 'scanovate-card-capture-buttons-container');\n            const ancherTag1 = this.createDiv('a');\n            ancherTag1.onclick = () => {\n                this.destroySecondPage.call(this);\n                window.removeEventListener('resize', checkOrientation);\n            }\n            const okButton = this.createDiv('input', undefined, 'scanovate-card-capture-ok-button');\n            okButton.type = 'button';\n            okButton.value = this.data.CONFIRM_BUTTON;\n            const ancherTag2 = this.createDiv('a');\n            ancherTag2.onclick = () => {\n                this.redirectToCapture();\n            };\n            const tryAgainButton = this.createDiv('input', undefined, 'scanovate-card-capture-tryagain-button');\n            tryAgainButton.type = 'button';\n            tryAgainButton.value = this.data.TRY_AGAIN_BUTTON;\n\n            bodyElement.appendChild(mainContainer);\n            mainContainer.appendChild(imgResultMainContainer);\n            mainContainer.appendChild(resultsContainer);\n            imgResultMainContainer.appendChild(ancherTag);\n            ancherTag.appendChild(backButton);\n            backButton.appendChild(backButtonImg)\n            imgResultMainContainer.appendChild(imageContiner)\n            imageContiner.appendChild(imgResultWrap_1)\n            imgResultWrap_1.appendChild(imageTitle1);\n            imgResultWrap_1.appendChild(imgResult1);\n            imageContiner.appendChild(imgResultWrap_2)\n            imgResultWrap_2.appendChild(imageTitle2);\n            if (this.numOfPics > 1) {\n                imgResultWrap_2.appendChild(imgResult2);\n            }\n            resultsContainer.appendChild(title)\n            resultsContainer.appendChild(innerTitle)\n            resultsContainer.appendChild(texts[0])\n            resultsContainer.appendChild(texts[1])\n            resultsContainer.appendChild(texts[2])\n            resultsContainer.appendChild(captureButtonsContinaer)\n            captureButtonsContinaer.appendChild(okButton)\n            captureButtonsContinaer.appendChild(ancherTag1)\n            captureButtonsContinaer.appendChild(ancherTag2)\n            ancherTag2.appendChild(tryAgainButton)\n            ancherTag1.appendChild(okButton);\n            const init = () => {\n                if (this.data.NUMBER_OF_IMAGES === 1) {\n                    imgResultWrap_2.style.visibility = 'hidden'\n                }\n                if (window.innerWidth > window.innerHeight) {\n                    mainContainer.style.flexDirection = \"row\";\n                    imageContiner.style.justifyContent = \"unset\";\n                    resultsContainer.style.alignItems = \"unset\";\n                    resultsContainer.style.flex = 'inherit';\n                    resultsContainer.style.paddingLeft = '30'\n                    resultsContainer.style.paddingright = '30'\n                    imgResult1.style.width = '300';\n                    imgResult1.style.height = '176';\n                    if (this.numOfPics > 1) {\n                        imgResult2.style.width = '300';\n                        imgResult2.style.height = '176';\n                    }\n                    title.style.fontSize = '30px';\n                } else {\n                    mainContainer.style.flexDirection = \"column\";\n                    imageContiner.style.justifyContent = \"space-evenly\";\n                    resultsContainer.style.paddingLeft = '30'\n                    resultsContainer.style.paddingright = '30'\n                    resultsContainer.style.alignItems = \"center\";\n                    resultsContainer.style.flex = '0.5';\n                    imgResult1.style.width = '500';\n                    imgResult1.style.height = '294';\n                    if (this.numOfPics > 1) {\n                        imgResult2.style.width = '500';\n                        imgResult2.style.height = '294';\n                    }\n                    title.style.fontSize = '30px';\n                }\n            }\n            init();\n\n            const checkOrientation = () => {\n                init()\n            }\n            window.addEventListener('resize', checkOrientation, false);\n\n            const destroy = () => {\n                window.removeEventListener('resize', checkOrientation);\n            }\n\n            return bodyElement;\n\n        }\n\n        redirectToCapture(img) {\n            // dom.innerHTML = '';\n            // dom.childNodes[1].remove();\n            // this.destroy();\n            let bodyElement = this.firstPage(img);\n            let body = document.querySelector('body');\n            body.style.padding = '0';\n            body.style.margin = '0';\n            body.style.position = 'fixed';\n            body.appendChild(bodyElement);\n            if (document.querySelector('main')) {\n                document.querySelector('main').remove()\n            }\n            // document.querySelector('head').innerHTML += '<link rel=\"stylesheet\" href=\"scanovate_card_capture/assets/main.css\" type=\"text/css\"/>';\n\n        }\n\n        redirectToResults() {\n            // dom.innerHTML = '';\n            // this.destroyFirstPage(this.data.KILL_STREAM_AFTER_USAGE);\n            this.destroyFirstPage();\n            let bodyElement = this.secondPage();\n            let bd = document.querySelector('body');\n            bd.style.position = 'fixed';\n            bd.style.margin = '0';\n            bd.style.padding = '0';\n            // bd.childNodes[4].remove();\n            bd.appendChild(bodyElement);\n            if (document.querySelector('section')) {\n                document.querySelector('section').remove()\n            }\n            if (document.querySelector('body')) {\n                document.querySelector('body').style.background = 'unset';\n            }\n            // document.querySelector('head').innerHTML += '<link rel=\"stylesheet\" href=\"scanovate_card_capture/assets/main.css\" type=\"text/css\"/>';\n        }\n\n        init(configObj, img) {\n            debug(`Card capture is initiating with the following config: ${JSON.stringify(configObj)}`);\n            this.applyNewConfig(configObj || null);\n            this.redirectToCapture(img);\n        }\n\n        destroyFirstPage() {\n            debug(`destroy first page has called`);\n            if (document.querySelector('section')) {\n                document.querySelector('section').remove();\n            }\n            if (document.querySelector('body')) {\n                document.querySelector('body').style.background = 'unset';\n            }\n            instance = null;\n            document.querySelector('html').style.background = 'unset';\n            window.onclick = null;\n            this.initPromise = null;\n            if (this.videoObj !== null && this.videoObj !== undefined) {\n                this.videoObj.destroy(null);\n                this.videoObj = null;\n            }\n        }\n\n        destroySecondPage() {\n            if (document.querySelector('main')) {\n                document.querySelector('main').remove();\n            }\n            if (document.querySelector('body')) {\n                document.querySelector('body').style.background = 'unset';\n            }\n            document.body.style.height = 'inherent';\n            document.body.style.position = 'initial';\n            document.body.style.padding = 'inherent';\n            document.body.style.margin = 'inherent';\n        }\n\n    }\n\n    if (instance === null) {\n        instance = new Capture()\n    }\n\n    return instance;\n}\n\n\n\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\n\t\t// Debug.formatArgs = formatArgs;\n\t\t// debug.rawLog = rawLog;\n\n\t\t// env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","'use strict';\n\nmodule.exports = function UserMediaAccess(constraints) {\n    // Older browsers might not implement mediaDevices at all, so we set an empty object first\n    if (navigator.mediaDevices === undefined) {\n        navigator.mediaDevices = {};\n    }\n\n    // Some browsers partially implement mediaDevices. We can't just assign an object\n    // with getUserMedia as it would overwrite existing properties.\n    // Here, we will just add the getUserMedia property if it's missing.\n    if (navigator.mediaDevices.getUserMedia === undefined) {\n        // First get a hold of the legacy getUserMedia, if present\n        const getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;\n\n        // Some browsers just don't implement it - return a rejected promise with an error\n        // to keep a consistent interface\n        if (!getUserMedia) {\n            return Promise.reject(new Error('getUserMedia'));\n        }\n\n        // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n        return new Promise(function (resolve, reject) {\n            getUserMedia.call(navigator, constraints, resolve, reject);\n        });\n    } else {\n        return navigator.mediaDevices.getUserMedia(constraints);\n    }\n};","'use strict'\n\nconst backCamerasKeywords = [\n    \"rear\",\n    \"back\",\n    \"rück\",\n    \"arrière\",\n    \"trasera\",\n    \"trás\",\n    \"traseira\",\n    \"posteriore\",\n    \"后面\",\n    \"後面\",\n    \"背面\",\n    \"后置\", // alternative\n    \"後置\", // alternative\n    \"背置\", // alternative\n    \"задней\",\n    \"الخلفية\",\n    \"후\",\n    \"arka\",\n    \"achterzijde\",\n    \"หลัง\",\n    \"baksidan\",\n    \"bagside\",\n    \"sau\",\n    \"bak\",\n    \"tylny\",\n    \"takakamera\",\n    \"belakang\",\n    \"אחורית\",\n    \"πίσω\",\n    \"spate\",\n    \"hátsó\",\n    \"zadní\",\n    \"darrere\",\n    \"zadná\",\n    \"задня\",\n    \"stražnja\",\n    \"belakang\",\n    \"बैक\"\n]\n\nmodule.exports = {\n    isLabelBackLabel\n}\n\nfunction isLabelBackLabel(label){\n    if(!label){\n        return false;\n    }\n    for(let i = 0; i < backCamerasKeywords.length; i++){\n        if(label.toLowerCase().includes(backCamerasKeywords[i])){\n            return true;\n        }\n    }\n    return false;\n}","'use strict';\n\nmodule.exports = {\n    getTranslationObject\n};\n\n/**\n * Gets a language object instance\n * @param {String} language a country's internet code, e.g. 'IL'\n */\nfunction getTranslationObject(language) {\n    if(language === 'en'){\n        return require('./english');\n    } else {\n        return require('./hebrew')\n    }\n}","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n"],"sourceRoot":""}