UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

133 lines (131 loc) 16.6 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/surreal/inline/rpc.ts var rpc_exports = {}; __export(rpc_exports, { default: () => rpc_default }); module.exports = __toCommonJS(rpc_exports); var import_engine = require("../../engine/index.cjs"); var import_errors = require("../../errors/index.cjs"); var import_json_formatter = __toESM(require("../../formatters/json/index.cjs"), 1); var import_utils = require("../../utils/index.cjs"); async function rpc(endpoint, method, options = {}) { const { fetch = globalThis.fetch, token, signal = (0, import_utils.getTimeoutSignal)(5e3), database: db, formatter: fmt = new import_json_formatter.default(), namespace: ns, transformEndpoint } = options; let { params = [] } = options; (0, import_utils.throwIfAborted)(signal); if (ns == null && db != null) { throw new import_errors.MissingNamespaceError(db); } if (method === "query") { params = (0, import_engine.processQueryRequest)({ method, params }).params; } const body = fmt.encodeSync({ method, params }); if (typeof body !== "string" && !(body instanceof Uint8Array)) { throw new import_errors.SurrealTypeError(["String", "Uint8Array"], body); } const headers = { Accept: fmt.contentType, "Content-Type": fmt.contentType }; if (ns != null) { headers["Surreal-NS"] = ns; } if (db != null) { headers["Surreal-DB"] = db; } if (token) { headers["Authorization"] = `Bearer ${token}`; } endpoint = (0, import_engine.processEndpoint)(endpoint, { transformEndpoint }).href; const resp = await fetch(endpoint, { body, method: "POST", signal, headers }); const cause = { request: { method, // TODO(tai-kun): params には機微情報が含まれている可能性があるので、method のみにしておく? params }, endpoint, database: db, namespace: ns }; if (!(resp instanceof Response) || resp.body === null) { throw new import_errors.ServerResponseError( "Expected `Response` contains a non-null body.", { cause: Object.assign({ response: resp }, cause) } ); } if (resp.status !== 200) { const message = await resp.text(); throw new import_errors.ServerResponseError(message, { cause: Object.assign({ response: resp }, cause) }); } let rpcResp; if (fmt.decodeStream && fmt.decodingStrategy) { const length = Number(resp.headers.get("content-length")); if (length === length && length > 0 && fmt.decodingStrategy({ name: "fetch", length }) === "stream") { rpcResp = await fmt.decodeStream(resp.body, signal); } else { rpcResp = fmt.decodeSync(await resp.arrayBuffer()); } } else { rpcResp = fmt.decodeSync(await resp.arrayBuffer()); } if (!(0, import_utils.isRpcResponse)(rpcResp) || "id" in rpcResp) { throw new import_errors.ServerResponseError("Expected id-less rpc response.", { cause: Object.assign({ response: rpcResp }, cause) }); } if ("result" in rpcResp) { return rpcResp.result; } throw new import_errors.RpcResponseError(rpcResp, { cause }); } __name(rpc, "rpc"); var rpc_default = rpc; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N1cnJlYWwvaW5saW5lL3JwYy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtcbiAgcHJvY2Vzc0VuZHBvaW50LFxuICB0eXBlIFByb2Nlc3NFbmRwb2ludE9wdGlvbnMsXG4gIHByb2Nlc3NRdWVyeVJlcXVlc3QsXG59IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZW5naW5lXCI7XG5pbXBvcnQge1xuICBNaXNzaW5nTmFtZXNwYWNlRXJyb3IsXG4gIFJwY1Jlc3BvbnNlRXJyb3IsXG4gIFNlcnZlclJlc3BvbnNlRXJyb3IsXG4gIFN1cnJlYWxUeXBlRXJyb3IsXG59IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IEh0dHBGZXRjaGVyUmVxdWVzdEluaXQgfSBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL2h0dHAtZW5naW5lXCI7XG5pbXBvcnQgSnNvbkZvcm1hdHRlciBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL2pzb24tZm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IEp3dCB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvc3RhbmRhcmQtY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFJwY1BhcmFtcywgUnBjUmVzdWx0TWFwcGluZyB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldFRpbWVvdXRTaWduYWwsXG4gIGlzUnBjUmVzcG9uc2UsXG4gIHRocm93SWZBYm9ydGVkLFxufSBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFVuaW9uVG9JbnRlcnNlY3Rpb24sIFZhbHVlT2YgfSBmcm9tIFwidHlwZS1mZXN0XCI7XG5cbmV4cG9ydCB0eXBlIElubGluZVJwY0ZldGNoZXJSZXF1ZXN0SW5pdCA9IHtcbiAgbWV0aG9kOiBcIlBPU1RcIjtcbiAgaGVhZGVyczoge1xuICAgIFwiQ29udGVudC1UeXBlXCI6IHN0cmluZztcbiAgICBcIlN1cnJlYWwtREJcIj86IHN0cmluZztcbiAgICBcIlN1cnJlYWwtTlNcIj86IHN0cmluZztcbiAgICBBY2NlcHQ6IHN0cmluZztcbiAgICBBdXRob3JpemF0aW9uPzogc3RyaW5nO1xuICB9O1xuICBib2R5OiBzdHJpbmcgfCBVaW50OEFycmF5O1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xufTtcblxuZXhwb3J0IHR5cGUgSW5saW5lUnBjRmV0Y2hlciA9IChcbiAgaW5wdXQ6IHN0cmluZyxcbiAgaW5pdDogSW5saW5lUnBjRmV0Y2hlclJlcXVlc3RJbml0LFxuKSA9PiBSZXNwb25zZSB8IFByb21pc2VMaWtlPFJlc3BvbnNlPjtcblxuZXhwb3J0IHR5cGUgSW5saW5lUnBjT3B0aW9ucyA9IFByb2Nlc3NFbmRwb2ludE9wdGlvbnMgJiB7XG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEZvcm1hdHRlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBkYXRhYmFzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmcgfCBKd3QgfCB1bmRlZmluZWQ7XG5cbiAgcmVhZG9ubHkgZmV0Y2g/OiBJbmxpbmVScGNGZXRjaGVyIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBzaWduYWw/OiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIElubGluZVJwY01ldGhvZCA9XG4gIHwgXCJhdXRoZW50aWNhdGVcIlxuICB8IFwiY3JlYXRlXCJcbiAgfCBcImRlbGV0ZVwiXG4gIHwgXCJpbmZvXCJcbiAgfCBcImluc2VydFwiXG4gIHwgXCJpbnNlcnRfcmVsYXRpb25cIlxuICB8IFwiaW52YWxpZGF0ZVwiXG4gIHwgXCJtZXJnZVwiXG4gIHwgXCJwYXRjaFwiXG4gIHwgXCJwaW5nXCJcbiAgfCBcInF1ZXJ5XCJcbiAgfCBcInJlbGF0ZVwiXG4gIHwgXCJydW5cIlxuICB8IFwiZ3JhcGhxbFwiXG4gIHwgXCJzZWxlY3RcIlxuICB8IFwic2lnbmluXCJcbiAgfCBcInNpZ251cFwiXG4gIHwgXCJ1bnNldFwiXG4gIHwgXCJ1cGRhdGVcIlxuICB8IFwidXBzZXJ0XCJcbiAgfCBcInZlcnNpb25cIjtcblxuYXN5bmMgZnVuY3Rpb24gcnBjKFxuICBlbmRwb2ludDogc3RyaW5nIHwgVVJMLFxuICBtZXRob2Q6IElubGluZVJwY01ldGhvZCxcbiAgb3B0aW9uczpcbiAgICB8IChJbmxpbmVScGNPcHRpb25zICYgeyByZWFkb25seSBwYXJhbXM/OiBhbnkgfSlcbiAgICB8IHVuZGVmaW5lZCA9IHt9LFxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IHtcbiAgICBmZXRjaCA9IGdsb2JhbFRoaXMuZmV0Y2ggc2F0aXNmaWVzIElubGluZVJwY0ZldGNoZXIsXG4gICAgdG9rZW4sXG4gICAgc2lnbmFsID0gZ2V0VGltZW91dFNpZ25hbCg1XzAwMCksXG4gICAgZGF0YWJhc2U6IGRiLFxuICAgIGZvcm1hdHRlcjogZm10ID0gbmV3IEpzb25Gb3JtYXR0ZXIoKSBhcyBuZXZlcixcbiAgICBuYW1lc3BhY2U6IG5zLFxuICAgIHRyYW5zZm9ybUVuZHBvaW50LFxuICB9ID0gb3B0aW9ucztcbiAgbGV0IHtcbiAgICBwYXJhbXMgPSBbXSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgdGhyb3dJZkFib3J0ZWQoc2lnbmFsKTtcblxuICBpZiAobnMgPT0gbnVsbCAmJiBkYiAhPSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IE1pc3NpbmdOYW1lc3BhY2VFcnJvcihkYik7XG4gIH1cblxuICBpZiAobWV0aG9kID09PSBcInF1ZXJ5XCIpIHtcbiAgICBwYXJhbXMgPSBwcm9jZXNzUXVlcnlSZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkucGFyYW1zIGFzIFtcbiAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgIHZhcnM6IHsgW3A6IHN0cmluZ106IHVua25vd24gfSxcbiAgICBdO1xuICB9XG5cbiAgY29uc3QgYm9keTogdW5rbm93biA9IGZtdC5lbmNvZGVTeW5jKHsgbWV0aG9kLCBwYXJhbXMgfSk7XG5cbiAgaWYgKHR5cGVvZiBib2R5ICE9PSBcInN0cmluZ1wiICYmICEoYm9keSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGhyb3cgbmV3IFN1cnJlYWxUeXBlRXJyb3IoW1wiU3RyaW5nXCIsIFwiVWludDhBcnJheVwiXSwgYm9keSk7XG4gIH1cblxuICBjb25zdCBoZWFkZXJzOiBIdHRwRmV0Y2hlclJlcXVlc3RJbml0W1wiaGVhZGVyc1wiXSA9IHtcbiAgICBBY2NlcHQ6IGZtdC5jb250ZW50VHlwZSxcbiAgICBcIkNvbnRlbnQtVHlwZVwiOiBmbXQuY29udGVudFR5cGUsXG4gIH07XG5cbiAgaWYgKG5zICE9IG51bGwpIHtcbiAgICBoZWFkZXJzW1wiU3VycmVhbC1OU1wiXSA9IG5zO1xuICB9XG5cbiAgaWYgKGRiICE9IG51bGwpIHtcbiAgICBoZWFkZXJzW1wiU3VycmVhbC1EQlwiXSA9IGRiO1xuICB9XG5cbiAgaWYgKHRva2VuKSB7XG4gICAgaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgfVxuXG4gIGVuZHBvaW50ID0gcHJvY2Vzc0VuZHBvaW50KGVuZHBvaW50LCB7IHRyYW5zZm9ybUVuZHBvaW50IH0pLmhyZWY7XG4gIGNvbnN0IHJlc3AgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuICAgIGJvZHksXG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBzaWduYWwsXG4gICAgaGVhZGVycyxcbiAgfSk7XG4gIGNvbnN0IGNhdXNlID0ge1xuICAgIHJlcXVlc3Q6IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIC8vIFRPRE8odGFpLWt1bik6IHBhcmFtcyBcdTMwNkJcdTMwNkZcdTZBNUZcdTVGQUVcdTYwQzVcdTU4MzFcdTMwNENcdTU0MkJcdTMwN0VcdTMwOENcdTMwNjZcdTMwNDRcdTMwOEJcdTUzRUZcdTgwRkRcdTYwMjdcdTMwNENcdTMwNDJcdTMwOEJcdTMwNkVcdTMwNjdcdTMwMDFtZXRob2QgXHUzMDZFXHUzMDdGXHUzMDZCXHUzMDU3XHUzMDY2XHUzMDRBXHUzMDRGXHVGRjFGXG4gICAgICBwYXJhbXMsXG4gICAgfSxcbiAgICBlbmRwb2ludCxcbiAgICBkYXRhYmFzZTogZGIsXG4gICAgbmFtZXNwYWNlOiBucyxcbiAgfTtcblxuICBpZiAoIShyZXNwIGluc3RhbmNlb2YgUmVzcG9uc2UpIHx8IHJlc3AuYm9keSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBTZXJ2ZXJSZXNwb25zZUVycm9yKFxuICAgICAgXCJFeHBlY3RlZCBgUmVzcG9uc2VgIGNvbnRhaW5zIGEgbm9uLW51bGwgYm9keS5cIixcbiAgICAgIHtcbiAgICAgICAgY2F1c2U6IE9iamVjdC5hc3NpZ24oeyByZXNwb25zZTogcmVzcCB9LCBjYXVzZSksXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBpZiAocmVzcC5zdGF0dXMgIT09IDIwMCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCByZXNwLnRleHQoKTtcbiAgICB0aHJvdyBuZXcgU2VydmVyUmVzcG9uc2VFcnJvcihtZXNzYWdlLCB7XG4gICAgICBjYXVzZTogT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlOiByZXNwIH0sIGNhdXNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRocm93SWZBYm9ydGVkKHNpZ25hbCk7XG4gIGxldCBycGNSZXNwOiB1bmtub3duO1xuXG4gIGlmIChmbXQuZGVjb2RlU3RyZWFtICYmIGZtdC5kZWNvZGluZ1N0cmF0ZWd5KSB7XG4gICAgY29uc3QgbGVuZ3RoID0gTnVtYmVyKHJlc3AuaGVhZGVycy5nZXQoXCJjb250ZW50LWxlbmd0aFwiKSk7XG5cbiAgICBpZiAoXG4gICAgICBsZW5ndGggPT09IGxlbmd0aFxuICAgICAgJiYgbGVuZ3RoID4gMFxuICAgICAgJiYgZm10LmRlY29kaW5nU3RyYXRlZ3koeyBuYW1lOiBcImZldGNoXCIsIGxlbmd0aCB9KSA9PT0gXCJzdHJlYW1cIlxuICAgICkge1xuICAgICAgcnBjUmVzcCA9IGF3YWl0IGZtdC5kZWNvZGVTdHJlYW0ocmVzcC5ib2R5LCBzaWduYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBycGNSZXNwID0gZm10LmRlY29kZVN5bmMoYXdhaXQgcmVzcC5hcnJheUJ1ZmZlcigpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcnBjUmVzcCA9IGZtdC5kZWNvZGVTeW5jKGF3YWl0IHJlc3AuYXJyYXlCdWZmZXIoKSk7XG4gIH1cblxuICBpZiAoIWlzUnBjUmVzcG9uc2UocnBjUmVzcCkgfHwgXCJpZFwiIGluIHJwY1Jlc3ApIHtcbiAgICB0aHJvdyBuZXcgU2VydmVyUmVzcG9uc2VFcnJvcihcIkV4cGVjdGVkIGlkLWxlc3MgcnBjIHJlc3BvbnNlLlwiLCB7XG4gICAgICBjYXVzZTogT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlOiBycGNSZXNwIH0sIGNhdXNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChcInJlc3VsdFwiIGluIHJwY1Jlc3ApIHtcbiAgICByZXR1cm4gcnBjUmVzcC5yZXN1bHQ7XG4gIH1cblxuICB0aHJvdyBuZXcgUnBjUmVzcG9uc2VFcnJvcihycGNSZXNwLCB7IGNhdXNlIH0pO1xufVxuXG5pbnRlcmZhY2UgUnBjV2l0aFJlcXVpcmVkUGFyYW1zPFRNZXRob2QgZXh0ZW5kcyBJbmxpbmVScGNNZXRob2Q+IHtcbiAgLy8gXHU5MTREXHU1MjE3XHUzMDY4XHUzMEFBXHUzMEQ2XHUzMEI4XHUzMEE3XHUzMEFGXHUzMEM4XHUzMDRDXHU1RjE1XHU2NTcwXHUzMDZFXHU1NDBDXHUzMDU4XHU1ODM0XHU2MjQwXHUzMDZCXHUzMDQyXHUzMDhCXHUzMDY4XHU4OERDXHU1QjhDXHUzMDZCXHU5NkUzXHUzMDQyXHUzMDhBXHUzMDAyXG4gIC8vIDxUIGV4dGVuZHMgUnBjUmVzdWx0TWFwcGluZ1tUTWV0aG9kXT4oXG4gIC8vICAgZW5kcG9pbnQ6IHN0cmluZyB8IFVSTCxcbiAgLy8gICBtZXRob2Q6IFRNZXRob2QsXG4gIC8vICAgcGFyYW1zOiBScGNQYXJhbXM8VE1ldGhvZD4sXG4gIC8vICAgb3B0aW9ucz86IElubGluZVJwY09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIC8vICk6IFByb21pc2U8VD47XG4gIC8qKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICA8VCBleHRlbmRzIFJwY1Jlc3VsdE1hcHBpbmdbVE1ldGhvZF0+KFxuICAgIGVuZHBvaW50OiBzdHJpbmcgfCBVUkwsXG4gICAgbWV0aG9kOiBUTWV0aG9kLFxuICAgIG9wdGlvbnM6IElubGluZVJwY09wdGlvbnMgJiB7IHJlYWRvbmx5IHBhcmFtczogUnBjUGFyYW1zPFRNZXRob2Q+IH0sXG4gICk6IFByb21pc2U8VD47XG59XG5cbmludGVyZmFjZSBScGNXaXRoT3B0aW9uYWxQYXJhbXM8VE1ldGhvZCBleHRlbmRzIElubGluZVJwY01ldGhvZD4ge1xuICAvLyBcdTkxNERcdTUyMTdcdTMwNjhcdTMwQUFcdTMwRDZcdTMwQjhcdTMwQTdcdTMwQUZcdTMwQzhcdTMwNENcdTVGMTVcdTY1NzBcdTMwNkVcdTU0MENcdTMwNThcdTU4MzRcdTYyNDBcdTMwNkJcdTMwNDJcdTMwOEJcdTMwNjhcdTg4RENcdTVCOENcdTMwNkJcdTk2RTNcdTMwNDJcdTMwOEFcdTMwMDJcbiAgLy8gPFQgZXh0ZW5kcyBScGNSZXN1bHRNYXBwaW5nW1RNZXRob2RdPihcbiAgLy8gICBlbmRwb2ludDogc3RyaW5nIHwgVVJMLFxuICAvLyAgIG1ldGhvZDogVE1ldGhvZCxcbiAgLy8gICBwYXJhbXM/OiBScGNQYXJhbXM8VE1ldGhvZD4sXG4gIC8vICAgb3B0aW9ucz86IElubGluZVJwY09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIC8vICk6IFByb21pc2U8VD47XG4gIC8qKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICA8VCBleHRlbmRzIFJwY1Jlc3VsdE1hcHBpbmdbVE1ldGhvZF0+KFxuICAgIGVuZHBvaW50OiBzdHJpbmcgfCBVUkwsXG4gICAgbWV0aG9kOiBUTWV0aG9kLFxuICAgIG9wdGlvbnM/OlxuICAgICAgfCAoSW5saW5lUnBjT3B0aW9ucyAmIHsgcmVhZG9ubHkgcGFyYW1zPzogUnBjUGFyYW1zPFRNZXRob2Q+IH0pXG4gICAgICB8IHVuZGVmaW5lZCxcbiAgKTogUHJvbWlzZTxUPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcnBjIGFzIFVuaW9uVG9JbnRlcnNlY3Rpb248XG4gIFZhbHVlT2Y8XG4gICAge1xuICAgICAgW1RNZXRob2QgaW4gSW5saW5lUnBjTWV0aG9kXTogdW5kZWZpbmVkIGV4dGVuZHMgUnBjUGFyYW1zPFRNZXRob2Q+XG4gICAgICAgID8gUnBjV2l0aE9wdGlvbmFsUGFyYW1zPFRNZXRob2Q+XG4gICAgICAgIDogUnBjV2l0aFJlcXVpcmVkUGFyYW1zPFRNZXRob2Q+O1xuICAgIH1cbiAgPlxuPjtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBSU87QUFDUCxvQkFLTztBQUdQLDRCQUEwQjtBQUcxQixtQkFJTztBQXNEUCxlQUFlLElBQ2IsVUFDQSxRQUNBLFVBRWdCLENBQUMsR0FDQztBQUNsQixRQUFNO0FBQUEsSUFDSixRQUFRLFdBQVc7QUFBQSxJQUNuQjtBQUFBLElBQ0EsYUFBUywrQkFBaUIsR0FBSztBQUFBLElBQy9CLFVBQVU7QUFBQSxJQUNWLFdBQVcsTUFBTSxJQUFJLHNCQUFBQSxRQUFjO0FBQUEsSUFDbkMsV0FBVztBQUFBLElBQ1g7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJO0FBQUEsSUFDRixTQUFTLENBQUM7QUFBQSxFQUNaLElBQUk7QUFFSixtQ0FBZSxNQUFNO0FBRXJCLE1BQUksTUFBTSxRQUFR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