valtech-components 4.0.573 → 4.0.575

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.
@@ -139,28 +139,250 @@ export const CHESSIMALS_BOT_PROFILES = [
139
139
  },
140
140
  ];
141
141
  const BOT_STYLES = {
142
- explorer: { advancement: 1.05, capture: 0.82, safety: 0.62, power: 0.8, center: 1.15, unlock: 1.05, reply: 0.7, randomness: 260, spread: 0.68, mobility: 0.75, trap: 0.5, endgame: 0.55 },
143
- impulsive: { advancement: 0.9, capture: 1.45, safety: 0.48, power: 1.15, center: 0.8, unlock: 0.9, reply: 0.55, randomness: 290, spread: 0.62, mobility: 0.85, trap: 0.62, endgame: 0.5 },
144
- runner: { advancement: 1.55, capture: 0.78, safety: 0.5, power: 0.95, center: 0.7, unlock: 1.1, reply: 0.55, randomness: 250, spread: 0.6, mobility: 0.72, trap: 0.45, endgame: 1.1 },
145
- hunter: { advancement: 0.95, capture: 1.45, safety: 0.9, power: 1.05, center: 0.95, unlock: 0.95, reply: 1, randomness: 90, spread: 0.3, mobility: 0.95, trap: 0.82, endgame: 0.76 },
146
- guardian: { advancement: 0.88, capture: 1, safety: 1.45, power: 0.85, center: 1.05, unlock: 1, reply: 1.15, randomness: 70, spread: 0.26, mobility: 0.82, trap: 0.72, endgame: 0.72 },
147
- jumper: { advancement: 1.12, capture: 1, safety: 0.92, power: 1.42, center: 1.18, unlock: 1.08, reply: 0.95, randomness: 95, spread: 0.32, mobility: 1.15, trap: 0.9, endgame: 0.82 },
148
- strategist: { advancement: 1.05, capture: 1.08, safety: 1.22, power: 1.08, center: 1.16, unlock: 1.1, reply: 1.25, randomness: 22, spread: 0.14, mobility: 1.08, trap: 1.06, endgame: 1 },
149
- predator: { advancement: 0.98, capture: 1.68, safety: 1.02, power: 1.34, center: 1, unlock: 1, reply: 1.12, randomness: 28, spread: 0.16, mobility: 1.02, trap: 1.18, endgame: 0.82 },
150
- sprinter: { advancement: 1.72, capture: 0.9, safety: 0.95, power: 1.08, center: 0.86, unlock: 1.18, reply: 1, randomness: 26, spread: 0.15, mobility: 0.95, trap: 0.78, endgame: 1.42 },
151
- sentinel: { advancement: 0.9, capture: 1.12, safety: 1.72, power: 0.95, center: 1.28, unlock: 1.05, reply: 1.38, randomness: 18, spread: 0.12, mobility: 0.86, trap: 1.04, endgame: 0.84 },
152
- oracle: { advancement: 1, capture: 1.12, safety: 1.42, power: 1.1, center: 1.18, unlock: 1.08, reply: 1.8, randomness: 8, spread: 0.08, mobility: 1.06, trap: 1.22, endgame: 1.08 },
153
- ambusher: { advancement: 0.9, capture: 1.48, safety: 1.08, power: 1.46, center: 1.05, unlock: 1.02, reply: 1.32, randomness: 14, spread: 0.1, mobility: 1.12, trap: 1.72, endgame: 0.92 },
154
- locksmith: { advancement: 0.88, capture: 1.04, safety: 1.55, power: 1.02, center: 1.48, unlock: 1.12, reply: 1.52, randomness: 12, spread: 0.1, mobility: 1.58, trap: 1.24, endgame: 0.86 },
155
- storm: { advancement: 1.18, capture: 1.38, safety: 0.98, power: 1.62, center: 1.08, unlock: 1.18, reply: 1.22, randomness: 18, spread: 0.13, mobility: 1.36, trap: 1.28, endgame: 1.02 },
156
- matriarch: { advancement: 0.96, capture: 1.18, safety: 1.64, power: 1.18, center: 1.22, unlock: 1.08, reply: 1.66, randomness: 10, spread: 0.08, mobility: 1.02, trap: 1.36, endgame: 1 },
157
- endgame: { advancement: 1.46, capture: 1, safety: 1.28, power: 1.04, center: 0.94, unlock: 1.08, reply: 1.44, randomness: 10, spread: 0.09, mobility: 0.98, trap: 1.02, endgame: 1.86 },
158
- magnus: { advancement: 1.04, capture: 1.22, safety: 1.9, power: 0.9, center: 1.42, unlock: 1.08, reply: 2.08, randomness: 3, spread: 0.04, mobility: 1.08, trap: 1.42, endgame: 1.86 },
142
+ explorer: {
143
+ advancement: 1.05,
144
+ capture: 0.82,
145
+ safety: 0.62,
146
+ power: 0.8,
147
+ center: 1.15,
148
+ unlock: 1.05,
149
+ reply: 0.7,
150
+ randomness: 260,
151
+ spread: 0.68,
152
+ mobility: 0.75,
153
+ trap: 0.5,
154
+ endgame: 0.55,
155
+ },
156
+ impulsive: {
157
+ advancement: 0.9,
158
+ capture: 1.45,
159
+ safety: 0.48,
160
+ power: 1.15,
161
+ center: 0.8,
162
+ unlock: 0.9,
163
+ reply: 0.55,
164
+ randomness: 290,
165
+ spread: 0.62,
166
+ mobility: 0.85,
167
+ trap: 0.62,
168
+ endgame: 0.5,
169
+ },
170
+ runner: {
171
+ advancement: 1.55,
172
+ capture: 0.78,
173
+ safety: 0.5,
174
+ power: 0.95,
175
+ center: 0.7,
176
+ unlock: 1.1,
177
+ reply: 0.55,
178
+ randomness: 250,
179
+ spread: 0.6,
180
+ mobility: 0.72,
181
+ trap: 0.45,
182
+ endgame: 1.1,
183
+ },
184
+ hunter: {
185
+ advancement: 0.95,
186
+ capture: 1.45,
187
+ safety: 0.9,
188
+ power: 1.05,
189
+ center: 0.95,
190
+ unlock: 0.95,
191
+ reply: 1,
192
+ randomness: 90,
193
+ spread: 0.3,
194
+ mobility: 0.95,
195
+ trap: 0.82,
196
+ endgame: 0.76,
197
+ },
198
+ guardian: {
199
+ advancement: 0.88,
200
+ capture: 1,
201
+ safety: 1.45,
202
+ power: 0.85,
203
+ center: 1.05,
204
+ unlock: 1,
205
+ reply: 1.15,
206
+ randomness: 70,
207
+ spread: 0.26,
208
+ mobility: 0.82,
209
+ trap: 0.72,
210
+ endgame: 0.72,
211
+ },
212
+ jumper: {
213
+ advancement: 1.12,
214
+ capture: 1,
215
+ safety: 0.92,
216
+ power: 1.42,
217
+ center: 1.18,
218
+ unlock: 1.08,
219
+ reply: 0.95,
220
+ randomness: 95,
221
+ spread: 0.32,
222
+ mobility: 1.15,
223
+ trap: 0.9,
224
+ endgame: 0.82,
225
+ },
226
+ strategist: {
227
+ advancement: 1.05,
228
+ capture: 1.08,
229
+ safety: 1.22,
230
+ power: 1.08,
231
+ center: 1.16,
232
+ unlock: 1.1,
233
+ reply: 1.25,
234
+ randomness: 22,
235
+ spread: 0.14,
236
+ mobility: 1.08,
237
+ trap: 1.06,
238
+ endgame: 1,
239
+ },
240
+ predator: {
241
+ advancement: 0.98,
242
+ capture: 1.68,
243
+ safety: 1.02,
244
+ power: 1.34,
245
+ center: 1,
246
+ unlock: 1,
247
+ reply: 1.12,
248
+ randomness: 28,
249
+ spread: 0.16,
250
+ mobility: 1.02,
251
+ trap: 1.18,
252
+ endgame: 0.82,
253
+ },
254
+ sprinter: {
255
+ advancement: 1.72,
256
+ capture: 0.9,
257
+ safety: 0.95,
258
+ power: 1.08,
259
+ center: 0.86,
260
+ unlock: 1.18,
261
+ reply: 1,
262
+ randomness: 26,
263
+ spread: 0.15,
264
+ mobility: 0.95,
265
+ trap: 0.78,
266
+ endgame: 1.42,
267
+ },
268
+ sentinel: {
269
+ advancement: 0.9,
270
+ capture: 1.12,
271
+ safety: 1.72,
272
+ power: 0.95,
273
+ center: 1.28,
274
+ unlock: 1.05,
275
+ reply: 1.38,
276
+ randomness: 18,
277
+ spread: 0.12,
278
+ mobility: 0.86,
279
+ trap: 1.04,
280
+ endgame: 0.84,
281
+ },
282
+ oracle: {
283
+ advancement: 1,
284
+ capture: 1.12,
285
+ safety: 1.42,
286
+ power: 1.1,
287
+ center: 1.18,
288
+ unlock: 1.08,
289
+ reply: 1.8,
290
+ randomness: 8,
291
+ spread: 0.08,
292
+ mobility: 1.06,
293
+ trap: 1.22,
294
+ endgame: 1.08,
295
+ },
296
+ ambusher: {
297
+ advancement: 0.9,
298
+ capture: 1.48,
299
+ safety: 1.08,
300
+ power: 1.46,
301
+ center: 1.05,
302
+ unlock: 1.02,
303
+ reply: 1.32,
304
+ randomness: 14,
305
+ spread: 0.1,
306
+ mobility: 1.12,
307
+ trap: 1.72,
308
+ endgame: 0.92,
309
+ },
310
+ locksmith: {
311
+ advancement: 0.88,
312
+ capture: 1.04,
313
+ safety: 1.55,
314
+ power: 1.02,
315
+ center: 1.48,
316
+ unlock: 1.12,
317
+ reply: 1.52,
318
+ randomness: 12,
319
+ spread: 0.1,
320
+ mobility: 1.58,
321
+ trap: 1.24,
322
+ endgame: 0.86,
323
+ },
324
+ storm: {
325
+ advancement: 1.18,
326
+ capture: 1.38,
327
+ safety: 0.98,
328
+ power: 1.62,
329
+ center: 1.08,
330
+ unlock: 1.18,
331
+ reply: 1.22,
332
+ randomness: 18,
333
+ spread: 0.13,
334
+ mobility: 1.36,
335
+ trap: 1.28,
336
+ endgame: 1.02,
337
+ },
338
+ matriarch: {
339
+ advancement: 0.96,
340
+ capture: 1.18,
341
+ safety: 1.64,
342
+ power: 1.18,
343
+ center: 1.22,
344
+ unlock: 1.08,
345
+ reply: 1.66,
346
+ randomness: 10,
347
+ spread: 0.08,
348
+ mobility: 1.02,
349
+ trap: 1.36,
350
+ endgame: 1,
351
+ },
352
+ endgame: {
353
+ advancement: 1.46,
354
+ capture: 1,
355
+ safety: 1.28,
356
+ power: 1.04,
357
+ center: 0.94,
358
+ unlock: 1.08,
359
+ reply: 1.44,
360
+ randomness: 10,
361
+ spread: 0.09,
362
+ mobility: 0.98,
363
+ trap: 1.02,
364
+ endgame: 1.86,
365
+ },
366
+ magnus: {
367
+ advancement: 1.04,
368
+ capture: 1.22,
369
+ safety: 1.9,
370
+ power: 0.9,
371
+ center: 1.42,
372
+ unlock: 1.08,
373
+ reply: 2.08,
374
+ randomness: 3,
375
+ spread: 0.04,
376
+ mobility: 1.08,
377
+ trap: 1.42,
378
+ endgame: 1.86,
379
+ },
159
380
  };
160
381
  const DEFAULT_BOT_PROFILE_BY_DIFFICULTY = {
161
382
  easy: 'explorer',
162
383
  normal: 'hunter',
163
384
  hard: 'strategist',
385
+ master: 'magnus',
164
386
  };
165
387
  export function createChessimalsGame(boardSize = 6, options = {}) {
166
388
  const pieces = [];
@@ -200,12 +422,12 @@ export function createChessimalsGame(boardSize = 6, options = {}) {
200
422
  };
201
423
  }
202
424
  export function getChessimalsPieceAt(state, position) {
203
- return activePieces(state).find((piece) => !piece.captured && piece.position.row === position.row && piece.position.col === position.col);
425
+ return activePieces(state).find(piece => !piece.captured && piece.position.row === position.row && piece.position.col === position.col);
204
426
  }
