UNPKG

webdriverio-automation

Version:

WebdriverIO-Automation android ios project

964 lines (726 loc) 91.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.isErrorType = isErrorType; exports.isUnknownError = isUnknownError; exports.errorFromMJSONWPStatusCode = errorFromMJSONWPStatusCode; exports.errorFromW3CJsonCode = errorFromW3CJsonCode; exports.getResponseForW3CError = getResponseForW3CError; exports.getResponseForJsonwpError = getResponseForJsonwpError; exports.errors = exports.ProtocolError = void 0; require("source-map-support/register"); var _es6Error = _interopRequireDefault(require("es6-error")); var _lodash = _interopRequireDefault(require("lodash")); var _appiumSupport = require("appium-support"); var _httpStatusCodes = _interopRequireDefault(require("http-status-codes")); const mjsonwpLog = _appiumSupport.logger.getLogger('MJSONWP'); const w3cLog = _appiumSupport.logger.getLogger('W3C'); const W3C_UNKNOWN_ERROR = 'unknown error'; class ProtocolError extends _es6Error.default { constructor(msg, jsonwpCode, w3cStatus, error) { super(msg); this.jsonwpCode = jsonwpCode; this.error = error || W3C_UNKNOWN_ERROR; if (this.jsonwpCode === null) { this.jsonwpCode = 13; } this.w3cStatus = w3cStatus || _httpStatusCodes.default.BAD_REQUEST; this._stacktrace = null; } get stacktrace() { return this._stacktrace || this.stack; } set stacktrace(value) { this._stacktrace = value; } } exports.ProtocolError = ProtocolError; class NoSuchDriverError extends ProtocolError { static code() { return 6; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } static error() { return 'invalid session id'; } constructor(err) { super(err || 'A session is either terminated or not started', NoSuchDriverError.code(), NoSuchDriverError.w3cStatus(), NoSuchDriverError.error()); } } class NoSuchElementError extends ProtocolError { static code() { return 7; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } static error() { return 'no such element'; } constructor(err) { super(err || 'An element could not be located on the page using the given ' + 'search parameters.', NoSuchElementError.code(), NoSuchElementError.w3cStatus(), NoSuchElementError.error()); } } class NoSuchFrameError extends ProtocolError { static code() { return 8; } static error() { return 'no such frame'; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } constructor(err) { super(err || 'A request to switch to a frame could not be satisfied because ' + 'the frame could not be found.', NoSuchFrameError.code(), NoSuchFrameError.w3cStatus(), NoSuchFrameError.error()); } } class UnknownCommandError extends ProtocolError { static code() { return 9; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } static error() { return 'unknown command'; } constructor(err) { super(err || 'The requested resource could not be found, or a request was ' + 'received using an HTTP method that is not supported by the mapped ' + 'resource.', UnknownCommandError.code(), UnknownCommandError.w3cStatus(), UnknownCommandError.error()); } } class StaleElementReferenceError extends ProtocolError { static code() { return 10; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } static error() { return 'stale element reference'; } constructor(err) { super(err || 'An element command failed because the referenced element is no ' + 'longer attached to the DOM.', StaleElementReferenceError.code(), StaleElementReferenceError.w3cStatus(), StaleElementReferenceError.error()); } } class ElementNotVisibleError extends ProtocolError { static code() { return 11; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } static error() { return 'element not visible'; } constructor(err) { super(err || 'An element command could not be completed because the element is ' + 'not visible on the page.', ElementNotVisibleError.code(), ElementNotVisibleError.w3cStatus(), ElementNotVisibleError.error()); } } class InvalidElementStateError extends ProtocolError { static code() { return 12; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } static error() { return 'invalid element state'; } constructor(err) { super(err || 'An element command could not be completed because the element is ' + 'in an invalid state (e.g. attempting to click a disabled element).', InvalidElementStateError.code(), InvalidElementStateError.w3cStatus(), InvalidElementStateError.error()); } } class UnknownError extends ProtocolError { static code() { return 13; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return W3C_UNKNOWN_ERROR; } constructor(originalError) { let origMessage = originalError; if (originalError instanceof Error) { origMessage = originalError.message; } let message = 'An unknown server-side error occurred while processing ' + 'the command.'; if (originalError) { message = `${message} Original error: ${origMessage}`; } super(message, UnknownError.code(), UnknownError.w3cStatus(), UnknownError.error()); } } class UnknownMethodError extends ProtocolError { static code() { return 405; } static w3cStatus() { return _httpStatusCodes.default.METHOD_NOT_ALLOWED; } static error() { return 'unknown method'; } constructor(err) { super(err || 'The requested command matched a known URL but did not match an method for that URL', UnknownMethodError.code(), UnknownMethodError.w3cStatus(), UnknownMethodError.error()); } } class UnsupportedOperationError extends ProtocolError { static code() { return 405; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'unsupported operation'; } constructor(err) { super(err || 'A server-side error occurred. Command cannot be supported.', UnsupportedOperationError.code(), UnsupportedOperationError.w3cStatus(), UnsupportedOperationError.error()); } } class ElementIsNotSelectableError extends ProtocolError { static code() { return 15; } static error() { return 'element not selectable'; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } constructor(err) { super(err || 'An attempt was made to select an element that cannot be selected.', ElementIsNotSelectableError.code(), ElementIsNotSelectableError.w3cStatus(), ElementIsNotSelectableError.error()); } } class ElementClickInterceptedError extends ProtocolError { static code() { return 64; } static error() { return 'element click intercepted'; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } constructor(err) { super(err || 'The Element Click command could not be completed because the element receiving ' + 'the events is obscuring the element that was requested clicked', ElementClickInterceptedError.code(), ElementClickInterceptedError.w3cStatus(), ElementClickInterceptedError.error()); } } class ElementNotInteractableError extends ProtocolError { static code() { return 60; } static error() { return 'element not interactable'; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } constructor(err) { super(err || 'A command could not be completed because the element is not pointer- or keyboard interactable', ElementNotInteractableError.code(), ElementNotInteractableError.w3cStatus(), ElementNotInteractableError.error()); } } class InsecureCertificateError extends ProtocolError { static error() { return 'insecure certificate'; } constructor(err) { super(err || 'Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate', ElementIsNotSelectableError.code(), null, InsecureCertificateError.error()); } } class JavaScriptError extends ProtocolError { static code() { return 17; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'javascript error'; } constructor(err) { super(err || 'An error occurred while executing user supplied JavaScript.', JavaScriptError.code(), JavaScriptError.w3cStatus(), JavaScriptError.error()); } } class XPathLookupError extends ProtocolError { static code() { return 19; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } static error() { return 'invalid selector'; } constructor(err) { super(err || 'An error occurred while searching for an element by XPath.', XPathLookupError.code(), XPathLookupError.w3cStatus(), XPathLookupError.error()); } } class TimeoutError extends ProtocolError { static code() { return 21; } static w3cStatus() { return _httpStatusCodes.default.REQUEST_TIMEOUT; } static error() { return 'timeout'; } constructor(err) { super(err || 'An operation did not complete before its timeout expired.', TimeoutError.code(), TimeoutError.w3cStatus(), TimeoutError.error()); } } class NoSuchWindowError extends ProtocolError { static code() { return 23; } static error() { return 'no such window'; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } constructor(err) { super(err || 'A request to switch to a different window could not be satisfied ' + 'because the window could not be found.', NoSuchWindowError.code(), NoSuchWindowError.w3cStatus(), NoSuchWindowError.error()); } } class InvalidArgumentError extends ProtocolError { static code() { return 61; } static error() { return 'invalid argument'; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } constructor(err) { super(err || 'The arguments passed to the command are either invalid or malformed', InvalidArgumentError.code(), InvalidArgumentError.w3cStatus(), InvalidArgumentError.error()); } } class InvalidCookieDomainError extends ProtocolError { static code() { return 24; } static error() { return 'invalid cookie domain'; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } constructor(err) { super(err || 'An illegal attempt was made to set a cookie under a different ' + 'domain than the current page.', InvalidCookieDomainError.code(), InvalidCookieDomainError.w3cStatus(), InvalidCookieDomainError.error()); } } class NoSuchCookieError extends ProtocolError { static code() { return 62; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } static error() { return 'no such cookie'; } constructor(err) { super(err || 'No cookie matching the given path name was found amongst the associated cookies of the current browsing context’s active document', NoSuchCookieError.code(), NoSuchCookieError.w3cStatus(), NoSuchCookieError.error()); } } class UnableToSetCookieError extends ProtocolError { static code() { return 25; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'unable to set cookie'; } constructor(err) { super(err || 'A request to set a cookie\'s value could not be satisfied.', UnableToSetCookieError.code(), UnableToSetCookieError.w3cStatus(), UnableToSetCookieError.error()); } } class UnexpectedAlertOpenError extends ProtocolError { static code() { return 26; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'unexpected alert open'; } constructor(err) { super(err || 'A modal dialog was open, blocking this operation', UnexpectedAlertOpenError.code(), UnexpectedAlertOpenError.w3cStatus(), UnexpectedAlertOpenError.error()); } } class NoAlertOpenError extends ProtocolError { static code() { return 27; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } static error() { return 'no such alert'; } constructor(err) { super(err || 'An attempt was made to operate on a modal dialog when one ' + 'was not open.', NoAlertOpenError.code(), NoAlertOpenError.w3cStatus(), NoAlertOpenError.error()); } } class NoSuchAlertError extends NoAlertOpenError {} class ScriptTimeoutError extends ProtocolError { static code() { return 28; } static w3cStatus() { return _httpStatusCodes.default.REQUEST_TIMEOUT; } static error() { return 'script timeout'; } constructor(err) { super(err || 'A script did not complete before its timeout expired.', ScriptTimeoutError.code(), ScriptTimeoutError.w3cStatus(), ScriptTimeoutError.error()); } } class InvalidElementCoordinatesError extends ProtocolError { static code() { return 29; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } static error() { return 'invalid coordinates'; } constructor(err) { super(err || 'The coordinates provided to an interactions operation are invalid.', InvalidElementCoordinatesError.code(), InvalidElementCoordinatesError.w3cStatus(), InvalidElementCoordinatesError.error()); } } class InvalidCoordinatesError extends InvalidElementCoordinatesError {} class IMENotAvailableError extends ProtocolError { static code() { return 30; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'unsupported operation'; } constructor(err) { super(err || 'IME was not available.', IMENotAvailableError.code(), IMENotAvailableError.w3cStatus(), IMENotAvailableError.error()); } } class IMEEngineActivationFailedError extends ProtocolError { static code() { return 31; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'unsupported operation'; } constructor(err) { super(err || 'An IME engine could not be started.', IMEEngineActivationFailedError.code(), IMEEngineActivationFailedError.w3cStatus(), IMEEngineActivationFailedError.error()); } } class InvalidSelectorError extends ProtocolError { static code() { return 32; } static w3cStatus() { return _httpStatusCodes.default.BAD_REQUEST; } static error() { return 'invalid selector'; } constructor(err) { super(err || 'Argument was an invalid selector (e.g. XPath/CSS).', InvalidSelectorError.code(), InvalidSelectorError.w3cStatus(), InvalidSelectorError.error()); } } class SessionNotCreatedError extends ProtocolError { static code() { return 33; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'session not created'; } constructor(details) { let message = 'A new session could not be created.'; if (details) { message += ` Details: ${details}`; } super(message, SessionNotCreatedError.code(), SessionNotCreatedError.w3cStatus(), SessionNotCreatedError.error()); } } class MoveTargetOutOfBoundsError extends ProtocolError { static code() { return 34; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'move target out of bounds'; } constructor(err) { super(err || 'Target provided for a move action is out of bounds.', MoveTargetOutOfBoundsError.code(), MoveTargetOutOfBoundsError.w3cStatus(), MoveTargetOutOfBoundsError.error()); } } class NoSuchContextError extends ProtocolError { static code() { return 35; } constructor(err) { super(err || 'No such context found.', NoSuchContextError.code()); } } class InvalidContextError extends ProtocolError { static code() { return 36; } constructor(err) { super(err || 'That command could not be executed in the current context.', InvalidContextError.code()); } } class NotYetImplementedError extends ProtocolError { static code() { return 13; } static w3cStatus() { return _httpStatusCodes.default.NOT_FOUND; } static error() { return 'unknown method'; } constructor(err) { super(err || 'Method has not yet been implemented', NotYetImplementedError.code(), NotYetImplementedError.w3cStatus(), NotYetImplementedError.error()); } } class NotImplementedError extends ProtocolError { static code() { return 13; } static w3cStatus() { return _httpStatusCodes.default.METHOD_NOT_ALLOWED; } constructor(err) { super(err || 'Method is not implemented', NotImplementedError.code(), NotImplementedError.w3cStatus()); } } class UnableToCaptureScreen extends ProtocolError { static code() { return 63; } static w3cStatus() { return _httpStatusCodes.default.INTERNAL_SERVER_ERROR; } static error() { return 'unable to capture screen'; } constructor(err) { super(err || 'A screen capture was made impossible', UnableToCaptureScreen.code(), UnableToCaptureScreen.w3cStatus(), UnableToCaptureScreen.error()); } } class BadParametersError extends _es6Error.default { static error() { return 'invalid argument'; } constructor(requiredParams, actualParams, errMessage) { let message; if (!errMessage) { message = `Parameters were incorrect. We wanted ` + `${JSON.stringify(requiredParams)} and you ` + `sent ${JSON.stringify(actualParams)}`; } else { message = `Parameters were incorrect. You sent ${JSON.stringify(actualParams)}, ${errMessage}`; } super(message); this.w3cStatus = _httpStatusCodes.default.BAD_REQUEST; } } class ProxyRequestError extends _es6Error.default { constructor(err, responseError, httpStatus) { let responseErrorObj = _appiumSupport.util.safeJsonParse(responseError); if (!_lodash.default.isPlainObject(responseErrorObj)) { responseErrorObj = {}; } let origMessage = _lodash.default.isString(responseError) ? responseError : ''; if (!_lodash.default.isEmpty(responseErrorObj)) { if (_lodash.default.isString(responseErrorObj.value)) { origMessage = responseErrorObj.value; } else if (_lodash.default.isPlainObject(responseErrorObj.value) && _lodash.default.isString(responseErrorObj.value.message)) { origMessage = responseErrorObj.value.message; } } super(_lodash.default.isEmpty(err) ? `Proxy request unsuccessful. ${origMessage}` : err); this.w3cStatus = _httpStatusCodes.default.BAD_REQUEST; if (_lodash.default.isPlainObject(responseErrorObj.value) && _lodash.default.has(responseErrorObj.value, 'error')) { this.w3c = responseErrorObj.value; this.w3cStatus = httpStatus || _httpStatusCodes.default.BAD_REQUEST; } else { this.jsonwp = responseErrorObj; } } getActualError() { if (_appiumSupport.util.hasValue(this.jsonwp) && _appiumSupport.util.hasValue(this.jsonwp.status) && _appiumSupport.util.hasValue(this.jsonwp.value)) { return errorFromMJSONWPStatusCode(this.jsonwp.status, this.jsonwp.value); } else if (_appiumSupport.util.hasValue(this.w3c) && _lodash.default.isNumber(this.w3cStatus) && this.w3cStatus >= 300) { return errorFromW3CJsonCode(this.w3c.error, this.w3c.message || this.message, this.w3c.stacktrace); } return new UnknownError(this.message); } } const errors = { NotYetImplementedError, NotImplementedError, BadParametersError, InvalidArgumentError, NoSuchDriverError, NoSuchElementError, UnknownCommandError, StaleElementReferenceError, ElementNotVisibleError, InvalidElementStateError, UnknownError, ElementIsNotSelectableError, ElementClickInterceptedError, ElementNotInteractableError, InsecureCertificateError, JavaScriptError, XPathLookupError, TimeoutError, NoSuchWindowError, NoSuchCookieError, InvalidCookieDomainError, InvalidCoordinatesError, UnableToSetCookieError, UnexpectedAlertOpenError, NoAlertOpenError, ScriptTimeoutError, InvalidElementCoordinatesError, IMENotAvailableError, IMEEngineActivationFailedError, InvalidSelectorError, SessionNotCreatedError, MoveTargetOutOfBoundsError, NoSuchAlertError, NoSuchContextError, InvalidContextError, NoSuchFrameError, UnableToCaptureScreen, UnknownMethodError, UnsupportedOperationError, ProxyRequestError }; exports.errors = errors; const jsonwpErrorCodeMap = {}; for (let ErrorClass of _lodash.default.values(errors)) { if (ErrorClass.code) { jsonwpErrorCodeMap[ErrorClass.code()] = ErrorClass; } } const w3cErrorCodeMap = {}; for (let ErrorClass of _lodash.default.values(errors)) { if (ErrorClass.error) { w3cErrorCodeMap[ErrorClass.error()] = ErrorClass; } } function isUnknownError(err) { return !err.constructor.name || !_lodash.default.values(errors).find(function equalNames(error) { return error.name === err.constructor.name; }); } function isErrorType(err, type) { if (type.name === ProtocolError.name) { return !!err.jsonwpCode; } else if (type.name === ProxyRequestError.name) { if (err.jsonwp) { return !!err.jsonwp.status; } if (_lodash.default.isPlainObject(err.w3c)) { return _lodash.default.isNumber(err.w3cStatus) && err.w3cStatus >= 300; } return false; } return err.constructor.name === type.name; } function errorFromMJSONWPStatusCode(code, value = '') { const message = (value || {}).message || value || ''; if (code !== UnknownError.code() && jsonwpErrorCodeMap[code]) { mjsonwpLog.debug(`Matched JSONWP error code ${code} to ${jsonwpErrorCodeMap[code].name}`); return new jsonwpErrorCodeMap[code](message); } mjsonwpLog.debug(`Matched JSONWP error code ${code} to UnknownError`); return new UnknownError(message); } function errorFromW3CJsonCode(code, message, stacktrace = null) { if (code && w3cErrorCodeMap[code.toLowerCase()]) { w3cLog.debug(`Matched W3C error code '${code}' to ${w3cErrorCodeMap[code.toLowerCase()].name}`); const resultError = new w3cErrorCodeMap[code.toLowerCase()](message); resultError.stacktrace = stacktrace; return resultError; } w3cLog.debug(`Matched W3C error code '${code}' to UnknownError`); const resultError = new UnknownError(message); resultError.stacktrace = stacktrace; return resultError; } function getResponseForW3CError(err) { let httpStatus; let w3cErrorString; if (!err.w3cStatus) { err = _appiumSupport.util.hasValue(err.status) ? errorFromMJSONWPStatusCode(err.status, err.value) : new errors.UnknownError(err.message); } if (isErrorType(err, errors.BadParametersError)) { w3cLog.debug(`Bad parameters: ${err}`); w3cErrorString = BadParametersError.error(); } else { w3cErrorString = err.error; } httpStatus = err.w3cStatus; if (!w3cErrorString) { w3cErrorString = UnknownError.error(); } let httpResBody = { value: { error: w3cErrorString, message: err.message, stacktrace: err.stacktrace || err.stack } }; return [httpStatus, httpResBody]; } function getResponseForJsonwpError(err) { if (isUnknownError(err)) { err = new errors.UnknownError(err); } let httpStatus = _httpStatusCodes.default.INTERNAL_SERVER_ERROR; let httpResBody = { status: err.jsonwpCode, value: { message: err.message } }; if (isErrorType(err, errors.BadParametersError)) { mjsonwpLog.debug(`Bad parameters: ${err}`); httpStatus = _httpStatusCodes.default.BAD_REQUEST; httpResBody = err.message; } else if (isErrorType(err, errors.NotYetImplementedError) || isErrorType(err, errors.NotImplementedError)) { httpStatus = _httpStatusCodes.default.NOT_IMPLEMENTED; } else if (isErrorType(err, errors.NoSuchDriverError)) { httpStatus = _httpStatusCodes.default.NOT_FOUND; } return [httpStatus, httpResBody]; }require('source-map-support').install(); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9lcnJvcnMuanMiXSwibmFtZXMiOlsibWpzb253cExvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInczY0xvZyIsIlczQ19VTktOT1dOX0VSUk9SIiwiUHJvdG9jb2xFcnJvciIsIkVTNkVycm9yIiwiY29uc3RydWN0b3IiLCJtc2ciLCJqc29ud3BDb2RlIiwidzNjU3RhdHVzIiwiZXJyb3IiLCJIVFRQU3RhdHVzQ29kZXMiLCJCQURfUkVRVUVTVCIsIl9zdGFja3RyYWNlIiwic3RhY2t0cmFjZSIsInN0YWNrIiwidmFsdWUiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImNvZGUiLCJOT1RfRk9VTkQiLCJlcnIiLCJOb1N1Y2hFbGVtZW50RXJyb3IiLCJOb1N1Y2hGcmFtZUVycm9yIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRWxlbWVudE5vdFZpc2libGVFcnJvciIsIkludmFsaWRFbGVtZW50U3RhdGVFcnJvciIsIlVua25vd25FcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsIm9yaWdpbmFsRXJyb3IiLCJvcmlnTWVzc2FnZSIsIkVycm9yIiwibWVzc2FnZSIsIlVua25vd25NZXRob2RFcnJvciIsIk1FVEhPRF9OT1RfQUxMT1dFRCIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IiLCJFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yIiwiRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIiwiSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yIiwiSmF2YVNjcmlwdEVycm9yIiwiWFBhdGhMb29rdXBFcnJvciIsIlRpbWVvdXRFcnJvciIsIlJFUVVFU1RfVElNRU9VVCIsIk5vU3VjaFdpbmRvd0Vycm9yIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJJbnZhbGlkQ29va2llRG9tYWluRXJyb3IiLCJOb1N1Y2hDb29raWVFcnJvciIsIlVuYWJsZVRvU2V0Q29va2llRXJyb3IiLCJVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IiLCJOb0FsZXJ0T3BlbkVycm9yIiwiTm9TdWNoQWxlcnRFcnJvciIsIlNjcmlwdFRpbWVvdXRFcnJvciIsIkludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvciIsIkludmFsaWRDb29yZGluYXRlc0Vycm9yIiwiSU1FTm90QXZhaWxhYmxlRXJyb3IiLCJJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJkZXRhaWxzIiwiTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IiLCJOb1N1Y2hDb250ZXh0RXJyb3IiLCJJbnZhbGlkQ29udGV4dEVycm9yIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJVbmFibGVUb0NhcHR1cmVTY3JlZW4iLCJCYWRQYXJhbWV0ZXJzRXJyb3IiLCJyZXF1aXJlZFBhcmFtcyIsImFjdHVhbFBhcmFtcyIsImVyck1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwiUHJveHlSZXF1ZXN0RXJyb3IiLCJyZXNwb25zZUVycm9yIiwiaHR0cFN0YXR1cyIsInJlc3BvbnNlRXJyb3JPYmoiLCJ1dGlsIiwic2FmZUpzb25QYXJzZSIsIl8iLCJpc1BsYWluT2JqZWN0IiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiaGFzIiwidzNjIiwianNvbndwIiwiZ2V0QWN0dWFsRXJyb3IiLCJoYXNWYWx1ZSIsInN0YXR1cyIsImVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlIiwiaXNOdW1iZXIiLCJlcnJvckZyb21XM0NKc29uQ29kZSIsImVycm9ycyIsImpzb253cEVycm9yQ29kZU1hcCIsIkVycm9yQ2xhc3MiLCJ2YWx1ZXMiLCJ3M2NFcnJvckNvZGVNYXAiLCJpc1Vua25vd25FcnJvciIsIm5hbWUiLCJmaW5kIiwiZXF1YWxOYW1lcyIsImlzRXJyb3JUeXBlIiwidHlwZSIsImRlYnVnIiwidG9Mb3dlckNhc2UiLCJyZXN1bHRFcnJvciIsImdldFJlc3BvbnNlRm9yVzNDRXJyb3IiLCJ3M2NFcnJvclN0cmluZyIsImh0dHBSZXNCb2R5IiwiZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvciIsIk5PVF9JTVBMRU1FTlRFRCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0Ysc0JBQU9DLFNBQVAsQ0FBaUIsS0FBakIsQ0FBZjs7QUFFQSxNQUFNRSxpQkFBaUIsR0FBRyxlQUExQjs7QUFHQSxNQUFNQyxhQUFOLFNBQTRCQyxpQkFBNUIsQ0FBcUM7QUFDbkNDLEVBQUFBLFdBQVcsQ0FBRUMsR0FBRixFQUFPQyxVQUFQLEVBQW1CQyxTQUFuQixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDOUMsVUFBTUgsR0FBTjtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0UsS0FBTCxHQUFhQSxLQUFLLElBQUlQLGlCQUF0Qjs7QUFDQSxRQUFJLEtBQUtLLFVBQUwsS0FBb0IsSUFBeEIsRUFBOEI7QUFDNUIsV0FBS0EsVUFBTCxHQUFrQixFQUFsQjtBQUNEOztBQUNELFNBQUtDLFNBQUwsR0FBaUJBLFNBQVMsSUFBSUUseUJBQWdCQyxXQUE5QztBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDRDs7QUFFRCxNQUFJQyxVQUFKLEdBQWtCO0FBQ2hCLFdBQU8sS0FBS0QsV0FBTCxJQUFvQixLQUFLRSxLQUFoQztBQUNEOztBQUVELE1BQUlELFVBQUosQ0FBZ0JFLEtBQWhCLEVBQXVCO0FBQ3JCLFNBQUtILFdBQUwsR0FBbUJHLEtBQW5CO0FBQ0Q7O0FBbEJrQzs7OztBQXlCckMsTUFBTUMsaUJBQU4sU0FBZ0NiLGFBQWhDLENBQThDO0FBQzVDLFNBQU9jLElBQVAsR0FBZTtBQUNiLFdBQU8sQ0FB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