@baozi.bet/mcp-server 4.0.0
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/README.md +294 -0
- package/dist/__tests__/full-test.d.ts +1 -0
- package/dist/__tests__/full-test.js +291 -0
- package/dist/builders/affiliate-transaction.d.ts +41 -0
- package/dist/builders/affiliate-transaction.js +123 -0
- package/dist/builders/bet-transaction.d.ts +70 -0
- package/dist/builders/bet-transaction.js +323 -0
- package/dist/builders/claim-transaction.d.ts +57 -0
- package/dist/builders/claim-transaction.js +196 -0
- package/dist/builders/creator-transaction.d.ts +49 -0
- package/dist/builders/creator-transaction.js +177 -0
- package/dist/builders/dispute-transaction.d.ts +81 -0
- package/dist/builders/dispute-transaction.js +215 -0
- package/dist/builders/index.d.ts +14 -0
- package/dist/builders/index.js +15 -0
- package/dist/builders/market-creation-tx.d.ts +65 -0
- package/dist/builders/market-creation-tx.js +362 -0
- package/dist/builders/market-management-transaction.d.ts +85 -0
- package/dist/builders/market-management-transaction.js +239 -0
- package/dist/builders/race-transaction.d.ts +67 -0
- package/dist/builders/race-transaction.js +242 -0
- package/dist/builders/resolution-transaction.d.ts +108 -0
- package/dist/builders/resolution-transaction.js +250 -0
- package/dist/builders/whitelist-transaction.d.ts +72 -0
- package/dist/builders/whitelist-transaction.js +179 -0
- package/dist/config.d.ts +138 -0
- package/dist/config.js +307 -0
- package/dist/handlers/agent-network.d.ts +81 -0
- package/dist/handlers/agent-network.js +332 -0
- package/dist/handlers/claims.d.ts +47 -0
- package/dist/handlers/claims.js +218 -0
- package/dist/handlers/market-creation.d.ts +154 -0
- package/dist/handlers/market-creation.js +290 -0
- package/dist/handlers/markets.d.ts +41 -0
- package/dist/handlers/markets.js +319 -0
- package/dist/handlers/positions.d.ts +40 -0
- package/dist/handlers/positions.js +244 -0
- package/dist/handlers/quote.d.ts +33 -0
- package/dist/handlers/quote.js +144 -0
- package/dist/handlers/race-markets.d.ts +54 -0
- package/dist/handlers/race-markets.js +308 -0
- package/dist/handlers/resolution.d.ts +43 -0
- package/dist/handlers/resolution.js +194 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +109 -0
- package/dist/resources.d.ts +13 -0
- package/dist/resources.js +336 -0
- package/dist/tools.d.ts +3109 -0
- package/dist/tools.js +1956 -0
- package/dist/validation/bet-rules.d.ts +82 -0
- package/dist/validation/bet-rules.js +276 -0
- package/dist/validation/creation-rules.d.ts +69 -0
- package/dist/validation/creation-rules.js +302 -0
- package/dist/validation/index.d.ts +6 -0
- package/dist/validation/index.js +7 -0
- package/dist/validation/market-rules.d.ts +60 -0
- package/dist/validation/market-rules.js +237 -0
- package/dist/validation/parimutuel-rules.d.ts +117 -0
- package/dist/validation/parimutuel-rules.js +270 -0
- package/package.json +52 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Market Creation Handler
|
|
3
|
+
*
|
|
4
|
+
* Provides high-level functions for creating markets:
|
|
5
|
+
* - Validation against v6.2 rules
|
|
6
|
+
* - Fee calculation
|
|
7
|
+
* - Transaction building
|
|
8
|
+
* - PDA derivation helpers
|
|
9
|
+
*/
|
|
10
|
+
import { Connection, PublicKey } from '@solana/web3.js';
|
|
11
|
+
import { validateMarketCreation, getCreationFee, calculateResolutionTime, calculateRecommendedClosingTime, } from '../validation/creation-rules.js';
|
|
12
|
+
import { buildCreateLabMarketTransaction, buildCreatePrivateMarketTransaction, buildCreateRaceMarketTransaction, getNextMarketId, previewMarketPda, previewRaceMarketPda, } from '../builders/market-creation-tx.js';
|
|
13
|
+
import { simulateBetTransaction } from '../builders/bet-transaction.js';
|
|
14
|
+
import { FEES, TIMING, RPC_ENDPOINT } from '../config.js';
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// PREVIEW MARKET CREATION
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Preview market creation - validates and returns costs without building tx
|
|
20
|
+
*/
|
|
21
|
+
export async function previewMarketCreation(params, connection) {
|
|
22
|
+
const conn = connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
23
|
+
// Parse dates
|
|
24
|
+
const closingTime = new Date(params.closingTime);
|
|
25
|
+
const eventTime = params.eventTime ? new Date(params.eventTime) : undefined;
|
|
26
|
+
const measurementStart = params.measurementStart ? new Date(params.measurementStart) : undefined;
|
|
27
|
+
const measurementEnd = params.measurementEnd ? new Date(params.measurementEnd) : undefined;
|
|
28
|
+
// Calculate resolution time if not provided
|
|
29
|
+
let resolutionTime;
|
|
30
|
+
if (params.resolutionTime) {
|
|
31
|
+
resolutionTime = new Date(params.resolutionTime);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
resolutionTime = calculateResolutionTime(closingTime, params.marketType || 'event', eventTime);
|
|
35
|
+
}
|
|
36
|
+
// Validate
|
|
37
|
+
const validation = validateMarketCreation({
|
|
38
|
+
question: params.question,
|
|
39
|
+
closingTime,
|
|
40
|
+
resolutionTime,
|
|
41
|
+
layer: params.layer,
|
|
42
|
+
marketType: params.marketType,
|
|
43
|
+
eventTime,
|
|
44
|
+
measurementStart,
|
|
45
|
+
measurementEnd,
|
|
46
|
+
});
|
|
47
|
+
// Get next market ID
|
|
48
|
+
const { marketId } = await getNextMarketId(conn);
|
|
49
|
+
const { marketPda } = previewMarketPda(marketId);
|
|
50
|
+
// Calculate costs
|
|
51
|
+
const { sol: creationFeeSol } = getCreationFee(params.layer);
|
|
52
|
+
const totalCostSol = creationFeeSol + validation.computed.estimatedRentSol;
|
|
53
|
+
// Recommended timing if event-based and no closing time issues
|
|
54
|
+
let recommendedTiming;
|
|
55
|
+
if (params.marketType === 'event' && eventTime) {
|
|
56
|
+
const recClose = calculateRecommendedClosingTime(eventTime);
|
|
57
|
+
const recRes = calculateResolutionTime(recClose, 'event', eventTime);
|
|
58
|
+
recommendedTiming = {
|
|
59
|
+
closingTime: recClose.toISOString(),
|
|
60
|
+
resolutionTime: recRes.toISOString(),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
validation,
|
|
65
|
+
marketPda: validation.valid ? marketPda : undefined,
|
|
66
|
+
marketId: validation.valid ? marketId.toString() : undefined,
|
|
67
|
+
creationFeeSol,
|
|
68
|
+
platformFeeBps: validation.computed.platformFeeBps,
|
|
69
|
+
estimatedRentSol: validation.computed.estimatedRentSol,
|
|
70
|
+
totalCostSol,
|
|
71
|
+
recommendedTiming,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Preview race market creation
|
|
76
|
+
*/
|
|
77
|
+
export async function previewRaceMarketCreation(params, connection) {
|
|
78
|
+
const conn = connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
79
|
+
const closingTime = new Date(params.closingTime);
|
|
80
|
+
const resolutionTime = params.resolutionTime
|
|
81
|
+
? new Date(params.resolutionTime)
|
|
82
|
+
: new Date(closingTime.getTime() + 24 * 60 * 60 * 1000);
|
|
83
|
+
// Validate
|
|
84
|
+
const validation = validateMarketCreation({
|
|
85
|
+
question: params.question,
|
|
86
|
+
closingTime,
|
|
87
|
+
resolutionTime,
|
|
88
|
+
layer: 'lab',
|
|
89
|
+
outcomes: params.outcomes,
|
|
90
|
+
});
|
|
91
|
+
// Get next race market ID
|
|
92
|
+
const { raceMarketId } = await getNextMarketId(conn);
|
|
93
|
+
const { raceMarketPda } = previewRaceMarketPda(raceMarketId);
|
|
94
|
+
// Race markets use lab fees
|
|
95
|
+
const { sol: creationFeeSol } = getCreationFee('lab');
|
|
96
|
+
const totalCostSol = creationFeeSol + validation.computed.estimatedRentSol;
|
|
97
|
+
return {
|
|
98
|
+
validation,
|
|
99
|
+
marketPda: validation.valid ? raceMarketPda : undefined,
|
|
100
|
+
marketId: validation.valid ? raceMarketId.toString() : undefined,
|
|
101
|
+
creationFeeSol,
|
|
102
|
+
platformFeeBps: validation.computed.platformFeeBps,
|
|
103
|
+
estimatedRentSol: validation.computed.estimatedRentSol,
|
|
104
|
+
totalCostSol,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// =============================================================================
|
|
108
|
+
// BUILD AND VALIDATE TRANSACTIONS
|
|
109
|
+
// =============================================================================
|
|
110
|
+
/**
|
|
111
|
+
* Build lab market creation transaction with full validation
|
|
112
|
+
*/
|
|
113
|
+
export async function createLabMarket(params, connection) {
|
|
114
|
+
const conn = connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
115
|
+
// Preview first (validates)
|
|
116
|
+
const preview = await previewMarketCreation(params, conn);
|
|
117
|
+
if (!preview.validation.valid) {
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
error: preview.validation.errors.join('; '),
|
|
121
|
+
validation: preview.validation,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Build transaction
|
|
125
|
+
const closingTime = new Date(params.closingTime);
|
|
126
|
+
const resolutionTime = params.resolutionTime
|
|
127
|
+
? new Date(params.resolutionTime)
|
|
128
|
+
: calculateResolutionTime(closingTime, params.marketType || 'event', params.eventTime ? new Date(params.eventTime) : undefined);
|
|
129
|
+
const inviteHash = params.inviteHash
|
|
130
|
+
? Buffer.from(params.inviteHash, 'hex')
|
|
131
|
+
: undefined;
|
|
132
|
+
// Calculate resolutionBuffer (seconds from closing to resolution)
|
|
133
|
+
const resolutionBuffer = Math.floor((resolutionTime.getTime() - closingTime.getTime()) / 1000);
|
|
134
|
+
const result = await buildCreateLabMarketTransaction({
|
|
135
|
+
question: params.question,
|
|
136
|
+
closingTime,
|
|
137
|
+
resolutionBuffer,
|
|
138
|
+
creatorWallet: params.creatorWallet,
|
|
139
|
+
}, conn);
|
|
140
|
+
// Simulate
|
|
141
|
+
const simulation = await simulateBetTransaction(result.transaction, new PublicKey(params.creatorWallet), conn);
|
|
142
|
+
return {
|
|
143
|
+
success: true,
|
|
144
|
+
validation: preview.validation,
|
|
145
|
+
transaction: {
|
|
146
|
+
serialized: result.serializedTx,
|
|
147
|
+
marketPda: result.marketPda,
|
|
148
|
+
marketId: result.marketId.toString(),
|
|
149
|
+
},
|
|
150
|
+
simulation: {
|
|
151
|
+
success: simulation.success,
|
|
152
|
+
error: simulation.error,
|
|
153
|
+
unitsConsumed: simulation.unitsConsumed,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Build private market creation transaction
|
|
159
|
+
*/
|
|
160
|
+
export async function createPrivateMarket(params, connection) {
|
|
161
|
+
const conn = connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
162
|
+
// Use lab preview but with private layer
|
|
163
|
+
const preview = await previewMarketCreation({ ...params, layer: 'private' }, conn);
|
|
164
|
+
if (!preview.validation.valid) {
|
|
165
|
+
return {
|
|
166
|
+
success: false,
|
|
167
|
+
error: preview.validation.errors.join('; '),
|
|
168
|
+
validation: preview.validation,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const closingTime = new Date(params.closingTime);
|
|
172
|
+
const resolutionTime = params.resolutionTime
|
|
173
|
+
? new Date(params.resolutionTime)
|
|
174
|
+
: calculateResolutionTime(closingTime, params.marketType || 'event');
|
|
175
|
+
const inviteHash = params.inviteHash
|
|
176
|
+
? Buffer.from(params.inviteHash, 'hex')
|
|
177
|
+
: undefined;
|
|
178
|
+
// Calculate resolutionBuffer (seconds from closing to resolution)
|
|
179
|
+
const resolutionBuffer = Math.floor((resolutionTime.getTime() - closingTime.getTime()) / 1000);
|
|
180
|
+
const result = await buildCreatePrivateMarketTransaction({
|
|
181
|
+
question: params.question,
|
|
182
|
+
closingTime,
|
|
183
|
+
resolutionBuffer,
|
|
184
|
+
creatorWallet: params.creatorWallet,
|
|
185
|
+
}, conn);
|
|
186
|
+
const simulation = await simulateBetTransaction(result.transaction, new PublicKey(params.creatorWallet), conn);
|
|
187
|
+
return {
|
|
188
|
+
success: true,
|
|
189
|
+
validation: preview.validation,
|
|
190
|
+
transaction: {
|
|
191
|
+
serialized: result.serializedTx,
|
|
192
|
+
marketPda: result.marketPda,
|
|
193
|
+
marketId: result.marketId.toString(),
|
|
194
|
+
},
|
|
195
|
+
simulation: {
|
|
196
|
+
success: simulation.success,
|
|
197
|
+
error: simulation.error,
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Build race market creation transaction
|
|
203
|
+
*/
|
|
204
|
+
export async function createRaceMarket(params, connection) {
|
|
205
|
+
const conn = connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
206
|
+
const preview = await previewRaceMarketCreation(params, conn);
|
|
207
|
+
if (!preview.validation.valid) {
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
error: preview.validation.errors.join('; '),
|
|
211
|
+
validation: preview.validation,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
const closingTime = new Date(params.closingTime);
|
|
215
|
+
const resolutionTime = params.resolutionTime
|
|
216
|
+
? new Date(params.resolutionTime)
|
|
217
|
+
: new Date(closingTime.getTime() + 24 * 60 * 60 * 1000);
|
|
218
|
+
// Calculate resolutionBuffer (seconds from closing to resolution)
|
|
219
|
+
const resolutionBuffer = Math.floor((resolutionTime.getTime() - closingTime.getTime()) / 1000);
|
|
220
|
+
const result = await buildCreateRaceMarketTransaction({
|
|
221
|
+
question: params.question,
|
|
222
|
+
outcomes: params.outcomes,
|
|
223
|
+
closingTime,
|
|
224
|
+
resolutionBuffer,
|
|
225
|
+
creatorWallet: params.creatorWallet,
|
|
226
|
+
}, conn);
|
|
227
|
+
const simulation = await simulateBetTransaction(result.transaction, new PublicKey(params.creatorWallet), conn);
|
|
228
|
+
return {
|
|
229
|
+
success: true,
|
|
230
|
+
validation: preview.validation,
|
|
231
|
+
transaction: {
|
|
232
|
+
serialized: result.serializedTx,
|
|
233
|
+
raceMarketPda: result.marketPda,
|
|
234
|
+
marketId: result.marketId.toString(),
|
|
235
|
+
},
|
|
236
|
+
simulation: {
|
|
237
|
+
success: simulation.success,
|
|
238
|
+
error: simulation.error,
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
// =============================================================================
|
|
243
|
+
// UTILITY FUNCTIONS
|
|
244
|
+
// =============================================================================
|
|
245
|
+
/**
|
|
246
|
+
* Get creation fees for all layers
|
|
247
|
+
*/
|
|
248
|
+
export function getAllCreationFees() {
|
|
249
|
+
return {
|
|
250
|
+
official: getCreationFee('official'),
|
|
251
|
+
lab: getCreationFee('lab'),
|
|
252
|
+
private: getCreationFee('private'),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get platform fees for all layers
|
|
257
|
+
*/
|
|
258
|
+
export function getAllPlatformFees() {
|
|
259
|
+
return {
|
|
260
|
+
official: { bps: FEES.OFFICIAL_PLATFORM_FEE_BPS, percent: `${FEES.OFFICIAL_PLATFORM_FEE_BPS / 100}%` },
|
|
261
|
+
lab: { bps: FEES.LAB_PLATFORM_FEE_BPS, percent: `${FEES.LAB_PLATFORM_FEE_BPS / 100}%` },
|
|
262
|
+
private: { bps: FEES.PRIVATE_PLATFORM_FEE_BPS, percent: `${FEES.PRIVATE_PLATFORM_FEE_BPS / 100}%` },
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get timing constraints
|
|
267
|
+
*/
|
|
268
|
+
export function getTimingConstraints() {
|
|
269
|
+
return {
|
|
270
|
+
minEventBufferHours: TIMING.MIN_EVENT_BUFFER_HOURS,
|
|
271
|
+
recommendedEventBufferHours: TIMING.RECOMMENDED_EVENT_BUFFER_HOURS,
|
|
272
|
+
bettingFreezeSeconds: TIMING.BETTING_FREEZE_SECONDS,
|
|
273
|
+
maxMarketDurationDays: TIMING.MAX_MARKET_DURATION_DAYS,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Generate invite hash for private market
|
|
278
|
+
*/
|
|
279
|
+
export function generateInviteHash() {
|
|
280
|
+
const bytes = new Uint8Array(32);
|
|
281
|
+
crypto.getRandomValues(bytes);
|
|
282
|
+
return Buffer.from(bytes).toString('hex');
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Derive invite link from hash
|
|
286
|
+
*/
|
|
287
|
+
export function getInviteLink(marketPda, inviteHash) {
|
|
288
|
+
return `https://baozi.ooo/market/${marketPda}?invite=${inviteHash}`;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2V0LWNyZWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL21hcmtldC1jcmVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLCtCQUErQixHQUtoQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCwrQkFBK0IsRUFDL0IsbUNBQW1DLEVBQ25DLGdDQUFnQyxFQUNoQyxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWlEMUQsZ0ZBQWdGO0FBQ2hGLDBCQUEwQjtBQUMxQixnRkFBZ0Y7QUFFaEY7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxNQUEyQixFQUMzQixVQUF1QjtJQUV2QixNQUFNLElBQUksR0FBRyxVQUFVLElBQUksSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXJFLGNBQWM7SUFDZCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDakcsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFM0YsNENBQTRDO0lBQzVDLElBQUksY0FBb0IsQ0FBQztJQUN6QixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7U0FBTSxDQUFDO1FBQ04sY0FBYyxHQUFHLHVCQUF1QixDQUN0QyxXQUFXLEVBQ1gsTUFBTSxDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQzVCLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7SUFDWCxNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQztRQUN4QyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsV0FBVztRQUNYLGNBQWM7UUFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFNBQVM7UUFDVCxnQkFBZ0I7UUFDaEIsY0FBYztLQUNmLENBQUMsQ0FBQztJQUVILHFCQUFxQjtJQUNyQixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWpELGtCQUFrQjtJQUNsQixNQUFNLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLEdBQUcsY0FBYyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7SUFFM0UsK0RBQStEO0lBQy9ELElBQUksaUJBQThFLENBQUM7SUFDbkYsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRywrQkFBK0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLGlCQUFpQixHQUFHO1lBQ2xCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQ25DLGNBQWMsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFO1NBQ3JDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLFVBQVU7UUFDVixTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ25ELFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDNUQsY0FBYztRQUNkLGNBQWMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGNBQWM7UUFDbEQsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7UUFDdEQsWUFBWTtRQUNaLGlCQUFpQjtLQUNsQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsTUFBK0IsRUFDL0IsVUFBdUI7SUFFdkIsTUFBTSxJQUFJLEdBQUcsVUFBVSxJQUFJLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVyRSxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWM7UUFDMUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDakMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUUxRCxXQUFXO0lBQ1gsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUM7UUFDeEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFdBQVc7UUFDWCxjQUFjO1FBQ2QsS0FBSyxFQUFFLEtBQUs7UUFDWixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7S0FDMUIsQ0FBQyxDQUFDO0lBRUgsMEJBQTBCO0lBQzFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFN0QsNEJBQTRCO0lBQzVCLE1BQU0sRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE1BQU0sWUFBWSxHQUFHLGNBQWMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0lBRTNFLE9BQU87UUFDTCxVQUFVO1FBQ1YsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN2RCxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2hFLGNBQWM7UUFDZCxjQUFjLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxjQUFjO1FBQ2xELGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1FBQ3RELFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVELGdGQUFnRjtBQUNoRixrQ0FBa0M7QUFDbEMsZ0ZBQWdGO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLE1BQTJCLEVBQzNCLFVBQXVCO0lBZ0J2QixNQUFNLElBQUksR0FBRyxVQUFVLElBQUksSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXJFLDRCQUE0QjtJQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUxRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7WUFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMzQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjO1FBQzFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyx1QkFBdUIsQ0FDckIsV0FBVyxFQUNYLE1BQU0sQ0FBQyxVQUFVLElBQUksT0FBTyxFQUM1QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDMUQsQ0FBQztJQUVOLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVO1FBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFZCxrRUFBa0U7SUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRS9GLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUM7UUFDbkQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO0tBQ3BDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFVCxXQUFXO0lBQ1gsTUFBTSxVQUFVLEdBQUcsTUFBTSxzQkFBc0IsQ0FDN0MsTUFBTSxDQUFDLFdBQVcsRUFDbEIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNuQyxJQUFJLENBQ0wsQ0FBQztJQUVGLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixXQUFXLEVBQUU7WUFDWCxVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDL0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtTQUNyQztRQUNELFVBQVUsRUFBRTtZQUNWLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDdkIsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhO1NBQ3hDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLE1BQTJCLEVBQzNCLFVBQXVCO0lBZXZCLE1BQU0sSUFBSSxHQUFHLFVBQVUsSUFBSSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFckUseUNBQXlDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLE1BQU0scUJBQXFCLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFbkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsT0FBTztZQUNMLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0MsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjO1FBQzFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUV2RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVTtRQUNsQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztRQUN2QyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsa0VBQWtFO0lBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUUvRixNQUFNLE1BQU0sR0FBRyxNQUFNLG1DQUFtQyxDQUFDO1FBQ3ZELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixXQUFXO1FBQ1gsZ0JBQWdCO1FBQ2hCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtLQUNwQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRVQsTUFBTSxVQUFVLEdBQUcsTUFBTSxzQkFBc0IsQ0FDN0MsTUFBTSxDQUFDLFdBQVcsRUFDbEIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNuQyxJQUFJLENBQ0wsQ0FBQztJQUVGLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixXQUFXLEVBQUU7WUFDWCxVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDL0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtTQUNyQztRQUNELFVBQVUsRUFBRTtZQUNWLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7U0FDeEI7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsTUFBK0IsRUFDL0IsVUFBdUI7SUFldkIsTUFBTSxJQUFJLEdBQUcsVUFBVSxJQUFJLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVyRSxNQUFNLE9BQU8sR0FBRyxNQUFNLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUU5RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7WUFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMzQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWM7UUFDMUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDakMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUUxRCxrRUFBa0U7SUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRS9GLE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0NBQWdDLENBQUM7UUFDcEQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixXQUFXO1FBQ1gsZ0JBQWdCO1FBQ2hCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtLQUNwQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRVQsTUFBTSxVQUFVLEdBQUcsTUFBTSxzQkFBc0IsQ0FDN0MsTUFBTSxDQUFDLFdBQVcsRUFDbEIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNuQyxJQUFJLENBQ0wsQ0FBQztJQUVGLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixXQUFXLEVBQUU7WUFDWCxVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDL0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtTQUNyQztRQUNELFVBQVUsRUFBRTtZQUNWLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7U0FDeEI7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELGdGQUFnRjtBQUNoRixvQkFBb0I7QUFDcEIsZ0ZBQWdGO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUtoQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUM7UUFDcEMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxTQUFTLENBQUM7S0FDbkMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFLaEMsT0FBTztRQUNMLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEdBQUcsR0FBRyxFQUFFO1FBQ3RHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsR0FBRyxFQUFFO1FBQ3ZGLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEdBQUcsR0FBRyxFQUFFO0tBQ3BHLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBTWxDLE9BQU87UUFDTCxtQkFBbUIsRUFBRSxNQUFNLENBQUMsc0JBQXNCO1FBQ2xELDJCQUEyQixFQUFFLE1BQU0sQ0FBQyw4QkFBOEI7UUFDbEUsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLHNCQUFzQjtRQUNuRCxxQkFBcUIsRUFBRSxNQUFNLENBQUMsd0JBQXdCO0tBQ3ZELENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLFNBQWlCLEVBQUUsVUFBa0I7SUFDakUsT0FBTyw0QkFBNEIsU0FBUyxXQUFXLFVBQVUsRUFBRSxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hcmtldCBDcmVhdGlvbiBIYW5kbGVyXG4gKlxuICogUHJvdmlkZXMgaGlnaC1sZXZlbCBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIG1hcmtldHM6XG4gKiAtIFZhbGlkYXRpb24gYWdhaW5zdCB2Ni4yIHJ1bGVzXG4gKiAtIEZlZSBjYWxjdWxhdGlvblxuICogLSBUcmFuc2FjdGlvbiBidWlsZGluZ1xuICogLSBQREEgZGVyaXZhdGlvbiBoZWxwZXJzXG4gKi9cbmltcG9ydCB7IENvbm5lY3Rpb24sIFB1YmxpY0tleSB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQge1xuICB2YWxpZGF0ZU1hcmtldENyZWF0aW9uLFxuICBnZXRDcmVhdGlvbkZlZSxcbiAgY2FsY3VsYXRlUmVzb2x1dGlvblRpbWUsXG4gIGNhbGN1bGF0ZVJlY29tbWVuZGVkQ2xvc2luZ1RpbWUsXG4gIHZhbGlkYXRlUXVlc3Rpb24sXG4gIHZhbGlkYXRlUmFjZU91dGNvbWVzLFxuICBDcmVhdGVNYXJrZXRQYXJhbXMsXG4gIENyZWF0aW9uVmFsaWRhdGlvblJlc3VsdCxcbn0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jcmVhdGlvbi1ydWxlcy5qcyc7XG5pbXBvcnQge1xuICBidWlsZENyZWF0ZUxhYk1hcmtldFRyYW5zYWN0aW9uLFxuICBidWlsZENyZWF0ZVByaXZhdGVNYXJrZXRUcmFuc2FjdGlvbixcbiAgYnVpbGRDcmVhdGVSYWNlTWFya2V0VHJhbnNhY3Rpb24sXG4gIGdldE5leHRNYXJrZXRJZCxcbiAgcHJldmlld01hcmtldFBkYSxcbiAgcHJldmlld1JhY2VNYXJrZXRQZGEsXG59IGZyb20gJy4uL2J1aWxkZXJzL21hcmtldC1jcmVhdGlvbi10eC5qcyc7XG5pbXBvcnQgeyBzaW11bGF0ZUJldFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vYnVpbGRlcnMvYmV0LXRyYW5zYWN0aW9uLmpzJztcbmltcG9ydCB7IEZFRVMsIFRJTUlORywgUlBDX0VORFBPSU5UIH0gZnJvbSAnLi4vY29uZmlnLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtldENyZWF0aW9uUHJldmlldyB7XG4gIHZhbGlkYXRpb246IENyZWF0aW9uVmFsaWRhdGlvblJlc3VsdDtcbiAgbWFya2V0UGRhPzogc3RyaW5nO1xuICBtYXJrZXRJZD86IHN0cmluZztcbiAgY3JlYXRpb25GZWVTb2w6IG51bWJlcjtcbiAgcGxhdGZvcm1GZWVCcHM6IG51bWJlcjtcbiAgZXN0aW1hdGVkUmVudFNvbDogbnVtYmVyO1xuICB0b3RhbENvc3RTb2w6IG51bWJlcjtcbiAgcmVjb21tZW5kZWRUaW1pbmc/OiB7XG4gICAgY2xvc2luZ1RpbWU6IHN0cmluZztcbiAgICByZXNvbHV0aW9uVGltZTogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU1hcmtldFJlcXVlc3Qge1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICBsYXllcjogJ2xhYicgfCAncHJpdmF0ZSc7XG4gIGNsb3NpbmdUaW1lOiBzdHJpbmc7IC8vIElTTyA4NjAxXG4gIHJlc29sdXRpb25UaW1lPzogc3RyaW5nOyAvLyBJU08gODYwMSwgYXV0by1jYWxjdWxhdGVkIGlmIG5vdCBwcm92aWRlZFxuXG4gIC8vIEV2ZW50LWJhc2VkIChSdWxlIEEpXG4gIG1hcmtldFR5cGU/OiAnZXZlbnQnIHwgJ21lYXN1cmVtZW50JztcbiAgZXZlbnRUaW1lPzogc3RyaW5nOyAvLyBJU08gODYwMVxuXG4gIC8vIE1lYXN1cmVtZW50LXBlcmlvZCAoUnVsZSBCKVxuICBtZWFzdXJlbWVudFN0YXJ0Pzogc3RyaW5nO1xuICBtZWFzdXJlbWVudEVuZD86IHN0cmluZztcblxuICAvLyBQcml2YXRlIG1hcmtldFxuICBpbnZpdGVIYXNoPzogc3RyaW5nOyAvLyBoZXggc3RyaW5nXG5cbiAgLy8gQ3JlYXRvclxuICBjcmVhdG9yV2FsbGV0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmFjZU1hcmtldFJlcXVlc3Qge1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICBvdXRjb21lczogc3RyaW5nW107XG4gIGNsb3NpbmdUaW1lOiBzdHJpbmc7XG4gIHJlc29sdXRpb25UaW1lPzogc3RyaW5nO1xuICBjcmVhdG9yV2FsbGV0OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQUkVWSUVXIE1BUktFVCBDUkVBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQcmV2aWV3IG1hcmtldCBjcmVhdGlvbiAtIHZhbGlkYXRlcyBhbmQgcmV0dXJucyBjb3N0cyB3aXRob3V0IGJ1aWxkaW5nIHR4XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmV2aWV3TWFya2V0Q3JlYXRpb24oXG4gIHBhcmFtczogQ3JlYXRlTWFya2V0UmVxdWVzdCxcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb25cbik6IFByb21pc2U8TWFya2V0Q3JlYXRpb25QcmV2aWV3PiB7XG4gIGNvbnN0IGNvbm4gPSBjb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuXG4gIC8vIFBhcnNlIGRhdGVzXG4gIGNvbnN0IGNsb3NpbmdUaW1lID0gbmV3IERhdGUocGFyYW1zLmNsb3NpbmdUaW1lKTtcbiAgY29uc3QgZXZlbnRUaW1lID0gcGFyYW1zLmV2ZW50VGltZSA/IG5ldyBEYXRlKHBhcmFtcy5ldmVudFRpbWUpIDogdW5kZWZpbmVkO1xuICBjb25zdCBtZWFzdXJlbWVudFN0YXJ0ID0gcGFyYW1zLm1lYXN1cmVtZW50U3RhcnQgPyBuZXcgRGF0ZShwYXJhbXMubWVhc3VyZW1lbnRTdGFydCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lYXN1cmVtZW50RW5kID0gcGFyYW1zLm1lYXN1cmVtZW50RW5kID8gbmV3IERhdGUocGFyYW1zLm1lYXN1cmVtZW50RW5kKSA6IHVuZGVmaW5lZDtcblxuICAvLyBDYWxjdWxhdGUgcmVzb2x1dGlvbiB0aW1lIGlmIG5vdCBwcm92aWRlZFxuICBsZXQgcmVzb2x1dGlvblRpbWU6IERhdGU7XG4gIGlmIChwYXJhbXMucmVzb2x1dGlvblRpbWUpIHtcbiAgICByZXNvbHV0aW9uVGltZSA9IG5ldyBEYXRlKHBhcmFtcy5yZXNvbHV0aW9uVGltZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzb2x1dGlvblRpbWUgPSBjYWxjdWxhdGVSZXNvbHV0aW9uVGltZShcbiAgICAgIGNsb3NpbmdUaW1lLFxuICAgICAgcGFyYW1zLm1hcmtldFR5cGUgfHwgJ2V2ZW50JyxcbiAgICAgIGV2ZW50VGltZVxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZVxuICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVNYXJrZXRDcmVhdGlvbih7XG4gICAgcXVlc3Rpb246IHBhcmFtcy5xdWVzdGlvbixcbiAgICBjbG9zaW5nVGltZSxcbiAgICByZXNvbHV0aW9uVGltZSxcbiAgICBsYXllcjogcGFyYW1zLmxheWVyLFxuICAgIG1hcmtldFR5cGU6IHBhcmFtcy5tYXJrZXRUeXBlLFxuICAgIGV2ZW50VGltZSxcbiAgICBtZWFzdXJlbWVudFN0YXJ0LFxuICAgIG1lYXN1cmVtZW50RW5kLFxuICB9KTtcblxuICAvLyBHZXQgbmV4dCBtYXJrZXQgSURcbiAgY29uc3QgeyBtYXJrZXRJZCB9ID0gYXdhaXQgZ2V0TmV4dE1hcmtldElkKGNvbm4pO1xuICBjb25zdCB7IG1hcmtldFBkYSB9ID0gcHJldmlld01hcmtldFBkYShtYXJrZXRJZCk7XG5cbiAgLy8gQ2FsY3VsYXRlIGNvc3RzXG4gIGNvbnN0IHsgc29sOiBjcmVhdGlvbkZlZVNvbCB9ID0gZ2V0Q3JlYXRpb25GZWUocGFyYW1zLmxheWVyKTtcbiAgY29uc3QgdG90YWxDb3N0U29sID0gY3JlYXRpb25GZWVTb2wgKyB2YWxpZGF0aW9uLmNvbXB1dGVkLmVzdGltYXRlZFJlbnRTb2w7XG5cbiAgLy8gUmVjb21tZW5kZWQgdGltaW5nIGlmIGV2ZW50LWJhc2VkIGFuZCBubyBjbG9zaW5nIHRpbWUgaXNzdWVzXG4gIGxldCByZWNvbW1lbmRlZFRpbWluZzogeyBjbG9zaW5nVGltZTogc3RyaW5nOyByZXNvbHV0aW9uVGltZTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gIGlmIChwYXJhbXMubWFya2V0VHlwZSA9PT0gJ2V2ZW50JyAmJiBldmVudFRpbWUpIHtcbiAgICBjb25zdCByZWNDbG9zZSA9IGNhbGN1bGF0ZVJlY29tbWVuZGVkQ2xvc2luZ1RpbWUoZXZlbnRUaW1lKTtcbiAgICBjb25zdCByZWNSZXMgPSBjYWxjdWxhdGVSZXNvbHV0aW9uVGltZShyZWNDbG9zZSwgJ2V2ZW50JywgZXZlbnRUaW1lKTtcbiAgICByZWNvbW1lbmRlZFRpbWluZyA9IHtcbiAgICAgIGNsb3NpbmdUaW1lOiByZWNDbG9zZS50b0lTT1N0cmluZygpLFxuICAgICAgcmVzb2x1dGlvblRpbWU6IHJlY1Jlcy50b0lTT1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbGlkYXRpb24sXG4gICAgbWFya2V0UGRhOiB2YWxpZGF0aW9uLnZhbGlkID8gbWFya2V0UGRhIDogdW5kZWZpbmVkLFxuICAgIG1hcmtldElkOiB2YWxpZGF0aW9uLnZhbGlkID8gbWFya2V0SWQudG9TdHJpbmcoKSA6IHVuZGVmaW5lZCxcbiAgICBjcmVhdGlvbkZlZVNvbCxcbiAgICBwbGF0Zm9ybUZlZUJwczogdmFsaWRhdGlvbi5jb21wdXRlZC5wbGF0Zm9ybUZlZUJwcyxcbiAgICBlc3RpbWF0ZWRSZW50U29sOiB2YWxpZGF0aW9uLmNvbXB1dGVkLmVzdGltYXRlZFJlbnRTb2wsXG4gICAgdG90YWxDb3N0U29sLFxuICAgIHJlY29tbWVuZGVkVGltaW5nLFxuICB9O1xufVxuXG4vKipcbiAqIFByZXZpZXcgcmFjZSBtYXJrZXQgY3JlYXRpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXZpZXdSYWNlTWFya2V0Q3JlYXRpb24oXG4gIHBhcmFtczogQ3JlYXRlUmFjZU1hcmtldFJlcXVlc3QsXG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uXG4pOiBQcm9taXNlPE1hcmtldENyZWF0aW9uUHJldmlldz4ge1xuICBjb25zdCBjb25uID0gY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcblxuICBjb25zdCBjbG9zaW5nVGltZSA9IG5ldyBEYXRlKHBhcmFtcy5jbG9zaW5nVGltZSk7XG4gIGNvbnN0IHJlc29sdXRpb25UaW1lID0gcGFyYW1zLnJlc29sdXRpb25UaW1lXG4gICAgPyBuZXcgRGF0ZShwYXJhbXMucmVzb2x1dGlvblRpbWUpXG4gICAgOiBuZXcgRGF0ZShjbG9zaW5nVGltZS5nZXRUaW1lKCkgKyAyNCAqIDYwICogNjAgKiAxMDAwKTtcblxuICAvLyBWYWxpZGF0ZVxuICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVNYXJrZXRDcmVhdGlvbih7XG4gICAgcXVlc3Rpb246IHBhcmFtcy5xdWVzdGlvbixcbiAgICBjbG9zaW5nVGltZSxcbiAgICByZXNvbHV0aW9uVGltZSxcbiAgICBsYXllcjogJ2xhYicsXG4gICAgb3V0Y29tZXM6IHBhcmFtcy5vdXRjb21lcyxcbiAgfSk7XG5cbiAgLy8gR2V0IG5leHQgcmFjZSBtYXJrZXQgSURcbiAgY29uc3QgeyByYWNlTWFya2V0SWQgfSA9IGF3YWl0IGdldE5leHRNYXJrZXRJZChjb25uKTtcbiAgY29uc3QgeyByYWNlTWFya2V0UGRhIH0gPSBwcmV2aWV3UmFjZU1hcmtldFBkYShyYWNlTWFya2V0SWQpO1xuXG4gIC8vIFJhY2UgbWFya2V0cyB1c2UgbGFiIGZlZXNcbiAgY29uc3QgeyBzb2w6IGNyZWF0aW9uRmVlU29sIH0gPSBnZXRDcmVhdGlvbkZlZSgnbGFiJyk7XG4gIGNvbnN0IHRvdGFsQ29zdFNvbCA9IGNyZWF0aW9uRmVlU29sICsgdmFsaWRhdGlvbi5jb21wdXRlZC5lc3RpbWF0ZWRSZW50U29sO1xuXG4gIHJldHVybiB7XG4gICAgdmFsaWRhdGlvbixcbiAgICBtYXJrZXRQZGE6IHZhbGlkYXRpb24udmFsaWQgPyByYWNlTWFya2V0UGRhIDogdW5kZWZpbmVkLFxuICAgIG1hcmtldElkOiB2YWxpZGF0aW9uLnZhbGlkID8gcmFjZU1hcmtldElkLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQsXG4gICAgY3JlYXRpb25GZWVTb2wsXG4gICAgcGxhdGZvcm1GZWVCcHM6IHZhbGlkYXRpb24uY29tcHV0ZWQucGxhdGZvcm1GZWVCcHMsXG4gICAgZXN0aW1hdGVkUmVudFNvbDogdmFsaWRhdGlvbi5jb21wdXRlZC5lc3RpbWF0ZWRSZW50U29sLFxuICAgIHRvdGFsQ29zdFNvbCxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJVSUxEIEFORCBWQUxJREFURSBUUkFOU0FDVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQnVpbGQgbGFiIG1hcmtldCBjcmVhdGlvbiB0cmFuc2FjdGlvbiB3aXRoIGZ1bGwgdmFsaWRhdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlTGFiTWFya2V0KFxuICBwYXJhbXM6IENyZWF0ZU1hcmtldFJlcXVlc3QsXG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uXG4pOiBQcm9taXNlPHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIHZhbGlkYXRpb246IENyZWF0aW9uVmFsaWRhdGlvblJlc3VsdDtcbiAgdHJhbnNhY3Rpb24/OiB7XG4gICAgc2VyaWFsaXplZDogc3RyaW5nO1xuICAgIG1hcmtldFBkYTogc3RyaW5nO1xuICAgIG1hcmtldElkOiBzdHJpbmc7XG4gIH07XG4gIHNpbXVsYXRpb24/OiB7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgICB1bml0c0NvbnN1bWVkPzogbnVtYmVyO1xuICB9O1xufT4ge1xuICBjb25zdCBjb25uID0gY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcblxuICAvLyBQcmV2aWV3IGZpcnN0ICh2YWxpZGF0ZXMpXG4gIGNvbnN0IHByZXZpZXcgPSBhd2FpdCBwcmV2aWV3TWFya2V0Q3JlYXRpb24ocGFyYW1zLCBjb25uKTtcblxuICBpZiAoIXByZXZpZXcudmFsaWRhdGlvbi52YWxpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yOiBwcmV2aWV3LnZhbGlkYXRpb24uZXJyb3JzLmpvaW4oJzsgJyksXG4gICAgICB2YWxpZGF0aW9uOiBwcmV2aWV3LnZhbGlkYXRpb24sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRyYW5zYWN0aW9uXG4gIGNvbnN0IGNsb3NpbmdUaW1lID0gbmV3IERhdGUocGFyYW1zLmNsb3NpbmdUaW1lKTtcbiAgY29uc3QgcmVzb2x1dGlvblRpbWUgPSBwYXJhbXMucmVzb2x1dGlvblRpbWVcbiAgICA/IG5ldyBEYXRlKHBhcmFtcy5yZXNvbHV0aW9uVGltZSlcbiAgICA6IGNhbGN1bGF0ZVJlc29sdXRpb25UaW1lKFxuICAgICAgICBjbG9zaW5nVGltZSxcbiAgICAgICAgcGFyYW1zLm1hcmtldFR5cGUgfHwgJ2V2ZW50JyxcbiAgICAgICAgcGFyYW1zLmV2ZW50VGltZSA/IG5ldyBEYXRlKHBhcmFtcy5ldmVudFRpbWUpIDogdW5kZWZpbmVkXG4gICAgICApO1xuXG4gIGNvbnN0IGludml0ZUhhc2ggPSBwYXJhbXMuaW52aXRlSGFzaFxuICAgID8gQnVmZmVyLmZyb20ocGFyYW1zLmludml0ZUhhc2gsICdoZXgnKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIC8vIENhbGN1bGF0ZSByZXNvbHV0aW9uQnVmZmVyIChzZWNvbmRzIGZyb20gY2xvc2luZyB0byByZXNvbHV0aW9uKVxuICBjb25zdCByZXNvbHV0aW9uQnVmZmVyID0gTWF0aC5mbG9vcigocmVzb2x1dGlvblRpbWUuZ2V0VGltZSgpIC0gY2xvc2luZ1RpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkQ3JlYXRlTGFiTWFya2V0VHJhbnNhY3Rpb24oe1xuICAgIHF1ZXN0aW9uOiBwYXJhbXMucXVlc3Rpb24sXG4gICAgY2xvc2luZ1RpbWUsXG4gICAgcmVzb2x1dGlvbkJ1ZmZlcixcbiAgICBjcmVhdG9yV2FsbGV0OiBwYXJhbXMuY3JlYXRvcldhbGxldCxcbiAgfSwgY29ubik7XG5cbiAgLy8gU2ltdWxhdGVcbiAgY29uc3Qgc2ltdWxhdGlvbiA9IGF3YWl0IHNpbXVsYXRlQmV0VHJhbnNhY3Rpb24oXG4gICAgcmVzdWx0LnRyYW5zYWN0aW9uLFxuICAgIG5ldyBQdWJsaWNLZXkocGFyYW1zLmNyZWF0b3JXYWxsZXQpLFxuICAgIGNvbm5cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgdmFsaWRhdGlvbjogcHJldmlldy52YWxpZGF0aW9uLFxuICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICBzZXJpYWxpemVkOiByZXN1bHQuc2VyaWFsaXplZFR4LFxuICAgICAgbWFya2V0UGRhOiByZXN1bHQubWFya2V0UGRhLFxuICAgICAgbWFya2V0SWQ6IHJlc3VsdC5tYXJrZXRJZC50b1N0cmluZygpLFxuICAgIH0sXG4gICAgc2ltdWxhdGlvbjoge1xuICAgICAgc3VjY2Vzczogc2ltdWxhdGlvbi5zdWNjZXNzLFxuICAgICAgZXJyb3I6IHNpbXVsYXRpb24uZXJyb3IsXG4gICAgICB1bml0c0NvbnN1bWVkOiBzaW11bGF0aW9uLnVuaXRzQ29uc3VtZWQsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBwcml2YXRlIG1hcmtldCBjcmVhdGlvbiB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUHJpdmF0ZU1hcmtldChcbiAgcGFyYW1zOiBDcmVhdGVNYXJrZXRSZXF1ZXN0LFxuICBjb25uZWN0aW9uPzogQ29ubmVjdGlvblxuKTogUHJvbWlzZTx7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nO1xuICB2YWxpZGF0aW9uOiBDcmVhdGlvblZhbGlkYXRpb25SZXN1bHQ7XG4gIHRyYW5zYWN0aW9uPzoge1xuICAgIHNlcmlhbGl6ZWQ6IHN0cmluZztcbiAgICBtYXJrZXRQZGE6IHN0cmluZztcbiAgICBtYXJrZXRJZDogc3RyaW5nO1xuICB9O1xuICBzaW11bGF0aW9uPzoge1xuICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gIH07XG59PiB7XG4gIGNvbnN0IGNvbm4gPSBjb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuXG4gIC8vIFVzZSBsYWIgcHJldmlldyBidXQgd2l0aCBwcml2YXRlIGxheWVyXG4gIGNvbnN0IHByZXZpZXcgPSBhd2FpdCBwcmV2aWV3TWFya2V0Q3JlYXRpb24oeyAuLi5wYXJhbXMsIGxheWVyOiAncHJpdmF0ZScgfSwgY29ubik7XG5cbiAgaWYgKCFwcmV2aWV3LnZhbGlkYXRpb24udmFsaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBlcnJvcjogcHJldmlldy52YWxpZGF0aW9uLmVycm9ycy5qb2luKCc7ICcpLFxuICAgICAgdmFsaWRhdGlvbjogcHJldmlldy52YWxpZGF0aW9uLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBjbG9zaW5nVGltZSA9IG5ldyBEYXRlKHBhcmFtcy5jbG9zaW5nVGltZSk7XG4gIGNvbnN0IHJlc29sdXRpb25UaW1lID0gcGFyYW1zLnJlc29sdXRpb25UaW1lXG4gICAgPyBuZXcgRGF0ZShwYXJhbXMucmVzb2x1dGlvblRpbWUpXG4gICAgOiBjYWxjdWxhdGVSZXNvbHV0aW9uVGltZShjbG9zaW5nVGltZSwgcGFyYW1zLm1hcmtldFR5cGUgfHwgJ2V2ZW50Jyk7XG5cbiAgY29uc3QgaW52aXRlSGFzaCA9IHBhcmFtcy5pbnZpdGVIYXNoXG4gICAgPyBCdWZmZXIuZnJvbShwYXJhbXMuaW52aXRlSGFzaCwgJ2hleCcpXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgLy8gQ2FsY3VsYXRlIHJlc29sdXRpb25CdWZmZXIgKHNlY29uZHMgZnJvbSBjbG9zaW5nIHRvIHJlc29sdXRpb24pXG4gIGNvbnN0IHJlc29sdXRpb25CdWZmZXIgPSBNYXRoLmZsb29yKChyZXNvbHV0aW9uVGltZS5nZXRUaW1lKCkgLSBjbG9zaW5nVGltZS5nZXRUaW1lKCkpIC8gMTAwMCk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRDcmVhdGVQcml2YXRlTWFya2V0VHJhbnNhY3Rpb24oe1xuICAgIHF1ZXN0aW9uOiBwYXJhbXMucXVlc3Rpb24sXG4gICAgY2xvc2luZ1RpbWUsXG4gICAgcmVzb2x1dGlvbkJ1ZmZlcixcbiAgICBjcmVhdG9yV2FsbGV0OiBwYXJhbXMuY3JlYXRvcldhbGxldCxcbiAgfSwgY29ubik7XG5cbiAgY29uc3Qgc2ltdWxhdGlvbiA9IGF3YWl0IHNpbXVsYXRlQmV0VHJhbnNhY3Rpb24oXG4gICAgcmVzdWx0LnRyYW5zYWN0aW9uLFxuICAgIG5ldyBQdWJsaWNLZXkocGFyYW1zLmNyZWF0b3JXYWxsZXQpLFxuICAgIGNvbm5cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgdmFsaWRhdGlvbjogcHJldmlldy52YWxpZGF0aW9uLFxuICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICBzZXJpYWxpemVkOiByZXN1bHQuc2VyaWFsaXplZFR4LFxuICAgICAgbWFya2V0UGRhOiByZXN1bHQubWFya2V0UGRhLFxuICAgICAgbWFya2V0SWQ6IHJlc3VsdC5tYXJrZXRJZC50b1N0cmluZygpLFxuICAgIH0sXG4gICAgc2ltdWxhdGlvbjoge1xuICAgICAgc3VjY2Vzczogc2ltdWxhdGlvbi5zdWNjZXNzLFxuICAgICAgZXJyb3I6IHNpbXVsYXRpb24uZXJyb3IsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCByYWNlIG1hcmtldCBjcmVhdGlvbiB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUmFjZU1hcmtldChcbiAgcGFyYW1zOiBDcmVhdGVSYWNlTWFya2V0UmVxdWVzdCxcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb25cbik6IFByb21pc2U8e1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZztcbiAgdmFsaWRhdGlvbjogQ3JlYXRpb25WYWxpZGF0aW9uUmVzdWx0O1xuICB0cmFuc2FjdGlvbj86IHtcbiAgICBzZXJpYWxpemVkOiBzdHJpbmc7XG4gICAgcmFjZU1hcmtldFBkYTogc3RyaW5nO1xuICAgIG1hcmtldElkOiBzdHJpbmc7XG4gIH07XG4gIHNpbXVsYXRpb24/OiB7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfTtcbn0+IHtcbiAgY29uc3QgY29ubiA9IGNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG5cbiAgY29uc3QgcHJldmlldyA9IGF3YWl0IHByZXZpZXdSYWNlTWFya2V0Q3JlYXRpb24ocGFyYW1zLCBjb25uKTtcblxuICBpZiAoIXByZXZpZXcudmFsaWRhdGlvbi52YWxpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yOiBwcmV2aWV3LnZhbGlkYXRpb24uZXJyb3JzLmpvaW4oJzsgJyksXG4gICAgICB2YWxpZGF0aW9uOiBwcmV2aWV3LnZhbGlkYXRpb24sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNsb3NpbmdUaW1lID0gbmV3IERhdGUocGFyYW1zLmNsb3NpbmdUaW1lKTtcbiAgY29uc3QgcmVzb2x1dGlvblRpbWUgPSBwYXJhbXMucmVzb2x1dGlvblRpbWVcbiAgICA/IG5ldyBEYXRlKHBhcmFtcy5yZXNvbHV0aW9uVGltZSlcbiAgICA6IG5ldyBEYXRlKGNsb3NpbmdUaW1lLmdldFRpbWUoKSArIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXG4gIC8vIENhbGN1bGF0ZSByZXNvbHV0aW9uQnVmZmVyIChzZWNvbmRzIGZyb20gY2xvc2luZyB0byByZXNvbHV0aW9uKVxuICBjb25zdCByZXNvbHV0aW9uQnVmZmVyID0gTWF0aC5mbG9vcigocmVzb2x1dGlvblRpbWUuZ2V0VGltZSgpIC0gY2xvc2luZ1RpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkQ3JlYXRlUmFjZU1hcmtldFRyYW5zYWN0aW9uKHtcbiAgICBxdWVzdGlvbjogcGFyYW1zLnF1ZXN0aW9uLFxuICAgIG91dGNvbWVzOiBwYXJhbXMub3V0Y29tZXMsXG4gICAgY2xvc2luZ1RpbWUsXG4gICAgcmVzb2x1dGlvbkJ1ZmZlcixcbiAgICBjcmVhdG9yV2FsbGV0OiBwYXJhbXMuY3JlYXRvcldhbGxldCxcbiAgfSwgY29ubik7XG5cbiAgY29uc3Qgc2ltdWxhdGlvbiA9IGF3YWl0IHNpbXVsYXRlQmV0VHJhbnNhY3Rpb24oXG4gICAgcmVzdWx0LnRyYW5zYWN0aW9uLFxuICAgIG5ldyBQdWJsaWNLZXkocGFyYW1zLmNyZWF0b3JXYWxsZXQpLFxuICAgIGNvbm5cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgdmFsaWRhdGlvbjogcHJldmlldy52YWxpZGF0aW9uLFxuICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICBzZXJpYWxpemVkOiByZXN1bHQuc2VyaWFsaXplZFR4LFxuICAgICAgcmFjZU1hcmtldFBkYTogcmVzdWx0Lm1hcmtldFBkYSxcbiAgICAgIG1hcmtldElkOiByZXN1bHQubWFya2V0SWQudG9TdHJpbmcoKSxcbiAgICB9LFxuICAgIHNpbXVsYXRpb246IHtcbiAgICAgIHN1Y2Nlc3M6IHNpbXVsYXRpb24uc3VjY2VzcyxcbiAgICAgIGVycm9yOiBzaW11bGF0aW9uLmVycm9yLFxuICAgIH0sXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVVElMSVRZIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgY3JlYXRpb24gZmVlcyBmb3IgYWxsIGxheWVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsQ3JlYXRpb25GZWVzKCk6IHtcbiAgb2ZmaWNpYWw6IHsgc29sOiBudW1iZXI7IGxhbXBvcnRzOiBudW1iZXIgfTtcbiAgbGFiOiB7IHNvbDogbnVtYmVyOyBsYW1wb3J0czogbnVtYmVyIH07XG4gIHByaXZhdGU6IHsgc29sOiBudW1iZXI7IGxhbXBvcnRzOiBudW1iZXIgfTtcbn0ge1xuICByZXR1cm4ge1xuICAgIG9mZmljaWFsOiBnZXRDcmVhdGlvbkZlZSgnb2ZmaWNpYWwnKSxcbiAgICBsYWI6IGdldENyZWF0aW9uRmVlKCdsYWInKSxcbiAgICBwcml2YXRlOiBnZXRDcmVhdGlvbkZlZSgncHJpdmF0ZScpLFxuICB9O1xufVxuXG4vKipcbiAqIEdldCBwbGF0Zm9ybSBmZWVzIGZvciBhbGwgbGF5ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQbGF0Zm9ybUZlZXMoKToge1xuICBvZmZpY2lhbDogeyBicHM6IG51bWJlcjsgcGVyY2VudDogc3RyaW5nIH07XG4gIGxhYjogeyBicHM6IG51bWJlcjsgcGVyY2VudDogc3RyaW5nIH07XG4gIHByaXZhdGU6IHsgYnBzOiBudW1iZXI7IHBlcmNlbnQ6IHN0cmluZyB9O1xufSB7XG4gIHJldHVybiB7XG4gICAgb2ZmaWNpYWw6IHsgYnBzOiBGRUVTLk9GRklDSUFMX1BMQVRGT1JNX0ZFRV9CUFMsIHBlcmNlbnQ6IGAke0ZFRVMuT0ZGSUNJQUxfUExBVEZPUk1fRkVFX0JQUyAvIDEwMH0lYCB9LFxuICAgIGxhYjogeyBicHM6IEZFRVMuTEFCX1BMQVRGT1JNX0ZFRV9CUFMsIHBlcmNlbnQ6IGAke0ZFRVMuTEFCX1BMQVRGT1JNX0ZFRV9CUFMgLyAxMDB9JWAgfSxcbiAgICBwcml2YXRlOiB7IGJwczogRkVFUy5QUklWQVRFX1BMQVRGT1JNX0ZFRV9CUFMsIHBlcmNlbnQ6IGAke0ZFRVMuUFJJVkFURV9QTEFURk9STV9GRUVfQlBTIC8gMTAwfSVgIH0sXG4gIH07XG59XG5cbi8qKlxuICogR2V0IHRpbWluZyBjb25zdHJhaW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltaW5nQ29uc3RyYWludHMoKToge1xuICBtaW5FdmVudEJ1ZmZlckhvdXJzOiBudW1iZXI7XG4gIHJlY29tbWVuZGVkRXZlbnRCdWZmZXJIb3VyczogbnVtYmVyO1xuICBiZXR0aW5nRnJlZXplU2Vjb25kczogbnVtYmVyO1xuICBtYXhNYXJrZXREdXJhdGlvbkRheXM6IG51bWJlcjtcbn0ge1xuICByZXR1cm4ge1xuICAgIG1pbkV2ZW50QnVmZmVySG91cnM6IFRJTUlORy5NSU5fRVZFTlRfQlVGRkVSX0hPVVJTLFxuICAgIHJlY29tbWVuZGVkRXZlbnRCdWZmZXJIb3VyczogVElNSU5HLlJFQ09NTUVOREVEX0VWRU5UX0JVRkZFUl9IT1VSUyxcbiAgICBiZXR0aW5nRnJlZXplU2Vjb25kczogVElNSU5HLkJFVFRJTkdfRlJFRVpFX1NFQ09ORFMsXG4gICAgbWF4TWFya2V0RHVyYXRpb25EYXlzOiBUSU1JTkcuTUFYX01BUktFVF9EVVJBVElPTl9EQVlTLFxuICB9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGludml0ZSBoYXNoIGZvciBwcml2YXRlIG1hcmtldFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJbnZpdGVIYXNoKCk6IHN0cmluZyB7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ5dGVzKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKlxuICogRGVyaXZlIGludml0ZSBsaW5rIGZyb20gaGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52aXRlTGluayhtYXJrZXRQZGE6IHN0cmluZywgaW52aXRlSGFzaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBodHRwczovL2Jhb3ppLm9vby9tYXJrZXQvJHttYXJrZXRQZGF9P2ludml0ZT0ke2ludml0ZUhhc2h9YDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface Market {
|
|
2
|
+
publicKey: string;
|
|
3
|
+
marketId: string;
|
|
4
|
+
question: string;
|
|
5
|
+
closingTime: string;
|
|
6
|
+
resolutionTime: string;
|
|
7
|
+
status: string;
|
|
8
|
+
statusCode: number;
|
|
9
|
+
winningOutcome: string | null;
|
|
10
|
+
currencyType: string;
|
|
11
|
+
yesPoolSol: number;
|
|
12
|
+
noPoolSol: number;
|
|
13
|
+
totalPoolSol: number;
|
|
14
|
+
yesPercent: number;
|
|
15
|
+
noPercent: number;
|
|
16
|
+
platformFeeBps: number;
|
|
17
|
+
layer: string;
|
|
18
|
+
layerCode: number;
|
|
19
|
+
accessGate: string;
|
|
20
|
+
creator: string;
|
|
21
|
+
hasBets: boolean;
|
|
22
|
+
isBettingOpen: boolean;
|
|
23
|
+
creatorFeeBps: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* List all markets with optional status filter
|
|
27
|
+
*/
|
|
28
|
+
export declare function listMarkets(status?: string): Promise<Market[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Get a specific market by public key
|
|
31
|
+
*/
|
|
32
|
+
export declare function getMarket(publicKey: string): Promise<Market | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Get market with additional details for transaction building
|
|
35
|
+
*/
|
|
36
|
+
export declare function getMarketForBetting(publicKey: string): Promise<{
|
|
37
|
+
market: Market | null;
|
|
38
|
+
marketId: bigint;
|
|
39
|
+
accessGate: number;
|
|
40
|
+
platformFeeBps: number;
|
|
41
|
+
} | null>;
|