UNPKG

@ninerealms/midgard-client

Version:
167 lines 32.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.historyLiquidityChanges = exports.rawToHistoryLiquidityChanges = exports.rawToHistoryLiquidityChangesInterval = exports.historyTVL = exports.rawToHistoryTVL = exports.rawToHistoryIntervalTVL = exports.historyDepthsPoolsMany = exports.historyDepths = exports.convertHistoryDepthInterval = exports.historyEarnings = exports.historySwap = exports.rawToHistorySwap = exports.rawToHistoryIntervalSwap = exports.convertIntervalPool = exports.flattenHistoryEarningsIntervals = void 0; const utils_1 = require("./utils"); const bignumber_js_1 = __importDefault(require("bignumber.js")); const flattenHistoryEarningsIntervals = (earnings) => (earnings.intervals.reduce((memo, { pools, startTime, endTime, runePriceUSD, }) => memo.concat(pools.map((pool) => ({ ...pool, startTime, endTime, runePriceUSD, }))), [])); exports.flattenHistoryEarningsIntervals = flattenHistoryEarningsIntervals; const convertMetaTypes = (meta) => ({ ...meta, ...utils_1.rawToInterval(meta), liquidityFees: utils_1.toBigNumber(meta.liquidityFees), blockRewards: utils_1.toBigNumber(meta.blockRewards), earnings: utils_1.toBigNumber(meta.earnings), bondingEarnings: utils_1.toBigNumber(meta.bondingEarnings), liquidityEarnings: utils_1.toBigNumber(meta.liquidityEarnings), avgNodeCount: utils_1.toBigNumber(meta.avgNodeCount), runePriceUSD: utils_1.toBigNumber(meta.runePriceUSD), }); const convertIntervalPool = (intervalPool) => ({ ...intervalPool, ...utils_1.rawToInterval(intervalPool), pool: intervalPool.pool, assetLiquidityFees: utils_1.toBigNumber(intervalPool.assetLiquidityFees), runeLiquidityFees: utils_1.toBigNumber(intervalPool.runeLiquidityFees), totalLiquidityFeesRune: utils_1.toBigNumber(intervalPool.totalLiquidityFeesRune), rewards: utils_1.toBigNumber(intervalPool.rewards), earnings: utils_1.toBigNumber(intervalPool.earnings), }); exports.convertIntervalPool = convertIntervalPool; const rawToHistoryIntervalSwap = (res) => ({ ...res, ...utils_1.rawToInterval(res), toAssetCount: utils_1.toBigNumber(res.toAssetCount), toRuneCount: utils_1.toBigNumber(res.toRuneCount), totalCount: utils_1.toBigNumber(res.totalCount), toAssetVolume: utils_1.toBigNumber(res.toAssetVolume), toRuneVolume: utils_1.toBigNumber(res.toRuneVolume), totalVolume: utils_1.toBigNumber(res.totalVolume), toAssetFees: utils_1.toBigNumber(res.toAssetFees), toRuneFees: utils_1.toBigNumber(res.toRuneFees), totalFees: utils_1.toBigNumber(res.totalFees), toAssetAverageSlip: utils_1.toBigNumber(res.toAssetAverageSlip), toRuneAverageSlip: utils_1.toBigNumber(res.toRuneAverageSlip), averageSlip: utils_1.toBigNumber(res.averageSlip), runePriceUSD: utils_1.toBigNumber(res.runePriceUSD), }); exports.rawToHistoryIntervalSwap = rawToHistoryIntervalSwap; const rawToHistorySwap = (res) => ({ meta: { ...res.meta, ...exports.rawToHistoryIntervalSwap(res.meta), }, intervals: res.intervals.map(exports.rawToHistoryIntervalSwap), }); exports.rawToHistorySwap = rawToHistorySwap; const historySwap = async ({ pool, ...options }) => (utils_1.fetch({ path: '/v2/history/swaps', body: options, }).then(exports.rawToHistorySwap)); exports.historySwap = historySwap; const historyEarnings = async (options) => (utils_1.fetch({ path: '/v2/history/earnings', body: options, }).then(response => ({ ...response, meta: { ...response.meta, ...convertMetaTypes(response.meta), }, intervals: response.intervals.map(interval => ({ ...interval, ...convertMetaTypes(interval), pools: interval.pools.map(exports.convertIntervalPool), })) }))); exports.historyEarnings = historyEarnings; const convertHistoryDepthInterval = (interval) => ({ ...interval, ...utils_1.rawToInterval(interval), assetDepth: utils_1.toBigNumber(interval.assetDepth), runeDepth: utils_1.toBigNumber(interval.runeDepth), assetPrice: utils_1.toBigNumber(interval.assetPrice), assetPriceUSD: utils_1.toBigNumber(interval.assetPriceUSD), liquidityUnits: utils_1.toBigNumber(interval.liquidityUnits), synthUnits: utils_1.toBigNumber(interval.synthUnits), synthSupply: utils_1.toBigNumber(interval.synthSupply), units: utils_1.toBigNumber(interval.units), }); exports.convertHistoryDepthInterval = convertHistoryDepthInterval; const historyDepths = async ({ pool, ...options }) => { return utils_1.fetch({ path: `/v2/history/depths/${pool}`, body: options, }).then(depths => ({ ...depths, meta: { ...depths.meta, pool, }, intervals: depths.intervals.map((interval) => ({ ...interval, ...exports.convertHistoryDepthInterval(interval), })), })); }; exports.historyDepths = historyDepths; const historyDepthsPoolsMany = (pools) => (Promise.all(pools.map(exports.historyDepths))); exports.historyDepthsPoolsMany = historyDepthsPoolsMany; const rawToHistoryIntervalTVL = (tvlInterval) => ({ ...utils_1.rawToInterval(tvlInterval), totalValuePooled: utils_1.toBigNumber(tvlInterval.totalValuePooled), totalValueBonded: utils_1.toBigNumber(tvlInterval.totalValueBonded), totalValueLocked: utils_1.toBigNumber(tvlInterval.totalValueLocked), runePriceUSD: utils_1.toBigNumber(tvlInterval.runePriceUSD), }); exports.rawToHistoryIntervalTVL = rawToHistoryIntervalTVL; const rawToHistoryTVL = (tvl) => ({ meta: { ...tvl, ...exports.rawToHistoryIntervalTVL(tvl.meta), }, intervals: tvl.intervals.map(exports.rawToHistoryIntervalTVL), }); exports.rawToHistoryTVL = rawToHistoryTVL; const historyTVL = (interval) => (utils_1.fetch({ path: '/v2/history/tvl', body: interval, }).then(exports.rawToHistoryTVL)); exports.historyTVL = historyTVL; const rawToHistoryLiquidityChangesInterval = (changes) => ({ addAssetLiquidityVolume: new bignumber_js_1.default(changes.addAssetLiquidityVolume), addRuneLiquidityVolume: new bignumber_js_1.default(changes.addRuneLiquidityVolume), addLiquidityVolume: new bignumber_js_1.default(changes.addLiquidityVolume), addLiquidityCount: new bignumber_js_1.default(changes.addLiquidityCount), withdrawAssetVolume: new bignumber_js_1.default(changes.withdrawAssetVolume), withdrawRuneVolume: new bignumber_js_1.default(changes.withdrawRuneVolume), impermanentLossProtectionPaid: new bignumber_js_1.default(changes.impermanentLossProtectionPaid), withdrawVolume: new bignumber_js_1.default(changes.withdrawVolume), withdrawCount: new bignumber_js_1.default(changes.withdrawCount), net: new bignumber_js_1.default(changes.net), runePriceUSD: new bignumber_js_1.default(changes.runePriceUSD), ...utils_1.rawToInterval(changes), }); exports.rawToHistoryLiquidityChangesInterval = rawToHistoryLiquidityChangesInterval; const rawToHistoryLiquidityChanges = (changes) => ({ ...changes, meta: { ...changes.meta, ...exports.rawToHistoryLiquidityChangesInterval(changes.meta), }, intervals: changes.intervals.map(exports.rawToHistoryLiquidityChangesInterval), }); exports.rawToHistoryLiquidityChanges = rawToHistoryLiquidityChanges; const historyLiquidityChanges = (options) => (utils_1.fetch({ path: '/v2/history/liquidity_changes', body: options, }).then(exports.rawToHistoryLiquidityChanges)); exports.historyLiquidityChanges = historyLiquidityChanges; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oaXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQVNnQjtBQUNoQixnRUFBb0M7QUFpSjdCLE1BQU0sK0JBQStCLEdBQUcsQ0FDN0MsUUFBeUIsRUFDVSxFQUFFLENBQUMsQ0FDdEMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FDeEIsSUFBdUMsRUFDdkMsRUFDRSxLQUFLLEVBQ0wsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEdBQ2IsRUFDRCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDZCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxHQUFHLElBQUk7SUFDUCxTQUFTO0lBQ1QsT0FBTztJQUNQLFlBQVk7Q0FDYixDQUFDLENBQUMsQ0FDSixFQUFFLEVBQUUsQ0FBQyxDQUNQLENBQUE7QUFuQlksUUFBQSwrQkFBK0IsbUNBbUIzQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsSUFBa0MsRUFDWixFQUFFLENBQUMsQ0FBQztJQUMxQixHQUFHLElBQUk7SUFDUCxHQUFHLHFCQUFhLENBQUMsSUFBSSxDQUFDO0lBQ3RCLGFBQWEsRUFBRSxtQkFBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUMsWUFBWSxFQUFFLG1CQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM1QyxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3BDLGVBQWUsRUFBRSxtQkFBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDbEQsaUJBQWlCLEVBQUUsbUJBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDdEQsWUFBWSxFQUFFLG1CQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM1QyxZQUFZLEVBQUUsbUJBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0NBQzdDLENBQUMsQ0FBQTtBQUVLLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsWUFBaUQsRUFDcEIsRUFBRSxDQUFDLENBQUM7SUFDakMsR0FBRyxZQUFZO0lBQ2YsR0FBRyxxQkFBYSxDQUFDLFlBQVksQ0FBQztJQUM5QixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7SUFDdkIsa0JBQWtCLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDaEUsaUJBQWlCLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7SUFDOUQsc0JBQXNCLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUM7SUFDeEUsT0FBTyxFQUFFLG1CQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztJQUMxQyxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0NBQzdDLENBQUMsQ0FBQTtBQVhXLFFBQUEsbUJBQW1CLHVCQVc5QjtBQVlLLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsR0FBb0MsRUFDWCxFQUFFLENBQUMsQ0FBQztJQUM3QixHQUFHLEdBQUc7SUFDTixHQUFHLHFCQUFhLENBQUMsR0FBRyxDQUFDO0lBQ3JCLFlBQVksRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDM0MsV0FBVyxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUN6QyxVQUFVLEVBQUUsbUJBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLGFBQWEsRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFDN0MsWUFBWSxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztJQUMzQyxXQUFXLEVBQUUsbUJBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQ3pDLFdBQVcsRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7SUFDekMsVUFBVSxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUN2QyxTQUFTLEVBQUUsbUJBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3JDLGtCQUFrQixFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0lBQ3ZELGlCQUFpQixFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0lBQ3JELFdBQVcsRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7SUFDekMsWUFBWSxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztDQUM1QyxDQUFDLENBQUE7QUFsQlcsUUFBQSx3QkFBd0IsNEJBa0JuQztBQUVLLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUE0QixFQUFtQixFQUFFLENBQUMsQ0FBQztJQUNsRixJQUFJLEVBQUU7UUFDSixHQUFHLEdBQUcsQ0FBQyxJQUFJO1FBQ1gsR0FBRyxnQ0FBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0tBQ3RDO0lBQ0QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdDQUF3QixDQUFDO0NBQ3ZELENBQUMsQ0FBQTtBQU5XLFFBQUEsZ0JBQWdCLG9CQU0zQjtBQUVLLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFDOUIsRUFDRSxJQUFJLEVBQ0osR0FBRyxPQUFPLEVBQ2dCLEVBQzVCLEVBQUUsQ0FBQyxDQUNILGFBQUssQ0FBMEI7SUFDN0IsSUFBSSxFQUFFLG1CQUFtQjtJQUN6QixJQUFJLEVBQUUsT0FBTztDQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQWdCLENBQUMsQ0FDMUIsQ0FBQTtBQVZZLFFBQUEsV0FBVyxlQVV2QjtBQUVNLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFDbEMsT0FBK0IsRUFDL0IsRUFBRSxDQUFDLENBQ0gsYUFBSyxDQUEwQjtJQUM3QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLElBQUksRUFBRSxPQUFpQjtDQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQixHQUFHLFFBQVE7SUFDWCxJQUFJLEVBQUU7UUFDSixHQUFHLFFBQVEsQ0FBQyxJQUFJO1FBQ2hCLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztLQUNuQztJQUNELFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsR0FBRyxRQUFRO1FBQ1gsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDN0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLDJCQUFtQixDQUFDO0tBQy9DLENBQUMsQ0FBQztDQUNKLENBQUMsQ0FBQyxDQUNKLENBQUE7QUFsQlksUUFBQSxlQUFlLG1CQWtCM0I7QUFFTSxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLFFBQXNDLEVBQ2hCLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsUUFBUTtJQUNYLEdBQUcscUJBQWEsQ0FBQyxRQUFRLENBQUM7SUFDMUIsVUFBVSxFQUFFLG1CQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUM1QyxTQUFTLEVBQUUsbUJBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzFDLFVBQVUsRUFBRSxtQkFBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDNUMsYUFBYSxFQUFFLG1CQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUNsRCxjQUFjLEVBQUUsbUJBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQ3BELFVBQVUsRUFBRSxtQkFBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDNUMsV0FBVyxFQUFFLG1CQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUM5QyxLQUFLLEVBQUUsbUJBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ25DLENBQUMsQ0FBQTtBQWJXLFFBQUEsMkJBQTJCLCtCQWF0QztBQUVLLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxFQUNsQyxJQUFJLEVBQ0osR0FBRyxPQUFPLEVBQ2dCLEVBQXlCLEVBQUU7SUFDckQsT0FBTyxhQUFLLENBQXVCO1FBQ2pDLElBQUksRUFBRSxzQkFBc0IsSUFBSSxFQUFFO1FBQ2xDLElBQUksRUFBRSxPQUFpQjtLQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQixHQUFHLE1BQU07UUFDVCxJQUFJLEVBQUU7WUFDSixHQUFHLE1BQU0sQ0FBQyxJQUFJO1lBQ2QsSUFBSTtTQUNMO1FBQ0QsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLEdBQUcsUUFBUTtZQUNYLEdBQUcsbUNBQTJCLENBQUMsUUFBUSxDQUFDO1NBQ3pDLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyxDQUFBO0FBbEJZLFFBQUEsYUFBYSxpQkFrQnpCO0FBRU0sTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxLQUFrQyxFQUNsQyxFQUFFLENBQUMsQ0FDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQWEsQ0FBQyxDQUFDLENBQ3RDLENBQUE7QUFKWSxRQUFBLHNCQUFzQiwwQkFJbEM7QUEwQk0sTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFdBQXVDLEVBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLEdBQUcscUJBQWEsQ0FBQyxXQUFXLENBQUM7SUFDN0IsZ0JBQWdCLEVBQUUsbUJBQVcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsZ0JBQWdCLEVBQUUsbUJBQVcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsZ0JBQWdCLEVBQUUsbUJBQVcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsWUFBWSxFQUFFLG1CQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztDQUNwRCxDQUFDLENBQUE7QUFOVyxRQUFBLHVCQUF1QiwyQkFNbEM7QUFFSyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQXVCLEVBQWMsRUFBRSxDQUFDLENBQUM7SUFDdkUsSUFBSSxFQUFFO1FBQ0osR0FBRyxHQUFHO1FBQ04sR0FBRywrQkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0tBQ3JDO0lBQ0QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLCtCQUF1QixDQUFDO0NBQ3RELENBQUMsQ0FBQTtBQU5XLFFBQUEsZUFBZSxtQkFNMUI7QUFFSyxNQUFNLFVBQVUsR0FBRyxDQUN4QixRQUF5QixFQUNKLEVBQUUsQ0FBQyxDQUN4QixhQUFLLENBQXFCO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsSUFBSSxFQUFFLFFBQVE7Q0FDZixDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUFlLENBQUMsQ0FDekIsQ0FBQTtBQVBZLFFBQUEsVUFBVSxjQU90QjtBQXdDTSxNQUFNLG9DQUFvQyxHQUFHLENBQ2xELE9BQWdELEVBQ2YsRUFBRSxDQUFDLENBQUM7SUFDckMsdUJBQXVCLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztJQUN2RSxzQkFBc0IsRUFBRSxJQUFJLHNCQUFTLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO0lBQ3JFLGtCQUFrQixFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsaUJBQWlCLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUMzRCxtQkFBbUIsRUFBRSxJQUFJLHNCQUFTLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0lBQy9ELGtCQUFrQixFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsNkJBQTZCLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQztJQUNuRixjQUFjLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDckQsYUFBYSxFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ25ELEdBQUcsRUFBRSxJQUFJLHNCQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUMvQixZQUFZLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDakQsR0FBRyxxQkFBYSxDQUFDLE9BQU8sQ0FBQztDQUMxQixDQUFDLENBQUE7QUFmVyxRQUFBLG9DQUFvQyx3Q0FlL0M7QUFFSyxNQUFNLDRCQUE0QixHQUFHLENBQzFDLE9BQXdDLEVBQ2YsRUFBRSxDQUFDLENBQUM7SUFDN0IsR0FBRyxPQUFPO0lBQ1YsSUFBSSxFQUFFO1FBQ0osR0FBRyxPQUFPLENBQUMsSUFBSTtRQUNmLEdBQUcsNENBQW9DLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztLQUN0RDtJQUNELFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw0Q0FBb0MsQ0FBQztDQUN2RSxDQUFDLENBQUE7QUFUVyxRQUFBLDRCQUE0QixnQ0FTdkM7QUFFSyxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLE9BQWdDLEVBQ0UsRUFBRSxDQUFDLENBQ3JDLGFBQUssQ0FBa0M7SUFDckMsSUFBSSxFQUFFLCtCQUErQjtJQUNyQyxJQUFJLEVBQUUsT0FBTztDQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsb0NBQTRCLENBQUMsQ0FDdEMsQ0FBQTtBQVBZLFFBQUEsdUJBQXVCLDJCQU9uQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEludGVydmFsUmVzcG9uc2UsXG4gIGZldGNoLFxuICB0b0RhdGUsXG4gIHRvQmlnTnVtYmVyLFxuICBJbnRlcnZhbEtleSxcbiAgSW50ZXJ2YWwsXG4gIEludGVydmFsUmVxdWVzdCxcbiAgcmF3VG9JbnRlcnZhbCxcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlQb29sU3dhcEludGVydmFsUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgdG9Bc3NldENvdW50OiBzdHJpbmc7XG4gIHRvUnVuZUNvdW50OiBzdHJpbmc7XG4gIHRvdGFsQ291bnQ6IHN0cmluZztcbiAgdG9Bc3NldFZvbHVtZTogc3RyaW5nO1xuICB0b1J1bmVWb2x1bWU6IHN0cmluZztcbiAgdG90YWxWb2x1bWU6IHN0cmluZztcbiAgdG9Bc3NldEZlZXM6IHN0cmluZztcbiAgdG9SdW5lRmVlczogc3RyaW5nO1xuICB0b3RhbEZlZXM6IHN0cmluZztcbiAgdG9Bc3NldEF2ZXJhZ2VTbGlwOiBzdHJpbmc7XG4gIHRvUnVuZUF2ZXJhZ2VTbGlwOiBzdHJpbmc7XG4gIGF2ZXJhZ2VTbGlwOiBzdHJpbmc7XG4gIHJ1bmVQcmljZVVTRDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlQb29sU3dhcEludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWwge1xuICB0b0Fzc2V0Q291bnQ6IEJpZ051bWJlcjtcbiAgdG9SdW5lQ291bnQ6IEJpZ051bWJlcjtcbiAgdG90YWxDb3VudDogQmlnTnVtYmVyO1xuICB0b0Fzc2V0Vm9sdW1lOiBCaWdOdW1iZXI7XG4gIHRvUnVuZVZvbHVtZTogQmlnTnVtYmVyO1xuICB0b3RhbFZvbHVtZTogQmlnTnVtYmVyO1xuICB0b0Fzc2V0RmVlczogQmlnTnVtYmVyO1xuICB0b1J1bmVGZWVzOiBCaWdOdW1iZXI7XG4gIHRvdGFsRmVlczogQmlnTnVtYmVyO1xuICB0b0Fzc2V0QXZlcmFnZVNsaXA6IEJpZ051bWJlcjtcbiAgdG9SdW5lQXZlcmFnZVNsaXA6IEJpZ051bWJlcjtcbiAgYXZlcmFnZVNsaXA6IEJpZ051bWJlcjtcbiAgcnVuZVByaWNlVVNEOiBCaWdOdW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeURlcHRoSW50ZXJ2YWxSZXNwb25zZSBleHRlbmRzIEludGVydmFsUmVzcG9uc2Uge1xuICBhc3NldERlcHRoOiBzdHJpbmc7XG4gIHJ1bmVEZXB0aDogc3RyaW5nO1xuICBhc3NldFByaWNlOiBzdHJpbmc7XG4gIGFzc2V0UHJpY2VVU0Q6IHN0cmluZztcbiAgbGlxdWlkaXR5VW5pdHM6IHN0cmluZztcbiAgc3ludGhVbml0czogc3RyaW5nO1xuICBzeW50aFN1cHBseTogc3RyaW5nO1xuICB1bml0czogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlEZXB0aEludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWwge1xuICBhc3NldERlcHRoOiBCaWdOdW1iZXI7XG4gIHJ1bmVEZXB0aDogQmlnTnVtYmVyO1xuICBhc3NldFByaWNlOiBCaWdOdW1iZXI7XG4gIGFzc2V0UHJpY2VVU0Q6IEJpZ051bWJlcjtcbiAgbGlxdWlkaXR5VW5pdHM6IEJpZ051bWJlcjtcbiAgc3ludGhVbml0czogQmlnTnVtYmVyO1xuICBzeW50aFN1cHBseTogQmlnTnVtYmVyO1xuICB1bml0czogQmlnTnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlEZXB0aFJlc3BvbnNlIHtcbiAgbWV0YTogSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5RGVwdGhJbnRlcnZhbFJlc3BvbnNlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJ2YWxSZXF1ZXN0V2l0aFBvb2wgZXh0ZW5kcyBJbnRlcnZhbFJlcXVlc3Qge1xuICBwb29sOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJ2YWxSZXNwb25zZVdpdGhQb29sIGV4dGVuZHMgSW50ZXJ2YWxSZXNwb25zZSB7XG4gIHBvb2w6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5RGVwdGgge1xuICBtZXRhOiBJbnRlcnZhbFJlc3BvbnNlV2l0aFBvb2w7XG4gIGludGVydmFsczogSGlzdG9yeURlcHRoSW50ZXJ2YWxbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5UmVxdWVzdE9wdGlvbnMge1xuICBpbnRlcnZhbD86IEludGVydmFsS2V5O1xuICBjb3VudD86IG51bWJlcjtcbiAgdG8/OiBudW1iZXI7XG4gIGZyb20/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVBvb2xSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIEhpc3RvcnlSZXF1ZXN0T3B0aW9ucyB7XG4gIHBvb2w6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcnZhbFJlc3BvbnNlV2l0aEVhcm5pbmdzIGV4dGVuZHMgSW50ZXJ2YWxSZXNwb25zZSB7XG4gIGxpcXVpZGl0eUZlZXM6IHN0cmluZztcbiAgYmxvY2tSZXdhcmRzOiBzdHJpbmc7XG4gIGVhcm5pbmdzOiBzdHJpbmc7XG4gIGJvbmRpbmdFYXJuaW5nczogc3RyaW5nO1xuICBsaXF1aWRpdHlFYXJuaW5nczogc3RyaW5nO1xuICBhdmdOb2RlQ291bnQ6IHN0cmluZztcbiAgcnVuZVByaWNlVVNEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgcG9vbDogc3RyaW5nO1xuICBhc3NldExpcXVpZGl0eUZlZXM6IHN0cmluZztcbiAgcnVuZUxpcXVpZGl0eUZlZXM6IHN0cmluZztcbiAgdG90YWxMaXF1aWRpdHlGZWVzUnVuZTogc3RyaW5nO1xuICByZXdhcmRzOiBzdHJpbmc7XG4gIGVhcm5pbmdzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sIGV4dGVuZHMgSW50ZXJ2YWwge1xuICBwb29sOiBzdHJpbmc7XG4gIGFzc2V0TGlxdWlkaXR5RmVlczogQmlnTnVtYmVyO1xuICBydW5lTGlxdWlkaXR5RmVlczogQmlnTnVtYmVyO1xuICB0b3RhbExpcXVpZGl0eUZlZXNSdW5lOiBCaWdOdW1iZXI7XG4gIHJld2FyZHM6IEJpZ051bWJlcjtcbiAgZWFybmluZ3M6IEJpZ051bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xGbGF0IGV4dGVuZHMgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sIHtcbiAgcnVuZVByaWNlVVNEOiBCaWdOdW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxSZXNwb25zZSBleHRlbmRzIEludGVydmFsUmVzcG9uc2VXaXRoRWFybmluZ3Mge1xuICBwb29sczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sUmVzcG9uc2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5RWFybmluZ3NSZXNwb25zZSB7XG4gIG1ldGE6IEludGVydmFsUmVzcG9uc2VXaXRoRWFybmluZ3M7XG4gIGludGVydmFsczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxSZXNwb25zZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVydmFsV2l0aEVhcm5pbmdzIGV4dGVuZHMgSW50ZXJ2YWwge1xuICBsaXF1aWRpdHlGZWVzOiBCaWdOdW1iZXI7XG4gIGJsb2NrUmV3YXJkczogQmlnTnVtYmVyO1xuICBlYXJuaW5nczogQmlnTnVtYmVyO1xuICBib25kaW5nRWFybmluZ3M6IEJpZ051bWJlcjtcbiAgbGlxdWlkaXR5RWFybmluZ3M6IEJpZ051bWJlcjtcbiAgYXZnTm9kZUNvdW50OiBCaWdOdW1iZXI7XG4gIHJ1bmVQcmljZVVTRDogQmlnTnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlFYXJuaW5nc0ludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWxXaXRoRWFybmluZ3Mge1xuICBwb29sczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzIHtcbiAgbWV0YTogSW50ZXJ2YWxXaXRoRWFybmluZ3M7XG4gIGludGVydmFsczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5IaXN0b3J5RWFybmluZ3NJbnRlcnZhbHMgPSAoXG4gIGVhcm5pbmdzOiBIaXN0b3J5RWFybmluZ3MsXG4pOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xGbGF0W10gPT4gKFxuICBlYXJuaW5ncy5pbnRlcnZhbHMucmVkdWNlKChcbiAgICBtZW1vOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xGbGF0W10sXG4gICAge1xuICAgICAgcG9vbHMsXG4gICAgICBzdGFydFRpbWUsXG4gICAgICBlbmRUaW1lLFxuICAgICAgcnVuZVByaWNlVVNELFxuICAgIH0sXG4gICkgPT4gbWVtby5jb25jYXQoXG4gICAgcG9vbHMubWFwKChwb29sOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2wpID0+ICh7XG4gICAgICAuLi5wb29sLFxuICAgICAgc3RhcnRUaW1lLFxuICAgICAgZW5kVGltZSxcbiAgICAgIHJ1bmVQcmljZVVTRCxcbiAgICB9KSlcbiAgKSwgW10pXG4pXG5cbmNvbnN0IGNvbnZlcnRNZXRhVHlwZXMgPSAoXG4gIG1ldGE6IEludGVydmFsUmVzcG9uc2VXaXRoRWFybmluZ3MsXG4pOiBJbnRlcnZhbFdpdGhFYXJuaW5ncyA9PiAoe1xuICAuLi5tZXRhLFxuICAuLi5yYXdUb0ludGVydmFsKG1ldGEpLFxuICBsaXF1aWRpdHlGZWVzOiB0b0JpZ051bWJlcihtZXRhLmxpcXVpZGl0eUZlZXMpLFxuICBibG9ja1Jld2FyZHM6IHRvQmlnTnVtYmVyKG1ldGEuYmxvY2tSZXdhcmRzKSxcbiAgZWFybmluZ3M6IHRvQmlnTnVtYmVyKG1ldGEuZWFybmluZ3MpLFxuICBib25kaW5nRWFybmluZ3M6IHRvQmlnTnVtYmVyKG1ldGEuYm9uZGluZ0Vhcm5pbmdzKSxcbiAgbGlxdWlkaXR5RWFybmluZ3M6IHRvQmlnTnVtYmVyKG1ldGEubGlxdWlkaXR5RWFybmluZ3MpLFxuICBhdmdOb2RlQ291bnQ6IHRvQmlnTnVtYmVyKG1ldGEuYXZnTm9kZUNvdW50KSxcbiAgcnVuZVByaWNlVVNEOiB0b0JpZ051bWJlcihtZXRhLnJ1bmVQcmljZVVTRCksXG59KVxuXG5leHBvcnQgY29uc3QgY29udmVydEludGVydmFsUG9vbCA9IChcbiAgaW50ZXJ2YWxQb29sOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xSZXNwb25zZSxcbik6IEhpc3RvcnlFYXJuaW5nc0ludGVydmFsUG9vbCA9PiAoe1xuICAuLi5pbnRlcnZhbFBvb2wsXG4gIC4uLnJhd1RvSW50ZXJ2YWwoaW50ZXJ2YWxQb29sKSxcbiAgcG9vbDogaW50ZXJ2YWxQb29sLnBvb2wsXG4gIGFzc2V0TGlxdWlkaXR5RmVlczogdG9CaWdOdW1iZXIoaW50ZXJ2YWxQb29sLmFzc2V0TGlxdWlkaXR5RmVlcyksXG4gIHJ1bmVMaXF1aWRpdHlGZWVzOiB0b0JpZ051bWJlcihpbnRlcnZhbFBvb2wucnVuZUxpcXVpZGl0eUZlZXMpLFxuICB0b3RhbExpcXVpZGl0eUZlZXNSdW5lOiB0b0JpZ051bWJlcihpbnRlcnZhbFBvb2wudG90YWxMaXF1aWRpdHlGZWVzUnVuZSksXG4gIHJld2FyZHM6IHRvQmlnTnVtYmVyKGludGVydmFsUG9vbC5yZXdhcmRzKSxcbiAgZWFybmluZ3M6IHRvQmlnTnVtYmVyKGludGVydmFsUG9vbC5lYXJuaW5ncyksXG59KVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlQb29sU3dhcFJlc3BvbnNlIHtcbiAgbWV0YTogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5UG9vbFN3YXBJbnRlcnZhbFJlc3BvbnNlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVBvb2xTd2FwIHtcbiAgbWV0YTogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWw7XG4gIGludGVydmFsczogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWxbXTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhd1RvSGlzdG9yeUludGVydmFsU3dhcCA9IChcbiAgcmVzOiBIaXN0b3J5UG9vbFN3YXBJbnRlcnZhbFJlc3BvbnNlLFxuKTogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWwgPT4gKHtcbiAgLi4ucmVzLFxuICAuLi5yYXdUb0ludGVydmFsKHJlcyksXG4gIHRvQXNzZXRDb3VudDogdG9CaWdOdW1iZXIocmVzLnRvQXNzZXRDb3VudCksXG4gIHRvUnVuZUNvdW50OiB0b0JpZ051bWJlcihyZXMudG9SdW5lQ291bnQpLFxuICB0b3RhbENvdW50OiB0b0JpZ051bWJlcihyZXMudG90YWxDb3VudCksXG4gIHRvQXNzZXRWb2x1bWU6IHRvQmlnTnVtYmVyKHJlcy50b0Fzc2V0Vm9sdW1lKSxcbiAgdG9SdW5lVm9sdW1lOiB0b0JpZ051bWJlcihyZXMudG9SdW5lVm9sdW1lKSxcbiAgdG90YWxWb2x1bWU6IHRvQmlnTnVtYmVyKHJlcy50b3RhbFZvbHVtZSksXG4gIHRvQXNzZXRGZWVzOiB0b0JpZ051bWJlcihyZXMudG9Bc3NldEZlZXMpLFxuICB0b1J1bmVGZWVzOiB0b0JpZ051bWJlcihyZXMudG9SdW5lRmVlcyksXG4gIHRvdGFsRmVlczogdG9CaWdOdW1iZXIocmVzLnRvdGFsRmVlcyksXG4gIHRvQXNzZXRBdmVyYWdlU2xpcDogdG9CaWdOdW1iZXIocmVzLnRvQXNzZXRBdmVyYWdlU2xpcCksXG4gIHRvUnVuZUF2ZXJhZ2VTbGlwOiB0b0JpZ051bWJlcihyZXMudG9SdW5lQXZlcmFnZVNsaXApLFxuICBhdmVyYWdlU2xpcDogdG9CaWdOdW1iZXIocmVzLmF2ZXJhZ2VTbGlwKSxcbiAgcnVuZVByaWNlVVNEOiB0b0JpZ051bWJlcihyZXMucnVuZVByaWNlVVNEKSxcbn0pXG5cbmV4cG9ydCBjb25zdCByYXdUb0hpc3RvcnlTd2FwID0gKHJlczogSGlzdG9yeVBvb2xTd2FwUmVzcG9uc2UpOiBIaXN0b3J5UG9vbFN3YXAgPT4gKHtcbiAgbWV0YToge1xuICAgIC4uLnJlcy5tZXRhLFxuICAgIC4uLnJhd1RvSGlzdG9yeUludGVydmFsU3dhcChyZXMubWV0YSksXG4gIH0sXG4gIGludGVydmFsczogcmVzLmludGVydmFscy5tYXAocmF3VG9IaXN0b3J5SW50ZXJ2YWxTd2FwKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBoaXN0b3J5U3dhcCA9IGFzeW5jIChcbiAge1xuICAgIHBvb2wsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBIaXN0b3J5UG9vbFJlcXVlc3RPcHRpb25zLFxuKSA9PiAoXG4gIGZldGNoPEhpc3RvcnlQb29sU3dhcFJlc3BvbnNlPih7XG4gICAgcGF0aDogJy92Mi9oaXN0b3J5L3N3YXBzJyxcbiAgICBib2R5OiBvcHRpb25zLFxuICB9KS50aGVuKHJhd1RvSGlzdG9yeVN3YXApXG4pXG5cbmV4cG9ydCBjb25zdCBoaXN0b3J5RWFybmluZ3MgPSBhc3luYyAoXG4gIG9wdGlvbnM/OiBIaXN0b3J5UmVxdWVzdE9wdGlvbnMsXG4pID0+IChcbiAgZmV0Y2g8SGlzdG9yeUVhcm5pbmdzUmVzcG9uc2U+KHtcbiAgICBwYXRoOiAnL3YyL2hpc3RvcnkvZWFybmluZ3MnLFxuICAgIGJvZHk6IG9wdGlvbnMgYXMgb2JqZWN0LFxuICB9KS50aGVuKHJlc3BvbnNlID0+ICh7XG4gICAgLi4ucmVzcG9uc2UsXG4gICAgbWV0YToge1xuICAgICAgLi4ucmVzcG9uc2UubWV0YSxcbiAgICAgIC4uLmNvbnZlcnRNZXRhVHlwZXMocmVzcG9uc2UubWV0YSksXG4gICAgfSxcbiAgICBpbnRlcnZhbHM6IHJlc3BvbnNlLmludGVydmFscy5tYXAoaW50ZXJ2YWwgPT4gKHtcbiAgICAgIC4uLmludGVydmFsLFxuICAgICAgLi4uY29udmVydE1ldGFUeXBlcyhpbnRlcnZhbCksXG4gICAgICBwb29sczogaW50ZXJ2YWwucG9vbHMubWFwKGNvbnZlcnRJbnRlcnZhbFBvb2wpLFxuICAgIH0pKVxuICB9KSlcbilcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRIaXN0b3J5RGVwdGhJbnRlcnZhbCA9IChcbiAgaW50ZXJ2YWw6IEhpc3RvcnlEZXB0aEludGVydmFsUmVzcG9uc2UsXG4pOiBIaXN0b3J5RGVwdGhJbnRlcnZhbCA9PiAoe1xuICAuLi5pbnRlcnZhbCxcbiAgLi4ucmF3VG9JbnRlcnZhbChpbnRlcnZhbCksXG4gIGFzc2V0RGVwdGg6IHRvQmlnTnVtYmVyKGludGVydmFsLmFzc2V0RGVwdGgpLFxuICBydW5lRGVwdGg6IHRvQmlnTnVtYmVyKGludGVydmFsLnJ1bmVEZXB0aCksXG4gIGFzc2V0UHJpY2U6IHRvQmlnTnVtYmVyKGludGVydmFsLmFzc2V0UHJpY2UpLFxuICBhc3NldFByaWNlVVNEOiB0b0JpZ051bWJlcihpbnRlcnZhbC5hc3NldFByaWNlVVNEKSxcbiAgbGlxdWlkaXR5VW5pdHM6IHRvQmlnTnVtYmVyKGludGVydmFsLmxpcXVpZGl0eVVuaXRzKSxcbiAgc3ludGhVbml0czogdG9CaWdOdW1iZXIoaW50ZXJ2YWwuc3ludGhVbml0cyksXG4gIHN5bnRoU3VwcGx5OiB0b0JpZ051bWJlcihpbnRlcnZhbC5zeW50aFN1cHBseSksXG4gIHVuaXRzOiB0b0JpZ051bWJlcihpbnRlcnZhbC51bml0cyksXG59KVxuXG5leHBvcnQgY29uc3QgaGlzdG9yeURlcHRocyA9IGFzeW5jICh7XG4gIHBvb2wsXG4gIC4uLm9wdGlvbnNcbn06IEhpc3RvcnlQb29sUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEhpc3RvcnlEZXB0aD4gPT4ge1xuICByZXR1cm4gZmV0Y2g8SGlzdG9yeURlcHRoUmVzcG9uc2U+KHtcbiAgICBwYXRoOiBgL3YyL2hpc3RvcnkvZGVwdGhzLyR7cG9vbH1gLFxuICAgIGJvZHk6IG9wdGlvbnMgYXMgb2JqZWN0LFxuICB9KS50aGVuKGRlcHRocyA9PiAoe1xuICAgIC4uLmRlcHRocyxcbiAgICBtZXRhOiB7XG4gICAgICAuLi5kZXB0aHMubWV0YSxcbiAgICAgIHBvb2wsXG4gICAgfSxcbiAgICBpbnRlcnZhbHM6IGRlcHRocy5pbnRlcnZhbHMubWFwKChpbnRlcnZhbCkgPT4gKHtcbiAgICAgIC4uLmludGVydmFsLFxuICAgICAgLi4uY29udmVydEhpc3RvcnlEZXB0aEludGVydmFsKGludGVydmFsKSxcbiAgICB9KSksXG4gIH0pKVxufVxuXG5leHBvcnQgY29uc3QgaGlzdG9yeURlcHRoc1Bvb2xzTWFueSA9IChcbiAgcG9vbHM6IEhpc3RvcnlQb29sUmVxdWVzdE9wdGlvbnNbXSxcbikgPT4gKFxuICBQcm9taXNlLmFsbChwb29scy5tYXAoaGlzdG9yeURlcHRocykpXG4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVRWTEludGVydmFsUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgdG90YWxWYWx1ZVBvb2xlZDogc3RyaW5nO1xuICB0b3RhbFZhbHVlQm9uZGVkOiBzdHJpbmc7XG4gIHRvdGFsVmFsdWVMb2NrZWQ6IHN0cmluZztcbiAgcnVuZVByaWNlVVNEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVRWTEludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWwge1xuICB0b3RhbFZhbHVlUG9vbGVkOiBCaWdOdW1iZXI7XG4gIHRvdGFsVmFsdWVCb25kZWQ6IEJpZ051bWJlcjtcbiAgdG90YWxWYWx1ZUxvY2tlZDogQmlnTnVtYmVyO1xuICBydW5lUHJpY2VVU0Q6IEJpZ051bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5VFZMUmVzcG9uc2Uge1xuICBtZXRhOiBIaXN0b3J5VFZMSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5VFZMSW50ZXJ2YWxSZXNwb25zZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlUVkwge1xuICBtZXRhOiBIaXN0b3J5VFZMSW50ZXJ2YWw7XG4gIGludGVydmFsczogSGlzdG9yeVRWTEludGVydmFsW107XG59XG5cbmV4cG9ydCBjb25zdCByYXdUb0hpc3RvcnlJbnRlcnZhbFRWTCA9ICh0dmxJbnRlcnZhbDogSGlzdG9yeVRWTEludGVydmFsUmVzcG9uc2UpOiBIaXN0b3J5VFZMSW50ZXJ2YWwgPT4gKHtcbiAgLi4ucmF3VG9JbnRlcnZhbCh0dmxJbnRlcnZhbCksXG4gIHRvdGFsVmFsdWVQb29sZWQ6IHRvQmlnTnVtYmVyKHR2bEludGVydmFsLnRvdGFsVmFsdWVQb29sZWQpLFxuICB0b3RhbFZhbHVlQm9uZGVkOiB0b0JpZ051bWJlcih0dmxJbnRlcnZhbC50b3RhbFZhbHVlQm9uZGVkKSxcbiAgdG90YWxWYWx1ZUxvY2tlZDogdG9CaWdOdW1iZXIodHZsSW50ZXJ2YWwudG90YWxWYWx1ZUxvY2tlZCksXG4gIHJ1bmVQcmljZVVTRDogdG9CaWdOdW1iZXIodHZsSW50ZXJ2YWwucnVuZVByaWNlVVNEKSxcbn0pXG5cbmV4cG9ydCBjb25zdCByYXdUb0hpc3RvcnlUVkwgPSAodHZsOiBIaXN0b3J5VFZMUmVzcG9uc2UpOiBIaXN0b3J5VFZMID0+ICh7XG4gIG1ldGE6IHtcbiAgICAuLi50dmwsXG4gICAgLi4ucmF3VG9IaXN0b3J5SW50ZXJ2YWxUVkwodHZsLm1ldGEpLFxuICB9LFxuICBpbnRlcnZhbHM6IHR2bC5pbnRlcnZhbHMubWFwKHJhd1RvSGlzdG9yeUludGVydmFsVFZMKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBoaXN0b3J5VFZMID0gKFxuICBpbnRlcnZhbDogSW50ZXJ2YWxSZXF1ZXN0LFxuKTogUHJvbWlzZTxIaXN0b3J5VFZMPiA9PiAoXG4gIGZldGNoPEhpc3RvcnlUVkxSZXNwb25zZT4oe1xuICAgIHBhdGg6ICcvdjIvaGlzdG9yeS90dmwnLFxuICAgIGJvZHk6IGludGVydmFsLFxuICB9KS50aGVuKHJhd1RvSGlzdG9yeVRWTClcbilcblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgYWRkQXNzZXRMaXF1aWRpdHlWb2x1bWU6IHN0cmluZztcbiAgYWRkUnVuZUxpcXVpZGl0eVZvbHVtZTogc3RyaW5nO1xuICBhZGRMaXF1aWRpdHlWb2x1bWU6IHN0cmluZztcbiAgYWRkTGlxdWlkaXR5Q291bnQ6IHN0cmluZztcbiAgd2l0aGRyYXdBc3NldFZvbHVtZTogc3RyaW5nO1xuICB3aXRoZHJhd1J1bmVWb2x1bWU6IHN0cmluZztcbiAgaW1wZXJtYW5lbnRMb3NzUHJvdGVjdGlvblBhaWQ6IHN0cmluZztcbiAgd2l0aGRyYXdWb2x1bWU6IHN0cmluZztcbiAgd2l0aGRyYXdDb3VudDogc3RyaW5nO1xuICBuZXQ6IHN0cmluZztcbiAgcnVuZVByaWNlVVNEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNJbnRlcnZhbCBleHRlbmRzIEludGVydmFsIHtcbiAgYWRkQXNzZXRMaXF1aWRpdHlWb2x1bWU6IEJpZ051bWJlcjtcbiAgYWRkUnVuZUxpcXVpZGl0eVZvbHVtZTogQmlnTnVtYmVyO1xuICBhZGRMaXF1aWRpdHlWb2x1bWU6IEJpZ051bWJlcjtcbiAgYWRkTGlxdWlkaXR5Q291bnQ6IEJpZ051bWJlcjtcbiAgd2l0aGRyYXdBc3NldFZvbHVtZTogQmlnTnVtYmVyO1xuICB3aXRoZHJhd1J1bmVWb2x1bWU6IEJpZ051bWJlcjtcbiAgaW1wZXJtYW5lbnRMb3NzUHJvdGVjdGlvblBhaWQ6IEJpZ051bWJlcjtcbiAgd2l0aGRyYXdWb2x1bWU6IEJpZ051bWJlcjtcbiAgd2l0aGRyYXdDb3VudDogQmlnTnVtYmVyO1xuICBuZXQ6IEJpZ051bWJlcjtcbiAgcnVuZVByaWNlVVNEOiBCaWdOdW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNSZXNwb25zZSB7XG4gIG1ldGE6IEhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsUmVzcG9uc2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlcyB7XG4gIG1ldGE6IEhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzSW50ZXJ2YWw7XG4gIGludGVydmFsczogSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNJbnRlcnZhbFtdO1xufVxuXG5leHBvcnQgY29uc3QgcmF3VG9IaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsID0gKFxuICBjaGFuZ2VzOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsUmVzcG9uc2UsXG4pOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsID0+ICh7XG4gIGFkZEFzc2V0TGlxdWlkaXR5Vm9sdW1lOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuYWRkQXNzZXRMaXF1aWRpdHlWb2x1bWUpLFxuICBhZGRSdW5lTGlxdWlkaXR5Vm9sdW1lOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuYWRkUnVuZUxpcXVpZGl0eVZvbHVtZSksXG4gIGFkZExpcXVpZGl0eVZvbHVtZTogbmV3IEJpZ051bWJlcihjaGFuZ2VzLmFkZExpcXVpZGl0eVZvbHVtZSksXG4gIGFkZExpcXVpZGl0eUNvdW50OiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuYWRkTGlxdWlkaXR5Q291bnQpLFxuICB3aXRoZHJhd0Fzc2V0Vm9sdW1lOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMud2l0aGRyYXdBc3NldFZvbHVtZSksXG4gIHdpdGhkcmF3UnVuZVZvbHVtZTogbmV3IEJpZ051bWJlcihjaGFuZ2VzLndpdGhkcmF3UnVuZVZvbHVtZSksXG4gIGltcGVybWFuZW50TG9zc1Byb3RlY3Rpb25QYWlkOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuaW1wZXJtYW5lbnRMb3NzUHJvdGVjdGlvblBhaWQpLFxuICB3aXRoZHJhd1ZvbHVtZTogbmV3IEJpZ051bWJlcihjaGFuZ2VzLndpdGhkcmF3Vm9sdW1lKSxcbiAgd2l0aGRyYXdDb3VudDogbmV3IEJpZ051bWJlcihjaGFuZ2VzLndpdGhkcmF3Q291bnQpLFxuICBuZXQ6IG5ldyBCaWdOdW1iZXIoY2hhbmdlcy5uZXQpLFxuICBydW5lUHJpY2VVU0Q6IG5ldyBCaWdOdW1iZXIoY2hhbmdlcy5ydW5lUHJpY2VVU0QpLFxuICAuLi5yYXdUb0ludGVydmFsKGNoYW5nZXMpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJhd1RvSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXMgPSAoXG4gIGNoYW5nZXM6IEhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzUmVzcG9uc2UsXG4pOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlcyA9PiAoe1xuICAuLi5jaGFuZ2VzLFxuICBtZXRhOiB7XG4gICAgLi4uY2hhbmdlcy5tZXRhLFxuICAgIC4uLnJhd1RvSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNJbnRlcnZhbChjaGFuZ2VzLm1ldGEpLFxuICB9LFxuICBpbnRlcnZhbHM6IGNoYW5nZXMuaW50ZXJ2YWxzLm1hcChyYXdUb0hpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzSW50ZXJ2YWwpLFxufSlcblxuZXhwb3J0IGNvbnN0IGhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzID0gKFxuICBvcHRpb25zOiBJbnRlcnZhbFJlcXVlc3RXaXRoUG9vbCxcbik6IFByb21pc2U8SGlzdG9yeUxpcXVpZGl0eUNoYW5nZXM+ID0+IChcbiAgZmV0Y2g8SGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNSZXNwb25zZT4oe1xuICAgIHBhdGg6ICcvdjIvaGlzdG9yeS9saXF1aWRpdHlfY2hhbmdlcycsXG4gICAgYm9keTogb3B0aW9ucyxcbiAgfSkudGhlbihyYXdUb0hpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzKVxuKVxuIl19