shufflecom-calculations 3.3.13 → 3.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/games/coinflip/coinflip-classic-progressive.d.ts +42 -0
- package/lib/games/coinflip/coinflip-classic-progressive.js +65 -0
- package/lib/games/coinflip/coinflip-classic-progressive.js.map +1 -0
- package/lib/games/coinflip/coinflip-classic.d.ts +18 -0
- package/lib/games/coinflip/coinflip-classic.js +25 -0
- package/lib/games/coinflip/coinflip-classic.js.map +1 -0
- package/lib/games/coinflip/coinflip-rules.d.ts +20 -0
- package/lib/games/coinflip/coinflip-rules.js +130 -0
- package/lib/games/coinflip/coinflip-rules.js.map +1 -0
- package/lib/games/coinflip/coinflip-target.d.ts +22 -0
- package/lib/games/coinflip/coinflip-target.js +28 -0
- package/lib/games/coinflip/coinflip-target.js.map +1 -0
- package/lib/games/coinflip/constants.d.ts +5 -0
- package/lib/games/coinflip/constants.js +10 -0
- package/lib/games/coinflip/constants.js.map +1 -0
- package/lib/games/fixed-rng.d.ts +15 -0
- package/lib/games/fixed-rng.js +24 -0
- package/lib/games/fixed-rng.js.map +1 -0
- package/lib/games/random-number-generator.interface.d.ts +12 -0
- package/lib/games/random-number-generator.interface.js +3 -0
- package/lib/games/random-number-generator.interface.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/chain-currency-display.js +4 -2
- package/lib/utils/chain-currency-display.js.map +1 -1
- package/package.json +2 -2
- package/src/games/coinflip/coinflip-classic-progressive.spec.ts +251 -0
- package/src/games/coinflip/coinflip-classic-progressive.ts +108 -0
- package/src/games/coinflip/coinflip-classic.spec.ts +46 -0
- package/src/games/coinflip/coinflip-classic.ts +37 -0
- package/src/games/coinflip/coinflip-ev.spec.ts +60 -0
- package/src/games/coinflip/coinflip-rules.spec.ts +262 -0
- package/src/games/coinflip/coinflip-rules.ts +145 -0
- package/src/games/coinflip/coinflip-target.spec.ts +73 -0
- package/src/games/coinflip/coinflip-target.ts +44 -0
- package/src/games/coinflip/constants.ts +6 -0
- package/src/games/fixed-rng.ts +25 -0
- package/src/games/random-number-generator.interface.ts +4 -0
- package/src/index.ts +5 -0
- package/src/utils/chain-currency-display.ts +4 -2
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { RandomNumberGenerator } from '../random-number-generator.interface';
|
|
3
|
+
import { CoinSide } from './constants';
|
|
4
|
+
export interface CoinflipProgressiveStartAction {
|
|
5
|
+
phase: 'START';
|
|
6
|
+
}
|
|
7
|
+
export interface CoinflipProgressiveCoinSelectionAction {
|
|
8
|
+
phase: 'COIN_SELECTION';
|
|
9
|
+
selectedSide: CoinSide;
|
|
10
|
+
flipResult: CoinSide;
|
|
11
|
+
multiplier: BigNumber;
|
|
12
|
+
}
|
|
13
|
+
export interface CoinflipProgressiveCashoutAction {
|
|
14
|
+
phase: 'CASHOUT';
|
|
15
|
+
multiplier: BigNumber;
|
|
16
|
+
}
|
|
17
|
+
export type CoinflipClassicProgressiveGameAction = CoinflipProgressiveStartAction | CoinflipProgressiveCoinSelectionAction | CoinflipProgressiveCashoutAction;
|
|
18
|
+
export interface CoinflipClassicProgressiveNextResult {
|
|
19
|
+
multiplier: BigNumber;
|
|
20
|
+
gameAction: CoinflipProgressiveCoinSelectionAction;
|
|
21
|
+
isWin: boolean;
|
|
22
|
+
isComplete: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface CoinflipClassicProgressiveGameResult {
|
|
25
|
+
multiplier: BigNumber;
|
|
26
|
+
gameAction: CoinflipProgressiveCashoutAction;
|
|
27
|
+
}
|
|
28
|
+
export interface CoinflipClassicProgressiveAutoBetResult {
|
|
29
|
+
multiplier: BigNumber;
|
|
30
|
+
selectedSides: CoinSide[];
|
|
31
|
+
flipResults: CoinSide[];
|
|
32
|
+
}
|
|
33
|
+
export declare class CoinflipClassicProgressive {
|
|
34
|
+
private readonly flipsRevealed;
|
|
35
|
+
private constructor();
|
|
36
|
+
static createAction(): CoinflipProgressiveStartAction;
|
|
37
|
+
static fromActions(gameActions: CoinflipClassicProgressiveGameAction[]): CoinflipClassicProgressive;
|
|
38
|
+
canCashout(): boolean;
|
|
39
|
+
next(selectedSide: CoinSide, generator: RandomNumberGenerator, edge: number): CoinflipClassicProgressiveNextResult;
|
|
40
|
+
static autobet(selectedSides: CoinSide[], generator: RandomNumberGenerator, edge: number): CoinflipClassicProgressiveAutoBetResult;
|
|
41
|
+
cashout(edge: number): CoinflipClassicProgressiveGameResult;
|
|
42
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CoinflipClassicProgressive = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const coinflip_rules_1 = require("./coinflip-rules");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
class CoinflipClassicProgressive {
|
|
11
|
+
constructor(flipsRevealed) {
|
|
12
|
+
this.flipsRevealed = flipsRevealed;
|
|
13
|
+
}
|
|
14
|
+
static createAction() {
|
|
15
|
+
return { phase: 'START' };
|
|
16
|
+
}
|
|
17
|
+
static fromActions(gameActions) {
|
|
18
|
+
if (gameActions.length === 0) {
|
|
19
|
+
return new CoinflipClassicProgressive(0);
|
|
20
|
+
}
|
|
21
|
+
const flipsRevealed = coinflip_rules_1.CoinflipRules.validateActiveProgressiveClassicGame(gameActions);
|
|
22
|
+
return new CoinflipClassicProgressive(flipsRevealed);
|
|
23
|
+
}
|
|
24
|
+
canCashout() {
|
|
25
|
+
return this.flipsRevealed > 0;
|
|
26
|
+
}
|
|
27
|
+
next(selectedSide, generator, edge) {
|
|
28
|
+
const newFlip = coinflip_rules_1.CoinflipRules.getFlipResultAtPosition(generator, this.flipsRevealed + 1);
|
|
29
|
+
const isWin = coinflip_rules_1.CoinflipRules.isFlipWin(selectedSide, newFlip);
|
|
30
|
+
const revealedAfter = isWin ? this.flipsRevealed + 1 : this.flipsRevealed;
|
|
31
|
+
const isComplete = !isWin || revealedAfter >= constants_1.MAX_FLIPS;
|
|
32
|
+
const multiplier = isWin ? coinflip_rules_1.CoinflipRules.calculateClassicMultiplier(revealedAfter, edge) : (0, bignumber_js_1.default)(0);
|
|
33
|
+
return {
|
|
34
|
+
multiplier,
|
|
35
|
+
gameAction: {
|
|
36
|
+
phase: 'COIN_SELECTION',
|
|
37
|
+
selectedSide,
|
|
38
|
+
flipResult: newFlip,
|
|
39
|
+
multiplier,
|
|
40
|
+
},
|
|
41
|
+
isWin,
|
|
42
|
+
isComplete,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
static autobet(selectedSides, generator, edge) {
|
|
46
|
+
const pairs = selectedSides.map((selectedSide, i) => {
|
|
47
|
+
return { selectedSide, result: coinflip_rules_1.CoinflipRules.getFlipResultAtPosition(generator, i + 1) };
|
|
48
|
+
});
|
|
49
|
+
const won = coinflip_rules_1.CoinflipRules.countSuccessfulFlips(pairs) === selectedSides.length;
|
|
50
|
+
const multiplier = won ? coinflip_rules_1.CoinflipRules.calculateClassicMultiplier(selectedSides.length, edge) : (0, bignumber_js_1.default)(0);
|
|
51
|
+
return { multiplier, selectedSides, flipResults: pairs.map(p => p.result) };
|
|
52
|
+
}
|
|
53
|
+
cashout(edge) {
|
|
54
|
+
if (!this.canCashout()) {
|
|
55
|
+
throw new Error('cashout called with no flips revealed');
|
|
56
|
+
}
|
|
57
|
+
const multiplier = coinflip_rules_1.CoinflipRules.calculateClassicMultiplier(this.flipsRevealed, edge);
|
|
58
|
+
return {
|
|
59
|
+
multiplier,
|
|
60
|
+
gameAction: { phase: 'CASHOUT', multiplier },
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.CoinflipClassicProgressive = CoinflipClassicProgressive;
|
|
65
|
+
//# sourceMappingURL=coinflip-classic-progressive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coinflip-classic-progressive.js","sourceRoot":"","sources":["../../../src/games/coinflip/coinflip-classic-progressive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { RandomNumberGenerator } from '../random-number-generator.interface';
|
|
3
|
+
import { CoinSide } from './constants';
|
|
4
|
+
export interface CoinflipClassicConfig {
|
|
5
|
+
selectedSide: CoinSide;
|
|
6
|
+
}
|
|
7
|
+
export interface CoinflipClassicAction {
|
|
8
|
+
selectedSide: CoinSide;
|
|
9
|
+
flipResult: CoinSide;
|
|
10
|
+
multiplier: BigNumber;
|
|
11
|
+
}
|
|
12
|
+
export interface CoinflipClassicGameResult {
|
|
13
|
+
multiplier: BigNumber;
|
|
14
|
+
action: CoinflipClassicAction;
|
|
15
|
+
}
|
|
16
|
+
export declare class CoinflipClassic {
|
|
17
|
+
static resolve(config: CoinflipClassicConfig, generator: RandomNumberGenerator, edge: number): CoinflipClassicGameResult;
|
|
18
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CoinflipClassic = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const coinflip_rules_1 = require("./coinflip-rules");
|
|
9
|
+
class CoinflipClassic {
|
|
10
|
+
static resolve(config, generator, edge) {
|
|
11
|
+
const flip = coinflip_rules_1.CoinflipRules.getFlipResultAtPosition(generator, 1);
|
|
12
|
+
const isWin = coinflip_rules_1.CoinflipRules.isFlipWin(config.selectedSide, flip);
|
|
13
|
+
const multiplier = isWin ? coinflip_rules_1.CoinflipRules.calculateClassicMultiplier(1, edge) : (0, bignumber_js_1.default)(0);
|
|
14
|
+
return {
|
|
15
|
+
multiplier,
|
|
16
|
+
action: {
|
|
17
|
+
selectedSide: config.selectedSide,
|
|
18
|
+
flipResult: flip,
|
|
19
|
+
multiplier,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.CoinflipClassic = CoinflipClassic;
|
|
25
|
+
//# sourceMappingURL=coinflip-classic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coinflip-classic.js","sourceRoot":"","sources":["../../../src/games/coinflip/coinflip-classic.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,qDAAiD;AAkBjD,MAAa,eAAe;IACnB,MAAM,CAAC,OAAO,CAAC,MAA6B,EAAE,SAAgC,EAAE,IAAY;QACjG,MAAM,IAAI,GAAG,8BAAa,CAAC,uBAAuB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,8BAAa,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,8BAAa,CAAC,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;QAE5F,OAAO;YACL,UAAU;YACV,MAAM,EAAE;gBACN,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,UAAU,EAAE,IAAI;gBAChB,UAAU;aACX;SACF,CAAC;IACJ,CAAC;CACF;AAhBD,0CAgBC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { RandomNumberGenerator } from '../random-number-generator.interface';
|
|
3
|
+
import type { CoinflipClassicProgressiveGameAction } from './coinflip-classic-progressive';
|
|
4
|
+
import { CoinSide } from './constants';
|
|
5
|
+
export declare const MIN_SUCCESSES_BY_FLIPS: Readonly<Record<number, number>>;
|
|
6
|
+
export declare class CoinflipRules {
|
|
7
|
+
static getFlipResults(generator: RandomNumberGenerator, count: number): CoinSide[];
|
|
8
|
+
static isFlipWin(selectedSide: CoinSide, result: CoinSide): boolean;
|
|
9
|
+
static getFlipResultAtPosition(generator: RandomNumberGenerator, position: number): CoinSide;
|
|
10
|
+
static countSuccessfulFlips(flips: {
|
|
11
|
+
result: CoinSide;
|
|
12
|
+
selectedSide: CoinSide;
|
|
13
|
+
}[]): number;
|
|
14
|
+
static calculateClassicWinChance(successfulFlips: number): BigNumber;
|
|
15
|
+
static calculateClassicMultiplier(successfulFlips: number, edgeBps: number): BigNumber;
|
|
16
|
+
static calculateTargetWinChance(flips: number, minSuccesses: number): BigNumber;
|
|
17
|
+
static calculateTargetMultiplier(flips: number, minSuccesses: number, edgeBps: number): BigNumber;
|
|
18
|
+
static isValidTargetConfig(totalFlips: number, minSuccesses: number, edgeBps: number): boolean;
|
|
19
|
+
static validateActiveProgressiveClassicGame(gameActions: CoinflipClassicProgressiveGameAction[]): number;
|
|
20
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CoinflipRules = exports.MIN_SUCCESSES_BY_FLIPS = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const edge_1 = require("../../utils/edge");
|
|
9
|
+
const ncr_1 = require("../../utils/ncr");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
exports.MIN_SUCCESSES_BY_FLIPS = {
|
|
12
|
+
1: 1,
|
|
13
|
+
2: 1,
|
|
14
|
+
3: 2,
|
|
15
|
+
4: 2,
|
|
16
|
+
5: 2,
|
|
17
|
+
6: 3,
|
|
18
|
+
7: 3,
|
|
19
|
+
8: 4,
|
|
20
|
+
9: 4,
|
|
21
|
+
10: 4,
|
|
22
|
+
11: 5,
|
|
23
|
+
12: 5,
|
|
24
|
+
13: 6,
|
|
25
|
+
14: 6,
|
|
26
|
+
15: 6,
|
|
27
|
+
16: 7,
|
|
28
|
+
17: 7,
|
|
29
|
+
18: 8,
|
|
30
|
+
19: 8,
|
|
31
|
+
20: 9,
|
|
32
|
+
};
|
|
33
|
+
function rngValueToCoinSide(n) {
|
|
34
|
+
if (n === 0)
|
|
35
|
+
return constants_1.CoinSide.HEADS;
|
|
36
|
+
if (n === 1)
|
|
37
|
+
return constants_1.CoinSide.TAILS;
|
|
38
|
+
throw new Error(`Random number generator returned ${n}, expected 0 or 1`);
|
|
39
|
+
}
|
|
40
|
+
class CoinflipRules {
|
|
41
|
+
static getFlipResults(generator, count) {
|
|
42
|
+
if (count < 1 || count > constants_1.MAX_FLIPS) {
|
|
43
|
+
throw new Error(`Flip count must be between 1 and ${constants_1.MAX_FLIPS}, got ${count}`);
|
|
44
|
+
}
|
|
45
|
+
const randomNumbers = generator.getRandomIntsWithReplacement({ min: 0, max: 1, count });
|
|
46
|
+
if (randomNumbers.length !== count) {
|
|
47
|
+
throw new Error(`Random number generator returned ${randomNumbers.length} values, expected ${count}`);
|
|
48
|
+
}
|
|
49
|
+
return randomNumbers.map(rngValueToCoinSide);
|
|
50
|
+
}
|
|
51
|
+
static isFlipWin(selectedSide, result) {
|
|
52
|
+
return selectedSide === result;
|
|
53
|
+
}
|
|
54
|
+
static getFlipResultAtPosition(generator, position) {
|
|
55
|
+
const flips = CoinflipRules.getFlipResults(generator, position);
|
|
56
|
+
return flips[flips.length - 1];
|
|
57
|
+
}
|
|
58
|
+
static countSuccessfulFlips(flips) {
|
|
59
|
+
return flips.filter(f => CoinflipRules.isFlipWin(f.selectedSide, f.result)).length;
|
|
60
|
+
}
|
|
61
|
+
static calculateClassicWinChance(successfulFlips) {
|
|
62
|
+
return (0, bignumber_js_1.default)(0.5).pow(successfulFlips);
|
|
63
|
+
}
|
|
64
|
+
static calculateClassicMultiplier(successfulFlips, edgeBps) {
|
|
65
|
+
if (successfulFlips < 1 || successfulFlips > constants_1.MAX_FLIPS) {
|
|
66
|
+
throw new Error(`Successful flips must be between 1 and ${constants_1.MAX_FLIPS}, got ${successfulFlips}`);
|
|
67
|
+
}
|
|
68
|
+
return (0, edge_1.calculateEdgeMultiplier)(edgeBps).dividedBy(CoinflipRules.calculateClassicWinChance(successfulFlips));
|
|
69
|
+
}
|
|
70
|
+
static calculateTargetWinChance(flips, minSuccesses) {
|
|
71
|
+
const fixedOutcomeProbability = (0, bignumber_js_1.default)(0.5).pow(flips);
|
|
72
|
+
let cumulativeProbability = (0, bignumber_js_1.default)(0);
|
|
73
|
+
for (let k = minSuccesses; k <= flips; k++) {
|
|
74
|
+
cumulativeProbability = cumulativeProbability.plus((0, ncr_1.nCr)(flips, k).multipliedBy(fixedOutcomeProbability));
|
|
75
|
+
}
|
|
76
|
+
return cumulativeProbability;
|
|
77
|
+
}
|
|
78
|
+
static calculateTargetMultiplier(flips, minSuccesses, edgeBps) {
|
|
79
|
+
if (flips < 1 || flips > constants_1.MAX_FLIPS) {
|
|
80
|
+
throw new Error(`Flips must be between 1 and ${constants_1.MAX_FLIPS}, got ${flips}`);
|
|
81
|
+
}
|
|
82
|
+
if (minSuccesses < 1 || minSuccesses > flips) {
|
|
83
|
+
throw new Error(`Min successes must be between 1 and ${flips}, got ${minSuccesses}`);
|
|
84
|
+
}
|
|
85
|
+
return (0, edge_1.calculateEdgeMultiplier)(edgeBps).dividedBy(CoinflipRules.calculateTargetWinChance(flips, minSuccesses));
|
|
86
|
+
}
|
|
87
|
+
static isValidTargetConfig(totalFlips, minSuccesses, edgeBps) {
|
|
88
|
+
if (totalFlips < 1 || totalFlips > constants_1.MAX_FLIPS) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const tableMin = exports.MIN_SUCCESSES_BY_FLIPS[totalFlips];
|
|
92
|
+
if (tableMin === undefined) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (minSuccesses < tableMin || minSuccesses > totalFlips) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
static validateActiveProgressiveClassicGame(gameActions) {
|
|
101
|
+
if (gameActions.length === 0) {
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
if (gameActions[0].phase !== 'START') {
|
|
105
|
+
throw new Error('First action must be START');
|
|
106
|
+
}
|
|
107
|
+
let flipsRevealed = 0;
|
|
108
|
+
for (let i = 1; i < gameActions.length; i++) {
|
|
109
|
+
const action = gameActions[i];
|
|
110
|
+
switch (action.phase) {
|
|
111
|
+
case 'START':
|
|
112
|
+
throw new Error('START action can only appear as the first action');
|
|
113
|
+
case 'COIN_SELECTION':
|
|
114
|
+
if (action.selectedSide !== action.flipResult) {
|
|
115
|
+
throw new Error('COIN_SELECTION must have matching flipResult and selectedSide');
|
|
116
|
+
}
|
|
117
|
+
flipsRevealed++;
|
|
118
|
+
if (flipsRevealed > constants_1.MAX_FLIPS) {
|
|
119
|
+
throw new Error(`Reconstructed flipsRevealed (${flipsRevealed}) exceeds MAX_FLIPS (${constants_1.MAX_FLIPS})`);
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
case 'CASHOUT':
|
|
123
|
+
throw new Error('An active game cannot have a CASHOUT action');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return flipsRevealed;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.CoinflipRules = CoinflipRules;
|
|
130
|
+
//# sourceMappingURL=coinflip-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coinflip-rules.js","sourceRoot":"","sources":["../../../src/games/coinflip/coinflip-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { RandomNumberGenerator } from '../random-number-generator.interface';
|
|
3
|
+
import { CoinSide } from './constants';
|
|
4
|
+
export interface CoinflipTargetConfig {
|
|
5
|
+
selectedSide: CoinSide;
|
|
6
|
+
totalFlips: number;
|
|
7
|
+
minSuccesses: number;
|
|
8
|
+
}
|
|
9
|
+
export interface CoinflipTargetAction {
|
|
10
|
+
selectedSide: CoinSide;
|
|
11
|
+
flipResults: CoinSide[];
|
|
12
|
+
multiplier: BigNumber;
|
|
13
|
+
totalFlips: number;
|
|
14
|
+
minSuccesses: number;
|
|
15
|
+
}
|
|
16
|
+
export interface CoinflipTargetGameResult {
|
|
17
|
+
multiplier: BigNumber;
|
|
18
|
+
action: CoinflipTargetAction;
|
|
19
|
+
}
|
|
20
|
+
export declare class CoinflipTarget {
|
|
21
|
+
static resolve(config: CoinflipTargetConfig, generator: RandomNumberGenerator, edge: number): CoinflipTargetGameResult;
|
|
22
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CoinflipTarget = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const coinflip_rules_1 = require("./coinflip-rules");
|
|
9
|
+
class CoinflipTarget {
|
|
10
|
+
static resolve(config, generator, edge) {
|
|
11
|
+
const flips = coinflip_rules_1.CoinflipRules.getFlipResults(generator, config.totalFlips);
|
|
12
|
+
const successfulFlips = coinflip_rules_1.CoinflipRules.countSuccessfulFlips(flips.map(result => ({ result, selectedSide: config.selectedSide })));
|
|
13
|
+
const isLoss = successfulFlips < config.minSuccesses;
|
|
14
|
+
const multiplier = isLoss ? (0, bignumber_js_1.default)(0) : coinflip_rules_1.CoinflipRules.calculateTargetMultiplier(config.totalFlips, config.minSuccesses, edge);
|
|
15
|
+
return {
|
|
16
|
+
multiplier,
|
|
17
|
+
action: {
|
|
18
|
+
selectedSide: config.selectedSide,
|
|
19
|
+
flipResults: flips,
|
|
20
|
+
multiplier,
|
|
21
|
+
totalFlips: config.totalFlips,
|
|
22
|
+
minSuccesses: config.minSuccesses,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.CoinflipTarget = CoinflipTarget;
|
|
28
|
+
//# sourceMappingURL=coinflip-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coinflip-target.js","sourceRoot":"","sources":["../../../src/games/coinflip/coinflip-target.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,qDAAiD;AAsBjD,MAAa,cAAc;IAClB,MAAM,CAAC,OAAO,CAAC,MAA4B,EAAE,SAAgC,EAAE,IAAY;QAChG,MAAM,KAAK,GAAG,8BAAa,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,8BAAa,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACjI,MAAM,MAAM,GAAG,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC;QAErD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8BAAa,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAEjI,OAAO;YACL,UAAU;YACV,MAAM,EAAE;gBACN,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,WAAW,EAAE,KAAK;gBAClB,UAAU;gBACV,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC;SACF,CAAC;IACJ,CAAC;CACF;AAnBD,wCAmBC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoinSide = exports.MAX_FLIPS = void 0;
|
|
4
|
+
exports.MAX_FLIPS = 20;
|
|
5
|
+
var CoinSide;
|
|
6
|
+
(function (CoinSide) {
|
|
7
|
+
CoinSide["HEADS"] = "HEADS";
|
|
8
|
+
CoinSide["TAILS"] = "TAILS";
|
|
9
|
+
})(CoinSide || (exports.CoinSide = CoinSide = {}));
|
|
10
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/games/coinflip/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,EAAE,CAAC;AAE5B,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAHW,QAAQ,wBAAR,QAAQ,QAGnB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RandomNumberGenerator } from './random-number-generator.interface';
|
|
2
|
+
export declare class FixedSequenceRng implements RandomNumberGenerator {
|
|
3
|
+
private readonly values;
|
|
4
|
+
constructor(values: number[]);
|
|
5
|
+
getRandomIntsWithReplacement({ count }: {
|
|
6
|
+
min: number;
|
|
7
|
+
max: number;
|
|
8
|
+
count: number;
|
|
9
|
+
}): number[];
|
|
10
|
+
getRandomIntsWithoutReplacement({ count }: {
|
|
11
|
+
min: number;
|
|
12
|
+
max: number;
|
|
13
|
+
count: number;
|
|
14
|
+
}): number[];
|
|
15
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FixedSequenceRng = void 0;
|
|
4
|
+
class FixedSequenceRng {
|
|
5
|
+
constructor(values) {
|
|
6
|
+
this.values = values;
|
|
7
|
+
}
|
|
8
|
+
getRandomIntsWithReplacement({ count }) {
|
|
9
|
+
const values = this.values.slice(0, count);
|
|
10
|
+
if (values.length !== count) {
|
|
11
|
+
throw new Error('Insufficient values provided in constructor');
|
|
12
|
+
}
|
|
13
|
+
return values;
|
|
14
|
+
}
|
|
15
|
+
getRandomIntsWithoutReplacement({ count }) {
|
|
16
|
+
const values = this.values.slice(0, count);
|
|
17
|
+
if (values.length !== count) {
|
|
18
|
+
throw new Error('Insufficient values provided in constructor');
|
|
19
|
+
}
|
|
20
|
+
return values;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.FixedSequenceRng = FixedSequenceRng;
|
|
24
|
+
//# sourceMappingURL=fixed-rng.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixed-rng.js","sourceRoot":"","sources":["../../src/games/fixed-rng.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IAC3B,YAA6B,MAAgB;QAAhB,WAAM,GAAN,MAAM,CAAU;IAAG,CAAC;IAEjD,4BAA4B,CAAC,EAAE,KAAK,EAA+C;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+BAA+B,CAAC,EAAE,KAAK,EAA+C;QACpF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAtBD,4CAsBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-number-generator.interface.js","sourceRoot":"","sources":["../../src/games/random-number-generator.interface.ts"],"names":[],"mappings":""}
|
package/lib/index.d.ts
CHANGED
|
@@ -28,3 +28,8 @@ export { formatSelectionName } from './sports/sports-name';
|
|
|
28
28
|
export { SportsContentWithFixturesInfo } from './sports/sports-content-fixture.types';
|
|
29
29
|
export { SportsProviderMaxBet, BetradarOverrideLimitType, BETRADAR_OVERRIDE_LIMIT_TO_MAX_BET } from './sports/override-limit-max-bet';
|
|
30
30
|
export { Blitz, BlitzResult, BLITZ_MIN_PICKS, BLITZ_MAX_PICKS } from './games/blitz';
|
|
31
|
+
export { CoinSide, MAX_FLIPS } from './games/coinflip/constants';
|
|
32
|
+
export * from './games/coinflip/coinflip-rules';
|
|
33
|
+
export * from './games/coinflip/coinflip-classic';
|
|
34
|
+
export * from './games/coinflip/coinflip-classic-progressive';
|
|
35
|
+
export * from './games/coinflip/coinflip-target';
|
package/lib/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.TOWER_DIFFICULTY_TO_CONFIG = exports.TowerDifficulty = exports.Tower = exports.ChickenDifficulty = exports.Chicken = exports.BaccaratOutcome = exports.BaccaratBetType = exports.Baccarat = exports.HandOutcome = exports.twentyOnePlusThreePayout = exports.perfectPairPayout = exports.TwentyOnePlusThreeType = exports.PerfectPairType = exports.InsuranceStatus = exports.Blackjack = exports.BlackjackAction = exports.AirdropCalculator = exports.suitsArr = exports.Suits = exports.CardGames = exports.HiloGuess = exports.Hilo = exports.KenoRiskLevel = exports.Keno = exports.Limbo = exports.SLIDE_WHEEL_SIZE = exports.SLIDE_BLOCK_TIME_BEFORE_RUN = exports.SLIDE_SETTLE_PAUSE_DURATION = exports.SLIDE_SPIN_DURATION = exports.SLIDE_BETTING_DURATION = exports.SLIDE_MAX_TARGET_MULTIPLIER = exports.SLIDE_MIN_TARGET_MULTIPLIER = exports.Slide = exports.Crash = exports.PlinkoRiskLevel = exports.Plinko = exports.Mines = exports.Roulette = exports.DiceDirection = exports.Dice = exports.convertUuidToBs58 = exports.convertBs58ToUuid = exports.deriveBonusIssuances = exports.VipBonusIssuanceStatus = exports.DatesCalculator = exports.ChatMessageType = exports.getChatMessageLength = exports.CHAT_CHAR_LIMIT = exports.calculateEdgeMultiplier = exports.hexToBytes = void 0;
|
|
18
|
-
exports.BLITZ_MAX_PICKS = exports.BLITZ_MIN_PICKS = exports.Blitz = exports.BETRADAR_OVERRIDE_LIMIT_TO_MAX_BET = exports.BetradarOverrideLimitType = exports.SportsProviderMaxBet = exports.SportsContentWithFixturesInfo = exports.formatSelectionName = exports.WHEEL_SEGMENTS_TO_NUMBER = exports.WHEEL_MULTIPLIERS = exports.WheelSegments = exports.WheelRiskLevel = exports.Wheel = exports.TOWER_TOTAL_ROWS = void 0;
|
|
18
|
+
exports.MAX_FLIPS = exports.CoinSide = exports.BLITZ_MAX_PICKS = exports.BLITZ_MIN_PICKS = exports.Blitz = exports.BETRADAR_OVERRIDE_LIMIT_TO_MAX_BET = exports.BetradarOverrideLimitType = exports.SportsProviderMaxBet = exports.SportsContentWithFixturesInfo = exports.formatSelectionName = exports.WHEEL_SEGMENTS_TO_NUMBER = exports.WHEEL_MULTIPLIERS = exports.WheelSegments = exports.WheelRiskLevel = exports.Wheel = exports.TOWER_TOTAL_ROWS = void 0;
|
|
19
19
|
__exportStar(require("./regex"), exports);
|
|
20
20
|
var hex_to_bytes_1 = require("./utils/hex-to-bytes");
|
|
21
21
|
Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return hex_to_bytes_1.hexToBytes; } });
|
|
@@ -109,4 +109,11 @@ var blitz_1 = require("./games/blitz");
|
|
|
109
109
|
Object.defineProperty(exports, "Blitz", { enumerable: true, get: function () { return blitz_1.Blitz; } });
|
|
110
110
|
Object.defineProperty(exports, "BLITZ_MIN_PICKS", { enumerable: true, get: function () { return blitz_1.BLITZ_MIN_PICKS; } });
|
|
111
111
|
Object.defineProperty(exports, "BLITZ_MAX_PICKS", { enumerable: true, get: function () { return blitz_1.BLITZ_MAX_PICKS; } });
|
|
112
|
+
var constants_1 = require("./games/coinflip/constants");
|
|
113
|
+
Object.defineProperty(exports, "CoinSide", { enumerable: true, get: function () { return constants_1.CoinSide; } });
|
|
114
|
+
Object.defineProperty(exports, "MAX_FLIPS", { enumerable: true, get: function () { return constants_1.MAX_FLIPS; } });
|
|
115
|
+
__exportStar(require("./games/coinflip/coinflip-rules"), exports);
|
|
116
|
+
__exportStar(require("./games/coinflip/coinflip-classic"), exports);
|
|
117
|
+
__exportStar(require("./games/coinflip/coinflip-classic-progressive"), exports);
|
|
118
|
+
__exportStar(require("./games/coinflip/coinflip-target"), exports);
|
|
112
119
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,0CAAwB;AAExB,qDAAkD;AAAzC,0GAAA,UAAU,OAAA;AACnB,qCAAuD;AAA9C,+GAAA,uBAAuB,OAAA;AAChC,qEAAqF;AAA5E,uHAAA,eAAe,OAAA;AAAE,4HAAA,oBAAoB,OAAA;AAC9C,+DAAyE;AAAhE,oHAAA,eAAe,OAAA;AACxB,6DAA2D;AAAlD,mHAAA,eAAe,OAAA;AACxB,yDAAgE;AAAvD,wHAAA,sBAAsB,OAAA;AAC/B,6DAAgE;AAAvD,wHAAA,oBAAoB,OAAA;AAC7B,yDAA8E;AAArE,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC7C,qCAAmD;AAA1C,4FAAA,IAAI,OAAA;AAAE,qGAAA,aAAa,OAAA;AAC5B,6CAA4C;AAAnC,oGAAA,QAAQ,OAAA;AACjB,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,yCAAyD;AAAhD,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAChC,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,uCASuB;AARrB,8FAAA,KAAK,OAAA;AACL,oHAAA,2BAA2B,OAAA;AAC3B,oHAAA,2BAA2B,OAAA;AAC3B,+GAAA,sBAAsB,OAAA;AACtB,4GAAA,mBAAmB,OAAA;AACnB,oHAAA,2BAA2B,OAAA;AAC3B,oHAAA,2BAA2B,OAAA;AAC3B,yGAAA,gBAAgB,OAAA;AAElB,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,qCAAmD;AAA1C,4FAAA,IAAI,OAAA;AAAE,qGAAA,aAAa,OAAA;AAC5B,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AAAE,iGAAA,SAAS,OAAA;AACxB,+CAAsF;AAA7E,sGAAA,SAAS,OAAA;AAAyB,kGAAA,KAAK,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAC1D,mEAAwF;AAA/E,uHAAA,iBAAiB,OAAA;AAC1B,+CAS2B;AARzB,4GAAA,eAAe,OAAA;AACf,sGAAA,SAAS,OAAA;AACT,4GAAA,eAAe,OAAA;AACf,4GAAA,eAAe,OAAA;AACf,mHAAA,sBAAsB,OAAA;AACtB,8GAAA,iBAAiB,OAAA;AACjB,qHAAA,wBAAwB,OAAA;AACxB,wGAAA,WAAW,OAAA;AAEb,6CAA8E;AAArE,oGAAA,QAAQ,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAEnD,2CAA6D;AAApD,kGAAA,OAAO,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AACnC,uCAAqG;AAA5F,8FAAA,KAAK,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,mHAAA,0BAA0B,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAC7E,uCAAkH;AAAzG,8FAAA,KAAK,OAAA;AAAE,uGAAA,cAAc,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AAAE,iHAAA,wBAAwB,OAAA;AAC1F,oDAA2D;AAAlD,kHAAA,mBAAmB,OAAA;AAC5B,sFAAsF;AAA7E,6IAAA,6BAA6B,OAAA;AACtC,0EAAsI;AAA7H,8HAAA,oBAAoB,OAAA;AAAE,mIAAA,yBAAyB,OAAA;AAAE,4IAAA,kCAAkC,OAAA;AAC5F,uCAAqF;AAA5E,8FAAA,KAAK,OAAA;AAAe,wGAAA,eAAe,OAAA;AAAE,wGAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,0CAAwB;AAExB,qDAAkD;AAAzC,0GAAA,UAAU,OAAA;AACnB,qCAAuD;AAA9C,+GAAA,uBAAuB,OAAA;AAChC,qEAAqF;AAA5E,uHAAA,eAAe,OAAA;AAAE,4HAAA,oBAAoB,OAAA;AAC9C,+DAAyE;AAAhE,oHAAA,eAAe,OAAA;AACxB,6DAA2D;AAAlD,mHAAA,eAAe,OAAA;AACxB,yDAAgE;AAAvD,wHAAA,sBAAsB,OAAA;AAC/B,6DAAgE;AAAvD,wHAAA,oBAAoB,OAAA;AAC7B,yDAA8E;AAArE,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC7C,qCAAmD;AAA1C,4FAAA,IAAI,OAAA;AAAE,qGAAA,aAAa,OAAA;AAC5B,6CAA4C;AAAnC,oGAAA,QAAQ,OAAA;AACjB,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,yCAAyD;AAAhD,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAChC,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,uCASuB;AARrB,8FAAA,KAAK,OAAA;AACL,oHAAA,2BAA2B,OAAA;AAC3B,oHAAA,2BAA2B,OAAA;AAC3B,+GAAA,sBAAsB,OAAA;AACtB,4GAAA,mBAAmB,OAAA;AACnB,oHAAA,2BAA2B,OAAA;AAC3B,oHAAA,2BAA2B,OAAA;AAC3B,yGAAA,gBAAgB,OAAA;AAElB,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,qCAAmD;AAA1C,4FAAA,IAAI,OAAA;AAAE,qGAAA,aAAa,OAAA;AAC5B,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AAAE,iGAAA,SAAS,OAAA;AACxB,+CAAsF;AAA7E,sGAAA,SAAS,OAAA;AAAyB,kGAAA,KAAK,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAC1D,mEAAwF;AAA/E,uHAAA,iBAAiB,OAAA;AAC1B,+CAS2B;AARzB,4GAAA,eAAe,OAAA;AACf,sGAAA,SAAS,OAAA;AACT,4GAAA,eAAe,OAAA;AACf,4GAAA,eAAe,OAAA;AACf,mHAAA,sBAAsB,OAAA;AACtB,8GAAA,iBAAiB,OAAA;AACjB,qHAAA,wBAAwB,OAAA;AACxB,wGAAA,WAAW,OAAA;AAEb,6CAA8E;AAArE,oGAAA,QAAQ,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAEnD,2CAA6D;AAApD,kGAAA,OAAO,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AACnC,uCAAqG;AAA5F,8FAAA,KAAK,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,mHAAA,0BAA0B,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAC7E,uCAAkH;AAAzG,8FAAA,KAAK,OAAA;AAAE,uGAAA,cAAc,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AAAE,iHAAA,wBAAwB,OAAA;AAC1F,oDAA2D;AAAlD,kHAAA,mBAAmB,OAAA;AAC5B,sFAAsF;AAA7E,6IAAA,6BAA6B,OAAA;AACtC,0EAAsI;AAA7H,8HAAA,oBAAoB,OAAA;AAAE,mIAAA,yBAAyB,OAAA;AAAE,4IAAA,kCAAkC,OAAA;AAC5F,uCAAqF;AAA5E,8FAAA,KAAK,OAAA;AAAe,wGAAA,eAAe,OAAA;AAAE,wGAAA,eAAe,OAAA;AAC7D,wDAAiE;AAAxD,qGAAA,QAAQ,OAAA;AAAE,sGAAA,SAAS,OAAA;AAC5B,kEAAgD;AAChD,oEAAkD;AAClD,gFAA8D;AAC9D,mEAAiD"}
|