metaapi.cloud-sdk
Version:
SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)
167 lines (166 loc) • 15.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
ApiError: function() {
return ApiError;
},
ConflictError: function() {
return ConflictError;
},
ForbiddenError: function() {
return ForbiddenError;
},
InternalError: function() {
return InternalError;
},
NotFoundError: function() {
return NotFoundError;
},
TooManyRequestsError: function() {
return TooManyRequestsError;
},
UnauthorizedError: function() {
return UnauthorizedError;
},
ValidationError: function() {
return ValidationError;
}
});
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
/**
* Base class for API errors. Contains indication of HTTP status.
*/ const isNode = typeof process !== "undefined" && process.release && process.release.name === "node";
let ApiError = class ApiError extends Error {
/**
* Sets error code, used for i18n
* @param {string} code error code for i18n
*/ set code(code) {
this._code = code;
}
/**
* Returns error code used for i18n
* @return {string} error code
*/ get code() {
return this._code;
}
/**
* Set message arguments for i18n
* @param {Array<Object>} args arguments for i18n
*/ set arguments(args) {
this._args = args;
}
/**
* Returns message arguments for i18n
* @return {Array<Object>} message arguments for i18n
*/ get arguments() {
return this._args;
}
/**
* ApiError constructor
* @param {Function} clazz error name
* @param {Object} message error message
* @param {number} status HTTP status
* @param {string} url API request URL
*/ constructor(clazz, message, status, url){
super(url ? message + ". Request URL: " + url : message);
/** HTTP status code */ _define_property(this, "status", void 0);
/** API request URL */ _define_property(this, "url", void 0);
_define_property(this, "_code", void 0);
_define_property(this, "_args", void 0);
this.name = clazz.name;
this.status = status;
this.url = url;
if (isNode && Error.captureStackTrace) {
Error.captureStackTrace(this, clazz);
}
}
};
let NotFoundError = class NotFoundError extends ApiError {
/**
* Represents NotFoundError.
* @param {string} message error message
* @param {string} url API request URL
*/ constructor(message, url){
super(NotFoundError, message, 404, url);
}
};
let ForbiddenError = class ForbiddenError extends ApiError {
/**
* Constructs forbidden error.
* @param {string} message error message
* @param {string} url API request URL
*/ constructor(message, url){
super(ForbiddenError, message, 403, url);
}
};
let UnauthorizedError = class UnauthorizedError extends ApiError {
/**
* Constructs unauthorized error.
* @param {string} message error message
* @param {string} url API request URL
*/ constructor(message, url){
super(UnauthorizedError, message, 401, url);
}
};
let ValidationError = class ValidationError extends ApiError {
/**
* Constructs validation error.
* @param {string} message error message
* @param {Object} details error data
* @param {string} url API request URL
*/ constructor(message, details, url){
super(ValidationError, message, 400, url);
/** Validation error details */ _define_property(this, "details", void 0);
this.details = details;
}
};
let InternalError = class InternalError extends ApiError {
/**
* Constructs unexpected error.
* @param {string} message error message
* @param {string} url API request URL
*/ constructor(message, url){
super(InternalError, message, 500, url);
}
};
let ConflictError = class ConflictError extends ApiError {
/**
* Constructs conflict error.
* @param {string} message error message
* @param {string} url API request URL
*/ constructor(message, url){
super(ConflictError, message, 409, url);
}
};
let TooManyRequestsError = class TooManyRequestsError extends ApiError {
/**
* Constructs too many requests error.
* @param {string} message error message
* @param {TooManyRequestsErrorMetadata} metadata error metadata
*/ constructor(message, metadata, url){
super(TooManyRequestsError, message, 429, url);
/** error metadata */ _define_property(this, "metadata", void 0);
this.metadata = metadata;
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQVBJIGVycm9ycy4gQ29udGFpbnMgaW5kaWNhdGlvbiBvZiBIVFRQIHN0YXR1cy5cbiAqL1xuXG5jb25zdCBpc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5yZWxlYXNlICYmIHByb2Nlc3MucmVsZWFzZS5uYW1lID09PSAnbm9kZSc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQVBJIGVycm9ycy4gQ29udGFpbnMgaW5kaWNhdGlvbiBvZiBIVFRQIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBcbiAgLyoqIEhUVFAgc3RhdHVzIGNvZGUgKi9cbiAgcHVibGljIHN0YXR1czogbnVtYmVyO1xuICAvKiogQVBJIHJlcXVlc3QgVVJMICovXG4gIHB1YmxpYyB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBfY29kZTogYW55O1xuICBwcml2YXRlIF9hcmdzOiBhbnk7XG5cbiAgLyoqXG4gICAqIEFwaUVycm9yIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNsYXp6IGVycm9yIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzIEhUVFAgc3RhdHVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgQVBJIHJlcXVlc3QgVVJMXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjbGF6ejogRnVuY3Rpb24sIG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHVybD86IHN0cmluZykge1xuICAgIHN1cGVyKHVybCA/IG1lc3NhZ2UgKyAnLiBSZXF1ZXN0IFVSTDogJyArIHVybCA6IG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IGNsYXp6Lm5hbWU7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy51cmwgPSB1cmw7XG5cbiAgICBpZiAoaXNOb2RlICYmIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBjbGF6eik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZXJyb3IgY29kZSwgdXNlZCBmb3IgaTE4blxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBlcnJvciBjb2RlIGZvciBpMThuXG4gICAqL1xuICBzZXQgY29kZShjb2RlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb2RlID0gY29kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGVycm9yIGNvZGUgdXNlZCBmb3IgaTE4blxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGVycm9yIGNvZGVcbiAgICovXG4gIGdldCBjb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvZGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG1lc3NhZ2UgYXJndW1lbnRzIGZvciBpMThuXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gYXJncyBhcmd1bWVudHMgZm9yIGkxOG5cbiAgICovXG4gIHNldCBhcmd1bWVudHMoYXJnczogQXJyYXk8T2JqZWN0Pikge1xuICAgIHRoaXMuX2FyZ3MgPSBhcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWVzc2FnZSBhcmd1bWVudHMgZm9yIGkxOG5cbiAgICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gbWVzc2FnZSBhcmd1bWVudHMgZm9yIGkxOG5cbiAgICovXG4gIGdldCBhcmd1bWVudHMoKTogQXJyYXk8T2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ3M7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDA0IChOb3QgRm91bmQpIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgTm90Rm91bmRFcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihOb3RGb3VuZEVycm9yLCBtZXNzYWdlLCA0MDQsIHVybCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDAzIChGb3JiaWRkZW4pIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZvcmJpZGRlbkVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGZvcmJpZGRlbiBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihGb3JiaWRkZW5FcnJvciwgbWVzc2FnZSwgNDAzLCB1cmwpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dpbmcgdGhpcyBlcnJvciByZXN1bHRzIGluIDQwMSAoVW5hdXRob3JpemVkKSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmF1dGhvcml6ZWRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyB1bmF1dGhvcml6ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVW5hdXRob3JpemVkRXJyb3IsIG1lc3NhZ2UsIDQwMSwgdXJsKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdmFsaWRhdGlvbiBlcnJvci4gVGhyb3dpbmcgdGhpcyBlcnJvciByZXN1bHRzIGluIDQwMCAoQmFkIFJlcXVlc3QpIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgXG4gIC8qKiBWYWxpZGF0aW9uIGVycm9yIGRldGFpbHMgKi9cbiAgcHVibGljIGRldGFpbHM6IG9iamVjdDtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyB2YWxpZGF0aW9uIGVycm9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkZXRhaWxzIGVycm9yIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgZGV0YWlscz86IE9iamVjdCwgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVmFsaWRhdGlvbkVycm9yLCBtZXNzYWdlLCA0MDAsIHVybCk7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdW5leHBlY3RlZCBlcnJvci4gVGhyb3dpbmcgdGhpcyBlcnJvciByZXN1bHRzIGluIDUwMCAoSW50ZXJuYWwgRXJyb3IpIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEludGVybmFsRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdW5leHBlY3RlZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihJbnRlcm5hbEVycm9yLCBtZXNzYWdlLCA1MDAsIHVybCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGNvbmZsaWN0IGVycm9yLiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDA5IChDb25mbGljdCkgSFRUUCByZXNwb25zZSBjb2RlLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgY29uZmxpY3QgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoQ29uZmxpY3RFcnJvciwgbWVzc2FnZSwgNDA5LCB1cmwpO1xuICB9XG59XG5cbi8qKlxuICogbWV0YWRhdGEgZm9yIHRvbyBtYW55IHJlcXVlc3RzIGVycm9yXG4gKi9cbmV4cG9ydCB0eXBlIFRvb01hbnlSZXF1ZXN0c0Vycm9yTWV0YWRhdGEgPSB7XG4gIC8qKiB0aHJvdHRsaW5nIHBlcmlvZCBpbiBtaW51dGVzICovXG4gIHBlcmlvZEluTWludXRlczogbnVtYmVyLFxuICAvKiogYXZhaWxhYmxlIHJlcXVlc3RzIGZvciBwZXJpb2RJbk1pbnV0ZXMgKi9cbiAgcmVxdWVzdHNQZXJQZXJpb2RBbGxvd2VkOiBudW1iZXIsXG4gIC8qKiByZWNvbW1lbmRlZCBkYXRlIHRvIHJldHJ5IHJlcXVlc3QgKi9cbiAgcmVjb21tZW5kZWRSZXRyeVRpbWU6IERhdGUsXG4gIC8qKiBlcnJvciB0eXBlICovXG4gIHR5cGU6IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdG9vIG1hbnkgcmVxdWVzdHMgZXJyb3IuIFRocm93aW5nIHRoaXMgZXJyb3IgcmVzdWx0cyBpbiA0MjkgKFRvbyBNYW55IFJlcXVlc3RzKSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29NYW55UmVxdWVzdHNFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgXG4gIC8qKiBlcnJvciBtZXRhZGF0YSAqL1xuICBwdWJsaWMgbWV0YWRhdGE6IFRvb01hbnlSZXF1ZXN0c0Vycm9yTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdG9vIG1hbnkgcmVxdWVzdHMgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtUb29NYW55UmVxdWVzdHNFcnJvck1ldGFkYXRhfSBtZXRhZGF0YSBlcnJvciBtZXRhZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBtZXRhZGF0YTogVG9vTWFueVJlcXVlc3RzRXJyb3JNZXRhZGF0YSwgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVG9vTWFueVJlcXVlc3RzRXJyb3IsIG1lc3NhZ2UsIDQyOSwgdXJsKTtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJBcGlFcnJvciIsIkNvbmZsaWN0RXJyb3IiLCJGb3JiaWRkZW5FcnJvciIsIkludGVybmFsRXJyb3IiLCJOb3RGb3VuZEVycm9yIiwiVG9vTWFueVJlcXVlc3RzRXJyb3IiLCJVbmF1dGhvcml6ZWRFcnJvciIsIlZhbGlkYXRpb25FcnJvciIsImlzTm9kZSIsInByb2Nlc3MiLCJyZWxlYXNlIiwibmFtZSIsIkVycm9yIiwiY29kZSIsIl9jb2RlIiwiYXJndW1lbnRzIiwiYXJncyIsIl9hcmdzIiwiY29uc3RydWN0b3IiLCJjbGF6eiIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJ1cmwiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImRldGFpbHMiLCJtZXRhZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBV2FBLFFBQVE7ZUFBUkE7O0lBK0lBQyxhQUFhO2VBQWJBOztJQWpFQUMsY0FBYztlQUFkQTs7SUFrREFDLGFBQWE7ZUFBYkE7O0lBakVBQyxhQUFhO2VBQWJBOztJQTRHQUMsb0JBQW9CO2VBQXBCQTs7SUE5RUFDLGlCQUFpQjtlQUFqQkE7O0lBZUFDLGVBQWU7ZUFBZkE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFySGI7O0NBRUMsR0FFRCxNQUFNQyxTQUFTLE9BQU9DLFlBQVksZUFBZUEsUUFBUUMsT0FBTyxJQUFJRCxRQUFRQyxPQUFPLENBQUNDLElBQUksS0FBSztBQUt0RixJQUFBLEFBQU1YLFdBQU4sTUFBTUEsaUJBQWlCWTtJQTJCNUI7OztHQUdDLEdBQ0QsSUFBSUMsS0FBS0EsSUFBWSxFQUFFO1FBQ3JCLElBQUksQ0FBQ0MsS0FBSyxHQUFHRDtJQUNmO0lBRUE7OztHQUdDLEdBQ0QsSUFBSUEsT0FBZTtRQUNqQixPQUFPLElBQUksQ0FBQ0MsS0FBSztJQUNuQjtJQUVBOzs7R0FHQyxHQUNELElBQUlDLFVBQVVDLElBQW1CLEVBQUU7UUFDakMsSUFBSSxDQUFDQyxLQUFLLEdBQUdEO0lBQ2Y7SUFFQTs7O0dBR0MsR0FDRCxJQUFJRCxZQUEyQjtRQUM3QixPQUFPLElBQUksQ0FBQ0UsS0FBSztJQUNuQjtJQWhEQTs7Ozs7O0dBTUMsR0FDREMsWUFBWUMsS0FBZSxFQUFFQyxPQUFlLEVBQUVDLE1BQWMsRUFBRUMsR0FBWSxDQUFFO1FBQzFFLEtBQUssQ0FBQ0EsTUFBTUYsVUFBVSxvQkFBb0JFLE1BQU1GO1FBZmxELHFCQUFxQixHQUNyQix1QkFBT0MsVUFBUCxLQUFBO1FBQ0Esb0JBQW9CLEdBQ3BCLHVCQUFPQyxPQUFQLEtBQUE7UUFDQSx1QkFBUVIsU0FBUixLQUFBO1FBQ0EsdUJBQVFHLFNBQVIsS0FBQTtRQVdFLElBQUksQ0FBQ04sSUFBSSxHQUFHUSxNQUFNUixJQUFJO1FBQ3RCLElBQUksQ0FBQ1UsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsR0FBRyxHQUFHQTtRQUVYLElBQUlkLFVBQVVJLE1BQU1XLGlCQUFpQixFQUFFO1lBQ3JDWCxNQUFNVyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUVKO1FBQ2hDO0lBQ0Y7QUFpQ0Y7QUFLTyxJQUFBLEFBQU1mLGdCQUFOLE1BQU1BLHNCQUFzQko7SUFFakM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDbEIsZUFBZWdCLFNBQVMsS0FBS0U7SUFDckM7QUFDRjtBQUtPLElBQUEsQUFBTXBCLGlCQUFOLE1BQU1BLHVCQUF1QkY7SUFFbEM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDcEIsZ0JBQWdCa0IsU0FBUyxLQUFLRTtJQUN0QztBQUNGO0FBS08sSUFBQSxBQUFNaEIsb0JBQU4sTUFBTUEsMEJBQTBCTjtJQUVyQzs7OztHQUlDLEdBQ0RrQixZQUFZRSxPQUFlLEVBQUVFLEdBQVksQ0FBRTtRQUN6QyxLQUFLLENBQUNoQixtQkFBbUJjLFNBQVMsS0FBS0U7SUFDekM7QUFDRjtBQUtPLElBQUEsQUFBTWYsa0JBQU4sTUFBTUEsd0JBQXdCUDtJQUtuQzs7Ozs7R0FLQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFSSxPQUFnQixFQUFFRixHQUFZLENBQUU7UUFDM0QsS0FBSyxDQUFDZixpQkFBaUJhLFNBQVMsS0FBS0U7UUFWdkMsNkJBQTZCLEdBQzdCLHVCQUFPRSxXQUFQLEtBQUE7UUFVRSxJQUFJLENBQUNBLE9BQU8sR0FBR0E7SUFDakI7QUFDRjtBQUtPLElBQUEsQUFBTXJCLGdCQUFOLE1BQU1BLHNCQUFzQkg7SUFFakM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDbkIsZUFBZWlCLFNBQVMsS0FBS0U7SUFDckM7QUFDRjtBQUtPLElBQUEsQUFBTXJCLGdCQUFOLE1BQU1BLHNCQUFzQkQ7SUFDakM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDckIsZUFBZW1CLFNBQVMsS0FBS0U7SUFDckM7QUFDRjtBQW1CTyxJQUFBLEFBQU1qQix1QkFBTixNQUFNQSw2QkFBNkJMO0lBS3hDOzs7O0dBSUMsR0FDRGtCLFlBQVlFLE9BQWUsRUFBRUssUUFBc0MsRUFBRUgsR0FBWSxDQUFFO1FBQ2pGLEtBQUssQ0FBQ2pCLHNCQUFzQmUsU0FBUyxLQUFLRTtRQVQ1QyxtQkFBbUIsR0FDbkIsdUJBQU9HLFlBQVAsS0FBQTtRQVNFLElBQUksQ0FBQ0EsUUFBUSxHQUFHQTtJQUNsQjtBQUNGIn0=