@witnet/ethers
Version:
Wit/Oracle SDK Framework package for Solidity projects
164 lines • 19.2 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ABIs = void 0;
exports.getEvmNetworkAddresses = getEvmNetworkAddresses;
exports.getEvmNetworkByChainId = getEvmNetworkByChainId;
exports.isEvmNetworkMainnet = isEvmNetworkMainnet;
exports.isEvmNetworkSupported = isEvmNetworkSupported;
exports.abiDecodeQueryStatus = abiDecodeQueryStatus;
exports.abiDecodePriceFeedMappingAlgorithm = abiDecodePriceFeedMappingAlgorithm;
exports.abiEncodeDataPushReport = abiEncodeDataPushReport;
exports.abiEncodeDataPushReportMessage = abiEncodeDataPushReportMessage;
exports.abiEncodeDataPushReportDigest = abiEncodeDataPushReportDigest;
exports.abiEncodeWitOracleQueryParams = abiEncodeWitOracleQueryParams;
exports.abiEncodeRadonAsset = abiEncodeRadonAsset;
exports.decodeCborBytes = decodeCborBytes;
const cbor = __importStar(require("cbor"));
const ethers_1 = require("ethers");
const sdk_1 = require("@witnet/sdk");
const witnet_solidity_bridge_1 = __importDefault(require("witnet-solidity-bridge"));
const helpers_1 = require("../bin/helpers");
__exportStar(require("@witnet/sdk/utils"), exports);
exports.ABIs = witnet_solidity_bridge_1.default.ABIs;
function getEvmNetworkAddresses(network) {
return (0, helpers_1.getNetworkAddresses)(network);
}
function getEvmNetworkByChainId(chainId) {
const found = Object.entries(witnet_solidity_bridge_1.default.supportedNetworks()).find(([, config]) => config?.network_id.toString() === chainId.toString());
if (found)
return found[0];
else
return undefined;
}
function isEvmNetworkMainnet(network) {
const found = Object.entries(witnet_solidity_bridge_1.default.supportedNetworks()).find(([key,]) => key === network.toLowerCase());
return found?.[1].mainnet;
}
function isEvmNetworkSupported(network) {
return witnet_solidity_bridge_1.default.supportsNetwork(network);
}
function abiDecodeQueryStatus(status) {
switch (status) {
case 1n: return "Posted";
case 2n: return "Reported";
case 3n: return "Finalized";
case 4n: return "Delayed";
case 5n: return "Expired";
case 6n: return "Disputed";
default: return "Void";
}
}
function abiDecodePriceFeedMappingAlgorithm(algorithm) {
switch (algorithm) {
case 1n: return "Fallback";
case 2n: return "Hottest";
case 3n: return "Product";
default: return "None";
}
}
function _intoDataPushReportSolidity(report) {
return {
drTxHash: `0x${report.hash}`,
queryParams: {
witnesses: report.query?.witnesses || 0,
unitaryReward: report.query?.unitary_reward || 0n,
resultMaxSize: 0,
},
queryRadHash: `0x${report.query?.rad_hash}`,
resultCborBytes: `0x${report.result?.cbor_bytes}`,
resultTimestamp: report.result?.timestamp || 0,
};
}
function abiEncodeDataPushReport(report) {
const internal = _intoDataPushReportSolidity(report);
return [
internal.drTxHash,
internal.queryRadHash,
abiEncodeWitOracleQueryParams(internal.queryParams),
internal.resultTimestamp,
internal.resultCborBytes,
];
}
function abiEncodeDataPushReportMessage(report) {
return ethers_1.AbiCoder.defaultAbiCoder().encode(["bytes32", "bytes32", "(uint16, uint16, uint64)", "uint64", "bytes"], abiEncodeDataPushReport(report));
}
function abiEncodeDataPushReportDigest(report) {
return (0, ethers_1.solidityPackedKeccak256)(["bytes"], [abiEncodeDataPushReportMessage(report)]);
}
function abiEncodeWitOracleQueryParams(queryParams) {
return [
queryParams?.resultMaxSize || 0,
queryParams?.witnesses || 0,
queryParams?.unitaryReward || 0,
];
}
function abiEncodeRadonAsset(asset) {
if (asset instanceof sdk_1.Witnet.Radon.RadonRetrieval) {
return [
asset.method,
asset.url || "",
asset.body || "",
asset?.headers ? Object.entries(asset.headers) : [],
abiEncodeRadonAsset(asset.script) || "0x80",
];
}
else if (asset instanceof sdk_1.Witnet.Radon.types.RadonScript) {
return asset.toBytecode();
}
else if (asset instanceof sdk_1.Witnet.Radon.reducers.Class) {
return [
asset.opcode,
asset.filters?.map(filter => abiEncodeRadonAsset(filter)) || [],
];
}
else if (asset instanceof sdk_1.Witnet.Radon.filters.Class) {
return [
asset.opcode,
`0x${asset.args ? cbor.encode(asset.args).toString("hex") : ""}`
];
}
else {
throw new TypeError(`Not a Radon asset: ${asset}`);
}
}
function decodeCborBytes(_cborBytes) { }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSx3REFFQztBQUVELHdEQUlDO0FBRUQsa0RBR0M7QUFFRCxzREFFQztBQUVELG9EQVVDO0FBRUQsZ0ZBT0M7QUEwQ0QsMERBU0M7QUFFRCx3RUFLQztBQUVELHNFQUtDO0FBRUQsc0VBTUM7QUFDRCxrREE0QkM7QUFFRCwwQ0FBc0U7QUFoS3RFLDJDQUE0QjtBQUM1QixtQ0FBMEQ7QUFDMUQscUNBQW9DO0FBRXBDLG9GQUF3QztBQUV4Qyw0Q0FHdUI7QUFLdkIsb0RBQWlDO0FBRXBCLFFBQUEsSUFBSSxHQUFHLGdDQUFHLENBQUMsSUFBSSxDQUFDO0FBRTdCLFNBQWdCLHNCQUFzQixDQUFDLE9BQWU7SUFDbEQsT0FBTyxJQUFBLDZCQUFvQixFQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3hDLENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxPQUFlO0lBQ2xELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0NBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBZ0IsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUMvSSxJQUFJLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFDdEIsT0FBTyxTQUFTLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLE9BQWU7SUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQ0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDckcsT0FBUSxLQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7QUFDdEMsQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLE9BQWU7SUFDakQsT0FBTyxnQ0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUN2QyxDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsTUFBYztJQUMvQyxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2IsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQztRQUN6QixLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO1FBQzNCLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUM7UUFDNUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQztRQUMxQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDO1FBQzFCLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUM7UUFDM0IsT0FBTyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUM7SUFDM0IsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixrQ0FBa0MsQ0FBQyxTQUFpQjtJQUNoRSxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUM7UUFDM0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQztRQUMxQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDO0lBQzNCLENBQUM7QUFDTCxDQUFDO0FBNEJELFNBQVMsMkJBQTJCLENBQUMsTUFBc0I7SUFDdkQsT0FBTztRQUNILFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDNUIsV0FBVyxFQUFFO1lBQ1QsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUM7WUFDdkMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsY0FBYyxJQUFJLEVBQUU7WUFDakQsYUFBYSxFQUFFLENBQUM7U0FDbkI7UUFDRCxZQUFZLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtRQUMzQyxlQUFlLEVBQUUsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRTtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksQ0FBQztLQUNqRCxDQUFBO0FBQ0wsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLE1BQXNCO0lBQzFELE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BELE9BQU87UUFDSCxRQUFRLENBQUMsUUFBUTtRQUNqQixRQUFRLENBQUMsWUFBWTtRQUNyQiw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxlQUFlO1FBQ3hCLFFBQVEsQ0FBQyxlQUFlO0tBQzNCLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsOEJBQThCLENBQUMsTUFBc0I7SUFDakUsT0FBTyxpQkFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFDckUsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQ2xDLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsNkJBQTZCLENBQUMsTUFBc0I7SUFDaEUsT0FBTyxJQUFBLGdDQUF1QixFQUMxQixDQUFDLE9BQU8sQ0FBQyxFQUNULENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDM0MsQ0FBQTtBQUNMLENBQUM7QUFFRCxTQUFnQiw2QkFBNkIsQ0FBQyxXQUFpQztJQUMzRSxPQUFPO1FBQ0gsV0FBVyxFQUFFLGFBQWEsSUFBSSxDQUFDO1FBQy9CLFdBQVcsRUFBRSxTQUFTLElBQUksQ0FBQztRQUMzQixXQUFXLEVBQUUsYUFBYSxJQUFJLENBQUM7S0FDbEMsQ0FBQTtBQUNMLENBQUM7QUFDRCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFVO0lBQzFDLElBQUksS0FBSyxZQUFZLFlBQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0MsT0FBTztZQUNILEtBQUssQ0FBQyxNQUFNO1lBQ1osS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFO1lBQ2YsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25ELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNO1NBQzlDLENBQUE7SUFFTCxDQUFDO1NBQU0sSUFBSSxLQUFLLFlBQVksWUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekQsT0FBTyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUE7SUFFN0IsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLFlBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RELE9BQU87WUFDSCxLQUFLLENBQUMsTUFBTTtZQUNaLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO1NBQ2xFLENBQUE7SUFFTCxDQUFDO1NBQU0sSUFBSSxLQUFLLFlBQVksWUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckQsT0FBTztZQUNILEtBQUssQ0FBQyxNQUFNO1lBQ1osS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtTQUNuRSxDQUFBO0lBRUwsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLElBQUksU0FBUyxDQUFDLHNCQUFzQixLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ3RELENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLFVBQTRCLElBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNib3IgZnJvbSBcImNib3JcIlxyXG5pbXBvcnQgeyBBYmlDb2Rlciwgc29saWRpdHlQYWNrZWRLZWNjYWsyNTYgfSBmcm9tIFwiZXRoZXJzXCJcclxuaW1wb3J0IHsgV2l0bmV0IH0gZnJvbSBcIkB3aXRuZXQvc2RrXCJcclxuXHJcbmltcG9ydCBXU0IgZnJvbSBcIndpdG5ldC1zb2xpZGl0eS1icmlkZ2VcIlxyXG5cclxuaW1wb3J0IHtcclxuICAgIGdldE5ldHdvcmtBZGRyZXNzZXMgYXMgX2dldE5ldHdvcmtBZGRyZXNzZXMsXHJcbiAgICBnZXROZXR3b3JrQ29uc3RydWN0b3JBcmdzIGFzIF9nZXROZXR3b3JrQ29uc3RydWN0b3JBcmdzLFxyXG59IGZyb20gXCIuLi9iaW4vaGVscGVyc1wiXHJcblxyXG5pbXBvcnQgeyBEYXRhUHVzaFJlcG9ydCwgV2l0T3JhY2xlUXVlcnlQYXJhbXMsIFdpdE9yYWNsZVF1ZXJ5U3RhdHVzIH0gZnJvbSBcIi4vdHlwZXNcIlxyXG5pbXBvcnQgeyBIZXhTdHJpbmcgfSBmcm9tIFwibm9kZV9tb2R1bGVzL2V0aGVycy9saWIuY29tbW9uanMvdXRpbHMvZGF0YVwiXHJcblxyXG5leHBvcnQgKiBmcm9tIFwiQHdpdG5ldC9zZGsvdXRpbHNcIlxyXG5cclxuZXhwb3J0IGNvbnN0IEFCSXMgPSBXU0IuQUJJcztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFdm1OZXR3b3JrQWRkcmVzc2VzKG5ldHdvcms6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gX2dldE5ldHdvcmtBZGRyZXNzZXMobmV0d29yaylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2bU5ldHdvcmtCeUNoYWluSWQoY2hhaW5JZDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGZvdW5kID0gT2JqZWN0LmVudHJpZXMoV1NCLnN1cHBvcnRlZE5ldHdvcmtzKCkpLmZpbmQoKFssIGNvbmZpZ106IFtzdHJpbmcsIGFueV0pID0+IGNvbmZpZz8ubmV0d29ya19pZC50b1N0cmluZygpID09PSBjaGFpbklkLnRvU3RyaW5nKCkpXHJcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFswXTtcclxuICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZtTmV0d29ya01haW5uZXQobmV0d29yazogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3VuZCA9IE9iamVjdC5lbnRyaWVzKFdTQi5zdXBwb3J0ZWROZXR3b3JrcygpKS5maW5kKChba2V5LF0pID0+IGtleSA9PT0gbmV0d29yay50b0xvd2VyQ2FzZSgpKVxyXG4gICAgcmV0dXJuIChmb3VuZCBhcyBhbnkpPy5bMV0ubWFpbm5ldFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNFdm1OZXR3b3JrU3VwcG9ydGVkKG5ldHdvcms6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFdTQi5zdXBwb3J0c05ldHdvcmsobmV0d29yaylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFiaURlY29kZVF1ZXJ5U3RhdHVzKHN0YXR1czogYmlnaW50KTogV2l0T3JhY2xlUXVlcnlTdGF0dXMge1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICBjYXNlIDFuOiByZXR1cm4gXCJQb3N0ZWRcIjtcclxuICAgICAgICBjYXNlIDJuOiByZXR1cm4gXCJSZXBvcnRlZFwiO1xyXG4gICAgICAgIGNhc2UgM246IHJldHVybiBcIkZpbmFsaXplZFwiO1xyXG4gICAgICAgIGNhc2UgNG46IHJldHVybiBcIkRlbGF5ZWRcIjtcclxuICAgICAgICBjYXNlIDVuOiByZXR1cm4gXCJFeHBpcmVkXCI7XHJcbiAgICAgICAgY2FzZSA2bjogcmV0dXJuIFwiRGlzcHV0ZWRcIjtcclxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gXCJWb2lkXCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhYmlEZWNvZGVQcmljZUZlZWRNYXBwaW5nQWxnb3JpdGhtKGFsZ29yaXRobTogYmlnaW50KTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7XHJcbiAgICAgICAgY2FzZSAxbjogcmV0dXJuIFwiRmFsbGJhY2tcIjtcclxuICAgICAgICBjYXNlIDJuOiByZXR1cm4gXCJIb3R0ZXN0XCI7XHJcbiAgICAgICAgY2FzZSAzbjogcmV0dXJuIFwiUHJvZHVjdFwiO1xyXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiBcIk5vbmVcIjtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXNvbHV0aW9uIG9mIHNvbWUgRGF0YSBSZXF1ZXN0IFRyYW5zYWN0aW9uIGluIHRoZSBXaXRuZXQgYmxvY2tjaGFpbi5cclxuICovXHJcbnR5cGUgX0RhdGFQdXNoUmVwb3J0U29saWRpdHkgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFVuaXF1ZSBoYXNoIG9mIHRoZSBEYXRhIFJlcXVlc3QgVHJhbnNhY3Rpb24gdGhhdCBwcm9kdWNlZCB0aGUgb3V0Y29taW5nIHJlc3VsdC4gXHJcbiAgICAgKi9cclxuICAgIGRyVHhIYXNoOiBXaXRuZXQuSGFzaCxcclxuICAgIC8qKlxyXG4gICAgICogUkFEIGhhc2ggb2YgdGhlIFJhZG9uIFJlcXVlc3QgYmVpbmcgc29sdmVkLlxyXG4gICAgICovXHJcbiAgICBxdWVyeVJhZEhhc2g6IFdpdG5ldC5IYXNoLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTTEEgcGFyYW1ldGVycyByZXF1aXJlZCB0byBiZSBmdWxmaWxsZWQgYnkgdGhlIFdpdG5ldCBibG9ja2NoYWluLiBcclxuICAgICAqL1xyXG4gICAgcXVlcnlQYXJhbXM6IFdpdE9yYWNsZVF1ZXJ5UGFyYW1zLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgZGF0YSBzb3VyY2VzIHdoZXJlIHF1ZXJpZWQgYW5kIHRoZSBjb250YWluZWQgcmVzdWx0IHByb2R1Y2VkLlxyXG4gICAgICovXHJcbiAgICByZXN1bHRUaW1lc3RhbXA6IG51bWJlcixcclxuICAgIC8qKlxyXG4gICAgICogQ0JPUi1lbmNvZGVkIGJ1ZmZlciBjb250YWluaW5nIHRoZSBhY3R1YWwgcmVzdWx0IGRhdGEgdG8gc29tZSBxdWVyeSBhcyBzb2x2ZWQgYnkgdGhlIFdpdG5ldCBibG9ja2NoYWluLiBcclxuICAgICAqL1xyXG4gICAgcmVzdWx0Q2JvckJ5dGVzOiBXaXRuZXQuSGV4U3RyaW5nLFxyXG59XHJcblxyXG5mdW5jdGlvbiBfaW50b0RhdGFQdXNoUmVwb3J0U29saWRpdHkocmVwb3J0OiBEYXRhUHVzaFJlcG9ydCk6IF9EYXRhUHVzaFJlcG9ydFNvbGlkaXR5IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZHJUeEhhc2g6IGAweCR7cmVwb3J0Lmhhc2h9YCxcclxuICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICB3aXRuZXNzZXM6IHJlcG9ydC5xdWVyeT8ud2l0bmVzc2VzIHx8IDAsXHJcbiAgICAgICAgICAgIHVuaXRhcnlSZXdhcmQ6IHJlcG9ydC5xdWVyeT8udW5pdGFyeV9yZXdhcmQgfHwgMG4sXHJcbiAgICAgICAgICAgIHJlc3VsdE1heFNpemU6IDAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBxdWVyeVJhZEhhc2g6IGAweCR7cmVwb3J0LnF1ZXJ5Py5yYWRfaGFzaH1gLFxyXG4gICAgICAgIHJlc3VsdENib3JCeXRlczogYDB4JHtyZXBvcnQucmVzdWx0Py5jYm9yX2J5dGVzfWAsXHJcbiAgICAgICAgcmVzdWx0VGltZXN0YW1wOiByZXBvcnQucmVzdWx0Py50aW1lc3RhbXAgfHwgMCxcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFiaUVuY29kZURhdGFQdXNoUmVwb3J0KHJlcG9ydDogRGF0YVB1c2hSZXBvcnQpOiBhbnkge1xyXG4gICAgY29uc3QgaW50ZXJuYWwgPSBfaW50b0RhdGFQdXNoUmVwb3J0U29saWRpdHkocmVwb3J0KVxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBpbnRlcm5hbC5kclR4SGFzaCxcclxuICAgICAgICBpbnRlcm5hbC5xdWVyeVJhZEhhc2gsXHJcbiAgICAgICAgYWJpRW5jb2RlV2l0T3JhY2xlUXVlcnlQYXJhbXMoaW50ZXJuYWwucXVlcnlQYXJhbXMpLFxyXG4gICAgICAgIGludGVybmFsLnJlc3VsdFRpbWVzdGFtcCxcclxuICAgICAgICBpbnRlcm5hbC5yZXN1bHRDYm9yQnl0ZXMsXHJcbiAgICBdXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhYmlFbmNvZGVEYXRhUHVzaFJlcG9ydE1lc3NhZ2UocmVwb3J0OiBEYXRhUHVzaFJlcG9ydCk6IEhleFN0cmluZyB7XHJcbiAgICByZXR1cm4gQWJpQ29kZXIuZGVmYXVsdEFiaUNvZGVyKCkuZW5jb2RlKFxyXG4gICAgICAgIFtcImJ5dGVzMzJcIiwgXCJieXRlczMyXCIsIFwiKHVpbnQxNiwgdWludDE2LCB1aW50NjQpXCIsIFwidWludDY0XCIsIFwiYnl0ZXNcIl0sXHJcbiAgICAgICAgYWJpRW5jb2RlRGF0YVB1c2hSZXBvcnQocmVwb3J0KVxyXG4gICAgKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWJpRW5jb2RlRGF0YVB1c2hSZXBvcnREaWdlc3QocmVwb3J0OiBEYXRhUHVzaFJlcG9ydCk6IEhleFN0cmluZyB7XHJcbiAgICByZXR1cm4gc29saWRpdHlQYWNrZWRLZWNjYWsyNTYoXHJcbiAgICAgICAgW1wiYnl0ZXNcIl0sXHJcbiAgICAgICAgW2FiaUVuY29kZURhdGFQdXNoUmVwb3J0TWVzc2FnZShyZXBvcnQpXSxcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFiaUVuY29kZVdpdE9yYWNsZVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBXaXRPcmFjbGVRdWVyeVBhcmFtcyk6IGFueSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zPy5yZXN1bHRNYXhTaXplIHx8IDAsXHJcbiAgICAgICAgcXVlcnlQYXJhbXM/LndpdG5lc3NlcyB8fCAwLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zPy51bml0YXJ5UmV3YXJkIHx8IDAsXHJcbiAgICBdXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGFiaUVuY29kZVJhZG9uQXNzZXQoYXNzZXQ6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoYXNzZXQgaW5zdGFuY2VvZiBXaXRuZXQuUmFkb24uUmFkb25SZXRyaWV2YWwpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBhc3NldC5tZXRob2QsXHJcbiAgICAgICAgICAgIGFzc2V0LnVybCB8fCBcIlwiLFxyXG4gICAgICAgICAgICBhc3NldC5ib2R5IHx8IFwiXCIsXHJcbiAgICAgICAgICAgIGFzc2V0Py5oZWFkZXJzID8gT2JqZWN0LmVudHJpZXMoYXNzZXQuaGVhZGVycykgOiBbXSxcclxuICAgICAgICAgICAgYWJpRW5jb2RlUmFkb25Bc3NldChhc3NldC5zY3JpcHQpIHx8IFwiMHg4MFwiLFxyXG4gICAgICAgIF1cclxuXHJcbiAgICB9IGVsc2UgaWYgKGFzc2V0IGluc3RhbmNlb2YgV2l0bmV0LlJhZG9uLnR5cGVzLlJhZG9uU2NyaXB0KSB7XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0LnRvQnl0ZWNvZGUoKVxyXG5cclxuICAgIH0gZWxzZSBpZiAoYXNzZXQgaW5zdGFuY2VvZiBXaXRuZXQuUmFkb24ucmVkdWNlcnMuQ2xhc3MpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBhc3NldC5vcGNvZGUsXHJcbiAgICAgICAgICAgIGFzc2V0LmZpbHRlcnM/Lm1hcChmaWx0ZXIgPT4gYWJpRW5jb2RlUmFkb25Bc3NldChmaWx0ZXIpKSB8fCBbXSxcclxuICAgICAgICBdXHJcblxyXG4gICAgfSBlbHNlIGlmIChhc3NldCBpbnN0YW5jZW9mIFdpdG5ldC5SYWRvbi5maWx0ZXJzLkNsYXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgYXNzZXQub3Bjb2RlLFxyXG4gICAgICAgICAgICBgMHgke2Fzc2V0LmFyZ3MgPyBjYm9yLmVuY29kZShhc3NldC5hcmdzKS50b1N0cmluZyhcImhleFwiKSA6IFwiXCJ9YFxyXG4gICAgICAgIF1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vdCBhIFJhZG9uIGFzc2V0OiAke2Fzc2V0fWApXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVDYm9yQnl0ZXMoX2Nib3JCeXRlczogV2l0bmV0LkhleFN0cmluZyk6IGFueSB7IH1cclxuIl19