205
427
  export function getChessimalsLegalMoves(state, pieceId, animal) {
206
428
  if (state.status !== 'in_progress')
207
429
  return [];
208
- const piece = activePieces(state).find((item) => item.id === pieceId && !item.captured);
430
+ const piece = activePieces(state).find(item => item.id === pieceId && !item.captured);
209
431
  if (!piece || piece.color !== state.currentTurn)
210
432
  return [];
211
433
  if (animal) {
@@ -244,9 +466,18 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
244
466
  const challengePressure = getChallengePressure(options.challengeRound);
245
467
  const style = tuneBotStyle(baseStyle, difficulty, challengePressure, options.nightmareMode);
246
468
  const quickScored = moves
247
- .map((move) => ({ move, score: scoreBotMove(state, move, difficulty, style, challengePressure, false, options.nightmareMode) }))
469
+ .map(move => ({
470
+ move,
471
+ score: scoreBotMove(state, move, difficulty, style, challengePressure, false, options.nightmareMode),
472
+ }))
248
473
  .sort((a, b) => b.score - a.score);
249
- const lookaheadLimit = options.nightmareMode === 'magnus' ? 48 : difficulty === 'hard' ? 32 : difficulty === 'normal' ? 24 : 0;
474
+ const lookaheadLimit = options.nightmareMode === 'magnus' || difficulty === 'master'
475
+ ? 48
476
+ : difficulty === 'hard'
477
+ ? 32
478
+ : difficulty === 'normal'
479
+ ? 24
480
+ : 0;
250
481
  const scored = quickScored
251
482
  .map((item, index) => ({
252
483
  move: item.move,
@@ -256,18 +487,18 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
256
487
  }))
257
488
  .sort((a, b) => b.score - a.score);
258
489
  if (difficulty === 'easy') {
259
- const playable = scored.filter((item) => item.score > -3000);
490
+ const playable = scored.filter(item => item.score > -3000);
260
491
  return pickNoisyBotMove(playable.length ? playable : scored, 0.55);
261
492
  }
262
493
  if (difficulty === 'normal') {
263
494
  return scored[0]?.move;
264
495
  }
265
- const winningMove = scored.find((item) => item.score >= 10000);
496
+ const winningMove = scored.find(item => item.score >= 10000);
266
497
  if (winningMove)
267
498
  return winningMove.move;
268
- const opponentWinningTargets = new Set(getImmediateWinningMoves(state, otherColor(state.currentTurn)).map((move) => positionKey(move.to)));
499
+ const opponentWinningTargets = new Set(getImmediateWinningMoves(state, otherColor(state.currentTurn)).map(move => positionKey(move.to)));
269
500
  if (opponentWinningTargets.size > 0) {
270
- const blockingMove = scored.find((item) => item.move.capturesPieceId || opponentWinningTargets.has(positionKey(item.move.to)));
501
+ const blockingMove = scored.find(item => item.move.capturesPieceId || opponentWinningTargets.has(positionKey(item.move.to)));
271
502
  if (blockingMove)
272
503
  return blockingMove.move;
273
504
  }
@@ -283,15 +514,15 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
283
514
  return scored[0]?.move;
284
515
  }
285
516
  export function applyChessimalsMove(state, candidate) {
286
- const legalMove = getChessimalsLegalMoves(state, candidate.pieceId, candidate.animal).find((move) => samePosition(move.from, candidate.from) && samePosition(move.to, candidate.to));
517
+ const legalMove = getChessimalsLegalMoves(state, candidate.pieceId, candidate.animal).find(move => samePosition(move.from, candidate.from) && samePosition(move.to, candidate.to));
287
518
  if (!legalMove) {
288
519
  throw new Error('CHESSIMALS_ILLEGAL_MOVE');
289
520
  }
290
- const movedPiece = activePieces(state).find((piece) => piece.id === legalMove.pieceId);
521
+ const movedPiece = activePieces(state).find(piece => piece.id === legalMove.pieceId);
291
522
  if (!movedPiece) {
292
523
  throw new Error('CHESSIMALS_PIECE_NOT_FOUND');
293
524
  }
294
- const pieces = activePieces(state).map((piece) => {
525
+ const pieces = activePieces(state).map(piece => {
295
526
  if (piece.id === legalMove.pieceId) {
296
527
  return { ...piece, position: { ...legalMove.to } };
297
528
  }
@@ -321,7 +552,7 @@ export function applyChessimalsMove(state, candidate) {
321
552
  lastMove: legalMove,
322
553
  });
323
554
  const promoted = isPromotionRow(nextState.boardSize, movedPiece.color, legalMove.to);
324
- const enemyPieces = activePieces(nextState).filter((piece) => piece.color !== movedPiece.color && !piece.captured);
555
+ const enemyPieces = activePieces(nextState).filter(piece => piece.color !== movedPiece.color && !piece.captured);
325
556
  const enemyHasLegalMoves = getChessimalsAllLegalMoves(nextState, nextState.currentTurn).length > 0;
326
557
  const resolvedState = promoted || enemyPieces.length === 0 || !enemyHasLegalMoves
327
558
  ? {
@@ -337,10 +568,7 @@ export function applyChessimalsMove(state, candidate) {
337
568
  : nextState;
338
569
  return {
339
570
  ...resolvedState,
340
- moveHistory: [
341
- ...ensureMoveHistory(state),
342
- createMoveHistoryEntry(resolvedState, legalMove),
343
- ],
571
+ moveHistory: [...ensureMoveHistory(state), createMoveHistoryEntry(resolvedState, legalMove)],
344
572
  };
345
573
  }
346
574
  export function createChessimalsReviewState(state, entry) {
@@ -383,7 +611,7 @@ function cloneMoveHistoryEntry(entry) {
383
611
  };
384
612
  }
385
613
  function clonePieces(pieces) {
386
- return pieces.map((piece) => ({
614
+ return pieces.map(piece => ({
387
615
  ...piece,
388
616
  position: { ...piece.position },
389
617
  }));
@@ -407,10 +635,7 @@ export function resignChessimalsGame(state, color) {
407
635
  };
408
636
  return {
409
637
  ...resignedState,
410
- moveHistory: [
411
- ...ensureMoveHistory(state),
412
- createMoveHistoryEntry(resignedState),
413
- ],
638
+ moveHistory: [...ensureMoveHistory(state), createMoveHistoryEntry(resignedState)],
414
639
  };
415
640
  }
416
641
  export function positionKey(position) {
@@ -537,12 +762,16 @@ function getKangarooMoves(state, piece) {
537
762
  function scoreBotMove(state, move, difficulty, style, challengePressure = 0, includeTacticalPressure = true, nightmareMode = 'none') {
538
763
  const color = state.currentTurn;
539
764
  const targetPiece = move.capturesPieceId
540
- ? activePieces(state).find((piece) => piece.id === move.capturesPieceId)
765
+ ? activePieces(state).find(piece => piece.id === move.capturesPieceId)
541
766
  : undefined;
542
767
  const advancement = color === 'white' ? state.boardSize - 1 - move.to.row : move.to.row;
543
768
  let score = advancement * 24 * style.advancement;
544
769
  const stepsToPromotion = color === 'white' ? move.to.row : state.boardSize - 1 - move.to.row;
545
- score += Math.max(0, state.boardSize - 1 - stepsToPromotion) * 10 * challengePressure * style.advancement;
770
+ score +=
771
+ Math.max(0, state.boardSize - 1 - stepsToPromotion) *
772
+ 10 *
773
+ challengePressure *
774
+ style.advancement;
546
775
  if (move.kind === 'basic' && isPromotionRow(state.boardSize, color, move.to)) {
547
776
  score += 10000 + 2500 * challengePressure;
548
777
  }
@@ -559,7 +788,9 @@ function scoreBotMove(state, move, difficulty, style, challengePressure = 0, inc
559
788
  score += targetAdvancement * (16 + 8 * challengePressure) * style.capture;
560
789
  }
561
790
  if (move.kind === 'power') {
562
- score += (targetPiece ? 120 : difficulty === 'hard' ? -60 - 170 * challengePressure : -30) * style.power;
791
+ score +=
792
+ (targetPiece ? 120 : difficulty === 'hard' ? -60 - 170 * challengePressure : -30) *
793
+ style.power;
563
794
  }
564
795
  if (nightmareMode === 'magnus' && move.kind === 'power') {
565
796
  score += scoreMagnusPowerPatience(state, move, targetPiece, style);
@@ -571,8 +802,14 @@ function scoreBotMove(state, move, difficulty, style, challengePressure = 0, inc
571
802
  if (wouldUnlockPower(state, color, move.to))
572
803
  score += 90 * style.unlock;
573
804
  if (includeTacticalPressure && state.boardSize <= 6) {
574
- score += countPowerReachAfterMove(state, move, color) * (difficulty === 'hard' ? 8 : 4) * style.mobility;
575
- score += countProtectedThreatsAfterMove(state, move, color) * (difficulty === 'hard' ? 36 : 18) * style.trap;
805
+ score +=
806
+ countPowerReachAfterMove(state, move, color) *
807
+ (difficulty === 'hard' ? 8 : 4) *
808
+ style.mobility;
809
+ score +=
810
+ countProtectedThreatsAfterMove(state, move, color) *
811
+ (difficulty === 'hard' ? 36 : 18) *
812
+ style.trap;
576
813
  score += scoreEndgamePressure(state, move, color) * style.endgame;
577
814
  }
578
815
  else {
@@ -591,30 +828,74 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style, challengePres
591
828
  if (afterMove.status === 'finished')
592
829
  return score + 5000;
593
830
  const opponentMoves = getChessimalsAllLegalMoves(afterMove);
594
- const opponentImmediateWin = opponentMoves.some((opponentMove) => opponentMove.kind === 'basic' &&
831
+ const opponentImmediateWin = opponentMoves.some(opponentMove => opponentMove.kind === 'basic' &&
595
832
  isPromotionRow(afterMove.boardSize, afterMove.currentTurn, opponentMove.to));
596
833
  if (opponentImmediateWin) {
597
- score -= (difficulty === 'easy' ? 1800 : difficulty === 'normal' ? 5200 : 8000 + 4200 * challengePressure) * style.safety;
834
+ score -=
835
+ (difficulty === 'easy'
836
+ ? 1800
837
+ : difficulty === 'normal'
838
+ ? 5200
839
+ : 8000 + 4200 * challengePressure) * style.safety;
598
840
  }
599
- const movedPiece = afterMove.pieces.find((piece) => piece.id === move.pieceId && !piece.captured);
841
+ const movedPiece = afterMove.pieces.find(piece => piece.id === move.pieceId && !piece.captured);
600
842
  if (movedPiece) {
601
- const canCaptureMovedPiece = opponentMoves.some((opponentMove) => opponentMove.capturesPieceId === move.pieceId);
843
+ const canCaptureMovedPiece = opponentMoves.some(opponentMove => opponentMove.capturesPieceId === move.pieceId);
602
844
  if (canCaptureMovedPiece) {
603
- score -= (move.capturesPieceId ? 180 : difficulty === 'easy' ? 120 : difficulty === 'normal' ? 360 : 560)
604
- * style.safety
605
- * (1 + challengePressure);
845
+ score -=
846
+ (move.capturesPieceId
847
+ ? 180
848
+ : difficulty === 'easy'
849
+ ? 120
850
+ : difficulty === 'normal'
851
+ ? 360
852
+ : 560) *
853
+ style.safety *
854
+ (1 + challengePressure);
606
855
  }
607
856
  const center = (afterMove.boardSize - 1) / 2;
608
857
  const centerControl = Math.max(0, afterMove.boardSize / 2 - Math.abs(movedPiece.position.col - center));
609
858
  score += centerControl * (difficulty === 'hard' ? 18 : 10) * style.center;
610
859
  }
611
860
  const opponentBestReply = opponentMoves
612
- .map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style, challengePressure, false, nightmareMode))
861
+ .map(opponentMove => scoreBotMove(afterMove, opponentMove, difficulty, style, challengePressure, false, nightmareMode))
613
862
  .sort((a, b) => b - a)[0];
614
863
  if (opponentBestReply) {
615
- const replyWeight = difficulty === 'easy' ? 0.12 : difficulty === 'normal' ? 0.32 + 0.08 * challengePressure : 0.48 + 0.16 * challengePressure;
864
+ const replyWeight = difficulty === 'easy'
865
+ ? 0.12
866
+ : difficulty === 'normal'
867
+ ? 0.4 + 0.1 * challengePressure
868
+ : difficulty === 'master'
869
+ ? 0.72 + 0.22 * challengePressure
870
+ : 0.48 + 0.16 * challengePressure;
616
871
  score -= opponentBestReply * replyWeight * style.reply;
617
872
  }
873
+ if (difficulty === 'hard' || difficulty === 'master') {
874
+ const topOppMoves = opponentMoves
875
+ .map(m => ({
876
+ move: m,
877
+ score: scoreBotMove(afterMove, m, difficulty, style, challengePressure, false, nightmareMode),
878
+ }))
879
+ .sort((a, b) => b.score - a.score)
880
+ .slice(0, 4);
881
+ for (const { move: oppMove } of topOppMoves) {
882
+ try {
883
+ const s2 = applyChessimalsMove(afterMove, oppMove);
884
+ if (s2.status === 'finished')
885
+ continue;
886
+ const myCounters = getChessimalsAllLegalMoves(s2);
887
+ if (myCounters.length === 0)
888
+ continue;
889
+ const myBest = myCounters
890
+ .map(m => scoreBotMove(s2, m, difficulty, style, challengePressure, false, nightmareMode))
891
+ .sort((a, b) => b - a)[0] ?? 0;
892
+ score += myBest * (difficulty === 'master' ? 0.22 : 0.14) * style.reply;
893
+ }
894
+ catch {
895
+ // skip
896
+ }
897
+ }
898
+ }
618
899
  }
619
900
  catch {
620
901
  score -= 1000;
@@ -622,9 +903,9 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style, challengePres
622
903
  return score;
623
904
  }
624
905
  function getChallengePressure(round) {
625
- if (!round || round <= 2)
906
+ if (!round)
626
907
  return 0;
627
- return Math.min(1, Math.max(0, (round - 2) / 6));
908
+ return Math.min(1, Math.max(0, round / 8));
628
909
  }
629
910
  function tuneBotStyle(style, difficulty, challengePressure, nightmareMode = 'none') {
630
911
  if (nightmareMode === 'hunt') {
@@ -662,9 +943,26 @@ function tuneBotStyle(style, difficulty, challengePressure, nightmareMode = 'non
662
943
  endgame: style.endgame * 1.28,
663
944
  };
664
945
  }
946
+ if (difficulty === 'master') {
947
+ style = {
948
+ ...style,
949
+ capture: style.capture * 1.08,
950
+ safety: style.safety * 1.22,
951
+ reply: style.reply * 1.32,
952
+ center: style.center * 1.12,
953
+ randomness: Math.min(style.randomness, 3),
954
+ spread: style.spread * 0.5,
955
+ trap: style.trap * 1.14,
956
+ endgame: style.endgame * 1.18,
957
+ };
958
+ }
665
959
  if (!challengePressure)
666
960
  return style;
667
- const pressure = difficulty === 'easy' ? challengePressure * 0.45 : challengePressure;
961
+ const pressure = difficulty === 'easy'
962
+ ? challengePressure * 0.45
963
+ : difficulty === 'master'
964
+ ? challengePressure * 1.15
965
+ : challengePressure;
668
966
  return {
669
967
  ...style,
670
968
  capture: style.capture * (1 + pressure * 0.28),
@@ -679,7 +977,7 @@ function chooseChallengeBasicCapture(scored, challengePressure) {
679
977
  if (challengePressure < 0.5)
680
978
  return undefined;
681
979
  const best = scored[0];
682
- const bestBasicCapture = scored.find((item) => item.move.kind === 'basic' && item.move.capturesPieceId);
980
+ const bestBasicCapture = scored.find(item => item.move.kind === 'basic' && item.move.capturesPieceId);
683
981
  if (!best || !bestBasicCapture)
684
982
  return undefined;
685
983
  if (best.move.kind === 'basic' && best.move.capturesPieceId)
@@ -691,7 +989,7 @@ function chooseNightmareCapture(scored, nightmareMode) {
691
989
  if (nightmareMode !== 'hunt')
692
990
  return undefined;
693
991
  const best = scored[0];
694
- const capture = scored.find((item) => item.move.capturesPieceId);
992
+ const capture = scored.find(item => item.move.capturesPieceId);
695
993
  if (!best || !capture)
696
994
  return undefined;
697
995
  return best.score - capture.score <= 1800 ? capture.move : undefined;
@@ -716,7 +1014,7 @@ function countPowerReachAfterMove(state, move, color) {
716
1014
  try {
717
1015
  const afterMove = applyChessimalsMove(state, move);
718
1016
  const evaluationState = { ...afterMove, currentTurn: color };
719
- return getChessimalsAllLegalMoves(evaluationState, color).filter((nextMove) => nextMove.kind === 'power').length;
1017
+ return getChessimalsAllLegalMoves(evaluationState, color).filter(nextMove => nextMove.kind === 'power').length;
720
1018
  }
721
1019
  catch {
722
1020
  return 0;
@@ -727,15 +1025,15 @@ function countProtectedThreatsAfterMove(state, move, color) {
727
1025
  const afterMove = applyChessimalsMove(state, move);
728
1026
  const evaluationState = { ...afterMove, currentTurn: color };
729
1027
  const ourMoves = getChessimalsAllLegalMoves(evaluationState, color);
730
- const enemyPieces = activePieces(afterMove).filter((piece) => piece.color !== color && !piece.captured);
731
- return enemyPieces.filter((piece) => ourMoves.some((nextMove) => nextMove.capturesPieceId === piece.id)).length;
1028
+ const enemyPieces = activePieces(afterMove).filter(piece => piece.color !== color && !piece.captured);
1029
+ return enemyPieces.filter(piece => ourMoves.some(nextMove => nextMove.capturesPieceId === piece.id)).length;
732
1030
  }
733
1031
  catch {
734
1032
  return 0;
735
1033
  }
736
1034
  }
737
1035
  function scoreEndgamePressure(state, move, color) {
738
- const remainingEnemyPieces = activePieces(state).filter((piece) => piece.color !== color && !piece.captured).length;
1036
+ const remainingEnemyPieces = activePieces(state).filter(piece => piece.color !== color && !piece.captured).length;
739
1037
  const urgency = remainingEnemyPieces <= Math.max(2, Math.floor(state.boardSize / 2)) ? 1.6 : 1;
740
1038
  const distanceToPromotion = color === 'white' ? move.to.row : state.boardSize - 1 - move.to.row;
741
1039
  return Math.max(0, state.boardSize - distanceToPromotion) * 14 * urgency;
@@ -747,7 +1045,7 @@ function chooseConservativeHardCapture(state, scored) {
747
1045
  if (!best || best.move.kind !== 'power' || !best.move.capturesPieceId || best.score >= 10000) {
748
1046
  return undefined;
749
1047
  }
750
- const bestBasicCapture = scored.find((item) => item.move.kind === 'basic' && item.move.capturesPieceId);
1048
+ const bestBasicCapture = scored.find(item => item.move.kind === 'basic' && item.move.capturesPieceId);
751
1049
  if (!bestBasicCapture)
752
1050
  return undefined;
753
1051
  return best.score - bestBasicCapture.score <= 650 ? bestBasicCapture.move : undefined;
@@ -773,7 +1071,7 @@ function pickNoisyBotMove(scored, spread) {
773
1071
  return pool[0]?.move;
774
1072
  }
775
1073
  function getImmediateWinningMoves(state, color) {
776
- return getChessimalsAllLegalMoves(state, color).filter((move) => move.kind === 'basic' && isPromotionRow(state.boardSize, color, move.to));
1074
+ return getChessimalsAllLegalMoves(state, color).filter(move => move.kind === 'basic' && isPromotionRow(state.boardSize, color, move.to));
777
1075
  }
778
1076
  function wouldUnlockPower(state, color, position) {
779
1077
  if (state.players[color].powerUnlocked)
@@ -787,7 +1085,7 @@ function isSquareVulnerableAfterMove(state, move) {
787
1085
  const afterMove = applyChessimalsMove(state, move);
788
1086
  if (afterMove.status === 'finished')
789
1087
  return false;
790
- return getChessimalsAllLegalMoves(afterMove).some((enemyMove) => samePosition(enemyMove.to, move.to) && !!enemyMove.capturesPieceId);
1088
+ return getChessimalsAllLegalMoves(afterMove).some(enemyMove => samePosition(enemyMove.to, move.to) && !!enemyMove.capturesPieceId);
791
1089
  }
792
1090
  catch {
793
1091
  return false;
@@ -843,7 +1141,7 @@ function refreshChessimalsPowerUnlocks(state) {
843
1141
  function hasCrossedCenter(state, color) {
844
1142
  const centerTop = state.boardSize / 2 - 1;
845
1143
  const centerBottom = state.boardSize / 2;
846
- return activePieces(state).some((piece) => {
1144
+ return activePieces(state).some(piece => {
847
1145
  if (piece.color !== color || piece.captured)
848
1146
  return false;
849
1147
  return color === 'white' ? piece.position.row <= centerTop : piece.position.row >= centerBottom;
@@ -853,7 +1151,7 @@ function hasEnemyEnteredHome(state, color) {
853
1151
  const centerTop = state.boardSize / 2 - 1;
854
1152
  const centerBottom = state.boardSize / 2;
855
1153
  const enemy = otherColor(color);
856
- return activePieces(state).some((piece) => {
1154
+ return activePieces(state).some(piece => {
857
1155
  if (piece.color !== enemy || piece.captured)
858
1156
  return false;
859
1157
  return color === 'white' ? piece.position.row >= centerBottom : piece.position.row <= centerTop;
@@ -874,4 +1172,4 @@ function otherColor(color) {
874
1172
  function createLocalId() {
875
1173
  return `local-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
876
1174
  }
877
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLE1BQU0sZ0NBQWdDLEdBQUcsMkNBQTJDLENBQUM7QUFzQnJGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUEyQjtJQUM3RDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZUFBZTtRQUM3RCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxXQUFXO1FBQ2YsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLEdBQUc7UUFDWCxTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZ0JBQWdCO1FBQzlELFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsY0FBYyxFQUFFLDRCQUE0QjtLQUM3QztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsTUFBTTtRQUNsQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsY0FBYyxFQUFFLHlCQUF5QjtLQUMxQztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsUUFBUTtRQUNwQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0Is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LEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDcEwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDdkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDMUwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDbkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDekwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDM0wsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDeEwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDdkwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7Q0FDdkwsQ0FBQztBQUVGLE1BQU0saUNBQWlDLEdBQTREO0lBQ2pHLElBQUksRUFBRSxVQUFVO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxZQUFZO0NBQ25CLENBQUM7QUFTRixNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFlBQWlDLENBQUMsRUFDbEMsVUFBdUMsRUFBRTtJQUV6QyxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRW5CLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLEtBQUssRUFBRSxPQUFPO1lBQ2QsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDaEMsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDakIsS0FBSyxFQUFFLE9BQU87WUFDZCxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNoQyxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUM7UUFDMUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksYUFBYSxFQUFFO1FBQ2pDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU87UUFDN0IsU0FBUztRQUNULE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLGFBQWE7UUFDdkMsV0FBVyxFQUFFLE9BQU87UUFDcEIsTUFBTTtRQUNOLE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDckUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtTQUN0RTtRQUNELFNBQVMsRUFBRSxDQUFDO1FBQ1osTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxHQUFHLEtBQUs7UUFDUixXQUFXLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsS0FBMEIsRUFDMUIsUUFBNEI7SUFFNUIsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUM3QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FDaEcsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLEtBQTBCLEVBQzFCLE9BQWUsRUFDZixNQUE2QjtJQUU3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssYUFBYTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTlDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hGLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsV0FBVztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTNELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDL0UsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLEtBQTBCLEVBQzFCLFFBQStCLEtBQUssQ0FBQyxXQUFXO0lBRWhELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxhQUFhO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFOUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxLQUFLLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDekYsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxNQUFNLEtBQUssR0FBcUIsRUFBRSxDQUFDO0lBRW5DLEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSztZQUFFLFNBQVM7UUFFdEQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWE7WUFBRSxTQUFTO1FBRXBDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUFFLFNBQVM7WUFDckQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLEtBQTBCLEVBQzFCLGFBQXNDLFFBQVEsRUFDOUMsWUFBb0MsaUNBQWlDLENBQUMsVUFBVSxDQUFDLEVBQ2pGLFVBQWdDLEVBQUU7SUFFbEMsTUFBTSxLQUFLLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLGlDQUFpQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckcsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkUsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTVGLE1BQU0sV0FBVyxHQUFHLEtBQUs7U0FDdEIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQy9ILElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0gsTUFBTSxNQUFNLEdBQUcsV0FBVztTQUN2QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLEtBQUssRUFDSCxLQUFLLEdBQUcsY0FBYztZQUNwQixDQUFDLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSztLQUNqQixDQUFDLENBQUM7U0FDRixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQyxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQy9ELElBQUksV0FBVztRQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQztJQUV6QyxNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUNwQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNuRyxDQUFDO0lBQ0YsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM3RixDQUFDO1FBQ0YsSUFBSSxZQUFZO1lBQUUsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hGLElBQUksZ0JBQWdCO1FBQUUsT0FBTyxnQkFBZ0IsQ0FBQztJQUU5QyxNQUFNLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0UsSUFBSSxnQkFBZ0I7UUFBRSxPQUFPLGdCQUFnQixDQUFDO0lBRTlDLE1BQU0sbUJBQW1CLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLElBQUksbUJBQW1CO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUVwRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsS0FBMEIsRUFDMUIsU0FBeUI7SUFFekIsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2xHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQy9FLENBQUM7SUFFRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMvQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRztRQUNkLEdBQUcsS0FBSyxDQUFDLE9BQU87UUFDaEIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDbEMsS0FBSyxFQUNILFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNO2dCQUM1QyxDQUFDLENBQUM7b0JBQ0UsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLO29CQUN4QyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNqRztnQkFDSCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSztTQUM1QztLQUNGLENBQUM7SUFFRixNQUFNLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQztRQUM5QyxHQUFHLEtBQUs7UUFDUixNQUFNO1FBQ04sT0FBTztRQUNQLFdBQVcsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN6QyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDO1FBQzlCLFFBQVEsRUFBRSxTQUFTO0tBQ3BCLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQ2hELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUMvRCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFbkcsTUFBTSxhQUFhLEdBQ2pCLFFBQVEsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQjtRQUN6RCxDQUFDLENBQUM7WUFDRSxHQUFHLFNBQVM7WUFDWixNQUFNLEVBQUUsVUFBbUI7WUFDM0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3hCLFlBQVksRUFBRSxRQUFRO2dCQUNwQixDQUFDLENBQUUsV0FBcUI7Z0JBQ3hCLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7b0JBQ3hCLENBQUMsQ0FBRSxhQUF1QjtvQkFDMUIsQ0FBQyxDQUFFLFNBQW1CO1NBQzNCO1FBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVoQixPQUFPO1FBQ0wsR0FBRyxhQUFhO1FBQ2hCLFdBQVcsRUFBRTtZQUNYLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQzNCLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUM7U0FDakQ7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsS0FBMEIsRUFDMUIsS0FBaUM7SUFFakMsTUFBTSxTQUFTLEdBQXdCLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDMUIsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3hCLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FBQztJQUM5QixPQUFPO1FBQ0wsR0FBRyxTQUFTO1FBQ1osTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztRQUM5QixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDakMsU0FBUyxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsS0FBMEIsRUFDMUIsSUFBcUI7SUFFckIsT0FBTztRQUNMLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMzQixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDakMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1FBQzlCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDcEUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQTBCO0lBQ25ELElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ25GLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQWlDO0lBQzlELE9BQU87UUFDTCxHQUFHLEtBQUs7UUFDUixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzFELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsTUFBeUI7SUFDNUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLEdBQUcsS0FBSztRQUNSLFFBQVEsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtLQUNoQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFvQjtJQUN4QyxPQUFPO1FBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1FBQ3JCLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtRQUN0QixFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUMzRSxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsS0FBMEIsRUFDMUIsS0FBNEI7SUFFNUIsTUFBTSxhQUFhLEdBQXdCO1FBQ3pDLEdBQUcsS0FBSztRQUNSLE1BQU0sRUFBRSxVQUFVO1FBQ2xCLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3pCLFlBQVksRUFBRSxhQUFhO0tBQzVCLENBQUM7SUFFRixPQUFPO1FBQ0wsR0FBRyxhQUFhO1FBQ2hCLFdBQVcsRUFBRTtZQUNYLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQzNCLHNCQUFzQixDQUFDLGFBQWEsQ0FBQztTQUN0QztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxRQUE0QjtJQUN0RCxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQStDO0lBQ3RFLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBc0QsSUFBTztJQUN2RixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0UsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLElBQUksRUFBRSxTQUFTLElBQUksQ0FBQztRQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUM7S0FDMUUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVc7SUFDbEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxLQUFLO1FBQ1IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0tBQzlCLENBQUMsRUFDRixFQUF5RyxDQUMxRyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQTBCO0lBQzlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQTBCLEVBQUUsS0FBc0I7SUFDdkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxLQUFLLEdBQXFCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFakYsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JGLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQzNCLEVBQUUsRUFBRSxPQUFPO1lBQ1gsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUM1RixNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFDRSxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7WUFDdEMsV0FBVztZQUNYLFdBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUs7WUFDakMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUNyRCxDQUFDO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDM0IsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsZUFBZSxFQUFFLFdBQVcsQ0FBQyxFQUFFO2FBQ2hDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3BCLEtBQTBCLEVBQzFCLEtBQXNCLEVBQ3RCLE1BQTRCO0lBRTVCLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBcUIsRUFBRSxDQUFDO0lBRW5DLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxHQUFHLFFBQVE7Z0JBQ2xELEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxHQUFHLFFBQVE7YUFDbkQsQ0FBQztZQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7Z0JBQUUsTUFBTTtZQUNuRCxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO2dCQUFFLE1BQU07WUFFaEUsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELElBQUksV0FBVyxFQUFFLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSztnQkFBRSxNQUFNO1lBRTlDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixJQUFJLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzNCLEVBQUUsRUFBRSxNQUFNO2dCQUNWLElBQUksRUFBRSxPQUFPO2dCQUNiLE1BQU07Z0JBQ04sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBRUgsSUFBSSxXQUFXO2dCQUFFLE1BQU07UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQTBCLEVBQUUsS0FBc0I7SUFDMUUsTUFBTSxLQUFLLEdBQXFCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBRztRQUNaLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNwQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNwQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDbkIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDbEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtLQUNuQixDQUFDO0lBRUYsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRztZQUNiLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRztZQUNsQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUc7U0FDbkMsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7WUFBRSxTQUFTO1FBQ3RELElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7WUFBRSxTQUFTO1FBRW5FLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLFdBQVcsRUFBRSxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUs7WUFBRSxTQUFTO1FBRWpELEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQzNCLEVBQUUsRUFBRSxNQUFNO1lBQ1YsSUFBSSxFQUFFLE9BQU87WUFDYixNQUFNLEVBQUUsVUFBVTtZQUNsQixHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUM1RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLEtBQTBCLEVBQzFCLElBQW9CLEVBQ3BCLFVBQW1DLEVBQ25DLEtBQXlCLEVBQ3pCLGlCQUFpQixHQUFHLENBQUMsRUFDckIsdUJBQXVCLEdBQUcsSUFBSSxFQUM5QixnQkFBeUMsTUFBTTtJQUUvQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlO1FBQ3RDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDeEUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNkLE1BQU0sV0FBVyxHQUNmLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUN0RSxJQUFJLEtBQUssR0FBRyxXQUFXLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDakQsTUFBTSxnQkFBZ0IsR0FDcEIsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3RFLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBRTFHLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzdFLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLGFBQWEsS0FBSyxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUMvRCxDQUFDO0lBQ0QsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN6RCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTztZQUFFLEtBQUssSUFBSSxHQUFHLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1RSxNQUFNLGlCQUFpQixHQUNyQixXQUFXLENBQUMsS0FBSyxLQUFLLE9BQU87WUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRztZQUNoRCxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDL0IsS0FBSyxJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDNUUsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUMxQixLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDM0csQ0FBQztJQUNELElBQUksYUFBYSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3hELEtBQUssSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07UUFBRSxLQUFLLElBQUksYUFBYSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDdkcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVU7UUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUQsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDeEUsSUFBSSx1QkFBdUIsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BELEtBQUssSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3pHLEtBQUssSUFBSSw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzdHLEtBQUssSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDcEUsQ0FBQztTQUFNLENBQUM7UUFDTixLQUFLLElBQUksb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxJQUFJLFVBQVUsS0FBSyxNQUFNLElBQUksMkJBQTJCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDbkQsQ0FBQztJQUNELEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBRWxELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQ2hDLEtBQTBCLEVBQzFCLElBQW9CLEVBQ3BCLFVBQW1DLEVBQ25DLEtBQXlCLEVBQ3pCLGlCQUFpQixHQUFHLENBQUMsRUFDckIsZ0JBQXlDLE1BQU07SUFFL0MsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFakcsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxVQUFVO1lBQUUsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRXpELE1BQU0sYUFBYSxHQUFHLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUNmLFlBQVksQ0FBQyxJQUFJLEtBQUssT0FBTztZQUM3QixjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FDOUUsQ0FBQztRQUNGLElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUgsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakgsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO2dCQUN6QixLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7c0JBQ3JHLEtBQUssQ0FBQyxNQUFNO3NCQUNaLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLEtBQUssSUFBSSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUUsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUcsYUFBYTthQUNwQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ3hILElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsTUFBTSxXQUFXLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1lBQy9JLEtBQUssSUFBSSxpQkFBaUIsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsS0FBYztJQUMxQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDbkIsS0FBeUIsRUFDekIsVUFBbUMsRUFDbkMsaUJBQXlCLEVBQ3pCLGdCQUF5QyxNQUFNO0lBRS9DLElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzdCLEtBQUssR0FBRztZQUNOLEdBQUcsS0FBSztZQUNSLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUk7WUFDckMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSTtZQUM3QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHO1lBQ3hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUk7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSTtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksYUFBYSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzlCLEtBQUssR0FBRztZQUNOLEdBQUcsS0FBSztZQUNSLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUk7WUFDckMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSTtZQUM3QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJO1lBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsS0FBSyxHQUFHO1lBQ04sR0FBRyxLQUFLO1lBQ1IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSTtZQUNyQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJO1lBQzdCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUk7WUFDM0IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSTtZQUN6QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHO1lBQzFCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUc7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDekMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRztZQUMxQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJO1lBQ3ZCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUk7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLENBQUMsaUJBQWlCO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RixPQUFPO1FBQ0wsR0FBRyxLQUFLO1FBQ1IsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztRQUM5QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQzVDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDMUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztRQUM1QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BELE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7S0FDN0MsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLDJCQUEyQixDQUNsQyxNQUFpRCxFQUNqRCxpQkFBeUI7SUFFekIsSUFBSSxpQkFBaUIsR0FBRyxHQUFHO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTlFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN4RixPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDOUYsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQzdCLE1BQWlELEVBQ2pELGFBQXVDO0lBRXZDLElBQUksYUFBYSxLQUFLLE1BQU07UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUUvQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXhDLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUMvQixLQUEwQixFQUMxQixJQUFvQixFQUNwQixXQUF3QyxFQUN4QyxLQUF5QjtJQUV6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNoRyxNQUFNLGFBQWEsR0FBRyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDMUYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzdGLE1BQU0sc0JBQXNCLEdBQUcsZUFBZSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7SUFFNUUsSUFBSSxXQUFXO1FBQUUsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQyxJQUFJLHNCQUFzQjtRQUFFLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFFdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUYsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FDL0IsS0FBMEIsRUFDMUIsSUFBb0IsRUFDcEIsS0FBNEI7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdELE9BQU8sMEJBQTBCLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkgsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLDhCQUE4QixDQUNyQyxLQUEwQixFQUMxQixJQUFvQixFQUNwQixLQUE0QjtJQUU1QixJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsMEJBQTBCLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hHLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUNuRSxDQUFDLE1BQU0sQ0FBQztJQUNYLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FDM0IsS0FBMEIsRUFDMUIsSUFBb0IsRUFDcEIsS0FBNEI7SUFFNUIsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEgsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLE1BQU0sbUJBQW1CLEdBQ3ZCLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFTLDZCQUE2QixDQUNwQyxLQUEwQixFQUMxQixNQUFpRDtJQUVqRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTVDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7UUFDN0YsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEcsSUFBSSxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXhDLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN4RixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsTUFBc0QsRUFDdEQsTUFBYztJQUVkLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUN6QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RCLElBQUksTUFBTSxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN2QixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FDL0IsS0FBMEIsRUFDMUIsS0FBNEI7SUFFNUIsT0FBTywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNwRCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDbkYsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixLQUEwQixFQUMxQixLQUE0QixFQUM1QixRQUE0QjtJQUU1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN6QyxPQUFPLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQztBQUN0RixDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxLQUEwQixFQUFFLElBQW9CO0lBQ25GLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssVUFBVTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xELE9BQU8sMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDOUQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLE1BQTRCO0lBQ3RELElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE9BQU87WUFDTCxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDdEIsT0FBTztZQUNMLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDbkIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDbEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU87UUFDTCxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDcEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDbkIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDbEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNsQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtLQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQUMsS0FBMEI7SUFDL0QsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRTtnQkFDTCxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDdEIsYUFBYSxFQUNYLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWE7b0JBQ2pDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7b0JBQ2hDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7YUFDdEM7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUs7Z0JBQ3RCLGFBQWEsRUFDWCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhO29CQUNqQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO29CQUNoQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2FBQ3RDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBMEIsRUFBRSxLQUE0QjtJQUNoRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDekMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUEwQixFQUFFLEtBQTRCO0lBQ25GLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLFNBQThCLEVBQzlCLEtBQTRCLEVBQzVCLFFBQTRCO0lBRTVCLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsU0FBOEIsRUFBRSxRQUE0QjtJQUNqRixPQUFPLENBQ0wsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQy9GLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBcUIsRUFBRSxDQUFxQjtJQUNoRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQTRCO0lBQzlDLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4gIENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBDaGVzc2ltYWxzQm90UHJvZmlsZSxcbiAgQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZCxcbiAgQ2hlc3NpbWFsc0JvYXJkU2l6ZSxcbiAgQ2hlc3NpbWFsc0dhbWVNb2RlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXR1cyxcbiAgQ2hlc3NpbWFsc01vdmUsXG4gIENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuICBDaGVzc2ltYWxzTmlnaHRtYXJlTW9kZSxcbiAgQ2hlc3NpbWFsc09ubGluZVN0YXRlLFxuICBDaGVzc2ltYWxzUGllY2UsXG4gIENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbiAgQ2hlc3NpbWFsc1Bvc2l0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQU5JTUFMUzogQ2hlc3NpbWFsc0FuaW1hbFR5cGVbXSA9IFsnZWFnbGUnLCAnYnVsbCcsICdrYW5nYXJvbycsICdsaW9uJ107XG5jb25zdCBDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRSA9ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9jaGFsbGVuZ2UtYXZhdGFycyc7XG5cbmludGVyZmFjZSBDaGVzc2ltYWxzQm90U3R5bGUge1xuICBhZHZhbmNlbWVudDogbnVtYmVyO1xuICBjYXB0dXJlOiBudW1iZXI7XG4gIHNhZmV0eTogbnVtYmVyO1xuICBwb3dlcjogbnVtYmVyO1xuICBjZW50ZXI6IG51bWJlcjtcbiAgdW5sb2NrOiBudW1iZXI7XG4gIHJlcGx5OiBudW1iZXI7XG4gIHJhbmRvbW5lc3M6IG51bWJlcjtcbiAgc3ByZWFkOiBudW1iZXI7XG4gIG1vYmlsaXR5OiBudW1iZXI7XG4gIHRyYXA6IG51bWJlcjtcbiAgZW5kZ2FtZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQ2hlc3NpbWFsc0JvdE9wdGlvbnMge1xuICBjaGFsbGVuZ2VSb3VuZD86IG51bWJlcjtcbiAgbmlnaHRtYXJlTW9kZT86IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlO1xufVxuXG5leHBvcnQgY29uc3QgQ0hFU1NJTUFMU19CT1RfUFJPRklMRVM6IENoZXNzaW1hbHNCb3RQcm9maWxlW10gPSBbXG4gIHtcbiAgICBpZDogJ2V4cGxvcmVyJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn8J+nrScsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vZXhwbG9yZXIucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RFeHBsb3JlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90RXhwbG9yZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnaW1wdWxzaXZlJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn4pqhJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9pbXB1bHNpdmUucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RJbXB1bHNpdmUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEltcHVsc2l2ZUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdydW5uZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn4+BJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9ydW5uZXIucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RSdW5uZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFJ1bm5lckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdodW50ZXInLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/Cfjq8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2h1bnRlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEh1bnRlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SHVudGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2d1YXJkaWFuJyxcbiAgICBkaWZmaWN1bHR5OiAnbm9ybWFsJyxcbiAgICBhdmF0YXI6ICfwn5uh77iPJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9ndWFyZGlhbi5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEd1YXJkaWFuJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RHdWFyZGlhbkJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdqdW1wZXInLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/CfppgnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2p1bXBlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEp1bXBlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SnVtcGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3N0cmF0ZWdpc3QnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfimZ/vuI8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3N0cmF0ZWdpc3QucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0JyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0Qm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3ByZWRhdG9yJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+mgScsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vcHJlZGF0b3IucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RQcmVkYXRvcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90UHJlZGF0b3JCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3ByaW50ZXInLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5qAJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9zcHJpbnRlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFNwcmludGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTcHJpbnRlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzZW50aW5lbCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/Cfj7AnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3NlbnRpbmVsLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U2VudGluZWwnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNlbnRpbmVsQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ29yYWNsZScsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CflK4nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L29yYWNsZS5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE9yYWNsZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90T3JhY2xlQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2FtYnVzaGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+qpCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vYW1idXNoZXIucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RBbWJ1c2hlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90QW1idXNoZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnbG9ja3NtaXRoJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+UkCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vbG9ja3NtaXRoLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90TG9ja3NtaXRoJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RMb2Nrc21pdGhCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3Rvcm0nLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn4yp77iPJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9zdG9ybS5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFN0b3JtJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTdG9ybUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYXRyaWFyY2gnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5GRJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9tYXRyaWFyY2gucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RNYXRyaWFyY2gnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdE1hdHJpYXJjaEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdlbmRnYW1lJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn4oybJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9lbmRnYW1lLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90RW5kZ2FtZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90RW5kZ2FtZUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYWdudXMnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfimZ8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L25pZ2h0bWFyZS1tYWdudXMucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RNYWdudXMnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdE1hZ251c0JvZHknLFxuICB9LFxuXTtcblxuY29uc3QgQk9UX1NUWUxFUzogUmVjb3JkPENoZXNzaW1hbHNCb3RQcm9maWxlSWQsIENoZXNzaW1hbHNCb3RTdHlsZT4gPSB7XG4gIGV4cGxvcmVyOiB7IGFkdmFuY2VtZW50OiAxLjA1LCBjYXB0dXJlOiAwLjgyLCBzYWZldHk6IDAuNjIsIHBvd2VyOiAwLjgsIGNlbnRlcjogMS4xNSwgdW5sb2NrOiAxLjA1LCByZXBseTogMC43LCByYW5kb21uZXNzOiAyNjAsIHNwcmVhZDogMC42OCwgbW9iaWxpdHk6IDAuNzUsIHRyYXA6IDAuNSwgZW5kZ2FtZTogMC41NSB9LFxuICBpbXB1bHNpdmU6IHsgYWR2YW5jZW1lbnQ6IDAuOSwgY2FwdHVyZTogMS40NSwgc2FmZXR5OiAwLjQ4LCBwb3dlcjogMS4xNSwgY2VudGVyOiAwLjgsIHVubG9jazogMC45LCByZXBseTogMC41NSwgcmFuZG9tbmVzczogMjkwLCBzcHJlYWQ6IDAuNjIsIG1vYmlsaXR5OiAwLjg1LCB0cmFwOiAwLjYyLCBlbmRnYW1lOiAwLjUgfSxcbiAgcnVubmVyOiB7IGFkdmFuY2VtZW50OiAxLjU1LCBjYXB0dXJlOiAwLjc4LCBzYWZldHk6IDAuNSwgcG93ZXI6IDAuOTUsIGNlbnRlcjogMC43LCB1bmxvY2s6IDEuMSwgcmVwbHk6IDAuNTUsIHJhbmRvbW5lc3M6IDI1MCwgc3ByZWFkOiAwLjYsIG1vYmlsaXR5OiAwLjcyLCB0cmFwOiAwLjQ1LCBlbmRnYW1lOiAxLjEgfSxcbiAgaHVudGVyOiB7IGFkdmFuY2VtZW50OiAwLjk1LCBjYXB0dXJlOiAxLjQ1LCBzYWZldHk6IDAuOSwgcG93ZXI6IDEuMDUsIGNlbnRlcjogMC45NSwgdW5sb2NrOiAwLjk1LCByZXBseTogMSwgcmFuZG9tbmVzczogOTAsIHNwcmVhZDogMC4zLCBtb2JpbGl0eTogMC45NSwgdHJhcDogMC44MiwgZW5kZ2FtZTogMC43NiB9LFxuICBndWFyZGlhbjogeyBhZHZhbmNlbWVudDogMC44OCwgY2FwdHVyZTogMSwgc2FmZXR5OiAxLjQ1LCBwb3dlcjogMC44NSwgY2VudGVyOiAxLjA1LCB1bmxvY2s6IDEsIHJlcGx5OiAxLjE1LCByYW5kb21uZXNzOiA3MCwgc3ByZWFkOiAwLjI2LCBtb2JpbGl0eTogMC44MiwgdHJhcDogMC43MiwgZW5kZ2FtZTogMC43MiB9LFxuICBqdW1wZXI6IHsgYWR2YW5jZW1lbnQ6IDEuMTIsIGNhcHR1cmU6IDEsIHNhZmV0eTogMC45MiwgcG93ZXI6IDEuNDIsIGNlbnRlcjogMS4xOCwgdW5sb2NrOiAxLjA4LCByZXBseTogMC45NSwgcmFuZG9tbmVzczogOTUsIHNwcmVhZDogMC4zMiwgbW9iaWxpdHk6IDEuMTUsIHRyYXA6IDAuOSwgZW5kZ2FtZTogMC44MiB9LFxuICBzdHJhdGVnaXN0OiB7IGFkdmFuY2VtZW50OiAxLjA1LCBjYXB0dXJlOiAxLjA4LCBzYWZldHk6IDEuMjIsIHBvd2VyOiAxLjA4LCBjZW50ZXI6IDEuMTYsIHVubG9jazogMS4xLCByZXBseTogMS4yNSwgcmFuZG9tbmVzczogMjIsIHNwcmVhZDogMC4xNCwgbW9iaWxpdHk6IDEuMDgsIHRyYXA6IDEuMDYsIGVuZGdhbWU6IDEgfSxcbiAgcHJlZGF0b3I6IHsgYWR2YW5jZW1lbnQ6IDAuOTgsIGNhcHR1cmU6IDEuNjgsIHNhZmV0eTogMS4wMiwgcG93ZXI6IDEuMzQsIGNlbnRlcjogMSwgdW5sb2NrOiAxLCByZXBseTogMS4xMiwgcmFuZG9tbmVzczogMjgsIHNwcmVhZDogMC4xNiwgbW9iaWxpdHk6IDEuMDIsIHRyYXA6IDEuMTgsIGVuZGdhbWU6IDAuODIgfSxcbiAgc3ByaW50ZXI6IHsgYWR2YW5jZW1lbnQ6IDEuNzIsIGNhcHR1cmU6IDAuOSwgc2FmZXR5OiAwLjk1LCBwb3dlcjogMS4wOCwgY2VudGVyOiAwLjg2LCB1bmxvY2s6IDEuMTgsIHJlcGx5OiAxLCByYW5kb21uZXNzOiAyNiwgc3ByZWFkOiAwLjE1LCBtb2JpbGl0eTogMC45NSwgdHJhcDogMC43OCwgZW5kZ2FtZTogMS40MiB9LFxuICBzZW50aW5lbDogeyBhZHZhbmNlbWVudDogMC45LCBjYXB0dXJlOiAxLjEyLCBzYWZldHk6IDEuNzIsIHBvd2VyOiAwLjk1LCBjZW50ZXI6IDEuMjgsIHVubG9jazogMS4wNSwgcmVwbHk6IDEuMzgsIHJhbmRvbW5lc3M6IDE4LCBzcHJlYWQ6IDAuMTIsIG1vYmlsaXR5OiAwLjg2LCB0cmFwOiAxLjA0LCBlbmRnYW1lOiAwLjg0IH0sXG4gIG9yYWNsZTogeyBhZHZhbmNlbWVudDogMSwgY2FwdHVyZTogMS4xMiwgc2FmZXR5OiAxLjQyLCBwb3dlcjogMS4xLCBjZW50ZXI6IDEuMTgsIHVubG9jazogMS4wOCwgcmVwbHk6IDEuOCwgcmFuZG9tbmVzczogOCwgc3ByZWFkOiAwLjA4LCBtb2JpbGl0eTogMS4wNiwgdHJhcDogMS4yMiwgZW5kZ2FtZTogMS4wOCB9LFxuICBhbWJ1c2hlcjogeyBhZHZhbmNlbWVudDogMC45LCBjYXB0dXJlOiAxLjQ4LCBzYWZldHk6IDEuMDgsIHBvd2VyOiAxLjQ2LCBjZW50ZXI6IDEuMDUsIHVubG9jazogMS4wMiwgcmVwbHk6IDEuMzIsIHJhbmRvbW5lc3M6IDE0LCBzcHJlYWQ6IDAuMSwgbW9iaWxpdHk6IDEuMTIsIHRyYXA6IDEuNzIsIGVuZGdhbWU6IDAuOTIgfSxcbiAgbG9ja3NtaXRoOiB7IGFkdmFuY2VtZW50OiAwLjg4LCBjYXB0dXJlOiAxLjA0LCBzYWZldHk6IDEuNTUsIHBvd2VyOiAxLjAyLCBjZW50ZXI6IDEuNDgsIHVubG9jazogMS4xMiwgcmVwbHk6IDEuNTIsIHJhbmRvbW5lc3M6IDEyLCBzcHJlYWQ6IDAuMSwgbW9iaWxpdHk6IDEuNTgsIHRyYXA6IDEuMjQsIGVuZGdhbWU6IDAuODYgfSxcbiAgc3Rvcm06IHsgYWR2YW5jZW1lbnQ6IDEuMTgsIGNhcHR1cmU6IDEuMzgsIHNhZmV0eTogMC45OCwgcG93ZXI6IDEuNjIsIGNlbnRlcjogMS4wOCwgdW5sb2NrOiAxLjE4LCByZXBseTogMS4yMiwgcmFuZG9tbmVzczogMTgsIHNwcmVhZDogMC4xMywgbW9iaWxpdHk6IDEuMzYsIHRyYXA6IDEuMjgsIGVuZGdhbWU6IDEuMDIgfSxcbiAgbWF0cmlhcmNoOiB7IGFkdmFuY2VtZW50OiAwLjk2LCBjYXB0dXJlOiAxLjE4LCBzYWZldHk6IDEuNjQsIHBvd2VyOiAxLjE4LCBjZW50ZXI6IDEuMjIsIHVubG9jazogMS4wOCwgcmVwbHk6IDEuNjYsIHJhbmRvbW5lc3M6IDEwLCBzcHJlYWQ6IDAuMDgsIG1vYmlsaXR5OiAxLjAyLCB0cmFwOiAxLjM2LCBlbmRnYW1lOiAxIH0sXG4gIGVuZGdhbWU6IHsgYWR2YW5jZW1lbnQ6IDEuNDYsIGNhcHR1cmU6IDEsIHNhZmV0eTogMS4yOCwgcG93ZXI6IDEuMDQsIGNlbnRlcjogMC45NCwgdW5sb2NrOiAxLjA4LCByZXBseTogMS40NCwgcmFuZG9tbmVzczogMTAsIHNwcmVhZDogMC4wOSwgbW9iaWxpdHk6IDAuOTgsIHRyYXA6IDEuMDIsIGVuZGdhbWU6IDEuODYgfSxcbiAgbWFnbnVzOiB7IGFkdmFuY2VtZW50OiAxLjA0LCBjYXB0dXJlOiAxLjIyLCBzYWZldHk6IDEuOSwgcG93ZXI6IDAuOSwgY2VudGVyOiAxLjQyLCB1bmxvY2s6IDEuMDgsIHJlcGx5OiAyLjA4LCByYW5kb21uZXNzOiAzLCBzcHJlYWQ6IDAuMDQsIG1vYmlsaXR5OiAxLjA4LCB0cmFwOiAxLjQyLCBlbmRnYW1lOiAxLjg2IH0sXG59O1xuXG5jb25zdCBERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFk6IFJlY29yZDxDaGVzc2ltYWxzQm90RGlmZmljdWx0eSwgQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZD4gPSB7XG4gIGVhc3k6ICdleHBsb3JlcicsXG4gIG5vcm1hbDogJ2h1bnRlcicsXG4gIGhhcmQ6ICdzdHJhdGVnaXN0Jyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ2hlc3NpbWFsc0dhbWVPcHRpb25zIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG1vZGU/OiBDaGVzc2ltYWxzR2FtZU1vZGU7XG4gIHN0YXR1cz86IENoZXNzaW1hbHNHYW1lU3RhdHVzO1xuICBvbmxpbmU/OiBDaGVzc2ltYWxzT25saW5lU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGVzc2ltYWxzR2FtZShcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplID0gNixcbiAgb3B0aW9uczogQ3JlYXRlQ2hlc3NpbWFsc0dhbWVPcHRpb25zID0ge30sXG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgcGllY2VzOiBDaGVzc2ltYWxzUGllY2VbXSA9IFtdO1xuICBjb25zdCB3aGl0ZVJvdyA9IGJvYXJkU2l6ZSAtIDI7XG4gIGNvbnN0IGJsYWNrUm93ID0gMTtcblxuICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBib2FyZFNpemU7IGNvbCArPSAxKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgaWQ6IGBXJHtjb2wgKyAxfWAsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIHBvc2l0aW9uOiB7IHJvdzogd2hpdGVSb3csIGNvbCB9LFxuICAgICAgY2FwdHVyZWQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIGlkOiBgQiR7Y29sICsgMX1gLFxuICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICBwb3NpdGlvbjogeyByb3c6IGJsYWNrUm93LCBjb2wgfSxcbiAgICAgIGNhcHR1cmVkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IGNyZWF0ZUxvY2FsSWQoKSxcbiAgICBtb2RlOiBvcHRpb25zLm1vZGUgPz8gJ2xvY2FsJyxcbiAgICBib2FyZFNpemUsXG4gICAgc3RhdHVzOiBvcHRpb25zLnN0YXR1cyA/PyAnaW5fcHJvZ3Jlc3MnLFxuICAgIGN1cnJlbnRUdXJuOiAnd2hpdGUnLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzOiB7XG4gICAgICB3aGl0ZTogeyBjb2xvcjogJ3doaXRlJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgICBibGFjazogeyBjb2xvcjogJ2JsYWNrJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgfSxcbiAgICBtb3ZlQ291bnQ6IDAsXG4gICAgb25saW5lOiBvcHRpb25zLm9ubGluZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNQaWVjZUF0KFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbixcbik6IENoZXNzaW1hbHNQaWVjZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoXG4gICAgKHBpZWNlKSA9PlxuICAgICAgIXBpZWNlLmNhcHR1cmVkICYmIHBpZWNlLnBvc2l0aW9uLnJvdyA9PT0gcG9zaXRpb24ucm93ICYmIHBpZWNlLnBvc2l0aW9uLmNvbCA9PT0gcG9zaXRpb24uY29sLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBwaWVjZUlkOiBzdHJpbmcsXG4gIGFuaW1hbD86IENoZXNzaW1hbHNBbmltYWxUeXBlLFxuKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycpIHJldHVybiBbXTtcblxuICBjb25zdCBwaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcGllY2VJZCAmJiAhaXRlbS5jYXB0dXJlZCk7XG4gIGlmICghcGllY2UgfHwgcGllY2UuY29sb3IgIT09IHN0YXRlLmN1cnJlbnRUdXJuKSByZXR1cm4gW107XG5cbiAgaWYgKGFuaW1hbCkge1xuICAgIGNvbnN0IHBsYXllciA9IHN0YXRlLnBsYXllcnNbcGllY2UuY29sb3JdO1xuICAgIGlmICghcGxheWVyLnBvd2VyVW5sb2NrZWQgfHwgIWhhc1Bvd2VyQ2FyZFVzZShwbGF5ZXIuY2FyZHNbYW5pbWFsXSkpIHJldHVybiBbXTtcbiAgICByZXR1cm4gZ2V0UG93ZXJNb3ZlcyhzdGF0ZSwgcGllY2UsIGFuaW1hbCk7XG4gIH1cblxuICByZXR1cm4gZ2V0QmFzaWNNb3ZlcyhzdGF0ZSwgcGllY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yID0gc3RhdGUuY3VycmVudFR1cm4sXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IHR1cm5TdGF0ZSA9IGNvbG9yID09PSBzdGF0ZS5jdXJyZW50VHVybiA/IHN0YXRlIDogeyAuLi5zdGF0ZSwgY3VycmVudFR1cm46IGNvbG9yIH07XG4gIGNvbnN0IHBsYXllciA9IHR1cm5TdGF0ZS5wbGF5ZXJzW2NvbG9yXTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGFjdGl2ZVBpZWNlcyh0dXJuU3RhdGUpKSB7XG4gICAgaWYgKHBpZWNlLmNhcHR1cmVkIHx8IHBpZWNlLmNvbG9yICE9PSBjb2xvcikgY29udGludWU7XG5cbiAgICBtb3Zlcy5wdXNoKC4uLmdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHR1cm5TdGF0ZSwgcGllY2UuaWQpKTtcbiAgICBpZiAoIXBsYXllci5wb3dlclVubG9ja2VkKSBjb250aW51ZTtcblxuICAgIGZvciAoY29uc3QgYW5pbWFsIG9mIEFOSU1BTFMpIHtcbiAgICAgIGlmICghaGFzUG93ZXJDYXJkVXNlKHBsYXllci5jYXJkc1thbmltYWxdKSkgY29udGludWU7XG4gICAgICBtb3Zlcy5wdXNoKC4uLmdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHR1cm5TdGF0ZSwgcGllY2UuaWQsIGFuaW1hbCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNob29zZUNoZXNzaW1hbHNCb3RNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHkgPSAnbm9ybWFsJyxcbiAgcHJvZmlsZUlkOiBDaGVzc2ltYWxzQm90UHJvZmlsZUlkID0gREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZW2RpZmZpY3VsdHldLFxuICBvcHRpb25zOiBDaGVzc2ltYWxzQm90T3B0aW9ucyA9IHt9LFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBjb25zdCBtb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlKTtcbiAgaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYmFzZVN0eWxlID0gQk9UX1NUWUxFU1twcm9maWxlSWRdID8/IEJPVF9TVFlMRVNbREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZW2RpZmZpY3VsdHldXTtcbiAgY29uc3QgY2hhbGxlbmdlUHJlc3N1cmUgPSBnZXRDaGFsbGVuZ2VQcmVzc3VyZShvcHRpb25zLmNoYWxsZW5nZVJvdW5kKTtcbiAgY29uc3Qgc3R5bGUgPSB0dW5lQm90U3R5bGUoYmFzZVN0eWxlLCBkaWZmaWN1bHR5LCBjaGFsbGVuZ2VQcmVzc3VyZSwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKTtcblxuICBjb25zdCBxdWlja1Njb3JlZCA9IG1vdmVzXG4gICAgLm1hcCgobW92ZSkgPT4gKHsgbW92ZSwgc2NvcmU6IHNjb3JlQm90TW92ZShzdGF0ZSwgbW92ZSwgZGlmZmljdWx0eSwgc3R5bGUsIGNoYWxsZW5nZVByZXNzdXJlLCBmYWxzZSwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKSB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICBjb25zdCBsb29rYWhlYWRMaW1pdCA9IG9wdGlvbnMubmlnaHRtYXJlTW9kZSA9PT0gJ21hZ251cycgPyA0OCA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDMyIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAyNCA6IDA7XG4gIGNvbnN0IHNjb3JlZCA9IHF1aWNrU2NvcmVkXG4gICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICBtb3ZlOiBpdGVtLm1vdmUsXG4gICAgICBzY29yZTpcbiAgICAgICAgaW5kZXggPCBsb29rYWhlYWRMaW1pdFxuICAgICAgICAgID8gc2NvcmVCb3RNb3ZlV2l0aExvb2thaGVhZChzdGF0ZSwgaXRlbS5tb3ZlLCBkaWZmaWN1bHR5LCBzdHlsZSwgY2hhbGxlbmdlUHJlc3N1cmUsIG9wdGlvbnMubmlnaHRtYXJlTW9kZSlcbiAgICAgICAgICA6IGl0ZW0uc2NvcmUsXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcblxuICBpZiAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knKSB7XG4gICAgY29uc3QgcGxheWFibGUgPSBzY29yZWQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNjb3JlID4gLTMwMDApO1xuICAgIHJldHVybiBwaWNrTm9pc3lCb3RNb3ZlKHBsYXlhYmxlLmxlbmd0aCA/IHBsYXlhYmxlIDogc2NvcmVkLCAwLjU1KTtcbiAgfVxuXG4gIGlmIChkaWZmaWN1bHR5ID09PSAnbm9ybWFsJykge1xuICAgIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG4gIH1cblxuICBjb25zdCB3aW5uaW5nTW92ZSA9IHNjb3JlZC5maW5kKChpdGVtKSA9PiBpdGVtLnNjb3JlID49IDEwMDAwKTtcbiAgaWYgKHdpbm5pbmdNb3ZlKSByZXR1cm4gd2lubmluZ01vdmUubW92ZTtcblxuICBjb25zdCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzID0gbmV3IFNldChcbiAgICBnZXRJbW1lZGlhdGVXaW5uaW5nTW92ZXMoc3RhdGUsIG90aGVyQ29sb3Ioc3RhdGUuY3VycmVudFR1cm4pKS5tYXAoKG1vdmUpID0+IHBvc2l0aW9uS2V5KG1vdmUudG8pKSxcbiAgKTtcbiAgaWYgKG9wcG9uZW50V2lubmluZ1RhcmdldHMuc2l6ZSA+IDApIHtcbiAgICBjb25zdCBibG9ja2luZ01vdmUgPSBzY29yZWQuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLm1vdmUuY2FwdHVyZXNQaWVjZUlkIHx8IG9wcG9uZW50V2lubmluZ1RhcmdldHMuaGFzKHBvc2l0aW9uS2V5KGl0ZW0ubW92ZS50bykpLFxuICAgICk7XG4gICAgaWYgKGJsb2NraW5nTW92ZSkgcmV0dXJuIGJsb2NraW5nTW92ZS5tb3ZlO1xuICB9XG5cbiAgY29uc3QgY2hhbGxlbmdlQ2FwdHVyZSA9IGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShzY29yZWQsIGNoYWxsZW5nZVByZXNzdXJlKTtcbiAgaWYgKGNoYWxsZW5nZUNhcHR1cmUpIHJldHVybiBjaGFsbGVuZ2VDYXB0dXJlO1xuXG4gIGNvbnN0IG5pZ2h0bWFyZUNhcHR1cmUgPSBjaG9vc2VOaWdodG1hcmVDYXB0dXJlKHNjb3JlZCwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKTtcbiAgaWYgKG5pZ2h0bWFyZUNhcHR1cmUpIHJldHVybiBuaWdodG1hcmVDYXB0dXJlO1xuXG4gIGNvbnN0IGNvbnNlcnZhdGl2ZUNhcHR1cmUgPSBjaG9vc2VDb25zZXJ2YXRpdmVIYXJkQ2FwdHVyZShzdGF0ZSwgc2NvcmVkKTtcbiAgaWYgKGNvbnNlcnZhdGl2ZUNhcHR1cmUpIHJldHVybiBjb25zZXJ2YXRpdmVDYXB0dXJlO1xuXG4gIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNoZXNzaW1hbHNNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY2FuZGlkYXRlOiBDaGVzc2ltYWxzTW92ZSxcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCBsZWdhbE1vdmUgPSBnZXRDaGVzc2ltYWxzTGVnYWxNb3ZlcyhzdGF0ZSwgY2FuZGlkYXRlLnBpZWNlSWQsIGNhbmRpZGF0ZS5hbmltYWwpLmZpbmQoKG1vdmUpID0+XG4gICAgc2FtZVBvc2l0aW9uKG1vdmUuZnJvbSwgY2FuZGlkYXRlLmZyb20pICYmIHNhbWVQb3NpdGlvbihtb3ZlLnRvLCBjYW5kaWRhdGUudG8pLFxuICApO1xuXG4gIGlmICghbGVnYWxNb3ZlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0lMTEVHQUxfTU9WRScpO1xuICB9XG5cbiAgY29uc3QgbW92ZWRQaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBsZWdhbE1vdmUucGllY2VJZCk7XG4gIGlmICghbW92ZWRQaWVjZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19QSUVDRV9OT1RfRk9VTkQnKTtcbiAgfVxuXG4gIGNvbnN0IHBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkubWFwKChwaWVjZSkgPT4ge1xuICAgIGlmIChwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLnBpZWNlSWQpIHtcbiAgICAgIHJldHVybiB7IC4uLnBpZWNlLCBwb3NpdGlvbjogeyAuLi5sZWdhbE1vdmUudG8gfSB9O1xuICAgIH1cbiAgICBpZiAocGllY2UuaWQgPT09IGxlZ2FsTW92ZS5jYXB0dXJlc1BpZWNlSWQpIHtcbiAgICAgIHJldHVybiB7IC4uLnBpZWNlLCBjYXB0dXJlZDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gcGllY2U7XG4gIH0pO1xuXG4gIGNvbnN0IHBsYXllcnMgPSB7XG4gICAgLi4uc3RhdGUucGxheWVycyxcbiAgICBbbW92ZWRQaWVjZS5jb2xvcl06IHtcbiAgICAgIC4uLnN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0sXG4gICAgICBjYXJkczpcbiAgICAgICAgbGVnYWxNb3ZlLmtpbmQgPT09ICdwb3dlcicgJiYgbGVnYWxNb3ZlLmFuaW1hbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgICAgICAgICAgICBbbGVnYWxNb3ZlLmFuaW1hbF06IGNvbnN1bWVQb3dlckNhcmRVc2Uoc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkc1tsZWdhbE1vdmUuYW5pbWFsXSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIC4uLnN0YXRlLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzLFxuICAgIGN1cnJlbnRUdXJuOiBvdGhlckNvbG9yKG1vdmVkUGllY2UuY29sb3IpLFxuICAgIG1vdmVDb3VudDogc3RhdGUubW92ZUNvdW50ICsgMSxcbiAgICBsYXN0TW92ZTogbGVnYWxNb3ZlLFxuICB9KTtcblxuICBjb25zdCBwcm9tb3RlZCA9IGlzUHJvbW90aW9uUm93KG5leHRTdGF0ZS5ib2FyZFNpemUsIG1vdmVkUGllY2UuY29sb3IsIGxlZ2FsTW92ZS50byk7XG4gIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKG5leHRTdGF0ZSkuZmlsdGVyKFxuICAgIChwaWVjZSkgPT4gcGllY2UuY29sb3IgIT09IG1vdmVkUGllY2UuY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkLFxuICApO1xuICBjb25zdCBlbmVteUhhc0xlZ2FsTW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhuZXh0U3RhdGUsIG5leHRTdGF0ZS5jdXJyZW50VHVybikubGVuZ3RoID4gMDtcblxuICBjb25zdCByZXNvbHZlZFN0YXRlID1cbiAgICBwcm9tb3RlZCB8fCBlbmVteVBpZWNlcy5sZW5ndGggPT09IDAgfHwgIWVuZW15SGFzTGVnYWxNb3Zlc1xuICAgICAgPyB7XG4gICAgICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgICAgIHN0YXR1czogJ2ZpbmlzaGVkJyBhcyBjb25zdCxcbiAgICAgICAgICB3aW5uZXI6IG1vdmVkUGllY2UuY29sb3IsXG4gICAgICAgICAgd2lubmVyUmVhc29uOiBwcm9tb3RlZFxuICAgICAgICAgICAgPyAoJ3Byb21vdGlvbicgYXMgY29uc3QpXG4gICAgICAgICAgICA6IGVuZW15UGllY2VzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/ICgnZWxpbWluYXRpb24nIGFzIGNvbnN0KVxuICAgICAgICAgICAgICA6ICgnYmxvY2tlZCcgYXMgY29uc3QpLFxuICAgICAgICB9XG4gICAgICA6IG5leHRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc29sdmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzb2x2ZWRTdGF0ZSwgbGVnYWxNb3ZlKSxcbiAgICBdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc1Jldmlld1N0YXRlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgZW50cnk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGJhc2VTdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS5sYXN0TW92ZTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS53aW5uZXI7XG4gIGRlbGV0ZSBiYXNlU3RhdGUud2lubmVyUmVhc29uO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0ZSxcbiAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cyxcbiAgICBjdXJyZW50VHVybjogZW50cnkuY3VycmVudFR1cm4sXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhlbnRyeS5waWVjZXMpLFxuICAgIG1vdmVDb3VudDogZW50cnkubW92ZU51bWJlcixcbiAgICAuLi4oZW50cnkud2lubmVyID8geyB3aW5uZXI6IGVudHJ5Lndpbm5lciB9IDoge30pLFxuICAgIC4uLihlbnRyeS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogZW50cnkud2lubmVyUmVhc29uIH0gOiB7fSksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IGxhc3RNb3ZlOiBzYW5pdGl6ZU1vdmUoZW50cnkubW92ZSkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU/OiBDaGVzc2ltYWxzTW92ZSxcbik6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBtb3ZlTnVtYmVyOiBzdGF0ZS5tb3ZlQ291bnQsXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhzdGF0ZS5waWVjZXMpLFxuICAgIGN1cnJlbnRUdXJuOiBzdGF0ZS5jdXJyZW50VHVybixcbiAgICBzdGF0dXM6IHN0YXRlLnN0YXR1cyxcbiAgICAuLi4obW92ZSA/IHsgbW92ZTogc2FuaXRpemVNb3ZlKG1vdmUpIH0gOiB7fSksXG4gICAgLi4uKHN0YXRlLndpbm5lciA/IHsgd2lubmVyOiBzdGF0ZS53aW5uZXIgfSA6IHt9KSxcbiAgICAuLi4oc3RhdGUud2lubmVyUmVhc29uID8geyB3aW5uZXJSZWFzb246IHN0YXRlLndpbm5lclJlYXNvbiB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNb3ZlSGlzdG9yeShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5W10ge1xuICBpZiAoc3RhdGUubW92ZUhpc3Rvcnk/Lmxlbmd0aCkgcmV0dXJuIHN0YXRlLm1vdmVIaXN0b3J5Lm1hcChjbG9uZU1vdmVIaXN0b3J5RW50cnkpO1xuICByZXR1cm4gW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXTtcbn1cblxuZnVuY3Rpb24gY2xvbmVNb3ZlSGlzdG9yeUVudHJ5KGVudHJ5OiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbnRyeSxcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKGVudHJ5LnBpZWNlcyksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IG1vdmU6IHNhbml0aXplTW92ZShlbnRyeS5tb3ZlKSB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZVBpZWNlcyhwaWVjZXM6IENoZXNzaW1hbHNQaWVjZVtdKTogQ2hlc3NpbWFsc1BpZWNlW10ge1xuICByZXR1cm4gcGllY2VzLm1hcCgocGllY2UpID0+ICh7XG4gICAgLi4ucGllY2UsXG4gICAgcG9zaXRpb246IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1vdmUobW92ZTogQ2hlc3NpbWFsc01vdmUpOiBDaGVzc2ltYWxzTW92ZSB7XG4gIHJldHVybiB7XG4gICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgIGZyb206IHsgLi4ubW92ZS5mcm9tIH0sXG4gICAgdG86IHsgLi4ubW92ZS50byB9LFxuICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAuLi4obW92ZS5hbmltYWwgPyB7IGFuaW1hbDogbW92ZS5hbmltYWwgfSA6IHt9KSxcbiAgICAuLi4obW92ZS5jYXB0dXJlc1BpZWNlSWQgPyB7IGNhcHR1cmVzUGllY2VJZDogbW92ZS5jYXB0dXJlc1BpZWNlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2lnbkNoZXNzaW1hbHNHYW1lKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCByZXNpZ25lZFN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHN0YXR1czogJ2ZpbmlzaGVkJyxcbiAgICB3aW5uZXI6IG90aGVyQ29sb3IoY29sb3IpLFxuICAgIHdpbm5lclJlYXNvbjogJ3Jlc2lnbmF0aW9uJyxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc2lnbmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzaWduZWRTdGF0ZSksXG4gICAgXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uS2V5KHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cG9zaXRpb24ucm93fToke3Bvc2l0aW9uLmNvbH1gO1xufVxuXG5mdW5jdGlvbiBoYXNQb3dlckNhcmRVc2UoY2FyZDogeyB1c2VkOiBib29sZWFuOyB1c2VzUmVtYWluaW5nPzogbnVtYmVyIH0pOiBib29sZWFuIHtcbiAgcmV0dXJuIChjYXJkLnVzZXNSZW1haW5pbmcgPz8gKGNhcmQudXNlZCA/IDAgOiAxKSkgPiAwO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lUG93ZXJDYXJkVXNlPFQgZXh0ZW5kcyB7IHVzZWQ6IGJvb2xlYW47IHVzZXNSZW1haW5pbmc/OiBudW1iZXIgfT4oY2FyZDogVCk6IFQge1xuICBjb25zdCByZW1haW5pbmcgPSBNYXRoLm1heCgwLCAoY2FyZC51c2VzUmVtYWluaW5nID8/IChjYXJkLnVzZWQgPyAwIDogMSkpIC0gMSk7XG4gIHJldHVybiB7XG4gICAgLi4uY2FyZCxcbiAgICB1c2VkOiByZW1haW5pbmcgPD0gMCxcbiAgICAuLi4oY2FyZC51c2VzUmVtYWluaW5nID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdXNlc1JlbWFpbmluZzogcmVtYWluaW5nIH0pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXJkcygpIHtcbiAgcmV0dXJuIEFOSU1BTFMucmVkdWNlKFxuICAgIChjYXJkcywgdHlwZSkgPT4gKHtcbiAgICAgIC4uLmNhcmRzLFxuICAgICAgW3R5cGVdOiB7IHR5cGUsIHVzZWQ6IGZhbHNlIH0sXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPENoZXNzaW1hbHNBbmltYWxUeXBlLCB7IHR5cGU6IENoZXNzaW1hbHNBbmltYWxUeXBlOyB1c2VkOiBib29sZWFuOyB1c2VzUmVtYWluaW5nPzogbnVtYmVyIH0+LFxuICApO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVQaWVjZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBzdGF0ZS5waWVjZXMuZmlsdGVyKChwaWVjZSk6IHBpZWNlIGlzIENoZXNzaW1hbHNQaWVjZSA9PiAhIXBpZWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzaWNNb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBkaXJlY3Rpb24gPSBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IC0xIDogMTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QgZm9yd2FyZCA9IHsgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24sIGNvbDogcGllY2UucG9zaXRpb24uY29sIH07XG5cbiAgaWYgKGlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCBmb3J3YXJkKSAmJiAhZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIGZvcndhcmQpKSB7XG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiBmb3J3YXJkLFxuICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY29sT2Zmc2V0IG9mIFstMSwgMV0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7IHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLCBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGNvbE9mZnNldCB9O1xuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKFxuICAgICAgaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkgJiZcbiAgICAgIHRhcmdldFBpZWNlICYmXG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciAhPT0gcGllY2UuY29sb3IgJiZcbiAgICAgICFpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpXG4gICAgKSB7XG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICAgICAgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0UG93ZXJNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UsXG4gIGFuaW1hbDogQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2thbmdhcm9vJykge1xuICAgIHJldHVybiBnZXRLYW5nYXJvb01vdmVzKHN0YXRlLCBwaWVjZSk7XG4gIH1cblxuICBjb25zdCBkaXJlY3Rpb25zID0gZ2V0UG93ZXJEaXJlY3Rpb25zKGFuaW1hbCk7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBkaXJlY3Rpb24gb2YgZGlyZWN0aW9ucykge1xuICAgIGZvciAobGV0IGRpc3RhbmNlID0gMTsgZGlzdGFuY2UgPCBzdGF0ZS5ib2FyZFNpemU7IGRpc3RhbmNlICs9IDEpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgICAgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24ucm93ICogZGlzdGFuY2UsXG4gICAgICAgIGNvbDogcGllY2UucG9zaXRpb24uY29sICsgZGlyZWN0aW9uLmNvbCAqIGRpc3RhbmNlLFxuICAgICAgfTtcbiAgICAgIGlmICghaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkpIGJyZWFrO1xuICAgICAgaWYgKGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgcGllY2UuY29sb3IsIHRhcmdldCkpIGJyZWFrO1xuXG4gICAgICBjb25zdCB0YXJnZXRQaWVjZSA9IGdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCB0YXJnZXQpO1xuICAgICAgaWYgKHRhcmdldFBpZWNlPy5jb2xvciA9PT0gcGllY2UuY29sb3IpIGJyZWFrO1xuXG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ3Bvd2VyJyxcbiAgICAgICAgYW5pbWFsLFxuICAgICAgICAuLi4odGFyZ2V0UGllY2UgPyB7IGNhcHR1cmVzUGllY2VJZDogdGFyZ2V0UGllY2UuaWQgfSA6IHt9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGFyZ2V0UGllY2UpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0S2FuZ2Fyb29Nb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBtb3ZlczogQ2hlc3NpbWFsc01vdmVbXSA9IFtdO1xuICBjb25zdCBqdW1wcyA9IFtcbiAgICB7IHJvdzogLTIsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTIsIGNvbDogMSB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAtMiB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAyIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTIgfSxcbiAgICB7IHJvdzogMSwgY29sOiAyIH0sXG4gICAgeyByb3c6IDIsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMiwgY29sOiAxIH0sXG4gIF07XG5cbiAgZm9yIChjb25zdCBqdW1wIG9mIGp1bXBzKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBqdW1wLnJvdyxcbiAgICAgIGNvbDogcGllY2UucG9zaXRpb24uY29sICsganVtcC5jb2wsXG4gICAgfTtcbiAgICBpZiAoIWlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCB0YXJnZXQpKSBjb250aW51ZTtcbiAgICBpZiAoaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBwaWVjZS5jb2xvciwgdGFyZ2V0KSkgY29udGludWU7XG5cbiAgICBjb25zdCB0YXJnZXRQaWVjZSA9IGdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCB0YXJnZXQpO1xuICAgIGlmICh0YXJnZXRQaWVjZT8uY29sb3IgPT09IHBpZWNlLmNvbG9yKSBjb250aW51ZTtcblxuICAgIG1vdmVzLnB1c2goe1xuICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICBmcm9tOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gICAgICB0bzogdGFyZ2V0LFxuICAgICAga2luZDogJ3Bvd2VyJyxcbiAgICAgIGFuaW1hbDogJ2thbmdhcm9vJyxcbiAgICAgIC4uLih0YXJnZXRQaWVjZSA/IHsgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5mdW5jdGlvbiBzY29yZUJvdE1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4gIGNoYWxsZW5nZVByZXNzdXJlID0gMCxcbiAgaW5jbHVkZVRhY3RpY2FsUHJlc3N1cmUgPSB0cnVlLFxuICBuaWdodG1hcmVNb2RlOiBDaGVzc2ltYWxzTmlnaHRtYXJlTW9kZSA9ICdub25lJyxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IHRhcmdldFBpZWNlID0gbW92ZS5jYXB0dXJlc1BpZWNlSWRcbiAgICA/IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBtb3ZlLmNhcHR1cmVzUGllY2VJZClcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYWR2YW5jZW1lbnQgPVxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93IDogbW92ZS50by5yb3c7XG4gIGxldCBzY29yZSA9IGFkdmFuY2VtZW50ICogMjQgKiBzdHlsZS5hZHZhbmNlbWVudDtcbiAgY29uc3Qgc3RlcHNUb1Byb21vdGlvbiA9XG4gICAgY29sb3IgPT09ICd3aGl0ZScgPyBtb3ZlLnRvLnJvdyA6IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSBtb3ZlLnRvLnJvdztcbiAgc2NvcmUgKz0gTWF0aC5tYXgoMCwgc3RhdGUuYm9hcmRTaXplIC0gMSAtIHN0ZXBzVG9Qcm9tb3Rpb24pICogMTAgKiBjaGFsbGVuZ2VQcmVzc3VyZSAqIHN0eWxlLmFkdmFuY2VtZW50O1xuXG4gIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50bykpIHtcbiAgICBzY29yZSArPSAxMDAwMCArIDI1MDAgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ2h1bnQnICYmIHRhcmdldFBpZWNlKSB7XG4gICAgc2NvcmUgKz0gKG1vdmUua2luZCA9PT0gJ3Bvd2VyJyA/IDc2MCA6IDYyMCkgKiBzdHlsZS5jYXB0dXJlO1xuICB9XG4gIGlmICh0YXJnZXRQaWVjZSkge1xuICAgIHNjb3JlICs9ICg1MjAgKyAxODAgKiBjaGFsbGVuZ2VQcmVzc3VyZSkgKiBzdHlsZS5jYXB0dXJlO1xuICAgIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycpIHNjb3JlICs9IDE2MCAqIGNoYWxsZW5nZVByZXNzdXJlICogc3R5bGUuY2FwdHVyZTtcbiAgICBjb25zdCB0YXJnZXRBZHZhbmNlbWVudCA9XG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3dcbiAgICAgICAgOiB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3c7XG4gICAgc2NvcmUgKz0gdGFyZ2V0QWR2YW5jZW1lbnQgKiAoMTYgKyA4ICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuY2FwdHVyZTtcbiAgfVxuICBpZiAobW92ZS5raW5kID09PSAncG93ZXInKSB7XG4gICAgc2NvcmUgKz0gKHRhcmdldFBpZWNlID8gMTIwIDogZGlmZmljdWx0eSA9PT0gJ2hhcmQnID8gLTYwIC0gMTcwICogY2hhbGxlbmdlUHJlc3N1cmUgOiAtMzApICogc3R5bGUucG93ZXI7XG4gIH1cbiAgaWYgKG5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnICYmIG1vdmUua2luZCA9PT0gJ3Bvd2VyJykge1xuICAgIHNjb3JlICs9IHNjb3JlTWFnbnVzUG93ZXJQYXRpZW5jZShzdGF0ZSwgbW92ZSwgdGFyZ2V0UGllY2UsIHN0eWxlKTtcbiAgfVxuICBpZiAobW92ZS5hbmltYWwgPT09ICdsaW9uJykgc2NvcmUgKz0gbmlnaHRtYXJlTW9kZSA9PT0gJ3ByaWRlJyA/IDI2MCAqIHN0eWxlLnBvd2VyIDogLTIwICogc3R5bGUucG93ZXI7XG4gIGlmIChtb3ZlLmFuaW1hbCA9PT0gJ2thbmdhcm9vJykgc2NvcmUgKz0gMTQgKiBzdHlsZS5wb3dlcjtcbiAgaWYgKHdvdWxkVW5sb2NrUG93ZXIoc3RhdGUsIGNvbG9yLCBtb3ZlLnRvKSkgc2NvcmUgKz0gOTAgKiBzdHlsZS51bmxvY2s7XG4gIGlmIChpbmNsdWRlVGFjdGljYWxQcmVzc3VyZSAmJiBzdGF0ZS5ib2FyZFNpemUgPD0gNikge1xuICAgIHNjb3JlICs9IGNvdW50UG93ZXJSZWFjaEFmdGVyTW92ZShzdGF0ZSwgbW92ZSwgY29sb3IpICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDggOiA0KSAqIHN0eWxlLm1vYmlsaXR5O1xuICAgIHNjb3JlICs9IGNvdW50UHJvdGVjdGVkVGhyZWF0c0FmdGVyTW92ZShzdGF0ZSwgbW92ZSwgY29sb3IpICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDM2IDogMTgpICogc3R5bGUudHJhcDtcbiAgICBzY29yZSArPSBzY29yZUVuZGdhbWVQcmVzc3VyZShzdGF0ZSwgbW92ZSwgY29sb3IpICogc3R5bGUuZW5kZ2FtZTtcbiAgfSBlbHNlIHtcbiAgICBzY29yZSArPSBzY29yZUVuZGdhbWVQcmVzc3VyZShzdGF0ZSwgbW92ZSwgY29sb3IpICogc3R5bGUuZW5kZ2FtZTtcbiAgfVxuICBpZiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnICYmIGlzU3F1YXJlVnVsbmVyYWJsZUFmdGVyTW92ZShzdGF0ZSwgbW92ZSkpIHtcbiAgICBzY29yZSAtPSAodGFyZ2V0UGllY2UgPyA4MCA6IDE0MCkgKiBzdHlsZS5zYWZldHk7XG4gIH1cbiAgc2NvcmUgKz0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogc3R5bGUucmFuZG9tbmVzcztcblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIHNjb3JlQm90TW92ZVdpdGhMb29rYWhlYWQoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4gIGNoYWxsZW5nZVByZXNzdXJlID0gMCxcbiAgbmlnaHRtYXJlTW9kZTogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGUgPSAnbm9uZScsXG4pOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSBzY29yZUJvdE1vdmUoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgdHJ1ZSwgbmlnaHRtYXJlTW9kZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZnRlck1vdmUgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICBpZiAoYWZ0ZXJNb3ZlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykgcmV0dXJuIHNjb3JlICsgNTAwMDtcblxuICAgIGNvbnN0IG9wcG9uZW50TW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhhZnRlck1vdmUpO1xuICAgIGNvbnN0IG9wcG9uZW50SW1tZWRpYXRlV2luID0gb3Bwb25lbnRNb3Zlcy5zb21lKFxuICAgICAgKG9wcG9uZW50TW92ZSkgPT5cbiAgICAgICAgb3Bwb25lbnRNb3ZlLmtpbmQgPT09ICdiYXNpYycgJiZcbiAgICAgICAgaXNQcm9tb3Rpb25Sb3coYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSwgYWZ0ZXJNb3ZlLmN1cnJlbnRUdXJuLCBvcHBvbmVudE1vdmUudG8pLFxuICAgICk7XG4gICAgaWYgKG9wcG9uZW50SW1tZWRpYXRlV2luKSB7XG4gICAgICBzY29yZSAtPSAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knID8gMTgwMCA6IGRpZmZpY3VsdHkgPT09ICdub3JtYWwnID8gNTIwMCA6IDgwMDAgKyA0MjAwICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuc2FmZXR5O1xuICAgIH1cblxuICAgIGNvbnN0IG1vdmVkUGllY2UgPSBhZnRlck1vdmUucGllY2VzLmZpbmQoKHBpZWNlKSA9PiBwaWVjZS5pZCA9PT0gbW92ZS5waWVjZUlkICYmICFwaWVjZS5jYXB0dXJlZCk7XG4gICAgaWYgKG1vdmVkUGllY2UpIHtcbiAgICAgIGNvbnN0IGNhbkNhcHR1cmVNb3ZlZFBpZWNlID0gb3Bwb25lbnRNb3Zlcy5zb21lKChvcHBvbmVudE1vdmUpID0+IG9wcG9uZW50TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IG1vdmUucGllY2VJZCk7XG4gICAgICBpZiAoY2FuQ2FwdHVyZU1vdmVkUGllY2UpIHtcbiAgICAgICAgc2NvcmUgLT0gKG1vdmUuY2FwdHVyZXNQaWVjZUlkID8gMTgwIDogZGlmZmljdWx0eSA9PT0gJ2Vhc3knID8gMTIwIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAzNjAgOiA1NjApXG4gICAgICAgICAgKiBzdHlsZS5zYWZldHlcbiAgICAgICAgICAqICgxICsgY2hhbGxlbmdlUHJlc3N1cmUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZW50ZXIgPSAoYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IGNlbnRlckNvbnRyb2wgPSBNYXRoLm1heCgwLCBhZnRlck1vdmUuYm9hcmRTaXplIC8gMiAtIE1hdGguYWJzKG1vdmVkUGllY2UucG9zaXRpb24uY29sIC0gY2VudGVyKSk7XG4gICAgICBzY29yZSArPSBjZW50ZXJDb250cm9sICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDE4IDogMTApICogc3R5bGUuY2VudGVyO1xuICAgIH1cblxuICAgIGNvbnN0IG9wcG9uZW50QmVzdFJlcGx5ID0gb3Bwb25lbnRNb3Zlc1xuICAgICAgLm1hcCgob3Bwb25lbnRNb3ZlKSA9PiBzY29yZUJvdE1vdmUoYWZ0ZXJNb3ZlLCBvcHBvbmVudE1vdmUsIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgZmFsc2UsIG5pZ2h0bWFyZU1vZGUpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKVswXTtcblxuICAgIGlmIChvcHBvbmVudEJlc3RSZXBseSkge1xuICAgICAgY29uc3QgcmVwbHlXZWlnaHQgPSBkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAwLjEyIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAwLjMyICsgMC4wOCAqIGNoYWxsZW5nZVByZXNzdXJlIDogMC40OCArIDAuMTYgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgICAgIHNjb3JlIC09IG9wcG9uZW50QmVzdFJlcGx5ICogcmVwbHlXZWlnaHQgKiBzdHlsZS5yZXBseTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHNjb3JlIC09IDEwMDA7XG4gIH1cblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIGdldENoYWxsZW5nZVByZXNzdXJlKHJvdW5kPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFyb3VuZCB8fCByb3VuZCA8PSAyKSByZXR1cm4gMDtcbiAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIChyb3VuZCAtIDIpIC8gNikpO1xufVxuXG5mdW5jdGlvbiB0dW5lQm90U3R5bGUoXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBjaGFsbGVuZ2VQcmVzc3VyZTogbnVtYmVyLFxuICBuaWdodG1hcmVNb2RlOiBDaGVzc2ltYWxzTmlnaHRtYXJlTW9kZSA9ICdub25lJyxcbik6IENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGlmIChuaWdodG1hcmVNb2RlID09PSAnaHVudCcpIHtcbiAgICBzdHlsZSA9IHtcbiAgICAgIC4uLnN0eWxlLFxuICAgICAgYWR2YW5jZW1lbnQ6IHN0eWxlLmFkdmFuY2VtZW50ICogMS4xMixcbiAgICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAxLjcyLFxuICAgICAgcG93ZXI6IHN0eWxlLnBvd2VyICogMS4zLFxuICAgICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAwLjgyLFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTIpLFxuICAgICAgdHJhcDogc3R5bGUudHJhcCAqIDEuMjgsXG4gICAgfTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ3ByaWRlJykge1xuICAgIHN0eWxlID0ge1xuICAgICAgLi4uc3R5bGUsXG4gICAgICBhZHZhbmNlbWVudDogc3R5bGUuYWR2YW5jZW1lbnQgKiAxLjA4LFxuICAgICAgY2FwdHVyZTogc3R5bGUuY2FwdHVyZSAqIDEuMzIsXG4gICAgICBwb3dlcjogc3R5bGUucG93ZXIgKiAxLjU1LFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTYpLFxuICAgIH07XG4gIH1cbiAgaWYgKG5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnKSB7XG4gICAgc3R5bGUgPSB7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIGFkdmFuY2VtZW50OiBzdHlsZS5hZHZhbmNlbWVudCAqIDEuMDQsXG4gICAgICBjYXB0dXJlOiBzdHlsZS5jYXB0dXJlICogMS4xNixcbiAgICAgIHNhZmV0eTogc3R5bGUuc2FmZXR5ICogMS4zOCxcbiAgICAgIHBvd2VyOiBzdHlsZS5wb3dlciAqIDAuODIsXG4gICAgICBjZW50ZXI6IHN0eWxlLmNlbnRlciAqIDEuMixcbiAgICAgIHJlcGx5OiBzdHlsZS5yZXBseSAqIDEuMyxcbiAgICAgIHJhbmRvbW5lc3M6IE1hdGgubWluKHN0eWxlLnJhbmRvbW5lc3MsIDIpLFxuICAgICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAwLjYsXG4gICAgICB0cmFwOiBzdHlsZS50cmFwICogMS4yMixcbiAgICAgIGVuZGdhbWU6IHN0eWxlLmVuZGdhbWUgKiAxLjI4LFxuICAgIH07XG4gIH1cbiAgaWYgKCFjaGFsbGVuZ2VQcmVzc3VyZSkgcmV0dXJuIHN0eWxlO1xuICBjb25zdCBwcmVzc3VyZSA9IGRpZmZpY3VsdHkgPT09ICdlYXN5JyA/IGNoYWxsZW5nZVByZXNzdXJlICogMC40NSA6IGNoYWxsZW5nZVByZXNzdXJlO1xuICByZXR1cm4ge1xuICAgIC4uLnN0eWxlLFxuICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAoMSArIHByZXNzdXJlICogMC4yOCksXG4gICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAoMSArIHByZXNzdXJlICogMC4zNCksXG4gICAgcmVwbHk6IHN0eWxlLnJlcGx5ICogKDEgKyBwcmVzc3VyZSAqIDAuMjIpLFxuICAgIGNlbnRlcjogc3R5bGUuY2VudGVyICogKDEgKyBwcmVzc3VyZSAqIDAuMTIpLFxuICAgIHJhbmRvbW5lc3M6IHN0eWxlLnJhbmRvbW5lc3MgKiAoMSAtIHByZXNzdXJlICogMC42NSksXG4gICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAoMSAtIHByZXNzdXJlICogMC4zNSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXSxcbiAgY2hhbGxlbmdlUHJlc3N1cmU6IG51bWJlcixcbik6IENoZXNzaW1hbHNNb3ZlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNoYWxsZW5nZVByZXNzdXJlIDwgMC41KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZCgoaXRlbSkgPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdCB8fCAhYmVzdEJhc2ljQ2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGJlc3QubW92ZS5raW5kID09PSAnYmFzaWMnICYmIGJlc3QubW92ZS5jYXB0dXJlc1BpZWNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gYmVzdC5tb3ZlLmtpbmQgPT09ICdwb3dlcicgJiYgIWJlc3QubW92ZS5jYXB0dXJlc1BpZWNlSWQgPyAxODAwIDogOTAwO1xuICByZXR1cm4gYmVzdC5zY29yZSAtIGJlc3RCYXNpY0NhcHR1cmUuc2NvcmUgPD0gdG9sZXJhbmNlID8gYmVzdEJhc2ljQ2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjaG9vc2VOaWdodG1hcmVDYXB0dXJlKFxuICBzY29yZWQ6IHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfVtdLFxuICBuaWdodG1hcmVNb2RlPzogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGUsXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChuaWdodG1hcmVNb2RlICE9PSAnaHVudCcpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYmVzdCA9IHNjb3JlZFswXTtcbiAgY29uc3QgY2FwdHVyZSA9IHNjb3JlZC5maW5kKChpdGVtKSA9PiBpdGVtLm1vdmUuY2FwdHVyZXNQaWVjZUlkKTtcbiAgaWYgKCFiZXN0IHx8ICFjYXB0dXJlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBiZXN0LnNjb3JlIC0gY2FwdHVyZS5zY29yZSA8PSAxODAwID8gY2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzY29yZU1hZ251c1Bvd2VyUGF0aWVuY2UoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgdGFyZ2V0UGllY2U6IENoZXNzaW1hbHNQaWVjZSB8IHVuZGVmaW5lZCxcbiAgc3R5bGU6IENoZXNzaW1hbHNCb3RTdHlsZSxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IGZyb21BZHZhbmNlbWVudCA9IGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUuZnJvbS5yb3cgOiBtb3ZlLmZyb20ucm93O1xuICBjb25zdCB0b0FkdmFuY2VtZW50ID0gY29sb3IgPT09ICd3aGl0ZScgPyBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3cgOiBtb3ZlLnRvLnJvdztcbiAgY29uc3QgYWR2YW5jZW1lbnRHYWluID0gTWF0aC5tYXgoMCwgdG9BZHZhbmNlbWVudCAtIGZyb21BZHZhbmNlbWVudCk7XG4gIGNvbnN0IHN0ZXBzVG9Qcm9tb3Rpb24gPSBjb2xvciA9PT0gJ3doaXRlJyA/IG1vdmUudG8ucm93IDogc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93O1xuICBjb25zdCBjcmVhdGVzUHJvbW90aW9uVGhyZWF0ID0gYWR2YW5jZW1lbnRHYWluID4gMCAmJiBzdGVwc1RvUHJvbW90aW9uIDw9IDE7XG5cbiAgaWYgKHRhcmdldFBpZWNlKSByZXR1cm4gMjYwICogc3R5bGUucG93ZXI7XG4gIGlmIChjcmVhdGVzUHJvbW90aW9uVGhyZWF0KSByZXR1cm4gMTgwICogc3R5bGUuZW5kZ2FtZTtcblxuICBjb25zdCBlYXJseUdhbWUgPSBzdGF0ZS5tb3ZlQ291bnQgPCBzdGF0ZS5ib2FyZFNpemU7XG4gIGNvbnN0IHdhbmRlcmluZ1BlbmFsdHkgPSBlYXJseUdhbWUgPyAxMTgwIDogNjIwO1xuICBjb25zdCBhbmltYWxQZW5hbHR5ID0gbW92ZS5hbmltYWwgPT09ICdrYW5nYXJvbycgPyAyMjAgOiBtb3ZlLmFuaW1hbCA9PT0gJ2xpb24nID8gMTYwIDogMDtcblxuICByZXR1cm4gLSh3YW5kZXJpbmdQZW5hbHR5ICsgYW5pbWFsUGVuYWx0eSkgKiBzdHlsZS5wb3dlcjtcbn1cblxuZnVuY3Rpb24gY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25TdGF0ZSA9IHsgLi4uYWZ0ZXJNb3ZlLCBjdXJyZW50VHVybjogY29sb3IgfTtcbiAgICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoZXZhbHVhdGlvblN0YXRlLCBjb2xvcikuZmlsdGVyKChuZXh0TW92ZSkgPT4gbmV4dE1vdmUua2luZCA9PT0gJ3Bvd2VyJykubGVuZ3RoO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3VudFByb3RlY3RlZFRocmVhdHNBZnRlck1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IG51bWJlciB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgY29uc3QgZXZhbHVhdGlvblN0YXRlID0geyAuLi5hZnRlck1vdmUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICAgIGNvbnN0IG91ck1vdmVzID0gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoZXZhbHVhdGlvblN0YXRlLCBjb2xvcik7XG4gICAgY29uc3QgZW5lbXlQaWVjZXMgPSBhY3RpdmVQaWVjZXMoYWZ0ZXJNb3ZlKS5maWx0ZXIoKHBpZWNlKSA9PiBwaWVjZS5jb2xvciAhPT0gY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkKTtcbiAgICByZXR1cm4gZW5lbXlQaWVjZXMuZmlsdGVyKChwaWVjZSkgPT5cbiAgICAgIG91ck1vdmVzLnNvbWUoKG5leHRNb3ZlKSA9PiBuZXh0TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IHBpZWNlLmlkKSxcbiAgICApLmxlbmd0aDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NvcmVFbmRnYW1lUHJlc3N1cmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHJlbWFpbmluZ0VuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKHN0YXRlKS5maWx0ZXIoKHBpZWNlKSA9PiBwaWVjZS5jb2xvciAhPT0gY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkKS5sZW5ndGg7XG4gIGNvbnN0IHVyZ2VuY3kgPSByZW1haW5pbmdFbmVteVBpZWNlcyA8PSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKHN0YXRlLmJvYXJkU2l6ZSAvIDIpKSA/IDEuNiA6IDE7XG4gIGNvbnN0IGRpc3RhbmNlVG9Qcm9tb3Rpb24gPVxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gbW92ZS50by5yb3cgOiBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3c7XG4gIHJldHVybiBNYXRoLm1heCgwLCBzdGF0ZS5ib2FyZFNpemUgLSBkaXN0YW5jZVRvUHJvbW90aW9uKSAqIDE0ICogdXJnZW5jeTtcbn1cblxuZnVuY3Rpb24gY2hvb3NlQ29uc2VydmF0aXZlSGFyZENhcHR1cmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBzY29yZWQ6IHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfVtdLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGUuYm9hcmRTaXplICE9PSA4KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGlmICghYmVzdCB8fCBiZXN0Lm1vdmUua2luZCAhPT0gJ3Bvd2VyJyB8fCAhYmVzdC5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBiZXN0LnNjb3JlID49IDEwMDAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZCgoaXRlbSkgPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdEJhc2ljQ2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4gYmVzdC5zY29yZSAtIGJlc3RCYXNpY0NhcHR1cmUuc2NvcmUgPD0gNjUwID8gYmVzdEJhc2ljQ2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwaWNrTm9pc3lCb3RNb3ZlKFxuICBzY29yZWQ6IEFycmF5PHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfT4sXG4gIHNwcmVhZDogbnVtYmVyLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc2NvcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcG9vbFNpemUgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoc2NvcmVkLmxlbmd0aCAqIHNwcmVhZCkpO1xuICBjb25zdCBwb29sID0gc2NvcmVkLnNsaWNlKDAsIHBvb2xTaXplKTtcbiAgY29uc3QgdG9wU2NvcmUgPSBwb29sWzBdPy5zY29yZSA/PyAwO1xuICBjb25zdCB3ZWlnaHRlZCA9IHBvb2wubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aXZlID0gTWF0aC5tYXgoMCwgaXRlbS5zY29yZSAtIHRvcFNjb3JlICsgMTIwMCk7XG4gICAgY29uc3Qgd2VpZ2h0ID0gTWF0aC5tYXgoMSwgcmVsYXRpdmUgLyAxMjAgKyAocG9vbC5sZW5ndGggLSBpbmRleCkgKiAyKTtcbiAgICByZXR1cm4geyAuLi5pdGVtLCB3ZWlnaHQgfTtcbiAgfSk7XG4gIGNvbnN0IHRvdGFsV2VpZ2h0ID0gd2VpZ2h0ZWQucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBpdGVtLndlaWdodCwgMCk7XG4gIGxldCBjdXJzb3IgPSBNYXRoLnJhbmRvbSgpICogdG90YWxXZWlnaHQ7XG4gIGZvciAoY29uc3QgaXRlbSBvZiB3ZWlnaHRlZCkge1xuICAgIGN1cnNvciAtPSBpdGVtLndlaWdodDtcbiAgICBpZiAoY3Vyc29yIDw9IDApIHJldHVybiBpdGVtLm1vdmU7XG4gIH1cbiAgcmV0dXJuIHBvb2xbMF0/Lm1vdmU7XG59XG5cbmZ1bmN0aW9uIGdldEltbWVkaWF0ZVdpbm5pbmdNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlLCBjb2xvcikuZmlsdGVyKFxuICAgIChtb3ZlKSA9PiBtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50byksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHdvdWxkVW5sb2NrUG93ZXIoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZS5wbGF5ZXJzW2NvbG9yXS5wb3dlclVubG9ja2VkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNlbnRlclRvcCA9IHN0YXRlLmJvYXJkU2l6ZSAvIDIgLSAxO1xuICBjb25zdCBjZW50ZXJCb3R0b20gPSBzdGF0ZS5ib2FyZFNpemUgLyAyO1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwb3NpdGlvbi5yb3cgPD0gY2VudGVyVG9wIDogcG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbTtcbn1cblxuZnVuY3Rpb24gaXNTcXVhcmVWdWxuZXJhYmxlQWZ0ZXJNb3ZlKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBtb3ZlOiBDaGVzc2ltYWxzTW92ZSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGlmIChhZnRlck1vdmUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGFmdGVyTW92ZSkuc29tZSgoZW5lbXlNb3ZlKSA9PlxuICAgICAgc2FtZVBvc2l0aW9uKGVuZW15TW92ZS50bywgbW92ZS50bykgJiYgISFlbmVteU1vdmUuY2FwdHVyZXNQaWVjZUlkLFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsOiBDaGVzc2ltYWxzQW5pbWFsVHlwZSk6IENoZXNzaW1hbHNQb3NpdGlvbltdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2VhZ2xlJykge1xuICAgIHJldHVybiBbXG4gICAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgaWYgKGFuaW1hbCA9PT0gJ2J1bGwnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDAsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMCB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgeyByb3c6IDAsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2NrcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHBsYXllcnM6IHtcbiAgICAgIHdoaXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMud2hpdGUsXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy53aGl0ZS5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ3doaXRlJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnd2hpdGUnKSxcbiAgICAgIH0sXG4gICAgICBibGFjazoge1xuICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzLmJsYWNrLFxuICAgICAgICBwb3dlclVubG9ja2VkOlxuICAgICAgICAgIHN0YXRlLnBsYXllcnMuYmxhY2sucG93ZXJVbmxvY2tlZCB8fFxuICAgICAgICAgIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGUsICdibGFjaycpIHx8XG4gICAgICAgICAgaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZSwgJ2JsYWNrJyksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUoKHBpZWNlKSA9PiB7XG4gICAgaWYgKHBpZWNlLmNvbG9yICE9PSBjb2xvciB8fCBwaWVjZS5jYXB0dXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IGJvb2xlYW4ge1xuICBjb25zdCBjZW50ZXJUb3AgPSBzdGF0ZS5ib2FyZFNpemUgLyAyIC0gMTtcbiAgY29uc3QgY2VudGVyQm90dG9tID0gc3RhdGUuYm9hcmRTaXplIC8gMjtcbiAgY29uc3QgZW5lbXkgPSBvdGhlckNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuc29tZSgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuY29sb3IgIT09IGVuZW15IHx8IHBpZWNlLmNhcHR1cmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcGllY2UucG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbSA6IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3A7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1Byb21vdGlvblJvdyhcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA9PT0gMCA6IHBvc2l0aW9uLnJvdyA9PT0gYm9hcmRTaXplIC0gMTtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVCb2FyZChib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbi5yb3cgPj0gMCAmJiBwb3NpdGlvbi5yb3cgPCBib2FyZFNpemUgJiYgcG9zaXRpb24uY29sID49IDAgJiYgcG9zaXRpb24uY29sIDwgYm9hcmRTaXplXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNhbWVQb3NpdGlvbihhOiBDaGVzc2ltYWxzUG9zaXRpb24sIGI6IENoZXNzaW1hbHNQb3NpdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5yb3cgPT09IGIucm93ICYmIGEuY29sID09PSBiLmNvbDtcbn1cblxuZnVuY3Rpb24gb3RoZXJDb2xvcihjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yKTogQ2hlc3NpbWFsc1BsYXllckNvbG9yIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvY2FsSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2NhbC0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWA7XG59XG4iXX0=
1175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLE1BQU0sZ0NBQWdDLEdBQUcsMkNBQTJDLENBQUM7QUFzQnJGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUEyQjtJQUM3RDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZUFBZTtRQUM3RCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxXQUFXO1FBQ2YsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLEdBQUc7UUFDWCxTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZ0JBQWdCO1FBQzlELFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsY0FBYyxFQUFFLDRCQUE0QjtLQUM3QztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsTUFBTTtRQUNsQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsY0FBYyxFQUFFLHlCQUF5QjtLQUMxQztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsUUFBUTtRQUNwQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0Is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VSxFQUFFLEdBQUc7UUFDZixNQUFNLEVBQUUsR0FBRztRQUNYLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsR0FBRztLQUNiO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsR0FBRztRQUNYLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxDQUFDO1FBQ1IsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsR0FBRztRQUNYLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsQ0FBQztRQUNULEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLEdBQUc7UUFDVCxPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsVUFBVSxFQUFFO1FBQ1YsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsR0FBRztRQUNYLEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLENBQUM7UUFDVCxNQUFNLEVBQUUsQ0FBQztRQUNULEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLEdBQUc7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxDQUFDO1FBQ1IsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLEdBQUc7UUFDaEIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtR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QUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBNEI7SUFDOUMsT0FBTyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxhQUFhO0lBQ3BCLE9BQU8sU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGVzc2ltYWxzQW5pbWFsVHlwZSxcbiAgQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIENoZXNzaW1hbHNCb3RQcm9maWxlLFxuICBDaGVzc2ltYWxzQm90UHJvZmlsZUlkLFxuICBDaGVzc2ltYWxzQm9hcmRTaXplLFxuICBDaGVzc2ltYWxzR2FtZU1vZGUsXG4gIENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIENoZXNzaW1hbHNHYW1lU3RhdHVzLFxuICBDaGVzc2ltYWxzTW92ZSxcbiAgQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnksXG4gIENoZXNzaW1hbHNOaWdodG1hcmVNb2RlLFxuICBDaGVzc2ltYWxzT25saW5lU3RhdGUsXG4gIENoZXNzaW1hbHNQaWVjZSxcbiAgQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBDaGVzc2ltYWxzUG9zaXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTklNQUxTOiBDaGVzc2ltYWxzQW5pbWFsVHlwZVtdID0gWydlYWdsZScsICdidWxsJywgJ2thbmdhcm9vJywgJ2xpb24nXTtcbmNvbnN0IENIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFID0gJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL2NoYWxsZW5nZS1hdmF0YXJzJztcblxuaW50ZXJmYWNlIENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGFkdmFuY2VtZW50OiBudW1iZXI7XG4gIGNhcHR1cmU6IG51bWJlcjtcbiAgc2FmZXR5OiBudW1iZXI7XG4gIHBvd2VyOiBudW1iZXI7XG4gIGNlbnRlcjogbnVtYmVyO1xuICB1bmxvY2s6IG51bWJlcjtcbiAgcmVwbHk6IG51bWJlcjtcbiAgcmFuZG9tbmVzczogbnVtYmVyO1xuICBzcHJlYWQ6IG51bWJlcjtcbiAgbW9iaWxpdHk6IG51bWJlcjtcbiAgdHJhcDogbnVtYmVyO1xuICBlbmRnYW1lOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDaGVzc2ltYWxzQm90T3B0aW9ucyB7XG4gIGNoYWxsZW5nZVJvdW5kPzogbnVtYmVyO1xuICBuaWdodG1hcmVNb2RlPzogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBDSEVTU0lNQUxTX0JPVF9QUk9GSUxFUzogQ2hlc3NpbWFsc0JvdFByb2ZpbGVbXSA9IFtcbiAge1xuICAgIGlkOiAnZXhwbG9yZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn6etJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9leHBsb3Jlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEV4cGxvcmVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RFeHBsb3JlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdpbXB1bHNpdmUnLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfimqEnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2ltcHVsc2l2ZS5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEltcHVsc2l2ZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SW1wdWxzaXZlQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3J1bm5lcicsXG4gICAgZGlmZmljdWx0eTogJ2Vhc3knLFxuICAgIGF2YXRhcjogJ/Cfj4EnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3J1bm5lci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFJ1bm5lcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90UnVubmVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2h1bnRlcicsXG4gICAgZGlmZmljdWx0eTogJ25vcm1hbCcsXG4gICAgYXZhdGFyOiAn8J+OrycsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vaHVudGVyLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90SHVudGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RIdW50ZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnZ3VhcmRpYW4nLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/Cfm6HvuI8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2d1YXJkaWFuLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90R3VhcmRpYW4nLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEd1YXJkaWFuQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2p1bXBlcicsXG4gICAgZGlmZmljdWx0eTogJ25vcm1hbCcsXG4gICAgYXZhdGFyOiAn8J+mmCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vanVtcGVyLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90SnVtcGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RKdW1wZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3RyYXRlZ2lzdCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ+KZn++4jycsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vc3RyYXRlZ2lzdC5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFN0cmF0ZWdpc3QnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFN0cmF0ZWdpc3RCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAncHJlZGF0b3InLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn6aBJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9wcmVkYXRvci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFByZWRhdG9yJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RQcmVkYXRvckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzcHJpbnRlcicsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfmoAnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3NwcmludGVyLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3ByaW50ZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNwcmludGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NlbnRpbmVsJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+PsCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vc2VudGluZWwucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTZW50aW5lbCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90U2VudGluZWxCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnb3JhY2xlJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+UricsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vb3JhY2xlLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90T3JhY2xlJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RPcmFjbGVCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnYW1idXNoZXInLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn6qkJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9hbWJ1c2hlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEFtYnVzaGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RBbWJ1c2hlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdsb2Nrc21pdGgnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5SQJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9sb2Nrc21pdGgucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RMb2Nrc21pdGgnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdExvY2tzbWl0aEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzdG9ybScsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfjKnvuI8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3N0b3JtLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3Rvcm0nLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFN0b3JtQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ21hdHJpYXJjaCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfkZEnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L21hdHJpYXJjaC5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE1hdHJpYXJjaCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90TWF0cmlhcmNoQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2VuZGdhbWUnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfijJsnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2VuZGdhbWUucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RFbmRnYW1lJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RFbmRnYW1lQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ21hZ251cycsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ+KZnycsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vbmlnaHRtYXJlLW1hZ251cy5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE1hZ251cycsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90TWFnbnVzQm9keScsXG4gIH0sXG5dO1xuXG5jb25zdCBCT1RfU1RZTEVTOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdFByb2ZpbGVJZCwgQ2hlc3NpbWFsc0JvdFN0eWxlPiA9IHtcbiAgZXhwbG9yZXI6IHtcbiAgICBhZHZhbmNlbWVudDogMS4wNSxcbiAgICBjYXB0dXJlOiAwLjgyLFxuICAgIHNhZmV0eTogMC42MixcbiAgICBwb3dlcjogMC44LFxuICAgIGNlbnRlcjogMS4xNSxcbiAgICB1bmxvY2s6IDEuMDUsXG4gICAgcmVwbHk6IDAuNyxcbiAgICByYW5kb21uZXNzOiAyNjAsXG4gICAgc3ByZWFkOiAwLjY4LFxuICAgIG1vYmlsaXR5OiAwLjc1LFxuICAgIHRyYXA6IDAuNSxcbiAgICBlbmRnYW1lOiAwLjU1LFxuICB9LFxuICBpbXB1bHNpdmU6IHtcbiAgICBhZHZhbmNlbWVudDogMC45LFxuICAgIGNhcHR1cmU6IDEuNDUsXG4gICAgc2FmZXR5OiAwLjQ4LFxuICAgIHBvd2VyOiAxLjE1LFxuICAgIGNlbnRlcjogMC44LFxuICAgIHVubG9jazogMC45LFxuICAgIHJlcGx5OiAwLjU1LFxuICAgIHJhbmRvbW5lc3M6IDI5MCxcbiAgICBzcHJlYWQ6IDAuNjIsXG4gICAgbW9iaWxpdHk6IDAuODUsXG4gICAgdHJhcDogMC42MixcbiAgICBlbmRnYW1lOiAwLjUsXG4gIH0sXG4gIHJ1bm5lcjoge1xuICAgIGFkdmFuY2VtZW50OiAxLjU1LFxuICAgIGNhcHR1cmU6IDAuNzgsXG4gICAgc2FmZXR5OiAwLjUsXG4gICAgcG93ZXI6IDAuOTUsXG4gICAgY2VudGVyOiAwLjcsXG4gICAgdW5sb2NrOiAxLjEsXG4gICAgcmVwbHk6IDAuNTUsXG4gICAgcmFuZG9tbmVzczogMjUwLFxuICAgIHNwcmVhZDogMC42LFxuICAgIG1vYmlsaXR5OiAwLjcyLFxuICAgIHRyYXA6IDAuNDUsXG4gICAgZW5kZ2FtZTogMS4xLFxuICB9LFxuICBodW50ZXI6IHtcbiAgICBhZHZhbmNlbWVudDogMC45NSxcbiAgICBjYXB0dXJlOiAxLjQ1LFxuICAgIHNhZmV0eTogMC45LFxuICAgIHBvd2VyOiAxLjA1LFxuICAgIGNlbnRlcjogMC45NSxcbiAgICB1bmxvY2s6IDAuOTUsXG4gICAgcmVwbHk6IDEsXG4gICAgcmFuZG9tbmVzczogOTAsXG4gICAgc3ByZWFkOiAwLjMsXG4gICAgbW9iaWxpdHk6IDAuOTUsXG4gICAgdHJhcDogMC44MixcbiAgICBlbmRnYW1lOiAwLjc2LFxuICB9LFxuICBndWFyZGlhbjoge1xuICAgIGFkdmFuY2VtZW50OiAwLjg4LFxuICAgIGNhcHR1cmU6IDEsXG4gICAgc2FmZXR5OiAxLjQ1LFxuICAgIHBvd2VyOiAwLjg1LFxuICAgIGNlbnRlcjogMS4wNSxcbiAgICB1bmxvY2s6IDEsXG4gICAgcmVwbHk6IDEuMTUsXG4gICAgcmFuZG9tbmVzczogNzAsXG4gICAgc3ByZWFkOiAwLjI2LFxuICAgIG1vYmlsaXR5OiAwLjgyLFxuICAgIHRyYXA6IDAuNzIsXG4gICAgZW5kZ2FtZTogMC43MixcbiAgfSxcbiAganVtcGVyOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDEuMTIsXG4gICAgY2FwdHVyZTogMSxcbiAgICBzYWZldHk6IDAuOTIsXG4gICAgcG93ZXI6IDEuNDIsXG4gICAgY2VudGVyOiAxLjE4LFxuICAgIHVubG9jazogMS4wOCxcbiAgICByZXBseTogMC45NSxcbiAgICByYW5kb21uZXNzOiA5NSxcbiAgICBzcHJlYWQ6IDAuMzIsXG4gICAgbW9iaWxpdHk6IDEuMTUsXG4gICAgdHJhcDogMC45LFxuICAgIGVuZGdhbWU6IDAuODIsXG4gIH0sXG4gIHN0cmF0ZWdpc3Q6IHtcbiAgICBhZHZhbmNlbWVudDogMS4wNSxcbiAgICBjYXB0dXJlOiAxLjA4LFxuICAgIHNhZmV0eTogMS4yMixcbiAgICBwb3dlcjogMS4wOCxcbiAgICBjZW50ZXI6IDEuMTYsXG4gICAgdW5sb2NrOiAxLjEsXG4gICAgcmVwbHk6IDEuMjUsXG4gICAgcmFuZG9tbmVzczogMjIsXG4gICAgc3ByZWFkOiAwLjE0LFxuICAgIG1vYmlsaXR5OiAxLjA4LFxuICAgIHRyYXA6IDEuMDYsXG4gICAgZW5kZ2FtZTogMSxcbiAgfSxcbiAgcHJlZGF0b3I6IHtcbiAgICBhZHZhbmNlbWVudDogMC45OCxcbiAgICBjYXB0dXJlOiAxLjY4LFxuICAgIHNhZmV0eTogMS4wMixcbiAgICBwb3dlcjogMS4zNCxcbiAgICBjZW50ZXI6IDEsXG4gICAgdW5sb2NrOiAxLFxuICAgIHJlcGx5OiAxLjEyLFxuICAgIHJhbmRvbW5lc3M6IDI4LFxuICAgIHNwcmVhZDogMC4xNixcbiAgICBtb2JpbGl0eTogMS4wMixcbiAgICB0cmFwOiAxLjE4LFxuICAgIGVuZGdhbWU6IDAuODIsXG4gIH0sXG4gIHNwcmludGVyOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDEuNzIsXG4gICAgY2FwdHVyZTogMC45LFxuICAgIHNhZmV0eTogMC45NSxcbiAgICBwb3dlcjogMS4wOCxcbiAgICBjZW50ZXI6IDAuODYsXG4gICAgdW5sb2NrOiAxLjE4LFxuICAgIHJlcGx5OiAxLFxuICAgIHJhbmRvbW5lc3M6IDI2LFxuICAgIHNwcmVhZDogMC4xNSxcbiAgICBtb2JpbGl0eTogMC45NSxcbiAgICB0cmFwOiAwLjc4LFxuICAgIGVuZGdhbWU6IDEuNDIsXG4gIH0sXG4gIHNlbnRpbmVsOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDAuOSxcbiAgICBjYXB0dXJlOiAxLjEyLFxuICAgIHNhZmV0eTogMS43MixcbiAgICBwb3dlcjogMC45NSxcbiAgICBjZW50ZXI6IDEuMjgsXG4gICAgdW5sb2NrOiAxLjA1LFxuICAgIHJlcGx5OiAxLjM4LFxuICAgIHJhbmRvbW5lc3M6IDE4LFxuICAgIHNwcmVhZDogMC4xMixcbiAgICBtb2JpbGl0eTogMC44NixcbiAgICB0cmFwOiAxLjA0LFxuICAgIGVuZGdhbWU6IDAuODQsXG4gIH0sXG4gIG9yYWNsZToge1xuICAgIGFkdmFuY2VtZW50OiAxLFxuICAgIGNhcHR1cmU6IDEuMTIsXG4gICAgc2FmZXR5OiAxLjQyLFxuICAgIHBvd2VyOiAxLjEsXG4gICAgY2VudGVyOiAxLjE4LFxuICAgIHVubG9jazogMS4wOCxcbiAgICByZXBseTogMS44LFxuICAgIHJhbmRvbW5lc3M6IDgsXG4gICAgc3ByZWFkOiAwLjA4LFxuICAgIG1vYmlsaXR5OiAxLjA2LFxuICAgIHRyYXA6IDEuMjIsXG4gICAgZW5kZ2FtZTogMS4wOCxcbiAgfSxcbiAgYW1idXNoZXI6IHtcbiAgICBhZHZhbmNlbWVudDogMC45LFxuICAgIGNhcHR1cmU6IDEuNDgsXG4gICAgc2FmZXR5OiAxLjA4LFxuICAgIHBvd2VyOiAxLjQ2LFxuICAgIGNlbnRlcjogMS4wNSxcbiAgICB1bmxvY2s6IDEuMDIsXG4gICAgcmVwbHk6IDEuMzIsXG4gICAgcmFuZG9tbmVzczogMTQsXG4gICAgc3ByZWFkOiAwLjEsXG4gICAgbW9iaWxpdHk6IDEuMTIsXG4gICAgdHJhcDogMS43MixcbiAgICBlbmRnYW1lOiAwLjkyLFxuICB9LFxuICBsb2Nrc21pdGg6IHtcbiAgICBhZHZhbmNlbWVudDogMC44OCxcbiAgICBjYXB0dXJlOiAxLjA0LFxuICAgIHNhZmV0eTogMS41NSxcbiAgICBwb3dlcjogMS4wMixcbiAgICBjZW50ZXI6IDEuNDgsXG4gICAgdW5sb2NrOiAxLjEyLFxuICAgIHJlcGx5OiAxLjUyLFxuICAgIHJhbmRvbW5lc3M6IDEyLFxuICAgIHNwcmVhZDogMC4xLFxuICAgIG1vYmlsaXR5OiAxLjU4LFxuICAgIHRyYXA6IDEuMjQsXG4gICAgZW5kZ2FtZTogMC44NixcbiAgfSxcbiAgc3Rvcm06IHtcbiAgICBhZHZhbmNlbWVudDogMS4xOCxcbiAgICBjYXB0dXJlOiAxLjM4LFxuICAgIHNhZmV0eTogMC45OCxcbiAgICBwb3dlcjogMS42MixcbiAgICBjZW50ZXI6IDEuMDgsXG4gICAgdW5sb2NrOiAxLjE4LFxuICAgIHJlcGx5OiAxLjIyLFxuICAgIHJhbmRvbW5lc3M6IDE4LFxuICAgIHNwcmVhZDogMC4xMyxcbiAgICBtb2JpbGl0eTogMS4zNixcbiAgICB0cmFwOiAxLjI4LFxuICAgIGVuZGdhbWU6IDEuMDIsXG4gIH0sXG4gIG1hdHJpYXJjaDoge1xuICAgIGFkdmFuY2VtZW50OiAwLjk2LFxuICAgIGNhcHR1cmU6IDEuMTgsXG4gICAgc2FmZXR5OiAxLjY0LFxuICAgIHBvd2VyOiAxLjE4LFxuICAgIGNlbnRlcjogMS4yMixcbiAgICB1bmxvY2s6IDEuMDgsXG4gICAgcmVwbHk6IDEuNjYsXG4gICAgcmFuZG9tbmVzczogMTAsXG4gICAgc3ByZWFkOiAwLjA4LFxuICAgIG1vYmlsaXR5OiAxLjAyLFxuICAgIHRyYXA6IDEuMzYsXG4gICAgZW5kZ2FtZTogMSxcbiAgfSxcbiAgZW5kZ2FtZToge1xuICAgIGFkdmFuY2VtZW50OiAxLjQ2LFxuICAgIGNhcHR1cmU6IDEsXG4gICAgc2FmZXR5OiAxLjI4LFxuICAgIHBvd2VyOiAxLjA0LFxuICAgIGNlbnRlcjogMC45NCxcbiAgICB1bmxvY2s6IDEuMDgsXG4gICAgcmVwbHk6IDEuNDQsXG4gICAgcmFuZG9tbmVzczogMTAsXG4gICAgc3ByZWFkOiAwLjA5LFxuICAgIG1vYmlsaXR5OiAwLjk4LFxuICAgIHRyYXA6IDEuMDIsXG4gICAgZW5kZ2FtZTogMS44NixcbiAgfSxcbiAgbWFnbnVzOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDEuMDQsXG4gICAgY2FwdHVyZTogMS4yMixcbiAgICBzYWZldHk6IDEuOSxcbiAgICBwb3dlcjogMC45LFxuICAgIGNlbnRlcjogMS40MixcbiAgICB1bmxvY2s6IDEuMDgsXG4gICAgcmVwbHk6IDIuMDgsXG4gICAgcmFuZG9tbmVzczogMyxcbiAgICBzcHJlYWQ6IDAuMDQsXG4gICAgbW9iaWxpdHk6IDEuMDgsXG4gICAgdHJhcDogMS40MixcbiAgICBlbmRnYW1lOiAxLjg2LFxuICB9LFxufTtcblxuY29uc3QgREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdERpZmZpY3VsdHksIENoZXNzaW1hbHNCb3RQcm9maWxlSWQ+ID0ge1xuICBlYXN5OiAnZXhwbG9yZXInLFxuICBub3JtYWw6ICdodW50ZXInLFxuICBoYXJkOiAnc3RyYXRlZ2lzdCcsXG4gIG1hc3RlcjogJ21hZ251cycsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyB7XG4gIGlkPzogc3RyaW5nO1xuICBtb2RlPzogQ2hlc3NpbWFsc0dhbWVNb2RlO1xuICBzdGF0dXM/OiBDaGVzc2ltYWxzR2FtZVN0YXR1cztcbiAgb25saW5lPzogQ2hlc3NpbWFsc09ubGluZVN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc0dhbWUoXG4gIGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZSA9IDYsXG4gIG9wdGlvbnM6IENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyA9IHt9XG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgcGllY2VzOiBDaGVzc2ltYWxzUGllY2VbXSA9IFtdO1xuICBjb25zdCB3aGl0ZVJvdyA9IGJvYXJkU2l6ZSAtIDI7XG4gIGNvbnN0IGJsYWNrUm93ID0gMTtcblxuICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBib2FyZFNpemU7IGNvbCArPSAxKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgaWQ6IGBXJHtjb2wgKyAxfWAsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIHBvc2l0aW9uOiB7IHJvdzogd2hpdGVSb3csIGNvbCB9LFxuICAgICAgY2FwdHVyZWQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIGlkOiBgQiR7Y29sICsgMX1gLFxuICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICBwb3NpdGlvbjogeyByb3c6IGJsYWNrUm93LCBjb2wgfSxcbiAgICAgIGNhcHR1cmVkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IGNyZWF0ZUxvY2FsSWQoKSxcbiAgICBtb2RlOiBvcHRpb25zLm1vZGUgPz8gJ2xvY2FsJyxcbiAgICBib2FyZFNpemUsXG4gICAgc3RhdHVzOiBvcHRpb25zLnN0YXR1cyA/PyAnaW5fcHJvZ3Jlc3MnLFxuICAgIGN1cnJlbnRUdXJuOiAnd2hpdGUnLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzOiB7XG4gICAgICB3aGl0ZTogeyBjb2xvcjogJ3doaXRlJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgICBibGFjazogeyBjb2xvcjogJ2JsYWNrJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgfSxcbiAgICBtb3ZlQ291bnQ6IDAsXG4gICAgb25saW5lOiBvcHRpb25zLm9ubGluZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNQaWVjZUF0KFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvblxuKTogQ2hlc3NpbWFsc1BpZWNlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZChcbiAgICBwaWVjZSA9PlxuICAgICAgIXBpZWNlLmNhcHR1cmVkICYmIHBpZWNlLnBvc2l0aW9uLnJvdyA9PT0gcG9zaXRpb24ucm93ICYmIHBpZWNlLnBvc2l0aW9uLmNvbCA9PT0gcG9zaXRpb24uY29sXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzTGVnYWxNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlSWQ6IHN0cmluZyxcbiAgYW5pbWFsPzogQ2hlc3NpbWFsc0FuaW1hbFR5cGVcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gW107XG5cbiAgY29uc3QgcGllY2UgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBwaWVjZUlkICYmICFpdGVtLmNhcHR1cmVkKTtcbiAgaWYgKCFwaWVjZSB8fCBwaWVjZS5jb2xvciAhPT0gc3RhdGUuY3VycmVudFR1cm4pIHJldHVybiBbXTtcblxuICBpZiAoYW5pbWFsKSB7XG4gICAgY29uc3QgcGxheWVyID0gc3RhdGUucGxheWVyc1twaWVjZS5jb2xvcl07XG4gICAgaWYgKCFwbGF5ZXIucG93ZXJVbmxvY2tlZCB8fCAhaGFzUG93ZXJDYXJkVXNlKHBsYXllci5jYXJkc1thbmltYWxdKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBnZXRQb3dlck1vdmVzKHN0YXRlLCBwaWVjZSwgYW5pbWFsKTtcbiAgfVxuXG4gIHJldHVybiBnZXRCYXNpY01vdmVzKHN0YXRlLCBwaWVjZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IgPSBzdGF0ZS5jdXJyZW50VHVyblxuKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycpIHJldHVybiBbXTtcblxuICBjb25zdCB0dXJuU3RhdGUgPSBjb2xvciA9PT0gc3RhdGUuY3VycmVudFR1cm4gPyBzdGF0ZSA6IHsgLi4uc3RhdGUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICBjb25zdCBwbGF5ZXIgPSB0dXJuU3RhdGUucGxheWVyc1tjb2xvcl07XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBhY3RpdmVQaWVjZXModHVyblN0YXRlKSkge1xuICAgIGlmIChwaWVjZS5jYXB0dXJlZCB8fCBwaWVjZS5jb2xvciAhPT0gY29sb3IpIGNvbnRpbnVlO1xuXG4gICAgbW92ZXMucHVzaCguLi5nZXRDaGVzc2ltYWxzTGVnYWxNb3Zlcyh0dXJuU3RhdGUsIHBpZWNlLmlkKSk7XG4gICAgaWYgKCFwbGF5ZXIucG93ZXJVbmxvY2tlZCkgY29udGludWU7XG5cbiAgICBmb3IgKGNvbnN0IGFuaW1hbCBvZiBBTklNQUxTKSB7XG4gICAgICBpZiAoIWhhc1Bvd2VyQ2FyZFVzZShwbGF5ZXIuY2FyZHNbYW5pbWFsXSkpIGNvbnRpbnVlO1xuICAgICAgbW92ZXMucHVzaCguLi5nZXRDaGVzc2ltYWxzTGVnYWxNb3Zlcyh0dXJuU3RhdGUsIHBpZWNlLmlkLCBhbmltYWwpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2VDaGVzc2ltYWxzQm90TW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5ID0gJ25vcm1hbCcsXG4gIHByb2ZpbGVJZDogQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZCA9IERFRkFVTFRfQk9UX1BST0ZJTEVfQllfRElGRklDVUxUWVtkaWZmaWN1bHR5XSxcbiAgb3B0aW9uczogQ2hlc3NpbWFsc0JvdE9wdGlvbnMgPSB7fVxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBjb25zdCBtb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlKTtcbiAgaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYmFzZVN0eWxlID1cbiAgICBCT1RfU1RZTEVTW3Byb2ZpbGVJZF0gPz8gQk9UX1NUWUxFU1tERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFlbZGlmZmljdWx0eV1dO1xuICBjb25zdCBjaGFsbGVuZ2VQcmVzc3VyZSA9IGdldENoYWxsZW5nZVByZXNzdXJlKG9wdGlvbnMuY2hhbGxlbmdlUm91bmQpO1xuICBjb25zdCBzdHlsZSA9IHR1bmVCb3RTdHlsZShiYXNlU3R5bGUsIGRpZmZpY3VsdHksIGNoYWxsZW5nZVByZXNzdXJlLCBvcHRpb25zLm5pZ2h0bWFyZU1vZGUpO1xuXG4gIGNvbnN0IHF1aWNrU2NvcmVkID0gbW92ZXNcbiAgICAubWFwKG1vdmUgPT4gKHtcbiAgICAgIG1vdmUsXG4gICAgICBzY29yZTogc2NvcmVCb3RNb3ZlKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgbW92ZSxcbiAgICAgICAgZGlmZmljdWx0eSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIGNoYWxsZW5nZVByZXNzdXJlLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgb3B0aW9ucy5uaWdodG1hcmVNb2RlXG4gICAgICApLFxuICAgIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIGNvbnN0IGxvb2thaGVhZExpbWl0ID1cbiAgICBvcHRpb25zLm5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnIHx8IGRpZmZpY3VsdHkgPT09ICdtYXN0ZXInXG4gICAgICA/IDQ4XG4gICAgICA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJ1xuICAgICAgICA/IDMyXG4gICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCdcbiAgICAgICAgICA/IDI0XG4gICAgICAgICAgOiAwO1xuICBjb25zdCBzY29yZWQgPSBxdWlja1Njb3JlZFxuICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgbW92ZTogaXRlbS5tb3ZlLFxuICAgICAgc2NvcmU6XG4gICAgICAgIGluZGV4IDwgbG9va2FoZWFkTGltaXRcbiAgICAgICAgICA/IHNjb3JlQm90TW92ZVdpdGhMb29rYWhlYWQoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBpdGVtLm1vdmUsXG4gICAgICAgICAgICAgIGRpZmZpY3VsdHksXG4gICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICBjaGFsbGVuZ2VQcmVzc3VyZSxcbiAgICAgICAgICAgICAgb3B0aW9ucy5uaWdodG1hcmVNb2RlXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBpdGVtLnNjb3JlLFxuICAgIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG5cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdlYXN5Jykge1xuICAgIGNvbnN0IHBsYXlhYmxlID0gc2NvcmVkLmZpbHRlcihpdGVtID0+IGl0ZW0uc2NvcmUgPiAtMzAwMCk7XG4gICAgcmV0dXJuIHBpY2tOb2lzeUJvdE1vdmUocGxheWFibGUubGVuZ3RoID8gcGxheWFibGUgOiBzY29yZWQsIDAuNTUpO1xuICB9XG5cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdub3JtYWwnKSB7XG4gICAgcmV0dXJuIHNjb3JlZFswXT8ubW92ZTtcbiAgfVxuXG4gIGNvbnN0IHdpbm5pbmdNb3ZlID0gc2NvcmVkLmZpbmQoaXRlbSA9PiBpdGVtLnNjb3JlID49IDEwMDAwKTtcbiAgaWYgKHdpbm5pbmdNb3ZlKSByZXR1cm4gd2lubmluZ01vdmUubW92ZTtcblxuICBjb25zdCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzID0gbmV3IFNldChcbiAgICBnZXRJbW1lZGlhdGVXaW5uaW5nTW92ZXMoc3RhdGUsIG90aGVyQ29sb3Ioc3RhdGUuY3VycmVudFR1cm4pKS5tYXAobW92ZSA9PiBwb3NpdGlvbktleShtb3ZlLnRvKSlcbiAgKTtcbiAgaWYgKG9wcG9uZW50V2lubmluZ1RhcmdldHMuc2l6ZSA+IDApIHtcbiAgICBjb25zdCBibG9ja2luZ01vdmUgPSBzY29yZWQuZmluZChcbiAgICAgIGl0ZW0gPT4gaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzLmhhcyhwb3NpdGlvbktleShpdGVtLm1vdmUudG8pKVxuICAgICk7XG4gICAgaWYgKGJsb2NraW5nTW92ZSkgcmV0dXJuIGJsb2NraW5nTW92ZS5tb3ZlO1xuICB9XG5cbiAgY29uc3QgY2hhbGxlbmdlQ2FwdHVyZSA9IGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShzY29yZWQsIGNoYWxsZW5nZVByZXNzdXJlKTtcbiAgaWYgKGNoYWxsZW5nZUNhcHR1cmUpIHJldHVybiBjaGFsbGVuZ2VDYXB0dXJlO1xuXG4gIGNvbnN0IG5pZ2h0bWFyZUNhcHR1cmUgPSBjaG9vc2VOaWdodG1hcmVDYXB0dXJlKHNjb3JlZCwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKTtcbiAgaWYgKG5pZ2h0bWFyZUNhcHR1cmUpIHJldHVybiBuaWdodG1hcmVDYXB0dXJlO1xuXG4gIGNvbnN0IGNvbnNlcnZhdGl2ZUNhcHR1cmUgPSBjaG9vc2VDb25zZXJ2YXRpdmVIYXJkQ2FwdHVyZShzdGF0ZSwgc2NvcmVkKTtcbiAgaWYgKGNvbnNlcnZhdGl2ZUNhcHR1cmUpIHJldHVybiBjb25zZXJ2YXRpdmVDYXB0dXJlO1xuXG4gIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNoZXNzaW1hbHNNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY2FuZGlkYXRlOiBDaGVzc2ltYWxzTW92ZVxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGxlZ2FsTW92ZSA9IGdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHN0YXRlLCBjYW5kaWRhdGUucGllY2VJZCwgY2FuZGlkYXRlLmFuaW1hbCkuZmluZChcbiAgICBtb3ZlID0+IHNhbWVQb3NpdGlvbihtb3ZlLmZyb20sIGNhbmRpZGF0ZS5mcm9tKSAmJiBzYW1lUG9zaXRpb24obW92ZS50bywgY2FuZGlkYXRlLnRvKVxuICApO1xuXG4gIGlmICghbGVnYWxNb3ZlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0lMTEVHQUxfTU9WRScpO1xuICB9XG5cbiAgY29uc3QgbW92ZWRQaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZChwaWVjZSA9PiBwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLnBpZWNlSWQpO1xuICBpZiAoIW1vdmVkUGllY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfUElFQ0VfTk9UX0ZPVU5EJyk7XG4gIH1cblxuICBjb25zdCBwaWVjZXMgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLm1hcChwaWVjZSA9PiB7XG4gICAgaWYgKHBpZWNlLmlkID09PSBsZWdhbE1vdmUucGllY2VJZCkge1xuICAgICAgcmV0dXJuIHsgLi4ucGllY2UsIHBvc2l0aW9uOiB7IC4uLmxlZ2FsTW92ZS50byB9IH07XG4gICAgfVxuICAgIGlmIChwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLmNhcHR1cmVzUGllY2VJZCkge1xuICAgICAgcmV0dXJuIHsgLi4ucGllY2UsIGNhcHR1cmVkOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBwaWVjZTtcbiAgfSk7XG5cbiAgY29uc3QgcGxheWVycyA9IHtcbiAgICAuLi5zdGF0ZS5wbGF5ZXJzLFxuICAgIFttb3ZlZFBpZWNlLmNvbG9yXToge1xuICAgICAgLi4uc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXSxcbiAgICAgIGNhcmRzOlxuICAgICAgICBsZWdhbE1vdmUua2luZCA9PT0gJ3Bvd2VyJyAmJiBsZWdhbE1vdmUuYW5pbWFsXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0uY2FyZHMsXG4gICAgICAgICAgICAgIFtsZWdhbE1vdmUuYW5pbWFsXTogY29uc3VtZVBvd2VyQ2FyZFVzZShcbiAgICAgICAgICAgICAgICBzdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzW2xlZ2FsTW92ZS5hbmltYWxdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIC4uLnN0YXRlLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzLFxuICAgIGN1cnJlbnRUdXJuOiBvdGhlckNvbG9yKG1vdmVkUGllY2UuY29sb3IpLFxuICAgIG1vdmVDb3VudDogc3RhdGUubW92ZUNvdW50ICsgMSxcbiAgICBsYXN0TW92ZTogbGVnYWxNb3ZlLFxuICB9KTtcblxuICBjb25zdCBwcm9tb3RlZCA9IGlzUHJvbW90aW9uUm93KG5leHRTdGF0ZS5ib2FyZFNpemUsIG1vdmVkUGllY2UuY29sb3IsIGxlZ2FsTW92ZS50byk7XG4gIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKG5leHRTdGF0ZSkuZmlsdGVyKFxuICAgIHBpZWNlID0+IHBpZWNlLmNvbG9yICE9PSBtb3ZlZFBpZWNlLmNvbG9yICYmICFwaWVjZS5jYXB0dXJlZFxuICApO1xuICBjb25zdCBlbmVteUhhc0xlZ2FsTW92ZXMgPVxuICAgIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKG5leHRTdGF0ZSwgbmV4dFN0YXRlLmN1cnJlbnRUdXJuKS5sZW5ndGggPiAwO1xuXG4gIGNvbnN0IHJlc29sdmVkU3RhdGUgPVxuICAgIHByb21vdGVkIHx8IGVuZW15UGllY2VzLmxlbmd0aCA9PT0gMCB8fCAhZW5lbXlIYXNMZWdhbE1vdmVzXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICAgICAgc3RhdHVzOiAnZmluaXNoZWQnIGFzIGNvbnN0LFxuICAgICAgICAgIHdpbm5lcjogbW92ZWRQaWVjZS5jb2xvcixcbiAgICAgICAgICB3aW5uZXJSZWFzb246IHByb21vdGVkXG4gICAgICAgICAgICA/ICgncHJvbW90aW9uJyBhcyBjb25zdClcbiAgICAgICAgICAgIDogZW5lbXlQaWVjZXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gKCdlbGltaW5hdGlvbicgYXMgY29uc3QpXG4gICAgICAgICAgICAgIDogKCdibG9ja2VkJyBhcyBjb25zdCksXG4gICAgICAgIH1cbiAgICAgIDogbmV4dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzb2x2ZWRTdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogWy4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSwgY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShyZXNvbHZlZFN0YXRlLCBsZWdhbE1vdmUpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoZXNzaW1hbHNSZXZpZXdTdGF0ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGVudHJ5OiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeVxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGJhc2VTdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS5sYXN0TW92ZTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS53aW5uZXI7XG4gIGRlbGV0ZSBiYXNlU3RhdGUud2lubmVyUmVhc29uO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0ZSxcbiAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cyxcbiAgICBjdXJyZW50VHVybjogZW50cnkuY3VycmVudFR1cm4sXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhlbnRyeS5waWVjZXMpLFxuICAgIG1vdmVDb3VudDogZW50cnkubW92ZU51bWJlcixcbiAgICAuLi4oZW50cnkud2lubmVyID8geyB3aW5uZXI6IGVudHJ5Lndpbm5lciB9IDoge30pLFxuICAgIC4uLihlbnRyeS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogZW50cnkud2lubmVyUmVhc29uIH0gOiB7fSksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IGxhc3RNb3ZlOiBzYW5pdGl6ZU1vdmUoZW50cnkubW92ZSkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU/OiBDaGVzc2ltYWxzTW92ZVxuKTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnkge1xuICByZXR1cm4ge1xuICAgIG1vdmVOdW1iZXI6IHN0YXRlLm1vdmVDb3VudCxcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKHN0YXRlLnBpZWNlcyksXG4gICAgY3VycmVudFR1cm46IHN0YXRlLmN1cnJlbnRUdXJuLFxuICAgIHN0YXR1czogc3RhdGUuc3RhdHVzLFxuICAgIC4uLihtb3ZlID8geyBtb3ZlOiBzYW5pdGl6ZU1vdmUobW92ZSkgfSA6IHt9KSxcbiAgICAuLi4oc3RhdGUud2lubmVyID8geyB3aW5uZXI6IHN0YXRlLndpbm5lciB9IDoge30pLFxuICAgIC4uLihzdGF0ZS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogc3RhdGUud2lubmVyUmVhc29uIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnlbXSB7XG4gIGlmIChzdGF0ZS5tb3ZlSGlzdG9yeT8ubGVuZ3RoKSByZXR1cm4gc3RhdGUubW92ZUhpc3RvcnkubWFwKGNsb25lTW92ZUhpc3RvcnlFbnRyeSk7XG4gIHJldHVybiBbY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShzdGF0ZSldO1xufVxuXG5mdW5jdGlvbiBjbG9uZU1vdmVIaXN0b3J5RW50cnkoZW50cnk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5KTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnkge1xuICByZXR1cm4ge1xuICAgIC4uLmVudHJ5LFxuICAgIHBpZWNlczogY2xvbmVQaWVjZXMoZW50cnkucGllY2VzKSxcbiAgICAuLi4oZW50cnkubW92ZSA/IHsgbW92ZTogc2FuaXRpemVNb3ZlKGVudHJ5Lm1vdmUpIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsb25lUGllY2VzKHBpZWNlczogQ2hlc3NpbWFsc1BpZWNlW10pOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBwaWVjZXMubWFwKHBpZWNlID0+ICh7XG4gICAgLi4ucGllY2UsXG4gICAgcG9zaXRpb246IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1vdmUobW92ZTogQ2hlc3NpbWFsc01vdmUpOiBDaGVzc2ltYWxzTW92ZSB7XG4gIHJldHVybiB7XG4gICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgIGZyb206IHsgLi4ubW92ZS5mcm9tIH0sXG4gICAgdG86IHsgLi4ubW92ZS50byB9LFxuICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAuLi4obW92ZS5hbmltYWwgPyB7IGFuaW1hbDogbW92ZS5hbmltYWwgfSA6IHt9KSxcbiAgICAuLi4obW92ZS5jYXB0dXJlc1BpZWNlSWQgPyB7IGNhcHR1cmVzUGllY2VJZDogbW92ZS5jYXB0dXJlc1BpZWNlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2lnbkNoZXNzaW1hbHNHYW1lKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvclxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IHJlc2lnbmVkU3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3RhdHVzOiAnZmluaXNoZWQnLFxuICAgIHdpbm5lcjogb3RoZXJDb2xvcihjb2xvciksXG4gICAgd2lubmVyUmVhc29uOiAncmVzaWduYXRpb24nLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzaWduZWRTdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogWy4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSwgY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShyZXNpZ25lZFN0YXRlKV0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbktleShwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Bvc2l0aW9uLnJvd306JHtwb3NpdGlvbi5jb2x9YDtcbn1cblxuZnVuY3Rpb24gaGFzUG93ZXJDYXJkVXNlKGNhcmQ6IHsgdXNlZDogYm9vbGVhbjsgdXNlc1JlbWFpbmluZz86IG51bWJlciB9KTogYm9vbGVhbiB7XG4gIHJldHVybiAoY2FyZC51c2VzUmVtYWluaW5nID8/IChjYXJkLnVzZWQgPyAwIDogMSkpID4gMDtcbn1cblxuZnVuY3Rpb24gY29uc3VtZVBvd2VyQ2FyZFVzZTxUIGV4dGVuZHMgeyB1c2VkOiBib29sZWFuOyB1c2VzUmVtYWluaW5nPzogbnVtYmVyIH0+KGNhcmQ6IFQpOiBUIHtcbiAgY29uc3QgcmVtYWluaW5nID0gTWF0aC5tYXgoMCwgKGNhcmQudXNlc1JlbWFpbmluZyA/PyAoY2FyZC51c2VkID8gMCA6IDEpKSAtIDEpO1xuICByZXR1cm4ge1xuICAgIC4uLmNhcmQsXG4gICAgdXNlZDogcmVtYWluaW5nIDw9IDAsXG4gICAgLi4uKGNhcmQudXNlc1JlbWFpbmluZyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHVzZXNSZW1haW5pbmc6IHJlbWFpbmluZyB9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FyZHMoKSB7XG4gIHJldHVybiBBTklNQUxTLnJlZHVjZShcbiAgICAoY2FyZHMsIHR5cGUpID0+ICh7XG4gICAgICAuLi5jYXJkcyxcbiAgICAgIFt0eXBlXTogeyB0eXBlLCB1c2VkOiBmYWxzZSB9LFxuICAgIH0pLFxuICAgIHt9IGFzIFJlY29yZDxcbiAgICAgIENoZXNzaW1hbHNBbmltYWxUeXBlLFxuICAgICAgeyB0eXBlOiBDaGVzc2ltYWxzQW5pbWFsVHlwZTsgdXNlZDogYm9vbGVhbjsgdXNlc1JlbWFpbmluZz86IG51bWJlciB9XG4gICAgPlxuICApO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVQaWVjZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBzdGF0ZS5waWVjZXMuZmlsdGVyKChwaWVjZSk6IHBpZWNlIGlzIENoZXNzaW1hbHNQaWVjZSA9PiAhIXBpZWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzaWNNb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBkaXJlY3Rpb24gPSBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IC0xIDogMTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QgZm9yd2FyZCA9IHsgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24sIGNvbDogcGllY2UucG9zaXRpb24uY29sIH07XG5cbiAgaWYgKGlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCBmb3J3YXJkKSAmJiAhZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIGZvcndhcmQpKSB7XG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiBmb3J3YXJkLFxuICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY29sT2Zmc2V0IG9mIFstMSwgMV0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7IHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLCBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGNvbE9mZnNldCB9O1xuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKFxuICAgICAgaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkgJiZcbiAgICAgIHRhcmdldFBpZWNlICYmXG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciAhPT0gcGllY2UuY29sb3IgJiZcbiAgICAgICFpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpXG4gICAgKSB7XG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICAgICAgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0UG93ZXJNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UsXG4gIGFuaW1hbDogQ2hlc3NpbWFsc0FuaW1hbFR5cGVcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoYW5pbWFsID09PSAna2FuZ2Fyb28nKSB7XG4gICAgcmV0dXJuIGdldEthbmdhcm9vTW92ZXMoc3RhdGUsIHBpZWNlKTtcbiAgfVxuXG4gIGNvbnN0IGRpcmVjdGlvbnMgPSBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsKTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdGlvbiBvZiBkaXJlY3Rpb25zKSB7XG4gICAgZm9yIChsZXQgZGlzdGFuY2UgPSAxOyBkaXN0YW5jZSA8IHN0YXRlLmJvYXJkU2l6ZTsgZGlzdGFuY2UgKz0gMSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgICByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGRpcmVjdGlvbi5yb3cgKiBkaXN0YW5jZSxcbiAgICAgICAgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgKyBkaXJlY3Rpb24uY29sICogZGlzdGFuY2UsXG4gICAgICB9O1xuICAgICAgaWYgKCFpc0luc2lkZUJvYXJkKHN0YXRlLmJvYXJkU2l6ZSwgdGFyZ2V0KSkgYnJlYWs7XG4gICAgICBpZiAoaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBwaWVjZS5jb2xvciwgdGFyZ2V0KSkgYnJlYWs7XG5cbiAgICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgICBpZiAodGFyZ2V0UGllY2U/LmNvbG9yID09PSBwaWVjZS5jb2xvcikgYnJlYWs7XG5cbiAgICAgIG1vdmVzLnB1c2goe1xuICAgICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgICAgZnJvbTogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICAgICAgICB0bzogdGFyZ2V0LFxuICAgICAgICBraW5kOiAncG93ZXInLFxuICAgICAgICBhbmltYWwsXG4gICAgICAgIC4uLih0YXJnZXRQaWVjZSA/IHsgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCB9IDoge30pLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0YXJnZXRQaWVjZSkgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5mdW5jdGlvbiBnZXRLYW5nYXJvb01vdmVzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBwaWVjZTogQ2hlc3NpbWFsc1BpZWNlKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG4gIGNvbnN0IGp1bXBzID0gW1xuICAgIHsgcm93OiAtMiwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAtMiwgY29sOiAxIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IC0yIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IDIgfSxcbiAgICB7IHJvdzogMSwgY29sOiAtMiB9LFxuICAgIHsgcm93OiAxLCBjb2w6IDIgfSxcbiAgICB7IHJvdzogMiwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAyLCBjb2w6IDEgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IGp1bXAgb2YganVtcHMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGp1bXAucm93LFxuICAgICAgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgKyBqdW1wLmNvbCxcbiAgICB9O1xuICAgIGlmICghaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkpIGNvbnRpbnVlO1xuICAgIGlmIChpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKHRhcmdldFBpZWNlPy5jb2xvciA9PT0gcGllY2UuY29sb3IpIGNvbnRpbnVlO1xuXG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiB0YXJnZXQsXG4gICAgICBraW5kOiAncG93ZXInLFxuICAgICAgYW5pbWFsOiAna2FuZ2Fyb28nLFxuICAgICAgLi4uKHRhcmdldFBpZWNlID8geyBjYXB0dXJlc1BpZWNlSWQ6IHRhcmdldFBpZWNlLmlkIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmZ1bmN0aW9uIHNjb3JlQm90TW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgc3R5bGU6IENoZXNzaW1hbHNCb3RTdHlsZSxcbiAgY2hhbGxlbmdlUHJlc3N1cmUgPSAwLFxuICBpbmNsdWRlVGFjdGljYWxQcmVzc3VyZSA9IHRydWUsXG4gIG5pZ2h0bWFyZU1vZGU6IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlID0gJ25vbmUnXG4pOiBudW1iZXIge1xuICBjb25zdCBjb2xvciA9IHN0YXRlLmN1cnJlbnRUdXJuO1xuICBjb25zdCB0YXJnZXRQaWVjZSA9IG1vdmUuY2FwdHVyZXNQaWVjZUlkXG4gICAgPyBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQocGllY2UgPT4gcGllY2UuaWQgPT09IG1vdmUuY2FwdHVyZXNQaWVjZUlkKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBhZHZhbmNlbWVudCA9IGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93IDogbW92ZS50by5yb3c7XG4gIGxldCBzY29yZSA9IGFkdmFuY2VtZW50ICogMjQgKiBzdHlsZS5hZHZhbmNlbWVudDtcbiAgY29uc3Qgc3RlcHNUb1Byb21vdGlvbiA9IGNvbG9yID09PSAnd2hpdGUnID8gbW92ZS50by5yb3cgOiBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3c7XG4gIHNjb3JlICs9XG4gICAgTWF0aC5tYXgoMCwgc3RhdGUuYm9hcmRTaXplIC0gMSAtIHN0ZXBzVG9Qcm9tb3Rpb24pICpcbiAgICAxMCAqXG4gICAgY2hhbGxlbmdlUHJlc3N1cmUgKlxuICAgIHN0eWxlLmFkdmFuY2VtZW50O1xuXG4gIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50bykpIHtcbiAgICBzY29yZSArPSAxMDAwMCArIDI1MDAgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ2h1bnQnICYmIHRhcmdldFBpZWNlKSB7XG4gICAgc2NvcmUgKz0gKG1vdmUua2luZCA9PT0gJ3Bvd2VyJyA/IDc2MCA6IDYyMCkgKiBzdHlsZS5jYXB0dXJlO1xuICB9XG4gIGlmICh0YXJnZXRQaWVjZSkge1xuICAgIHNjb3JlICs9ICg1MjAgKyAxODAgKiBjaGFsbGVuZ2VQcmVzc3VyZSkgKiBzdHlsZS5jYXB0dXJlO1xuICAgIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycpIHNjb3JlICs9IDE2MCAqIGNoYWxsZW5nZVByZXNzdXJlICogc3R5bGUuY2FwdHVyZTtcbiAgICBjb25zdCB0YXJnZXRBZHZhbmNlbWVudCA9XG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3dcbiAgICAgICAgOiB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3c7XG4gICAgc2NvcmUgKz0gdGFyZ2V0QWR2YW5jZW1lbnQgKiAoMTYgKyA4ICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuY2FwdHVyZTtcbiAgfVxuICBpZiAobW92ZS5raW5kID09PSAncG93ZXInKSB7XG4gICAgc2NvcmUgKz1cbiAgICAgICh0YXJnZXRQaWVjZSA/IDEyMCA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IC02MCAtIDE3MCAqIGNoYWxsZW5nZVByZXNzdXJlIDogLTMwKSAqXG4gICAgICBzdHlsZS5wb3dlcjtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ21hZ251cycgJiYgbW92ZS5raW5kID09PSAncG93ZXInKSB7XG4gICAgc2NvcmUgKz0gc2NvcmVNYWdudXNQb3dlclBhdGllbmNlKHN0YXRlLCBtb3ZlLCB0YXJnZXRQaWVjZSwgc3R5bGUpO1xuICB9XG4gIGlmIChtb3ZlLmFuaW1hbCA9PT0gJ2xpb24nKVxuICAgIHNjb3JlICs9IG5pZ2h0bWFyZU1vZGUgPT09ICdwcmlkZScgPyAyNjAgKiBzdHlsZS5wb3dlciA6IC0yMCAqIHN0eWxlLnBvd2VyO1xuICBpZiAobW92ZS5hbmltYWwgPT09ICdrYW5nYXJvbycpIHNjb3JlICs9IDE0ICogc3R5bGUucG93ZXI7XG4gIGlmICh3b3VsZFVubG9ja1Bvd2VyKHN0YXRlLCBjb2xvciwgbW92ZS50bykpIHNjb3JlICs9IDkwICogc3R5bGUudW5sb2NrO1xuICBpZiAoaW5jbHVkZVRhY3RpY2FsUHJlc3N1cmUgJiYgc3RhdGUuYm9hcmRTaXplIDw9IDYpIHtcbiAgICBzY29yZSArPVxuICAgICAgY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKlxuICAgICAgKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDggOiA0KSAqXG4gICAgICBzdHlsZS5tb2JpbGl0eTtcbiAgICBzY29yZSArPVxuICAgICAgY291bnRQcm90ZWN0ZWRUaHJlYXRzQWZ0ZXJNb3ZlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKlxuICAgICAgKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDM2IDogMTgpICpcbiAgICAgIHN0eWxlLnRyYXA7XG4gICAgc2NvcmUgKz0gc2NvcmVFbmRnYW1lUHJlc3N1cmUoc3RhdGUsIG1vdmUsIGNvbG9yKSAqIHN0eWxlLmVuZGdhbWU7XG4gIH0gZWxzZSB7XG4gICAgc2NvcmUgKz0gc2NvcmVFbmRnYW1lUHJlc3N1cmUoc3RhdGUsIG1vdmUsIGNvbG9yKSAqIHN0eWxlLmVuZGdhbWU7XG4gIH1cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdoYXJkJyAmJiBpc1NxdWFyZVZ1bG5lcmFibGVBZnRlck1vdmUoc3RhdGUsIG1vdmUpKSB7XG4gICAgc2NvcmUgLT0gKHRhcmdldFBpZWNlID8gODAgOiAxNDApICogc3R5bGUuc2FmZXR5O1xuICB9XG4gIHNjb3JlICs9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIHN0eWxlLnJhbmRvbW5lc3M7XG5cbiAgcmV0dXJuIHNjb3JlO1xufVxuXG5mdW5jdGlvbiBzY29yZUJvdE1vdmVXaXRoTG9va2FoZWFkKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBzdHlsZTogQ2hlc3NpbWFsc0JvdFN0eWxlLFxuICBjaGFsbGVuZ2VQcmVzc3VyZSA9IDAsXG4gIG5pZ2h0bWFyZU1vZGU6IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlID0gJ25vbmUnXG4pOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSBzY29yZUJvdE1vdmUoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgdHJ1ZSwgbmlnaHRtYXJlTW9kZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZnRlck1vdmUgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICBpZiAoYWZ0ZXJNb3ZlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykgcmV0dXJuIHNjb3JlICsgNTAwMDtcblxuICAgIGNvbnN0IG9wcG9uZW50TW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhhZnRlck1vdmUpO1xuICAgIGNvbnN0IG9wcG9uZW50SW1tZWRpYXRlV2luID0gb3Bwb25lbnRNb3Zlcy5zb21lKFxuICAgICAgb3Bwb25lbnRNb3ZlID0+XG4gICAgICAgIG9wcG9uZW50TW92ZS5raW5kID09PSAnYmFzaWMnICYmXG4gICAgICAgIGlzUHJvbW90aW9uUm93KGFmdGVyTW92ZS5ib2FyZFNpemUsIGFmdGVyTW92ZS5jdXJyZW50VHVybiwgb3Bwb25lbnRNb3ZlLnRvKVxuICAgICk7XG4gICAgaWYgKG9wcG9uZW50SW1tZWRpYXRlV2luKSB7XG4gICAgICBzY29yZSAtPVxuICAgICAgICAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knXG4gICAgICAgICAgPyAxODAwXG4gICAgICAgICAgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJ1xuICAgICAgICAgICAgPyA1MjAwXG4gICAgICAgICAgICA6IDgwMDAgKyA0MjAwICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuc2FmZXR5O1xuICAgIH1cblxuICAgIGNvbnN0IG1vdmVkUGllY2UgPSBhZnRlck1vdmUucGllY2VzLmZpbmQocGllY2UgPT4gcGllY2UuaWQgPT09IG1vdmUucGllY2VJZCAmJiAhcGllY2UuY2FwdHVyZWQpO1xuICAgIGlmIChtb3ZlZFBpZWNlKSB7XG4gICAgICBjb25zdCBjYW5DYXB0dXJlTW92ZWRQaWVjZSA9IG9wcG9uZW50TW92ZXMuc29tZShcbiAgICAgICAgb3Bwb25lbnRNb3ZlID0+IG9wcG9uZW50TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IG1vdmUucGllY2VJZFxuICAgICAgKTtcbiAgICAgIGlmIChjYW5DYXB0dXJlTW92ZWRQaWVjZSkge1xuICAgICAgICBzY29yZSAtPVxuICAgICAgICAgIChtb3ZlLmNhcHR1cmVzUGllY2VJZFxuICAgICAgICAgICAgPyAxODBcbiAgICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ2Vhc3knXG4gICAgICAgICAgICAgID8gMTIwXG4gICAgICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCdcbiAgICAgICAgICAgICAgICA/IDM2MFxuICAgICAgICAgICAgICAgIDogNTYwKSAqXG4gICAgICAgICAgc3R5bGUuc2FmZXR5ICpcbiAgICAgICAgICAoMSArIGNoYWxsZW5nZVByZXNzdXJlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VudGVyID0gKGFmdGVyTW92ZS5ib2FyZFNpemUgLSAxKSAvIDI7XG4gICAgICBjb25zdCBjZW50ZXJDb250cm9sID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGFmdGVyTW92ZS5ib2FyZFNpemUgLyAyIC0gTWF0aC5hYnMobW92ZWRQaWVjZS5wb3NpdGlvbi5jb2wgLSBjZW50ZXIpXG4gICAgICApO1xuICAgICAgc2NvcmUgKz0gY2VudGVyQ29udHJvbCAqIChkaWZmaWN1bHR5ID09PSAnaGFyZCcgPyAxOCA6IDEwKSAqIHN0eWxlLmNlbnRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHBvbmVudEJlc3RSZXBseSA9IG9wcG9uZW50TW92ZXNcbiAgICAgIC5tYXAob3Bwb25lbnRNb3ZlID0+XG4gICAgICAgIHNjb3JlQm90TW92ZShcbiAgICAgICAgICBhZnRlck1vdmUsXG4gICAgICAgICAgb3Bwb25lbnRNb3ZlLFxuICAgICAgICAgIGRpZmZpY3VsdHksXG4gICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgY2hhbGxlbmdlUHJlc3N1cmUsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgbmlnaHRtYXJlTW9kZVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpWzBdO1xuXG4gICAgaWYgKG9wcG9uZW50QmVzdFJlcGx5KSB7XG4gICAgICBjb25zdCByZXBseVdlaWdodCA9XG4gICAgICAgIGRpZmZpY3VsdHkgPT09ICdlYXN5J1xuICAgICAgICAgID8gMC4xMlxuICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCdcbiAgICAgICAgICAgID8gMC40ICsgMC4xICogY2hhbGxlbmdlUHJlc3N1cmVcbiAgICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ21hc3RlcidcbiAgICAgICAgICAgICAgPyAwLjcyICsgMC4yMiAqIGNoYWxsZW5nZVByZXNzdXJlXG4gICAgICAgICAgICAgIDogMC40OCArIDAuMTYgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgICAgIHNjb3JlIC09IG9wcG9uZW50QmVzdFJlcGx5ICogcmVwbHlXZWlnaHQgKiBzdHlsZS5yZXBseTtcbiAgICB9XG5cbiAgICBpZiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnIHx8IGRpZmZpY3VsdHkgPT09ICdtYXN0ZXInKSB7XG4gICAgICBjb25zdCB0b3BPcHBNb3ZlcyA9IG9wcG9uZW50TW92ZXNcbiAgICAgICAgLm1hcChtID0+ICh7XG4gICAgICAgICAgbW92ZTogbSxcbiAgICAgICAgICBzY29yZTogc2NvcmVCb3RNb3ZlKFxuICAgICAgICAgICAgYWZ0ZXJNb3ZlLFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIGRpZmZpY3VsdHksXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIGNoYWxsZW5nZVByZXNzdXJlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBuaWdodG1hcmVNb2RlXG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSlcbiAgICAgICAgLnNsaWNlKDAsIDQpO1xuICAgICAgZm9yIChjb25zdCB7IG1vdmU6IG9wcE1vdmUgfSBvZiB0b3BPcHBNb3Zlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHMyID0gYXBwbHlDaGVzc2ltYWxzTW92ZShhZnRlck1vdmUsIG9wcE1vdmUpO1xuICAgICAgICAgIGlmIChzMi5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IG15Q291bnRlcnMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhzMik7XG4gICAgICAgICAgaWYgKG15Q291bnRlcnMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBteUJlc3QgPVxuICAgICAgICAgICAgbXlDb3VudGVyc1xuICAgICAgICAgICAgICAubWFwKG0gPT5cbiAgICAgICAgICAgICAgICBzY29yZUJvdE1vdmUoczIsIG0sIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgZmFsc2UsIG5pZ2h0bWFyZU1vZGUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKVswXSA/PyAwO1xuICAgICAgICAgIHNjb3JlICs9IG15QmVzdCAqIChkaWZmaWN1bHR5ID09PSAnbWFzdGVyJyA/IDAuMjIgOiAwLjE0KSAqIHN0eWxlLnJlcGx5O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBza2lwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHNjb3JlIC09IDEwMDA7XG4gIH1cblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIGdldENoYWxsZW5nZVByZXNzdXJlKHJvdW5kPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFyb3VuZCkgcmV0dXJuIDA7XG4gIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCByb3VuZCAvIDgpKTtcbn1cblxuZnVuY3Rpb24gdHVuZUJvdFN0eWxlKFxuICBzdHlsZTogQ2hlc3NpbWFsc0JvdFN0eWxlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgY2hhbGxlbmdlUHJlc3N1cmU6IG51bWJlcixcbiAgbmlnaHRtYXJlTW9kZTogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGUgPSAnbm9uZSdcbik6IENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGlmIChuaWdodG1hcmVNb2RlID09PSAnaHVudCcpIHtcbiAgICBzdHlsZSA9IHtcbiAgICAgIC4uLnN0eWxlLFxuICAgICAgYWR2YW5jZW1lbnQ6IHN0eWxlLmFkdmFuY2VtZW50ICogMS4xMixcbiAgICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAxLjcyLFxuICAgICAgcG93ZXI6IHN0eWxlLnBvd2VyICogMS4zLFxuICAgICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAwLjgyLFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTIpLFxuICAgICAgdHJhcDogc3R5bGUudHJhcCAqIDEuMjgsXG4gICAgfTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ3ByaWRlJykge1xuICAgIHN0eWxlID0ge1xuICAgICAgLi4uc3R5bGUsXG4gICAgICBhZHZhbmNlbWVudDogc3R5bGUuYWR2YW5jZW1lbnQgKiAxLjA4LFxuICAgICAgY2FwdHVyZTogc3R5bGUuY2FwdHVyZSAqIDEuMzIsXG4gICAgICBwb3dlcjogc3R5bGUucG93ZXIgKiAxLjU1LFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTYpLFxuICAgIH07XG4gIH1cbiAgaWYgKG5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnKSB7XG4gICAgc3R5bGUgPSB7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIGFkdmFuY2VtZW50OiBzdHlsZS5hZHZhbmNlbWVudCAqIDEuMDQsXG4gICAgICBjYXB0dXJlOiBzdHlsZS5jYXB0dXJlICogMS4xNixcbiAgICAgIHNhZmV0eTogc3R5bGUuc2FmZXR5ICogMS4zOCxcbiAgICAgIHBvd2VyOiBzdHlsZS5wb3dlciAqIDAuODIsXG4gICAgICBjZW50ZXI6IHN0eWxlLmNlbnRlciAqIDEuMixcbiAgICAgIHJlcGx5OiBzdHlsZS5yZXBseSAqIDEuMyxcbiAgICAgIHJhbmRvbW5lc3M6IE1hdGgubWluKHN0eWxlLnJhbmRvbW5lc3MsIDIpLFxuICAgICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAwLjYsXG4gICAgICB0cmFwOiBzdHlsZS50cmFwICogMS4yMixcbiAgICAgIGVuZGdhbWU6IHN0eWxlLmVuZGdhbWUgKiAxLjI4LFxuICAgIH07XG4gIH1cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdtYXN0ZXInKSB7XG4gICAgc3R5bGUgPSB7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAxLjA4LFxuICAgICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAxLjIyLFxuICAgICAgcmVwbHk6IHN0eWxlLnJlcGx5ICogMS4zMixcbiAgICAgIGNlbnRlcjogc3R5bGUuY2VudGVyICogMS4xMixcbiAgICAgIHJhbmRvbW5lc3M6IE1hdGgubWluKHN0eWxlLnJhbmRvbW5lc3MsIDMpLFxuICAgICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAwLjUsXG4gICAgICB0cmFwOiBzdHlsZS50cmFwICogMS4xNCxcbiAgICAgIGVuZGdhbWU6IHN0eWxlLmVuZGdhbWUgKiAxLjE4LFxuICAgIH07XG4gIH1cbiAgaWYgKCFjaGFsbGVuZ2VQcmVzc3VyZSkgcmV0dXJuIHN0eWxlO1xuICBjb25zdCBwcmVzc3VyZSA9XG4gICAgZGlmZmljdWx0eSA9PT0gJ2Vhc3knXG4gICAgICA/IGNoYWxsZW5nZVByZXNzdXJlICogMC40NVxuICAgICAgOiBkaWZmaWN1bHR5ID09PSAnbWFzdGVyJ1xuICAgICAgICA/IGNoYWxsZW5nZVByZXNzdXJlICogMS4xNVxuICAgICAgICA6IGNoYWxsZW5nZVByZXNzdXJlO1xuICByZXR1cm4ge1xuICAgIC4uLnN0eWxlLFxuICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAoMSArIHByZXNzdXJlICogMC4yOCksXG4gICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAoMSArIHByZXNzdXJlICogMC4zNCksXG4gICAgcmVwbHk6IHN0eWxlLnJlcGx5ICogKDEgKyBwcmVzc3VyZSAqIDAuMjIpLFxuICAgIGNlbnRlcjogc3R5bGUuY2VudGVyICogKDEgKyBwcmVzc3VyZSAqIDAuMTIpLFxuICAgIHJhbmRvbW5lc3M6IHN0eWxlLnJhbmRvbW5lc3MgKiAoMSAtIHByZXNzdXJlICogMC42NSksXG4gICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAoMSAtIHByZXNzdXJlICogMC4zNSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXSxcbiAgY2hhbGxlbmdlUHJlc3N1cmU6IG51bWJlclxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoY2hhbGxlbmdlUHJlc3N1cmUgPCAwLjUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYmVzdCA9IHNjb3JlZFswXTtcbiAgY29uc3QgYmVzdEJhc2ljQ2FwdHVyZSA9IHNjb3JlZC5maW5kKFxuICAgIGl0ZW0gPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZFxuICApO1xuICBpZiAoIWJlc3QgfHwgIWJlc3RCYXNpY0NhcHR1cmUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChiZXN0Lm1vdmUua2luZCA9PT0gJ2Jhc2ljJyAmJiBiZXN0Lm1vdmUuY2FwdHVyZXNQaWVjZUlkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IGJlc3QubW92ZS5raW5kID09PSAncG93ZXInICYmICFiZXN0Lm1vdmUuY2FwdHVyZXNQaWVjZUlkID8gMTgwMCA6IDkwMDtcbiAgcmV0dXJuIGJlc3Quc2NvcmUgLSBiZXN0QmFzaWNDYXB0dXJlLnNjb3JlIDw9IHRvbGVyYW5jZSA/IGJlc3RCYXNpY0NhcHR1cmUubW92ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2hvb3NlTmlnaHRtYXJlQ2FwdHVyZShcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXSxcbiAgbmlnaHRtYXJlTW9kZT86IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChuaWdodG1hcmVNb2RlICE9PSAnaHVudCcpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYmVzdCA9IHNjb3JlZFswXTtcbiAgY29uc3QgY2FwdHVyZSA9IHNjb3JlZC5maW5kKGl0ZW0gPT4gaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdCB8fCAhY2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4gYmVzdC5zY29yZSAtIGNhcHR1cmUuc2NvcmUgPD0gMTgwMCA/IGNhcHR1cmUubW92ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc2NvcmVNYWdudXNQb3dlclBhdGllbmNlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIHRhcmdldFBpZWNlOiBDaGVzc2ltYWxzUGllY2UgfCB1bmRlZmluZWQsXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGVcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IGZyb21BZHZhbmNlbWVudCA9IGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUuZnJvbS5yb3cgOiBtb3ZlLmZyb20ucm93O1xuICBjb25zdCB0b0FkdmFuY2VtZW50ID0gY29sb3IgPT09ICd3aGl0ZScgPyBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3cgOiBtb3ZlLnRvLnJvdztcbiAgY29uc3QgYWR2YW5jZW1lbnRHYWluID0gTWF0aC5tYXgoMCwgdG9BZHZhbmNlbWVudCAtIGZyb21BZHZhbmNlbWVudCk7XG4gIGNvbnN0IHN0ZXBzVG9Qcm9tb3Rpb24gPSBjb2xvciA9PT0gJ3doaXRlJyA/IG1vdmUudG8ucm93IDogc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93O1xuICBjb25zdCBjcmVhdGVzUHJvbW90aW9uVGhyZWF0ID0gYWR2YW5jZW1lbnRHYWluID4gMCAmJiBzdGVwc1RvUHJvbW90aW9uIDw9IDE7XG5cbiAgaWYgKHRhcmdldFBpZWNlKSByZXR1cm4gMjYwICogc3R5bGUucG93ZXI7XG4gIGlmIChjcmVhdGVzUHJvbW90aW9uVGhyZWF0KSByZXR1cm4gMTgwICogc3R5bGUuZW5kZ2FtZTtcblxuICBjb25zdCBlYXJseUdhbWUgPSBzdGF0ZS5tb3ZlQ291bnQgPCBzdGF0ZS5ib2FyZFNpemU7XG4gIGNvbnN0IHdhbmRlcmluZ1BlbmFsdHkgPSBlYXJseUdhbWUgPyAxMTgwIDogNjIwO1xuICBjb25zdCBhbmltYWxQZW5hbHR5ID0gbW92ZS5hbmltYWwgPT09ICdrYW5nYXJvbycgPyAyMjAgOiBtb3ZlLmFuaW1hbCA9PT0gJ2xpb24nID8gMTYwIDogMDtcblxuICByZXR1cm4gLSh3YW5kZXJpbmdQZW5hbHR5ICsgYW5pbWFsUGVuYWx0eSkgKiBzdHlsZS5wb3dlcjtcbn1cblxuZnVuY3Rpb24gY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3Jcbik6IG51bWJlciB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgY29uc3QgZXZhbHVhdGlvblN0YXRlID0geyAuLi5hZnRlck1vdmUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICAgIHJldHVybiBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhldmFsdWF0aW9uU3RhdGUsIGNvbG9yKS5maWx0ZXIoXG4gICAgICBuZXh0TW92ZSA9PiBuZXh0TW92ZS5raW5kID09PSAncG93ZXInXG4gICAgKS5sZW5ndGg7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvdW50UHJvdGVjdGVkVGhyZWF0c0FmdGVyTW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yXG4pOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25TdGF0ZSA9IHsgLi4uYWZ0ZXJNb3ZlLCBjdXJyZW50VHVybjogY29sb3IgfTtcbiAgICBjb25zdCBvdXJNb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGV2YWx1YXRpb25TdGF0ZSwgY29sb3IpO1xuICAgIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKGFmdGVyTW92ZSkuZmlsdGVyKFxuICAgICAgcGllY2UgPT4gcGllY2UuY29sb3IgIT09IGNvbG9yICYmICFwaWVjZS5jYXB0dXJlZFxuICAgICk7XG4gICAgcmV0dXJuIGVuZW15UGllY2VzLmZpbHRlcihwaWVjZSA9PlxuICAgICAgb3VyTW92ZXMuc29tZShuZXh0TW92ZSA9PiBuZXh0TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IHBpZWNlLmlkKVxuICAgICkubGVuZ3RoO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY29yZUVuZGdhbWVQcmVzc3VyZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yXG4pOiBudW1iZXIge1xuICBjb25zdCByZW1haW5pbmdFbmVteVBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmlsdGVyKFxuICAgIHBpZWNlID0+IHBpZWNlLmNvbG9yICE9PSBjb2xvciAmJiAhcGllY2UuY2FwdHVyZWRcbiAgKS5sZW5ndGg7XG4gIGNvbnN0IHVyZ2VuY3kgPSByZW1haW5pbmdFbmVteVBpZWNlcyA8PSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKHN0YXRlLmJvYXJkU2l6ZSAvIDIpKSA/IDEuNiA6IDE7XG4gIGNvbnN0IGRpc3RhbmNlVG9Qcm9tb3Rpb24gPSBjb2xvciA9PT0gJ3doaXRlJyA/IG1vdmUudG8ucm93IDogc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93O1xuICByZXR1cm4gTWF0aC5tYXgoMCwgc3RhdGUuYm9hcmRTaXplIC0gZGlzdGFuY2VUb1Byb21vdGlvbikgKiAxNCAqIHVyZ2VuY3k7XG59XG5cbmZ1bmN0aW9uIGNob29zZUNvbnNlcnZhdGl2ZUhhcmRDYXB0dXJlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXVxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGUuYm9hcmRTaXplICE9PSA4KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGlmICghYmVzdCB8fCBiZXN0Lm1vdmUua2luZCAhPT0gJ3Bvd2VyJyB8fCAhYmVzdC5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBiZXN0LnNjb3JlID49IDEwMDAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZChcbiAgICBpdGVtID0+IGl0ZW0ubW92ZS5raW5kID09PSAnYmFzaWMnICYmIGl0ZW0ubW92ZS5jYXB0dXJlc1BpZWNlSWRcbiAgKTtcbiAgaWYgKCFiZXN0QmFzaWNDYXB0dXJlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBiZXN0LnNjb3JlIC0gYmVzdEJhc2ljQ2FwdHVyZS5zY29yZSA8PSA2NTAgPyBiZXN0QmFzaWNDYXB0dXJlLm1vdmUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHBpY2tOb2lzeUJvdE1vdmUoXG4gIHNjb3JlZDogQXJyYXk8eyBtb3ZlOiBDaGVzc2ltYWxzTW92ZTsgc2NvcmU6IG51bWJlciB9PixcbiAgc3ByZWFkOiBudW1iZXJcbik6IENoZXNzaW1hbHNNb3ZlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNjb3JlZC5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHBvb2xTaXplID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHNjb3JlZC5sZW5ndGggKiBzcHJlYWQpKTtcbiAgY29uc3QgcG9vbCA9IHNjb3JlZC5zbGljZSgwLCBwb29sU2l6ZSk7XG4gIGNvbnN0IHRvcFNjb3JlID0gcG9vbFswXT8uc2NvcmUgPz8gMDtcbiAgY29uc3Qgd2VpZ2h0ZWQgPSBwb29sLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZSA9IE1hdGgubWF4KDAsIGl0ZW0uc2NvcmUgLSB0b3BTY29yZSArIDEyMDApO1xuICAgIGNvbnN0IHdlaWdodCA9IE1hdGgubWF4KDEsIHJlbGF0aXZlIC8gMTIwICsgKHBvb2wubGVuZ3RoIC0gaW5kZXgpICogMik7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSwgd2VpZ2h0IH07XG4gIH0pO1xuICBjb25zdCB0b3RhbFdlaWdodCA9IHdlaWdodGVkLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHRvdGFsICsgaXRlbS53ZWlnaHQsIDApO1xuICBsZXQgY3Vyc29yID0gTWF0aC5yYW5kb20oKSAqIHRvdGFsV2VpZ2h0O1xuICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2VpZ2h0ZWQpIHtcbiAgICBjdXJzb3IgLT0gaXRlbS53ZWlnaHQ7XG4gICAgaWYgKGN1cnNvciA8PSAwKSByZXR1cm4gaXRlbS5tb3ZlO1xuICB9XG4gIHJldHVybiBwb29sWzBdPy5tb3ZlO1xufVxuXG5mdW5jdGlvbiBnZXRJbW1lZGlhdGVXaW5uaW5nTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlLCBjb2xvcikuZmlsdGVyKFxuICAgIG1vdmUgPT4gbW92ZS5raW5kID09PSAnYmFzaWMnICYmIGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgY29sb3IsIG1vdmUudG8pXG4gICk7XG59XG5cbmZ1bmN0aW9uIHdvdWxkVW5sb2NrUG93ZXIoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uXG4pOiBib29sZWFuIHtcbiAgaWYgKHN0YXRlLnBsYXllcnNbY29sb3JdLnBvd2VyVW5sb2NrZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xufVxuXG5mdW5jdGlvbiBpc1NxdWFyZVZ1bG5lcmFibGVBZnRlck1vdmUoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgaWYgKGFmdGVyTW92ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoYWZ0ZXJNb3ZlKS5zb21lKFxuICAgICAgZW5lbXlNb3ZlID0+IHNhbWVQb3NpdGlvbihlbmVteU1vdmUudG8sIG1vdmUudG8pICYmICEhZW5lbXlNb3ZlLmNhcHR1cmVzUGllY2VJZFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsOiBDaGVzc2ltYWxzQW5pbWFsVHlwZSk6IENoZXNzaW1hbHNQb3NpdGlvbltdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2VhZ2xlJykge1xuICAgIHJldHVybiBbXG4gICAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgaWYgKGFuaW1hbCA9PT0gJ2J1bGwnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDAsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMCB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgeyByb3c6IDAsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2NrcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHBsYXllcnM6IHtcbiAgICAgIHdoaXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMud2hpdGUsXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy53aGl0ZS5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ3doaXRlJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnd2hpdGUnKSxcbiAgICAgIH0sXG4gICAgICBibGFjazoge1xuICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzLmJsYWNrLFxuICAgICAgICBwb3dlclVubG9ja2VkOlxuICAgICAgICAgIHN0YXRlLnBsYXllcnMuYmxhY2sucG93ZXJVbmxvY2tlZCB8fFxuICAgICAgICAgIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGUsICdibGFjaycpIHx8XG4gICAgICAgICAgaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZSwgJ2JsYWNrJyksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUocGllY2UgPT4ge1xuICAgIGlmIChwaWVjZS5jb2xvciAhPT0gY29sb3IgfHwgcGllY2UuY2FwdHVyZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwaWVjZS5wb3NpdGlvbi5yb3cgPD0gY2VudGVyVG9wIDogcGllY2UucG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhc0VuZW15RW50ZXJlZEhvbWUoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIGNvbnN0IGVuZW15ID0gb3RoZXJDb2xvcihjb2xvcik7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUocGllY2UgPT4ge1xuICAgIGlmIChwaWVjZS5jb2xvciAhPT0gZW5lbXkgfHwgcGllY2UuY2FwdHVyZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tIDogcGllY2UucG9zaXRpb24ucm93IDw9IGNlbnRlclRvcDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvbW90aW9uUm93KFxuICBib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb25cbik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwb3NpdGlvbi5yb3cgPT09IDAgOiBwb3NpdGlvbi5yb3cgPT09IGJvYXJkU2l6ZSAtIDE7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlQm9hcmQoYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplLCBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcG9zaXRpb24ucm93ID49IDAgJiYgcG9zaXRpb24ucm93IDwgYm9hcmRTaXplICYmIHBvc2l0aW9uLmNvbCA+PSAwICYmIHBvc2l0aW9uLmNvbCA8IGJvYXJkU2l6ZVxuICApO1xufVxuXG5mdW5jdGlvbiBzYW1lUG9zaXRpb24oYTogQ2hlc3NpbWFsc1Bvc2l0aW9uLCBiOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGEucm93ID09PSBiLnJvdyAmJiBhLmNvbCA9PT0gYi5jb2w7XG59XG5cbmZ1bmN0aW9uIG90aGVyQ29sb3IoY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IENoZXNzaW1hbHNQbGF5ZXJDb2xvciB7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/ICdibGFjaycgOiAnd2hpdGUnO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhbElkKCk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9jYWwtJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA4KX1gO1xufVxuIl19