@ring-protocol/smart-order-router 0.5.30 → 0.5.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/main/routers/alpha-router/alpha-router.js +7 -2
- package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
- package/build/main/routers/alpha-router/functions/best-swap-route.js +73 -49
- package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.js +128 -23
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +8 -1
- package/build/main/routers/alpha-router/quoters/mixed-quoter.js +10 -8
- package/build/main/tsconfig.tsbuildinfo +1 -1
- package/build/main/util/amounts.d.ts +1 -1
- package/build/main/util/methodParameters.js +53 -12
- package/build/main/util/mixedRouteFilterOutV4Pools.d.ts +20 -0
- package/build/main/util/mixedRouteFilterOutV4Pools.js +28 -3
- package/build/module/routers/alpha-router/alpha-router.js +7 -2
- package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
- package/build/module/routers/alpha-router/functions/best-swap-route.js +74 -50
- package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.js +125 -22
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +8 -1
- package/build/module/routers/alpha-router/quoters/mixed-quoter.js +10 -8
- package/build/module/tsconfig.module.tsbuildinfo +1 -1
- package/build/module/util/methodParameters.js +58 -16
- package/build/module/util/mixedRouteFilterOutV4Pools.d.ts +20 -0
- package/build/module/util/mixedRouteFilterOutV4Pools.js +26 -2
- package/package.json +3 -3
|
@@ -5,6 +5,6 @@ export declare class CurrencyAmount extends CurrencyAmountRaw<Currency> {
|
|
|
5
5
|
export declare const MAX_UINT160 = "0xffffffffffffffffffffffffffffffffffffffff";
|
|
6
6
|
export declare function parseAmount(value: string, currency: Currency): CurrencyAmount;
|
|
7
7
|
export declare function parseFeeAmount(feeAmountStr: string): FeeAmount;
|
|
8
|
-
export declare function unparseFeeAmount(feeAmount: FeeAmount): "10000" | "3000" | "500" | "400" | "300" | "200"
|
|
8
|
+
export declare function unparseFeeAmount(feeAmount: FeeAmount): "100" | "10000" | "3000" | "500" | "400" | "300" | "200";
|
|
9
9
|
export declare function getApplicableV3FeeAmounts(chainId: ChainId): FeeAmount[];
|
|
10
10
|
export declare function getApplicableV4FeesTickspacingsHooks(chainId: ChainId): Array<[number, number, string]>;
|
|
@@ -14,6 +14,10 @@ const v4_sdk_1 = require("@ring-protocol/v4-sdk");
|
|
|
14
14
|
const lodash_1 = __importDefault(require("lodash"));
|
|
15
15
|
const __1 = require("..");
|
|
16
16
|
function buildTrade(tokenInCurrency, fewTokenInToken, tokenOutCurrency, fewTokenOutToken, tradeType, routeAmounts) {
|
|
17
|
+
// fewTokenInToken/fewTokenOutToken 保留参数以维持 API 兼容性,
|
|
18
|
+
// 但 FewV2 路由现在统一使用 tokenInCurrency/tokenOutCurrency
|
|
19
|
+
void fewTokenInToken;
|
|
20
|
+
void fewTokenOutToken;
|
|
17
21
|
/// Removed partition because of new mixedRoutes
|
|
18
22
|
const v4RouteAmounts = lodash_1.default.filter(routeAmounts, (routeAmount) => routeAmount.protocol === router_sdk_1.Protocol.V4);
|
|
19
23
|
const v3RouteAmounts = lodash_1.default.filter(routeAmounts, (routeAmount) => routeAmount.protocol === router_sdk_1.Protocol.V3);
|
|
@@ -101,12 +105,12 @@ function buildTrade(tokenInCurrency, fewTokenInToken, tokenOutCurrency, fewToken
|
|
|
101
105
|
});
|
|
102
106
|
const fewV2Routes = lodash_1.default.map(ringFewV2RouteAmounts, (routeAmount) => {
|
|
103
107
|
const { route, amount, quote } = routeAmount;
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
//
|
|
108
|
+
// FewV2 路由内部使用 fewToken,但 trade 对外的 inputAmount/outputAmount
|
|
109
|
+
// 必须使用用户指定的原始 currency(与 V2/V3/V4 保持一致),
|
|
110
|
+
// 否则 Trade.outputAmount 在 reduce 聚合多个路由时会因 currency 不匹配而崩溃。
|
|
107
111
|
if (tradeType == sdk_core_1.TradeType.EXACT_INPUT) {
|
|
108
|
-
const amountCurrency = __1.CurrencyAmount.fromFractionalAmount(
|
|
109
|
-
const quoteCurrency = __1.CurrencyAmount.fromFractionalAmount(
|
|
112
|
+
const amountCurrency = __1.CurrencyAmount.fromFractionalAmount(tokenInCurrency, amount.numerator, amount.denominator);
|
|
113
|
+
const quoteCurrency = __1.CurrencyAmount.fromFractionalAmount(tokenOutCurrency, quote.numerator, quote.denominator);
|
|
110
114
|
const ringFewRouteV2SDK = new few_v2_sdk_1.Route(route.pairs, amountCurrency.currency, quoteCurrency.currency);
|
|
111
115
|
return {
|
|
112
116
|
fewRouteV2: ringFewRouteV2SDK,
|
|
@@ -115,8 +119,8 @@ function buildTrade(tokenInCurrency, fewTokenInToken, tokenOutCurrency, fewToken
|
|
|
115
119
|
};
|
|
116
120
|
}
|
|
117
121
|
else {
|
|
118
|
-
const quoteCurrency = __1.CurrencyAmount.fromFractionalAmount(
|
|
119
|
-
const amountCurrency = __1.CurrencyAmount.fromFractionalAmount(
|
|
122
|
+
const quoteCurrency = __1.CurrencyAmount.fromFractionalAmount(tokenInCurrency, quote.numerator, quote.denominator);
|
|
123
|
+
const amountCurrency = __1.CurrencyAmount.fromFractionalAmount(tokenOutCurrency, amount.numerator, amount.denominator);
|
|
120
124
|
const ringFewRouteV2SDK = new few_v2_sdk_1.Route(route.pairs, quoteCurrency.currency, amountCurrency.currency);
|
|
121
125
|
return {
|
|
122
126
|
fewRouteV2: ringFewRouteV2SDK,
|
|
@@ -135,9 +139,16 @@ function buildTrade(tokenInCurrency, fewTokenInToken, tokenOutCurrency, fewToken
|
|
|
135
139
|
// use native currencies if specified by the user. This is so that the Trade knows to wrap/unwrap.
|
|
136
140
|
const amountCurrency = __1.CurrencyAmount.fromFractionalAmount(tokenInCurrency, amount.numerator, amount.denominator);
|
|
137
141
|
const quoteCurrency = __1.CurrencyAmount.fromFractionalAmount(tokenOutCurrency, quote.numerator, quote.denominator);
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
|
|
142
|
+
// 必须保留桥接池(retainFakePools=true)!
|
|
143
|
+
//
|
|
144
|
+
// 原因:MixedRouteSDK 构造函数默认会过滤掉 tickSpacing=0 的 V4Pool。
|
|
145
|
+
// 但桥接池承载了 token 空间转换信息(如 USDC→fwUSDC),如果被过滤掉,
|
|
146
|
+
// token 路径会断裂:V3 输出 USDC,而下一个 FewV2 池期望 fwUSDC。
|
|
147
|
+
//
|
|
148
|
+
// 在执行阶段,Universal Router 的 addMixedSwap 会识别这些桥接池,
|
|
149
|
+
// 将它们转换为 WRAP_FEW_TOKEN / UNWRAP_FEW_TOKEN 等命令。
|
|
150
|
+
const routeRaw = new router_sdk_1.MixedRouteSDK(route.pools, amountCurrency.currency, quoteCurrency.currency, true // retainFakePools — 保留桥接池,不要过滤
|
|
151
|
+
);
|
|
141
152
|
return {
|
|
142
153
|
mixedRoute: routeRaw,
|
|
143
154
|
inputAmount: amountCurrency,
|
|
@@ -157,11 +168,41 @@ function buildTrade(tokenInCurrency, fewTokenInToken, tokenOutCurrency, fewToken
|
|
|
157
168
|
return trade;
|
|
158
169
|
}
|
|
159
170
|
exports.buildTrade = buildTrade;
|
|
171
|
+
/**
|
|
172
|
+
* 判断 trade 是否需要 Universal Router(而非 SwapRouter02)来编码 calldata。
|
|
173
|
+
*
|
|
174
|
+
* SwapRouter02 不支持 V4Pool 编码。当 trade 中包含任何 V4Pool 实例时
|
|
175
|
+
* (无论是真实 V4 池还是桥接池),都必须使用 Universal Router。
|
|
176
|
+
*
|
|
177
|
+
* 常见触发场景:mixed 路由包含 fewToken 桥接池(V4Pool, tickSpacing=0)。
|
|
178
|
+
*/
|
|
179
|
+
function tradeRequiresUniversalRouter(trade) {
|
|
180
|
+
return trade.swaps.some((swap) => {
|
|
181
|
+
var _a;
|
|
182
|
+
if (swap.route.protocol === router_sdk_1.Protocol.V4)
|
|
183
|
+
return true;
|
|
184
|
+
if (swap.route.protocol === router_sdk_1.Protocol.MIXED) {
|
|
185
|
+
return (_a = swap.route.pools) === null || _a === void 0 ? void 0 : _a.some((pool) => pool instanceof v4_sdk_1.Pool);
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
160
190
|
function buildSwapMethodParameters(trade, swapConfig, chainId) {
|
|
191
|
+
// 自动切换逻辑:SwapRouter02 无法编码 V4Pool(会抛出 UNSUPPORTED_PROTOCOL)。
|
|
192
|
+
// 当 trade 包含 V4Pool 实例(包括桥接池)时,自动升级到 Universal Router。
|
|
193
|
+
const needsUniversalRouter = tradeRequiresUniversalRouter(trade);
|
|
161
194
|
if (swapConfig.type == __1.SwapType.UNIVERSAL_ROUTER) {
|
|
162
195
|
return Object.assign(Object.assign({}, universal_router_sdk_1.SwapRouter.swapCallParameters(trade, swapConfig)), { to: (0, universal_router_sdk_1.UNIVERSAL_ROUTER_ADDRESS)(swapConfig.version, chainId) });
|
|
163
196
|
}
|
|
164
|
-
|
|
197
|
+
if (needsUniversalRouter) {
|
|
198
|
+
// 用户请求了 SwapRouter02,但 trade 含 V4Pool → 自动切换到 Universal Router
|
|
199
|
+
return Object.assign(Object.assign({}, universal_router_sdk_1.SwapRouter.swapCallParameters(trade, {
|
|
200
|
+
slippageTolerance: swapConfig.slippageTolerance,
|
|
201
|
+
recipient: swapConfig.recipient,
|
|
202
|
+
deadlineOrPreviousBlockhash: swapConfig.deadline,
|
|
203
|
+
})), { to: (0, universal_router_sdk_1.UNIVERSAL_ROUTER_ADDRESS)(universal_router_sdk_1.UniversalRouterVersion.V1_2, chainId) });
|
|
204
|
+
}
|
|
205
|
+
if (swapConfig.type == __1.SwapType.SWAP_ROUTER_02) {
|
|
165
206
|
const { recipient, slippageTolerance, deadline, inputTokenPermit } = swapConfig;
|
|
166
207
|
return Object.assign(Object.assign({}, router_sdk_1.SwapRouter.swapCallParameters(trade, {
|
|
167
208
|
recipient,
|
|
@@ -173,4 +214,4 @@ function buildSwapMethodParameters(trade, swapConfig, chainId) {
|
|
|
173
214
|
throw new Error(`Unsupported swap type ${swapConfig}`);
|
|
174
215
|
}
|
|
175
216
|
exports.buildSwapMethodParameters = buildSwapMethodParameters;
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kUGFyYW1ldGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsL21ldGhvZFBhcmFtZXRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBS21DO0FBQ25DLHNEQUE4RTtBQUM5RSw4RUFJNkM7QUFDN0MsMERBQXVFO0FBQ3ZFLGtEQUE0RDtBQUM1RCxrREFBNEQ7QUFDNUQsa0RBQTREO0FBQzVELG9EQUF1QjtBQUV2QiwwQkFZWTtBQUVaLFNBQWdCLFVBQVUsQ0FDeEIsZUFBeUIsRUFDekIsZUFBc0IsRUFDdEIsZ0JBQTBCLEVBQzFCLGdCQUF1QixFQUN2QixTQUFxQixFQUNyQixZQUFtQztJQUVuQyxnREFBZ0Q7SUFDaEQsTUFBTSxjQUFjLEdBQUcsZ0JBQUMsQ0FBQyxNQUFNLENBQzdCLFlBQVksRUFDWixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsS0FBSyxxQkFBUSxDQUFDLEVBQUUsQ0FDdEQsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLGdCQUFDLENBQUMsTUFBTSxDQUM3QixZQUFZLEVBQ1osQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUsscUJBQVEsQ0FBQyxFQUFFLENBQ3RELENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxnQkFBQyxDQUFDLE1BQU0sQ0FDN0IsWUFBWSxFQUNaLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFLLHFCQUFRLENBQUMsRUFBRSxDQUN0RCxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsR0FBRyxnQkFBQyxDQUFDLE1BQU0sQ0FDcEMsWUFBWSxFQUNaLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFLLHFCQUFRLENBQUMsS0FBSyxDQUN6RCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxnQkFBQyxDQUFDLE1BQU0sQ0FDaEMs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
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kUGFyYW1ldGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsL21ldGhvZFBhcmFtZXRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBS21DO0FBQ25DLHNEQUE4RTtBQUM5RSw4RUFJNkM7QUFDN0MsMERBQXVFO0FBQ3ZFLGtEQUE0RDtBQUM1RCxrREFBNEQ7QUFDNUQsa0RBQTRFO0FBQzVFLG9EQUF1QjtBQUV2QiwwQkFZWTtBQUVaLFNBQWdCLFVBQVUsQ0FDeEIsZUFBeUIsRUFDekIsZUFBc0IsRUFDdEIsZ0JBQTBCLEVBQzFCLGdCQUF1QixFQUN2QixTQUFxQixFQUNyQixZQUFtQztJQUVuQyxvREFBb0Q7SUFDcEQsb0RBQW9EO0lBQ3BELEtBQUssZUFBZSxDQUFDO0lBQ3JCLEtBQUssZ0JBQWdCLENBQUM7SUFFdEIsZ0RBQWdEO0lBQ2hELE1BQU0sY0FBYyxHQUFHLGdCQUFDLENBQUMsTUFBTSxDQUM3QixZQUFZLEVBQ1osQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUsscUJBQVEsQ0FBQyxFQUFFLENBQ3RELENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxnQkFBQyxDQUFDLE1BQU0sQ0FDN0IsWUFBWSxFQUNaLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFLLHFCQUFRLENBQUMsRUFBRSxDQUN0RCxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsZ0JBQUMsQ0FBQyxNQUFNLENBQzdCLFlBQVksRUFDWixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsS0FBSyxxQkFBUSxDQUFDLEVBQUUsQ0FDdEQsQ0FBQztJQUNGLE1BQU0scUJBQXFCLEdBQUcsZ0JBQUMsQ0FBQyxNQUFNLENBQ3BDLFlBQVksRUFDWixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsS0FBSyxx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
|
|
@@ -1,3 +1,23 @@
|
|
|
1
1
|
import { MixedRoute } from '../routers';
|
|
2
|
+
/**
|
|
3
|
+
* 判断路由是否包含「真实」V4 池(即 tickSpacing !== 0 的 V4Pool)。
|
|
4
|
+
*
|
|
5
|
+
* 注意区分:
|
|
6
|
+
* - 真实 V4 池:tickSpacing > 0,代表真实流动性,需要 V4 quoter 报价
|
|
7
|
+
* - 桥接池:tickSpacing === 0,只是 wrap/unwrap 的占位符(见 compute-all-routes.ts 的架构注释)
|
|
8
|
+
*
|
|
9
|
+
* 这个区分很重要,因为 mixed-quoter.ts 会用此函数决定是否过滤路由:
|
|
10
|
+
* 含真实 V4 池的路由在不支持 V4 的场景下需要被过滤,
|
|
11
|
+
* 但只含桥接池的路由应该被保留(桥接池不需要 V4 报价能力)。
|
|
12
|
+
*/
|
|
13
|
+
export declare function mixedRouteContainsRealV4Pools(route: MixedRoute): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated 使用 mixedRouteContainsRealV4Pools 代替。
|
|
16
|
+
* 此函数不区分真实 V4 池和桥接池,会误过滤含桥接池的 V3↔FewV2 路由。
|
|
17
|
+
*/
|
|
2
18
|
export declare function mixedRouteContainsV4Pools(route: MixedRoute): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* 过滤掉包含真实 V4 池的路由,但保留只含桥接池的路由。
|
|
21
|
+
* 用于 mixed-quoter 在不启用 V4 协议时筛选路由。
|
|
22
|
+
*/
|
|
3
23
|
export declare function mixedRouteFilterOutV4Pools(routes: MixedRoute[]): MixedRoute[];
|
|
@@ -1,17 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mixedRouteFilterOutV4Pools = exports.mixedRouteContainsV4Pools = void 0;
|
|
3
|
+
exports.mixedRouteFilterOutV4Pools = exports.mixedRouteContainsV4Pools = exports.mixedRouteContainsRealV4Pools = void 0;
|
|
4
4
|
const v4_sdk_1 = require("@ring-protocol/v4-sdk");
|
|
5
|
+
/**
|
|
6
|
+
* 判断路由是否包含「真实」V4 池(即 tickSpacing !== 0 的 V4Pool)。
|
|
7
|
+
*
|
|
8
|
+
* 注意区分:
|
|
9
|
+
* - 真实 V4 池:tickSpacing > 0,代表真实流动性,需要 V4 quoter 报价
|
|
10
|
+
* - 桥接池:tickSpacing === 0,只是 wrap/unwrap 的占位符(见 compute-all-routes.ts 的架构注释)
|
|
11
|
+
*
|
|
12
|
+
* 这个区分很重要,因为 mixed-quoter.ts 会用此函数决定是否过滤路由:
|
|
13
|
+
* 含真实 V4 池的路由在不支持 V4 的场景下需要被过滤,
|
|
14
|
+
* 但只含桥接池的路由应该被保留(桥接池不需要 V4 报价能力)。
|
|
15
|
+
*/
|
|
16
|
+
function mixedRouteContainsRealV4Pools(route) {
|
|
17
|
+
return route.pools.some((pool) => {
|
|
18
|
+
return pool instanceof v4_sdk_1.Pool && pool.tickSpacing !== 0;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
exports.mixedRouteContainsRealV4Pools = mixedRouteContainsRealV4Pools;
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated 使用 mixedRouteContainsRealV4Pools 代替。
|
|
24
|
+
* 此函数不区分真实 V4 池和桥接池,会误过滤含桥接池的 V3↔FewV2 路由。
|
|
25
|
+
*/
|
|
5
26
|
function mixedRouteContainsV4Pools(route) {
|
|
6
27
|
return route.pools.some((pool) => {
|
|
7
28
|
return pool instanceof v4_sdk_1.Pool;
|
|
8
29
|
});
|
|
9
30
|
}
|
|
10
31
|
exports.mixedRouteContainsV4Pools = mixedRouteContainsV4Pools;
|
|
32
|
+
/**
|
|
33
|
+
* 过滤掉包含真实 V4 池的路由,但保留只含桥接池的路由。
|
|
34
|
+
* 用于 mixed-quoter 在不启用 V4 协议时筛选路由。
|
|
35
|
+
*/
|
|
11
36
|
function mixedRouteFilterOutV4Pools(routes) {
|
|
12
37
|
return routes.filter((route) => {
|
|
13
|
-
return !
|
|
38
|
+
return !mixedRouteContainsRealV4Pools(route);
|
|
14
39
|
});
|
|
15
40
|
}
|
|
16
41
|
exports.mixedRouteFilterOutV4Pools = mixedRouteFilterOutV4Pools;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWRSb3V0ZUZpbHRlck91dFY0UG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9taXhlZFJvdXRlRmlsdGVyT3V0VjRQb29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrREFBdUQ7QUFHdkQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLDZCQUE2QixDQUFDLEtBQWlCO0lBQzdELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMvQixPQUFPLElBQUksWUFBWSxhQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBSkQsc0VBSUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxLQUFpQjtJQUN6RCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDL0IsT0FBTyxJQUFJLFlBQVksYUFBTSxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELDhEQUlDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQUMsTUFBb0I7SUFDN0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDN0IsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELGdFQUlDIn0=
|