UNPKG

@selfage/http_error

Version:
239 lines 33.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpError = exports.StatusCode = void 0; exports.isClientError = isClientError; exports.isClientErrorCode = isClientErrorCode; exports.isServerError = isServerError; exports.isServerErrorCode = isServerErrorCode; exports.newBadRequestError = newBadRequestError; exports.newUnauthorizedError = newUnauthorizedError; exports.newPaymentRequiredError = newPaymentRequiredError; exports.newForbiddenError = newForbiddenError; exports.newNotFoundError = newNotFoundError; exports.newMethodNotAllowedError = newMethodNotAllowedError; exports.newNotAcceptableError = newNotAcceptableError; exports.newProxyAuthenticationRequiredError = newProxyAuthenticationRequiredError; exports.newRequestTimeoutRequiredError = newRequestTimeoutRequiredError; exports.newConflictError = newConflictError; exports.newGoneError = newGoneError; exports.newLengthRequiredError = newLengthRequiredError; exports.newPreconditionFailedError = newPreconditionFailedError; exports.newPayloadTooLargeError = newPayloadTooLargeError; exports.newURITooLongError = newURITooLongError; exports.newUnsupportedMediaTypeError = newUnsupportedMediaTypeError; exports.newRangeNotSatisfiableError = newRangeNotSatisfiableError; exports.newExpectationFailedError = newExpectationFailedError; exports.newImATeapotError = newImATeapotError; exports.newMisdirectedRequestError = newMisdirectedRequestError; exports.newUnprocessableEntityError = newUnprocessableEntityError; exports.newLockedError = newLockedError; exports.newFailedDependencyError = newFailedDependencyError; exports.newUnorderedCollectionError = newUnorderedCollectionError; exports.newUpgradeRequiredError = newUpgradeRequiredError; exports.newPreconditionRequiredError = newPreconditionRequiredError; exports.newTooManyRequestsError = newTooManyRequestsError; exports.newRequestHeaderFieldsTooLargeError = newRequestHeaderFieldsTooLargeError; exports.newUnavailableForLegalReasonsError = newUnavailableForLegalReasonsError; exports.newInternalServerErrorError = newInternalServerErrorError; exports.newNotImplementedError = newNotImplementedError; exports.newBadGatewayError = newBadGatewayError; exports.newServiceUnavailableError = newServiceUnavailableError; exports.newGatewayTimeoutError = newGatewayTimeoutError; exports.newHTTPVersionNotSupportedError = newHTTPVersionNotSupportedError; exports.newVariantAlsoNegotiatesError = newVariantAlsoNegotiatesError; exports.newInsufficientStorageError = newInsufficientStorageError; exports.newLoopDetectedError = newLoopDetectedError; exports.newBandwidthLimitExceededError = newBandwidthLimitExceededError; exports.newNotExtendedError = newNotExtendedError; exports.newNetworkAuthenticationRequiredError = newNetworkAuthenticationRequiredError; const nested_error_1 = require("@selfage/nested_error"); var StatusCode; (function (StatusCode) { StatusCode[StatusCode["BadRequest"] = 400] = "BadRequest"; StatusCode[StatusCode["Unauthorized"] = 401] = "Unauthorized"; StatusCode[StatusCode["PaymentRequired"] = 402] = "PaymentRequired"; StatusCode[StatusCode["Forbidden"] = 403] = "Forbidden"; StatusCode[StatusCode["NotFound"] = 404] = "NotFound"; StatusCode[StatusCode["MethodNotAllowed"] = 405] = "MethodNotAllowed"; StatusCode[StatusCode["NotAcceptable"] = 406] = "NotAcceptable"; StatusCode[StatusCode["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; StatusCode[StatusCode["RequestTimeout"] = 408] = "RequestTimeout"; StatusCode[StatusCode["Conflict"] = 409] = "Conflict"; StatusCode[StatusCode["Gone"] = 410] = "Gone"; StatusCode[StatusCode["LengthRequired"] = 411] = "LengthRequired"; StatusCode[StatusCode["PreconditionFailed"] = 412] = "PreconditionFailed"; StatusCode[StatusCode["PayloadTooLarge"] = 413] = "PayloadTooLarge"; StatusCode[StatusCode["URITooLong"] = 414] = "URITooLong"; StatusCode[StatusCode["UnsupportedMediaType"] = 415] = "UnsupportedMediaType"; StatusCode[StatusCode["RangeNotSatisfiable"] = 416] = "RangeNotSatisfiable"; StatusCode[StatusCode["ExpectationFailed"] = 417] = "ExpectationFailed"; StatusCode[StatusCode["ImATeapot"] = 418] = "ImATeapot"; StatusCode[StatusCode["MisdirectedRequest"] = 421] = "MisdirectedRequest"; StatusCode[StatusCode["UnprocessableEntity"] = 422] = "UnprocessableEntity"; StatusCode[StatusCode["Locked"] = 423] = "Locked"; StatusCode[StatusCode["FailedDependency"] = 424] = "FailedDependency"; StatusCode[StatusCode["UnorderedCollection"] = 425] = "UnorderedCollection"; StatusCode[StatusCode["UpgradeRequired"] = 426] = "UpgradeRequired"; StatusCode[StatusCode["PreconditionRequired"] = 428] = "PreconditionRequired"; StatusCode[StatusCode["TooManyRequests"] = 429] = "TooManyRequests"; StatusCode[StatusCode["RequestHeaderFieldsTooLarge"] = 431] = "RequestHeaderFieldsTooLarge"; StatusCode[StatusCode["UnavailableForLegalReasons"] = 451] = "UnavailableForLegalReasons"; StatusCode[StatusCode["InternalServerError"] = 500] = "InternalServerError"; StatusCode[StatusCode["NotImplemented"] = 501] = "NotImplemented"; StatusCode[StatusCode["BadGateway"] = 502] = "BadGateway"; StatusCode[StatusCode["ServiceUnavailable"] = 503] = "ServiceUnavailable"; StatusCode[StatusCode["GatewayTimeout"] = 504] = "GatewayTimeout"; StatusCode[StatusCode["HTTPVersionNotSupported"] = 505] = "HTTPVersionNotSupported"; StatusCode[StatusCode["VariantAlsoNegotiates"] = 506] = "VariantAlsoNegotiates"; StatusCode[StatusCode["InsufficientStorage"] = 507] = "InsufficientStorage"; StatusCode[StatusCode["LoopDetected"] = 508] = "LoopDetected"; StatusCode[StatusCode["BandwidthLimitExceeded"] = 509] = "BandwidthLimitExceeded"; StatusCode[StatusCode["NotExtended"] = 510] = "NotExtended"; StatusCode[StatusCode["NetworkAuthenticationRequired"] = 511] = "NetworkAuthenticationRequired"; })(StatusCode || (exports.StatusCode = StatusCode = {})); class HttpError extends nested_error_1.NestedError { constructor(statusCode, message, cause) { super("HttpError", message, cause); this.statusCode = statusCode; this.cause = cause; this.status = this.statusCode; this.stack = statusCode + " " + this.stack; } } exports.HttpError = HttpError; function isClientError(httpError) { return isClientErrorCode(httpError.statusCode); } function isClientErrorCode(code) { return code < 500; } function isServerError(httpError) { return isServerErrorCode(httpError.statusCode); } function isServerErrorCode(code) { return code >= 500; } function newBadRequestError(message, cause) { return new HttpError(StatusCode.BadRequest, message, cause); } function newUnauthorizedError(message, cause) { return new HttpError(StatusCode.Unauthorized, message, cause); } function newPaymentRequiredError(message, cause) { return new HttpError(StatusCode.PaymentRequired, message, cause); } function newForbiddenError(message, cause) { return new HttpError(StatusCode.Forbidden, message, cause); } function newNotFoundError(message, cause) { return new HttpError(StatusCode.NotFound, message, cause); } function newMethodNotAllowedError(message, cause) { return new HttpError(StatusCode.MethodNotAllowed, message, cause); } function newNotAcceptableError(message, cause) { return new HttpError(StatusCode.NotAcceptable, message, cause); } function newProxyAuthenticationRequiredError(message, cause) { return new HttpError(StatusCode.ProxyAuthenticationRequired, message, cause); } function newRequestTimeoutRequiredError(message, cause) { return new HttpError(StatusCode.RequestTimeout, message, cause); } function newConflictError(message, cause) { return new HttpError(StatusCode.Conflict, message, cause); } function newGoneError(message, cause) { return new HttpError(StatusCode.Gone, message, cause); } function newLengthRequiredError(message, cause) { return new HttpError(StatusCode.LengthRequired, message, cause); } function newPreconditionFailedError(message, cause) { return new HttpError(StatusCode.PreconditionFailed, message, cause); } function newPayloadTooLargeError(message, cause) { return new HttpError(StatusCode.PayloadTooLarge, message, cause); } function newURITooLongError(message, cause) { return new HttpError(StatusCode.URITooLong, message, cause); } function newUnsupportedMediaTypeError(message, cause) { return new HttpError(StatusCode.UnsupportedMediaType, message, cause); } function newRangeNotSatisfiableError(message, cause) { return new HttpError(StatusCode.RangeNotSatisfiable, message, cause); } function newExpectationFailedError(message, cause) { return new HttpError(StatusCode.ExpectationFailed, message, cause); } function newImATeapotError(message, cause) { return new HttpError(StatusCode.ImATeapot, message, cause); } function newMisdirectedRequestError(message, cause) { return new HttpError(StatusCode.MisdirectedRequest, message, cause); } function newUnprocessableEntityError(message, cause) { return new HttpError(StatusCode.UnprocessableEntity, message, cause); } function newLockedError(message, cause) { return new HttpError(StatusCode.Locked, message, cause); } function newFailedDependencyError(message, cause) { return new HttpError(StatusCode.FailedDependency, message, cause); } function newUnorderedCollectionError(message, cause) { return new HttpError(StatusCode.UnorderedCollection, message, cause); } function newUpgradeRequiredError(message, cause) { return new HttpError(StatusCode.UpgradeRequired, message, cause); } function newPreconditionRequiredError(message, cause) { return new HttpError(StatusCode.PreconditionRequired, message, cause); } function newTooManyRequestsError(message, cause) { return new HttpError(StatusCode.TooManyRequests, message, cause); } function newRequestHeaderFieldsTooLargeError(message, cause) { return new HttpError(StatusCode.RequestHeaderFieldsTooLarge, message, cause); } function newUnavailableForLegalReasonsError(message, cause) { return new HttpError(StatusCode.UnavailableForLegalReasons, message, cause); } function newInternalServerErrorError(message, cause) { return new HttpError(StatusCode.InternalServerError, message, cause); } function newNotImplementedError(message, cause) { return new HttpError(StatusCode.NotImplemented, message, cause); } function newBadGatewayError(message, cause) { return new HttpError(StatusCode.BadGateway, message, cause); } function newServiceUnavailableError(message, cause) { return new HttpError(StatusCode.ServiceUnavailable, message, cause); } function newGatewayTimeoutError(message, cause) { return new HttpError(StatusCode.GatewayTimeout, message, cause); } function newHTTPVersionNotSupportedError(message, cause) { return new HttpError(StatusCode.HTTPVersionNotSupported, message, cause); } function newVariantAlsoNegotiatesError(message, cause) { return new HttpError(StatusCode.VariantAlsoNegotiates, message, cause); } function newInsufficientStorageError(message, cause) { return new HttpError(StatusCode.InsufficientStorage, message, cause); } function newLoopDetectedError(message, cause) { return new HttpError(StatusCode.LoopDetected, message, cause); } function newBandwidthLimitExceededError(message, cause) { return new HttpError(StatusCode.BandwidthLimitExceeded, message, cause); } function newNotExtendedError(message, cause) { return new HttpError(StatusCode.NotExtended, message, cause); } function newNetworkAuthenticationRequiredError(message, cause) { return new HttpError(StatusCode.NetworkAuthenticationRequired, message, cause); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1REEsc0NBRUM7QUFFRCw4Q0FFQztBQUVELHNDQUVDO0FBRUQsOENBRUM7QUFFRCxnREFFQztBQUVELG9EQUVDO0FBRUQsMERBS0M7QUFFRCw4Q0FFQztBQUVELDRDQUVDO0FBRUQsNERBS0M7QUFFRCxzREFFQztBQUVELGtGQUtDO0FBRUQsd0VBS0M7QUFFRCw0Q0FFQztBQUVELG9DQUVDO0FBRUQsd0RBS0M7QUFFRCxnRUFLQztBQUVELDBEQUtDO0FBRUQsZ0RBRUM7QUFFRCxvRUFLQztBQUVELGtFQUtDO0FBRUQsOERBS0M7QUFFRCw4Q0FFQztBQUVELGdFQUtDO0FBRUQsa0VBS0M7QUFFRCx3Q0FFQztBQUVELDREQUtDO0FBRUQsa0VBS0M7QUFFRCwwREFLQztBQUVELG9FQUtDO0FBRUQsMERBS0M7QUFFRCxrRkFLQztBQUVELGdGQUtDO0FBRUQsa0VBS0M7QUFFRCx3REFLQztBQUVELGdEQUVDO0FBRUQsZ0VBS0M7QUFFRCx3REFLQztBQUVELDBFQUtDO0FBRUQsc0VBS0M7QUFFRCxrRUFLQztBQUVELG9EQUVDO0FBRUQsd0VBS0M7QUFFRCxrREFFQztBQUVELHNGQVNDO0FBalVELHdEQUFvRDtBQUVwRCxJQUFZLFVBMENYO0FBMUNELFdBQVksVUFBVTtJQUNwQix5REFBZ0IsQ0FBQTtJQUNoQiw2REFBa0IsQ0FBQTtJQUNsQixtRUFBcUIsQ0FBQTtJQUNyQix1REFBZSxDQUFBO0lBQ2YscURBQWMsQ0FBQTtJQUNkLHFFQUFzQixDQUFBO0lBQ3RCLCtEQUFtQixDQUFBO0lBQ25CLDJGQUFpQyxDQUFBO0lBQ2pDLGlFQUFvQixDQUFBO0lBQ3BCLHFEQUFjLENBQUE7SUFDZCw2Q0FBVSxDQUFBO0lBQ1YsaUVBQW9CLENBQUE7SUFDcEIseUVBQXdCLENBQUE7SUFDeEIsbUVBQXFCLENBQUE7SUFDckIseURBQWdCLENBQUE7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LENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQ3pDLE9BQWUsRUFDZixLQUFXO0lBRVgsT0FBTyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxPQUFlLEVBQUUsS0FBVztJQUMvRCxPQUFPLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFnQiw4QkFBOEIsQ0FDNUMsT0FBZSxFQUNmLEtBQVc7SUFFWCxPQUFPLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxLQUFXO0lBQzlELE9BQU8sSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQWdCLHFDQUFxQyxDQUNuRCxPQUFlLEVBQ2YsS0FBVztJQUVYLE9BQU8sSUFBSSxTQUFTLENBQ2xCLFVBQVUsQ0FBQyw2QkFBNkIsRUFDeEMsT0FBTyxFQUNQLEtBQUssQ0FDTixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5lc3RlZEVycm9yIH0gZnJvbSBcIkBzZWxmYWdlL25lc3RlZF9lcnJvclwiO1xyXG5cclxuZXhwb3J0IGVudW0gU3RhdHVzQ29kZSB7XHJcbiAgQmFkUmVxdWVzdCA9IDQwMCxcclxuICBVbmF1dGhvcml6ZWQgPSA0MDEsXHJcbiAgUGF5bWVudFJlcXVpcmVkID0gNDAyLFxyXG4gIEZvcmJpZGRlbiA9IDQwMyxcclxuICBOb3RGb3VuZCA9IDQwNCxcclxuICBNZXRob2ROb3RBbGxvd2VkID0gNDA1LFxyXG4gIE5vdEFjY2VwdGFibGUgPSA0MDYsXHJcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNDA3LFxyXG4gIFJlcXVlc3RUaW1lb3V0ID0gNDA4LFxyXG4gIENvbmZsaWN0ID0gNDA5LFxyXG4gIEdvbmUgPSA0MTAsXHJcbiAgTGVuZ3RoUmVxdWlyZWQgPSA0MTEsXHJcbiAgUHJlY29uZGl0aW9uRmFpbGVkID0gNDEyLFxyXG4gIFBheWxvYWRUb29MYXJnZSA9IDQxMyxcclxuICBVUklUb29Mb25nID0gNDE0LFxyXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlID0gNDE1LFxyXG4gIFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTYsXHJcbiAgRXhwZWN0YXRpb25GYWlsZWQgPSA0MTcsXHJcbiAgSW1BVGVhcG90ID0gNDE4LFxyXG4gIE1pc2RpcmVjdGVkUmVxdWVzdCA9IDQyMSxcclxuICBVbnByb2Nlc3NhYmxlRW50aXR5ID0gNDIyLFxyXG4gIExvY2tlZCA9IDQyMyxcclxuICBGYWlsZWREZXBlbmRlbmN5ID0gNDI0LFxyXG4gIFVub3JkZXJlZENvbGxlY3Rpb24gPSA0MjUsXHJcbiAgVXBncmFkZVJlcXVpcmVkID0gNDI2LFxyXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkID0gNDI4LFxyXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcclxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UgPSA0MzEsXHJcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA0NTEsXHJcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwMCxcclxuICBOb3RJbXBsZW1lbnRlZCA9IDUwMSxcclxuICBCYWRHYXRld2F5ID0gNTAyLFxyXG4gIFNlcnZpY2VVbmF2YWlsYWJsZSA9IDUwMyxcclxuICBHYXRld2F5VGltZW91dCA9IDUwNCxcclxuICBIVFRQVmVyc2lvbk5vdFN1cHBvcnRlZCA9IDUwNSxcclxuICBWYXJpYW50QWxzb05lZ290aWF0ZXMgPSA1MDYsXHJcbiAgSW5zdWZmaWNpZW50U3RvcmFnZSA9IDUwNyxcclxuICBMb29wRGV0ZWN0ZWQgPSA1MDgsXHJcbiAgQmFuZHdpZHRoTGltaXRFeGNlZWRlZCA9IDUwOSxcclxuICBOb3RFeHRlbmRlZCA9IDUxMCxcclxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCA9IDUxMSxcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvciBleHRlbmRzIE5lc3RlZEVycm9yIHtcclxuICBwdWJsaWMgc3RhdHVzID0gdGhpcy5zdGF0dXNDb2RlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBjYXVzZT86IGFueSkge1xyXG4gICAgc3VwZXIoXCJIdHRwRXJyb3JcIiwgbWVzc2FnZSwgY2F1c2UpO1xyXG4gICAgdGhpcy5zdGFjayA9IHN0YXR1c0NvZGUgKyBcIiBcIiArIHRoaXMuc3RhY2s7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNDbGllbnRFcnJvcihodHRwRXJyb3I6IEh0dHBFcnJvcik6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBpc0NsaWVudEVycm9yQ29kZShodHRwRXJyb3Iuc3RhdHVzQ29kZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0NsaWVudEVycm9yQ29kZShjb2RlOiBTdGF0dXNDb2RlKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGNvZGUgPCA1MDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZlckVycm9yKGh0dHBFcnJvcjogSHR0cEVycm9yKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGlzU2VydmVyRXJyb3JDb2RlKGh0dHBFcnJvci5zdGF0dXNDb2RlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmVyRXJyb3JDb2RlKGNvZGU6IFN0YXR1c0NvZGUpOiBib29sZWFuIHtcclxuICByZXR1cm4gY29kZSA+PSA1MDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdCYWRSZXF1ZXN0RXJyb3IobWVzc2FnZTogc3RyaW5nLCBjYXVzZT86IGFueSk6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5CYWRSZXF1ZXN0LCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdVbmF1dGhvcml6ZWRFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNhdXNlPzogYW55KTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCwgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3UGF5bWVudFJlcXVpcmVkRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5QYXltZW50UmVxdWlyZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld0ZvcmJpZGRlbkVycm9yKG1lc3NhZ2U6IHN0cmluZywgY2F1c2U/OiBhbnkpOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuRm9yYmlkZGVuLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdOb3RGb3VuZEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY2F1c2U/OiBhbnkpOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuTm90Rm91bmQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld01ldGhvZE5vdEFsbG93ZWRFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLk1ldGhvZE5vdEFsbG93ZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld05vdEFjY2VwdGFibGVFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNhdXNlPzogYW55KTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLk5vdEFjY2VwdGFibGUsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1Byb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdSZXF1ZXN0VGltZW91dFJlcXVpcmVkRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dCwgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3Q29uZmxpY3RFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNhdXNlPzogYW55KTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLkNvbmZsaWN0LCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdHb25lRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjYXVzZT86IGFueSk6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5Hb25lLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdMZW5ndGhSZXF1aXJlZEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuTGVuZ3RoUmVxdWlyZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1ByZWNvbmRpdGlvbkZhaWxlZEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uRmFpbGVkLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdQYXlsb2FkVG9vTGFyZ2VFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLlBheWxvYWRUb29MYXJnZSwgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VVJJVG9vTG9uZ0Vycm9yKG1lc3NhZ2U6IHN0cmluZywgY2F1c2U/OiBhbnkpOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuVVJJVG9vTG9uZywgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VW5zdXBwb3J0ZWRNZWRpYVR5cGVFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLlVuc3VwcG9ydGVkTWVkaWFUeXBlLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdSYW5nZU5vdFNhdGlzZmlhYmxlRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5SYW5nZU5vdFNhdGlzZmlhYmxlLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdFeHBlY3RhdGlvbkZhaWxlZEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuRXhwZWN0YXRpb25GYWlsZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld0ltQVRlYXBvdEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY2F1c2U/OiBhbnkpOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuSW1BVGVhcG90LCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdNaXNkaXJlY3RlZFJlcXVlc3RFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLk1pc2RpcmVjdGVkUmVxdWVzdCwgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VW5wcm9jZXNzYWJsZUVudGl0eUVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuVW5wcm9jZXNzYWJsZUVudGl0eSwgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3TG9ja2VkRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjYXVzZT86IGFueSk6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5Mb2NrZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld0ZhaWxlZERlcGVuZGVuY3lFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLkZhaWxlZERlcGVuZGVuY3ksIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1Vub3JkZXJlZENvbGxlY3Rpb25FcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLlVub3JkZXJlZENvbGxlY3Rpb24sIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1VwZ3JhZGVSZXF1aXJlZEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuVXBncmFkZVJlcXVpcmVkLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdQcmVjb25kaXRpb25SZXF1aXJlZEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uUmVxdWlyZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1Rvb01hbnlSZXF1ZXN0c0Vycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuVG9vTWFueVJlcXVlc3RzLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2VFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSwgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnNFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdJbnRlcm5hbFNlcnZlckVycm9yRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5JbnRlcm5hbFNlcnZlckVycm9yLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdOb3RJbXBsZW1lbnRlZEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuTm90SW1wbGVtZW50ZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld0JhZEdhdGV3YXlFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNhdXNlPzogYW55KTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLkJhZEdhdGV3YXksIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1NlcnZpY2VVbmF2YWlsYWJsZUVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuU2VydmljZVVuYXZhaWxhYmxlLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdHYXRld2F5VGltZW91dEVycm9yKFxyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBjYXVzZT86IGFueVxyXG4pOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuR2F0ZXdheVRpbWVvdXQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld0hUVFBWZXJzaW9uTm90U3VwcG9ydGVkRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5IVFRQVmVyc2lvbk5vdFN1cHBvcnRlZCwgbWVzc2FnZSwgY2F1c2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VmFyaWFudEFsc29OZWdvdGlhdGVzRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5WYXJpYW50QWxzb05lZ290aWF0ZXMsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld0luc3VmZmljaWVudFN0b3JhZ2VFcnJvcihcclxuICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgY2F1c2U/OiBhbnlcclxuKTogSHR0cEVycm9yIHtcclxuICByZXR1cm4gbmV3IEh0dHBFcnJvcihTdGF0dXNDb2RlLkluc3VmZmljaWVudFN0b3JhZ2UsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld0xvb3BEZXRlY3RlZEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY2F1c2U/OiBhbnkpOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuTG9vcERldGVjdGVkLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdCYW5kd2lkdGhMaW1pdEV4Y2VlZGVkRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoU3RhdHVzQ29kZS5CYW5kd2lkdGhMaW1pdEV4Y2VlZGVkLCBtZXNzYWdlLCBjYXVzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXdOb3RFeHRlbmRlZEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY2F1c2U/OiBhbnkpOiBIdHRwRXJyb3Ige1xyXG4gIHJldHVybiBuZXcgSHR0cEVycm9yKFN0YXR1c0NvZGUuTm90RXh0ZW5kZWQsIG1lc3NhZ2UsIGNhdXNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld05ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkRXJyb3IoXHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGNhdXNlPzogYW55XHJcbik6IEh0dHBFcnJvciB7XHJcbiAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoXHJcbiAgICBTdGF0dXNDb2RlLk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkLFxyXG4gICAgbWVzc2FnZSxcclxuICAgIGNhdXNlXHJcbiAgKTtcclxufVxyXG4iXX0=