@pokertools/engine 1.0.1 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +591 -445
- package/dist/.tsbuildinfo +1 -0
- package/dist/actions/betting.js +9 -11
- package/dist/actions/dealing.js +46 -20
- package/dist/actions/management.js +26 -5
- package/dist/actions/special.d.ts +18 -0
- package/dist/actions/special.js +20 -0
- package/dist/browser.d.ts +27 -0
- package/dist/browser.js +73 -0
- package/dist/engine/PokerEngine.d.ts +23 -2
- package/dist/engine/PokerEngine.js +54 -2
- package/dist/errors/ErrorCodes.d.ts +4 -35
- package/dist/errors/ErrorCodes.js +7 -41
- package/dist/errors/index.d.ts +0 -1
- package/dist/errors/index.js +1 -1
- package/dist/history/exporter.d.ts +1 -2
- package/dist/history/formats/json.d.ts +1 -1
- package/dist/history/formats/pokerstars.d.ts +1 -1
- package/dist/history/handHistoryBuilder.d.ts +1 -2
- package/dist/history/handHistoryBuilder.js +4 -1
- package/dist/index.d.ts +1 -1
- package/dist/rules/actionOrder.js +4 -4
- package/dist/rules/blinds.d.ts +2 -0
- package/dist/rules/blinds.js +27 -3
- package/dist/rules/headsUp.js +18 -0
- package/dist/rules/showdown.js +10 -0
- package/dist/utils/cardUtils.d.ts +2 -1
- package/dist/utils/cardUtils.js +2 -1
- package/dist/utils/invariants.js +4 -0
- package/dist/utils/positioning.js +2 -2
- package/dist/utils/serialization.d.ts +1 -0
- package/dist/utils/serialization.js +2 -0
- package/dist/utils/viewMasking.d.ts +2 -1
- package/dist/utils/viewMasking.js +9 -1
- package/package.json +33 -7
- package/dist/history/types.d.ts +0 -73
- package/dist/history/types.js +0 -5
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.es2020.full.d.ts","../../types/dist/Player.d.ts","../../types/dist/Pot.d.ts","../../types/dist/Config.d.ts","../../types/dist/Action.d.ts","../../types/dist/ActionWhitelist.d.ts","../../types/dist/GameState.d.ts","../../types/dist/PublicState.d.ts","../../types/dist/HandHistory.d.ts","../../../node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/zod/v4/core/registries.d.cts","../../../node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/zod/v4/core/util.d.cts","../../../node_modules/zod/v4/core/versions.d.cts","../../../node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/zod/v4/core/checks.d.cts","../../../node_modules/zod/v4/core/errors.d.cts","../../../node_modules/zod/v4/core/core.d.cts","../../../node_modules/zod/v4/core/parse.d.cts","../../../node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/zod/v4/locales/az.d.cts","../../../node_modules/zod/v4/locales/be.d.cts","../../../node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/zod/v4/locales/da.d.cts","../../../node_modules/zod/v4/locales/de.d.cts","../../../node_modules/zod/v4/locales/el.d.cts","../../../node_modules/zod/v4/locales/en.d.cts","../../../node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/zod/v4/locales/es.d.cts","../../../node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/zod/v4/locales/fr-CA.d.cts","../../../node_modules/zod/v4/locales/he.d.cts","../../../node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/zod/v4/locales/id.d.cts","../../../node_modules/zod/v4/locales/is.d.cts","../../../node_modules/zod/v4/locales/it.d.cts","../../../node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/zod/v4/locales/km.d.cts","../../../node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/zod/v4/locales/no.d.cts","../../../node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/zod/v4/locales/th.d.cts","../../../node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/zod/v4/locales/zh-CN.d.cts","../../../node_modules/zod/v4/locales/zh-TW.d.cts","../../../node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/zod/v4/locales/index.d.cts","../../../node_modules/zod/v4/core/doc.d.cts","../../../node_modules/zod/v4/core/api.d.cts","../../../node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/zod/v4/core/index.d.cts","../../../node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/zod/v4/classic/external.d.cts","../../../node_modules/zod/index.d.cts","../../types/dist/schemas.d.ts","../../types/dist/WebSocketMessages.d.ts","../../types/dist/ErrorCodes.d.ts","../../types/dist/api/common.d.ts","../../types/dist/api/auth.d.ts","../../types/dist/api/tables.d.ts","../../types/dist/index.d.ts","../src/errors/PokerEngineError.ts","../src/errors/ErrorCodes.ts","../src/errors/IllegalActionError.ts","../src/utils/positioning.ts","../src/actions/validation.ts","../src/utils/deck.ts","../../evaluator/dist/models/hand-rank.d.ts","../../evaluator/dist/utils/card.d.ts","../../evaluator/dist/index.d.ts","../src/utils/cardUtils.ts","../src/rules/headsUp.ts","../src/rules/blinds.ts","../src/rules/actionOrder.ts","../src/actions/dealing.ts","../src/errors/CriticalStateError.ts","../src/utils/rake.ts","../src/actions/betting.ts","../src/actions/management.ts","../src/actions/showdownActions.ts","../src/actions/tournament.ts","../src/actions/special.ts","../src/actions/streetProgression.ts","../src/rules/sidePots.ts","../src/rules/showdown.ts","../src/utils/invariants.ts","../src/utils/constants.ts","../src/engine/gameReducer.ts","../src/utils/viewMasking.ts","../src/utils/serialization.ts","../src/errors/ConfigError.ts","../src/history/handHistoryBuilder.ts","../src/history/formats/pokerstars.ts","../src/history/formats/json.ts","../src/history/exporter.ts","../src/utils/validation.ts","../src/engine/PokerEngine.ts","../src/browser.ts","../src/errors/index.ts","../src/index.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/dispatcher1-wrapper.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/quic.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/iter.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/test/reporters.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/util/types.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[189,251,252,254,262,266,269,271,272,273,286],[189,253,254,262,266,269,271,272,273,286],[254,262,266,269,271,272,273,286],[189,254,262,266,269,271,272,273,286,295],[189,254,255,260,262,265,266,269,271,272,273,275,286,291,304],[189,254,255,256,262,265,266,269,271,272,273,286],[189,254,257,262,266,269,271,272,273,286,305],[189,254,258,259,262,266,269,271,272,273,277,286],[189,254,259,262,266,269,271,272,273,286,291,301],[189,254,260,262,265,266,269,271,272,273,275,286],[189,253,254,261,262,266,269,271,272,273,286],[189,254,262,263,266,269,271,272,273,286],[189,254,262,264,265,266,269,271,272,273,286],[189,253,254,262,265,266,269,271,272,273,286],[189,254,262,265,266,267,269,271,272,273,286,291,304],[189,254,262,265,266,267,269,271,272,273,286,291,293,295],[189,254,262,266,269,271,272,273,286],[189,241,254,262,265,266,268,269,271,272,273,275,286,291,304],[189,254,262,265,266,268,269,271,272,273,275,286,291,301,304],[189,254,262,266,268,269,270,271,272,273,286,291,301,304],[188,189,190,191,192,193,194,195,196,197,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312],[189,254,262,265,266,269,271,272,273,286],[189,254,262,266,269,271,273,286],[189,254,262,266,269,271,272,273,274,286,304],[189,254,262,265,266,269,271,272,273,275,286,291],[189,254,262,266,269,271,272,273,277,286],[189,254,262,266,269,271,272,273,278,286],[189,254,262,265,266,269,271,272,273,281,286],[189,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311],[189,254,262,266,269,271,272,273,283,286],[189,254,262,266,269,271,272,273,284,286],[189,254,259,262,266,269,271,272,273,275,286,295],[189,254,262,265,266,269,271,272,273,286,287],[189,254,262,266,269,271,272,273,286,288,305,308],[189,254,262,265,266,269,271,272,273,286,291,294,295],[189,254,262,266,269,271,272,273,286,292,295],[189,254,262,266,269,271,272,273,286,293],[189,254,262,266,269,271,272,273,286,295,305],[189,254,262,266,269,271,272,273,286,296],[189,251,254,262,266,269,271,272,273,286,291,298,304],[189,254,262,266,269,271,272,273,286,291,297],[189,254,262,265,266,269,271,272,273,286,299,300],[189,254,262,266,269,271,272,273,286,299,300],[189,254,259,262,266,269,271,272,273,275,286,291,301],[189,254,262,266,269,271,272,273,286,302],[189,254,262,266,269,271,272,273,275,286,303],[189,254,262,266,268,269,271,272,273,284,286,304],[189,254,262,266,269,271,272,273,286,305,306],[189,254,259,262,266,269,271,272,273,286,306],[189,254,262,266,269,271,272,273,286,291,307],[189,254,262,266,269,271,272,273,274,286,308],[189,254,262,266,269,271,272,273,286,309],[189,254,257,262,266,269,271,272,273,286],[189,254,259,262,266,269,271,272,273,286],[189,254,262,266,269,271,272,273,286,305],[189,241,254,262,266,269,271,272,273,286],[189,254,262,266,269,271,272,273,286,304],[189,254,262,266,269,271,272,273,286,310],[189,254,262,266,269,271,272,273,281,286],[189,254,262,266,269,271,272,273,286,300],[189,241,254,262,265,266,267,269,271,272,273,281,286,291,295,304,307,308,310],[189,254,262,266,269,271,272,273,286,291,311],[189,254,262,266,269,271,272,273,286,293,312],[189,204,207,210,211,254,262,266,269,271,272,273,286,304],[189,207,254,262,266,269,271,272,273,286,291,304],[189,207,211,254,262,266,269,271,272,273,286,304],[189,254,262,266,269,271,272,273,286,291],[189,201,254,262,266,269,271,272,273,286],[189,205,254,262,266,269,271,272,273,286],[189,203,204,207,254,262,266,269,271,272,273,286,304],[189,254,262,266,269,271,272,273,275,286,301],[189,254,262,266,269,271,272,273,286,313],[189,201,254,262,266,269,271,272,273,286,313],[189,203,207,254,262,266,269,271,272,273,275,286,304],[189,198,199,200,202,206,254,262,265,266,269,271,272,273,286,291,304],[189,207,254,262,266,269,271,272,273,286],[189,207,216,225,254,262,266,269,271,272,273,286],[189,199,205,254,262,266,269,271,272,273,286],[189,207,235,236,254,262,266,269,271,272,273,286],[189,199,202,207,254,262,266,269,271,272,273,286,295,304,313],[189,203,207,254,262,266,269,271,272,273,286,304],[189,198,254,262,266,269,271,272,273,286],[189,201,202,203,205,206,207,208,209,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,254,262,266,269,271,272,273,286],[189,207,228,231,254,262,266,269,271,272,273,286],[189,207,216,218,219,254,262,266,269,271,272,273,286],[189,205,207,218,220,254,262,266,269,271,272,273,286],[189,206,254,262,266,269,271,272,273,286],[189,199,201,207,254,262,266,269,271,272,273,286],[189,207,211,218,220,254,262,266,269,271,272,273,286],[189,211,254,262,266,269,271,272,273,286],[189,205,207,210,254,262,266,269,271,272,273,286,304],[189,199,203,207,216,254,262,266,269,271,272,273,286],[189,207,228,254,262,266,269,271,272,273,286],[189,220,254,262,266,269,271,272,273,286],[189,199,203,207,211,254,262,266,269,271,272,273,286],[189,201,207,235,254,262,266,269,271,272,273,286,295,310,313],[140,189,254,262,266,269,271,272,273,286],[131,189,254,262,266,269,271,272,273,286],[131,134,189,254,262,266,269,271,272,273,286],[66,126,129,131,132,133,134,135,136,137,138,139,189,254,262,266,269,271,272,273,286],[62,64,134,189,254,262,266,269,271,272,273,286],[131,132,189,254,262,266,269,271,272,273,286],[63,131,133,189,254,262,266,269,271,272,273,286],[64,66,68,69,70,71,189,254,262,266,269,271,272,273,286],[66,68,70,71,189,254,262,266,269,271,272,273,286],[66,68,70,189,254,262,266,269,271,272,273,286],[63,66,68,69,71,189,254,262,266,269,271,272,273,286],[62,64,65,66,67,68,69,70,71,72,73,126,127,128,129,130,189,254,262,266,269,271,272,273,286],[62,64,65,68,189,254,262,266,269,271,272,273,286],[64,65,68,189,254,262,266,269,271,272,273,286],[68,71,189,254,262,266,269,271,272,273,286],[62,63,65,66,67,69,70,71,189,254,262,266,269,271,272,273,286],[62,63,64,68,131,189,254,262,266,269,271,272,273,286],[68,69,70,71,189,254,262,266,269,271,272,273,286],[70,189,254,262,266,269,271,272,273,286],[74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,189,254,262,266,269,271,272,273,286],[148,152,161,163,164,189,254,262,266,269,271,272,273,286],[148,152,154,158,160,161,189,254,262,266,269,271,272,273,286],[148,152,165,189,254,262,266,269,271,272,273,286],[148,150,151,189,254,262,266,269,271,272,273,286],[148,152,161,189,254,262,266,269,271,272,273,286],[148,154,158,161,189,254,262,266,269,271,272,273,286],[148,189,254,262,266,269,271,272,273,286],[148,150,151,152,189,254,262,266,269,271,272,273,286],[148,158,162,165,166,167,169,176,177,182,184,189,254,262,266,269,271,272,273,286],[148,175,176,177,178,182,183,189,254,262,266,269,271,272,273,286],[148,153,162,165,166,167,168,169,170,171,172,173,174,189,254,262,266,269,271,272,273,286],[149,189,254,262,266,269,271,272,273,286],[149,150,189,254,262,266,269,271,272,273,286],[149,151,163,178,189,254,262,266,269,271,272,273,286],[148,179,180,181,189,254,262,266,269,271,272,273,286],[148,173,176,177,182,184,186,189,254,262,266,269,271,272,273,286],[148,152,159,160,189,254,262,266,269,271,272,273,286],[148,152,159,189,254,262,266,269,271,272,273,286],[148,152,157,164,189,254,262,266,269,271,272,273,286],[148,163,189,254,262,266,269,271,272,273,286],[157,189,254,262,266,269,271,272,273,286],[150,151,174,189,254,262,266,269,271,272,273,286],[155,156,189,254,262,266,269,271,272,273,286],[54,189,254,262,266,269,271,272,273,286],[57,189,254,262,266,269,271,272,273,286],[54,55,56,57,189,254,262,266,269,271,272,273,286],[57,59,189,254,262,266,269,271,272,273,286],[54,59,189,254,262,266,269,271,272,273,286],[60,141,189,254,262,266,269,271,272,273,286],[56,60,145,189,254,262,266,269,271,272,273,286],[54,55,56,57,58,59,60,61,142,143,144,145,146,147,189,254,262,266,269,271,272,273,286],[141,189,254,262,266,269,271,272,273,286]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"577cc49be1979782a5a695b46049566d123e2a75382f10bb82f2e5c87e29059a","impliedFormat":1},"97ce0431adf285e00cf7510a815eafaf39b821c9286cde6c19608c1bca5add1f","6dbfc8cb24a3a001c5e29f0f8ecde5c344ec8411defd08ef2a91df8536d7f04c","f7a08c235f7251518dd64e26437415b5b40724a683cfacb698c31b080920893c","2a86aed0c5392ad4656535ee332ac4c2091ad52d2c132f62407f320ab2dadc7f","78dca3b279357fbebc4436b7974290f1adfe6fd3f91dfff48787ea2298386654","6c2524e3746b474ae554498c154b72382c1f131c9295b307dc61545724fe30d5","7fed1abe06e6f638471bff99dc990ac8d666c75e3b1d1e13c616f0b33dd15464","243151885a6eae4f65bea259aec324078a8c00e947d689de19be6d3f40ef65c9",{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},"13e7002bf6df260c67b1bcc5ba3232d8b717b4eae84998d5d1d432f53fabf562","ab0440d48195c4e30947dbff0499f2c9851db4e94c087ed041099c8308173e2b","2925ccbac331b26fc521d7b6243cc97b45807f638b15b8baf342be85785b822f","d610055ca4676caf81eeb1bf5bc411fd38f73e39c9c982d18ef0bfdfc4ad500e","fe8d3c74f0c201c4dc474dd203e0befd0ab8d8f63d4d907fd7173a5ab5ef2142","ac6cb22083c1e4c843841965dc7530c6bee15c3553319140c8a6007fca729d9f","60b50c0ec996bcf6e2c33a437b1af15ed6fecd62ba49491a8fbc087d8f91e5e8",{"version":"de35f6fc22445119b576dfd60ab11d703d8ccc7e519a795847fa52e0036dce4e","signature":"f600fd76fd948a43cc8c439d07d9a85a70e5d2bf7df904e55152cc98b1f982dc"},"1e504db2a72d91145768347becd0cbc71cb873a9bed6a80c3636e5d634eb8d5d",{"version":"bdf4372509098e4d61b2695f46d406c9290614543f19a8c2fde2d82b7ed5ae20","signature":"8072cbd8cd6012d61bfb3980bcbd2cff43ccdbfc09c4fa4b5a6d7dc7b32d55cf"},{"version":"54dd43a9e8643d71521a6286c31df1b2a85033cf5baccad43b681ee0c53a80a9","signature":"56c4268968a4b10a593397b803ae03cf9c53f52c1742f97206a04b45a7019ba2"},{"version":"27bd6d37386e176b3d49e2ebd6adc5a864ec6a413cc63537fa3141b96b5cf0be","signature":"ba7e240790a7e37adfbae1b655ca54eabd0cf8d83bce05fe1903b95b51967066"},{"version":"aedaa3f25cdb3daa8fc69224a6c3234672fadeb24cb961b21a5863a0e7cb66cb","signature":"f28fc6fb091840ea15e1f158d8ae9f531a76c1d8a42d7cd653f4d37dfc26221a"},"7ec90ed444c3b3ba04d9fc3c50d15513e03a807c7cda11487099b1cc3589af4a","6ba52c4bbac233fec69f0f02bb1844ec3d54028e84e3d4205625521671f9d173","3c099f5a3656125c43d587278a5bcfcadb38619c7f848c4c0e20739c273787fb",{"version":"4701a5fc4c64aca9a7a14abdba8125759c6402c366f168f2939b9ffd6b130fe1","signature":"f5c4d42871f6d129a9eeef7973c0fe39178a8f18b789d321108d05e825b0dbcb"},{"version":"57115879d935a8f42031fd7f26f80edbcda64d9dbe8e81d40ded922530801798","signature":"525d9c141560acf3b5e0efb46cf59ba197175c71a0268546d9e1047bcdee3c1b"},{"version":"70c5f712e70b8ce2fb3986da10619dbdfb09da39ace48c150afede13edf095b4","signature":"bd9624eb8dff357e1ae590d836892bcd41c52e37f4f1ffe37ff21e341df52cc3"},{"version":"5788a800bb5282bc1dd02d6c9fac75ca92f4a3b02365d9c82c665ea032b44807","signature":"dfc00eced86877b983fd42a25d648c3a595e146d113caa348a00b5b48b835def"},{"version":"ef67384e656e34ac332c427f5468071541fdddfe9738d1978b10c0efdc61db7f","signature":"2dbd53e4d5636213b3dca9331a756403e333e62fd4254c08ccb20194ba5c7a07"},{"version":"c7dfbd6eacf0b497bb73b1a83112b92a726af9628a7324c5697dfd3caf4b0808","signature":"fdcf12401ef49b136f305976be32acdf8c63a950bbf5e6d076ad69637190d8c8"},{"version":"85e9754fbe1210441f0256c6c531286e4af22fb3600385cde506dae053c019f4","signature":"ffdc5a8803e9293b407b8c9ffb0262a67f3a79a08cdc499eab57228b03551e83"},{"version":"7346e84e425c26acdf83f0e4f434986997da1cff3ca57e15b0a980b297ef9d94","signature":"387c107e984dabdf37be7880b92c15d701e6c8a417cb4b993a56ddea4df47f3a"},{"version":"0b3bd50fc63a388049633685697aec0d4cf6f6933ebdc34d3afa313881d5b418","signature":"034ce98f849540b4e0d29f358824d0086272f580de9a39e21307b34f97469c55"},{"version":"42f92cd2795a6da5d6fb95bd93486834e3f4d21dc48c62b3044d385e1d6bc7b9","signature":"9959effb63050726b4cb6c3674715199c0471e63d03ef7fb50968f014fe621f6"},{"version":"8ac646786df37fefc59ccd11c42780e3fcef10cfea8cca4203631f64c31d3824","signature":"2bade3feabe5580555cfa4462a9545d2ba7582da5d0f9adfda248b9d19d7946e"},{"version":"9f791f9c21c879dac6fdb5c1a8217f697c833442f044aba69c8b36574affe9e8","signature":"c2266eaadced72d851e41a21900b1ea0dfd4a58176b837bf47e3f601b8ce1222"},{"version":"8844d4dab1d50119ae3c5ce4d98e6213cc51e6c546cce67788b0e4eba2379159","signature":"6eb519d85d10725ae474ac511a1dfde115fa5e7162de3f0e1aedd92920a83bf9"},{"version":"545e1bf45c718de311114d5bfe0fb75d93387a4191bf89ca2facc3b7062ffa1f","signature":"ce555b2864312344ce2f3ecb1189ab6d03a9956ac88332bade964b1f68826a43"},{"version":"3c3d9e6b0ecc3cad764971b20ada04eec481d0f603cfeae7208e70fac9e6b16f","signature":"d44a9e8538b9c21825c081b85af4204244d0ea871c4677f676ae2bfd44c8f3e3"},{"version":"c510ae2a28bdff87a8633350898db64372e528fa2c169a7300e252e46cbb1662","signature":"86787a83c8d51396bec5913256ee9d7ace34fcc875b40cfee4b690ab061ef484"},{"version":"cc58cd2734009486b9653bb1d36c60600329c1b4a40e13c6176f4220d2beffa5","signature":"b43ec0d8ddfc702a937b2f158292663a11e631c6a82dc926b6e884aaf98e78bb"},{"version":"1651f51b07ce77d73d19652ab2626c64503c22eec6a85bcff42002a58a2ba763","signature":"61b82a9ce765fde4af14663721a3ab5a84c42187ef1eff6e242fd19cce26ed5f"},{"version":"1e9eff739b6bcc3b1d9d4fa14332a292fa1d385629b4d955804bc33c68fd2de7","signature":"971c7edd4a2aafa16f09f6ca40e1c32da9cc1ddafa60b3185dec1af2651aa5cb"},{"version":"cc3faae9704da1af5e18a16734752a807893bdb5c3d2cd198b8a1713cdf8419e","signature":"000b3be4a6aadcc165b5a6ac35786ca2101abed43fdeba5424db7a79db105853"},{"version":"b0c03d1046ebaa383dd4cf61160e56f0d7b4b75212ee7f62e9a4f7d80b79a4bc","signature":"95052114b59e60684f928cb6337a8caee6f5f28f8bb0f9a639ba5b855e90c51f"},{"version":"1e482041dfe48649b69ec22ef078fb9c711b3f49852abb4850f8578a89079d4c","signature":"6c7fa1730cbfec6b72c32a7fcdaf7f0bd04e7f4c799b543ccd576a04518d4422"},{"version":"9d52f5f45b7a84be8a894749830c398a28af0df5834b3bf482ff177a4ead1043","signature":"fa3133ba136a537a2aa4d814f33610afdfd1d7e34f7b7d2377528007b7cd7391"},{"version":"535c5838297adf60efeed89c05100c47a5a4d416dcecd0e7beb1286363460170","signature":"31c71dd2b11279c4d01c46084ae94d5fe4ee4787242397c137868661f0bc1446"},{"version":"255457f4dcb7306e51538542f5817f560c3bd7f62342413660a1da72619e965f","signature":"6cf01b92c609468472f778b96557dc6cbc858d54a9a42bf8499b97d1b4c929e0"},{"version":"7d0f1c122fed8bfa648f3559344b7ba4f8c01186c9e6481d1301145f2719df8f","signature":"10441c4459026766a5c17718360552ca2b759a54c972d768357423e643b4ad33"},{"version":"7239de77263ccb217900818dd090be7970787b8fd8efec0794380ef745f1b1d7","signature":"cc10682f6fcae2609d774f109057f15850d78aa3743973330a7038f44a32a85c"},{"version":"359b92b9fe98a7e3c32f73cf2729d5e955f9e229bf8da1fa28f14cc08e46d4d0","signature":"43bdf5345e6de2712d0f9b2a55f09d545970746ed61c30c6fda7483b6711c514"},{"version":"dc388df93cf539cd2cdea0027d63fc509291cdf54ffbabd80eff95ce7c1f5664","signature":"872e246edfcd29a791efeb0ce249c206c239c32c2f4b0ab7d65e197bfd8276c2"},{"version":"8435fab042e9c1bce4e3479f7c10f10942b745d4b12f547a2d4907b22605c955","signature":"5815f1c1ae10192986b5b54f58dc422024e644028cb653ed1115d57fea9d3f81"},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"f53a7652392cf26ebbe4e29fd0672aa87c93bd6d0241289c13fab87b9ac35c8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"b00a630557d1622ad312633bdbfbdb9c6b7220d948dca9f899db30679f160074","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"88809d6c1b9c78d04a133646a6feb926def05a8774c308c7c93bc32ee163d271","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"3ac40516c33b87f751f7507346933081a26cdb8a3e11a6b3aa07d23f803c85db","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"829bc57ee8f287b490ab5bbc5a962fca57e432c1e38ec680ecd3ecaf12800613","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"3a3ff14da53d5013f3e6d8c4ad55225e3649c08786c4421ce639c00d8d589b7d","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"38004e6801340cb890afb8cb5a9fc8972297e7f88ab94026e4b0b3c61fb32f8a","impliedFormat":1},{"version":"d243db6b25788f439e7e2f03c05688e92f46764351673bb0e7b2f3631232e186","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"149f9a9e7f04e67afa0e2a49fc0ff421035c01d6b793cfcae7d2e9f6819431e2","impliedFormat":1},{"version":"e8a9dfa4c75ef6d25df8b40eaa9c31e0a69452aaf2ced4a3f4215dbdbaa876f4","impliedFormat":1},{"version":"a70af845a2eb9dd6e2723e319e14ea7fb28b129ec1361c21509b49305448c323","impliedFormat":1},{"version":"b53dc572d4f187904207ae1166652de47aab8eeb00c254d009cb226863076b56","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"f501234c5aeeeb5d7659412335227466aaacf30b952372d60afeb21c02c96348","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"9ac977503f15bf13ca7c82ad9a32a782f42d43e474824e8b3bffe228fd5f2639","impliedFormat":1},{"version":"8b91ff5bb912be3ea213cbcf0075aace1f5d4ff249a0d227ed673868cb7bfabc","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"7cb4f431a4591b0e23002bed805dc871a874dfed6b9a3994dce68a6df73e6739","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"e99963ae1e3a48ca7a7958c02f3e88bb963eb7978c28b68ae6b8c9f03309d83c","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"594ae90cacd813fa392ff80d2e0a8eff4e41f4a136329a940e321399dd8895b4","impliedFormat":1},{"version":"d1f333ade8ff35a409b4984e1f11956fe11c61855b0c7e9b59f0313e48b40c4a","impliedFormat":1},{"version":"0224aa4b3464895d69c413a640a19ac2166778a74eb5eb3b36b021c72d42b274","impliedFormat":1},{"version":"0828724f6c17d63075bc7bfdd2f22875c4d00f90a6d8ef16d2e718a9e5f7e135","affectsGlobalScope":true,"impliedFormat":1},{"version":"177459cba484e2f1e08872a3d2fdbca3162d9d43ca5ec9dc0c946835b55f74be","impliedFormat":1},{"version":"2fbf504c4791f9d32cd766cfe6b605bcda63289b925401953a7900db9af85348","impliedFormat":1},{"version":"ed0fb633cae35948d9e144004299a4bdf1ab912667c787b7fbffcd6d8c7b92a2","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"637e244cbc5174cce5482388be2b4b51c49f7ce6dead7316448da61d7aa283b1","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"afa8be176b15487addede2f996c733e8d33a23497e6efe01c3945f768cf79184","impliedFormat":1},{"version":"6a0de93048a43c4f492e1fe43cc4ec52eed57d4e03a07c78b2d502e20dbdcfd8","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"8c7e618c2a91ea7f6b5cca272a295864e92c16413be8fc56a943e8c7d5320011","affectsGlobalScope":true,"impliedFormat":1},{"version":"66e5d81f637da29b03689fbc84cc61f18c6fdde769b134e0649259384df453e2","impliedFormat":1},{"version":"f2bb6c145c2112b33fa26e7464c9c69212fd3fc163ee389230c22db39408ad1e","impliedFormat":1},{"version":"b02c915a1b0d9777a17e3249674735eec3f2fd929f0d63da84157aac7f9a4345","impliedFormat":1},{"version":"62e8f884c3bc6dff6189b6e662ebe8b238a645938f2df7a97b8a82fca56773a4","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"57a0d1b3d59063d4af2d3f8aac27cfe3c20a0f5d1faf0f8598ccf0b779637939","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"97234c5303866576f913d0ccae7d58d6322d9e803c7bf1228a3fda46ab8087b2","affectsGlobalScope":true,"impliedFormat":1},{"version":"93ecf87143cac7b9d05cffc1d6bdc075b7e4fdd48ff05f1fad85043f6ae678d3","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"6f200afcb82b3e9a54bed6db23f2edf2508cd266801257312c0f124b47f2bdb9","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"39338f84e8c4d0e3de7b3c4a7024fb3925f42100eed5cbe73be58902799dff4d","impliedFormat":1},{"version":"f1c92c0b24d678486042dfc038c7c1d6e8520fe384b82155720a42a893204588","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"8413d0641f293aed551c7464615b770d34a02dedede889b9591172287d68e773","impliedFormat":1},{"version":"441b9bb09013654aa3d050e68b06464d8959b473e85868249d9d18f692acd35b","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"55246f15e33ff1e2e9e679b25fa9790a48db55dc63d567fe25fac8b6a0efe911","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"8bb351077998efc2d986a6a7373cba6f098a91a3679cefce3ba2aab90493161c","impliedFormat":1},{"version":"734665cf52eb63e20252412ca891601b1405f7c6abef6425f1939cbb15ed239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f36b3fbe2be150a9ca140da48593f21e6a8172004f92ddc549b43efec39f3e54","impliedFormat":1},{"version":"f12624a4a8d042b68914eac1b0a16571fc1c523173fcdf2517c65d191bd5a86c","impliedFormat":1},{"version":"b4769767f13a1692a66186e01c3aa186ff808d5ff72ed36eda8c37738fb2ac92","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"ae6adca0538007af480cf43e20b1e7631c5321406bc515bff980a0d31252f79f","impliedFormat":1},{"version":"1ec3f3a5f04cc42df33274fbe5c0937d9a9e06f249a7a26288d7d54f0763ffd4","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"e47f532d6e1617833f13a5b0710c0089d402c89c2f2b54f324e5a20e418d287a","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"8e2577e7262051fd3c5bd6ca2b2056d358ff8853565720f92455860824c25188","impliedFormat":1},{"version":"5cbb49cb13edc05e52b239329932cfde34323c6bfe33020e381faa97d2300b22","impliedFormat":1},{"version":"bb9dbb4b2ad81e3e71ec5ba4314973718555b9d04ba2a17dfbf875efecb8e2c0","impliedFormat":1},{"version":"62e02b8bbc05076243cf153d10c27b3d886c7c08558dfb797f280d837881b3cd","impliedFormat":1},{"version":"045a210189ec63c5488410b33f9fca53d77d051599d0d6506d8048551399c5f3","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"3ead5b9bea1c59a375acdd494ac503f6e16a2b47cffbc31da1824fc17d023205","impliedFormat":1},{"version":"c9a2daf6cd1eb854cd5b9e424247c5e306692055738c2effd35f7871d942b76e","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"e423ccd43347320b61eea979368bd0e80785c0823995b4f46ec3c9b4dadcd45f","impliedFormat":1}],"root":[[149,154],[158,187]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./","preserveConstEnums":true,"removeComments":false,"rootDir":"../src","skipLibCheck":true,"strict":true,"target":7,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[251,1],[252,1],[253,2],[189,3],[254,4],[255,5],[256,6],[257,7],[258,8],[259,9],[260,10],[261,11],[262,12],[263,12],[264,13],[265,14],[266,15],[267,16],[190,17],[188,17],[268,18],[269,19],[270,20],[313,21],[271,22],[272,23],[273,22],[274,24],[275,25],[277,26],[278,27],[279,27],[280,27],[281,28],[282,29],[283,30],[284,31],[285,32],[286,33],[287,33],[288,34],[289,17],[290,17],[291,35],[292,36],[293,37],[294,35],[295,38],[296,39],[297,40],[298,41],[299,42],[300,43],[301,44],[302,45],[303,46],[304,47],[305,48],[306,49],[307,50],[308,51],[309,52],[191,22],[192,17],[193,53],[194,54],[195,17],[196,55],[197,17],[242,56],[243,57],[244,58],[245,58],[246,59],[247,17],[248,4],[249,60],[250,57],[310,61],[311,62],[312,63],[276,17],[51,17],[52,17],[10,17],[8,17],[9,17],[14,17],[13,17],[2,17],[15,17],[16,17],[17,17],[18,17],[19,17],[20,17],[21,17],[22,17],[3,17],[23,17],[24,17],[4,17],[25,17],[29,17],[26,17],[27,17],[28,17],[30,17],[31,17],[32,17],[5,17],[33,17],[34,17],[35,17],[36,17],[6,17],[40,17],[37,17],[38,17],[39,17],[41,17],[7,17],[42,17],[53,17],[47,17],[48,17],[43,17],[44,17],[45,17],[46,17],[49,17],[1,17],[50,17],[12,17],[11,17],[216,64],[230,65],[213,66],[231,67],[240,68],[204,69],[205,70],[203,71],[239,72],[234,73],[238,74],[207,75],[217,76],[227,77],[206,78],[237,79],[201,80],[202,73],[208,76],[209,17],[215,81],[212,76],[199,82],[241,83],[232,84],[220,85],[219,76],[221,86],[224,87],[218,88],[222,89],[235,72],[210,90],[211,91],[225,92],[200,67],[229,93],[228,76],[214,91],[223,94],[226,95],[233,17],[198,17],[236,96],[141,97],[135,98],[139,99],[136,99],[132,98],[140,100],[137,101],[138,99],[133,102],[134,103],[128,104],[69,105],[71,106],[127,17],[70,107],[131,108],[130,109],[129,110],[62,17],[72,105],[73,17],[64,111],[68,112],[63,17],[65,113],[66,114],[67,17],[74,115],[75,115],[76,115],[77,115],[78,115],[79,115],[80,115],[81,115],[82,115],[83,115],[84,115],[85,115],[86,115],[87,115],[89,115],[88,115],[90,115],[91,115],[92,115],[93,115],[94,115],[126,116],[95,115],[96,115],[97,115],[98,115],[99,115],[100,115],[101,115],[102,115],[103,115],[104,115],[105,115],[106,115],[107,115],[109,115],[108,115],[110,115],[111,115],[112,115],[113,115],[114,115],[115,115],[116,115],[117,115],[118,115],[119,115],[120,115],[121,115],[122,115],[125,115],[123,115],[124,115],[165,117],[162,118],[166,119],[167,120],[169,121],[170,122],[168,123],[153,124],[185,125],[184,126],[175,127],[178,128],[163,128],[150,123],[151,129],[149,17],[186,130],[182,131],[181,123],[180,123],[179,123],[187,132],[161,133],[160,134],[159,123],[172,135],[171,136],[158,137],[174,17],[154,17],[173,136],[152,123],[164,123],[177,123],[183,138],[176,123],[157,139],[155,17],[156,17],[57,140],[58,141],[56,17],[144,17],[59,142],[61,143],[54,17],[55,17],[60,144],[143,145],[146,17],[145,17],[147,146],[148,147],[142,148]],"latestChangedDtsFile":"./index.d.ts","version":"6.0.3"}
|
package/dist/actions/betting.js
CHANGED
|
@@ -39,6 +39,7 @@ function handleFold(state, action) {
|
|
|
39
39
|
players: newPlayers,
|
|
40
40
|
activePlayers: newActivePlayers,
|
|
41
41
|
actionHistory: [...state.actionHistory, actionRecord],
|
|
42
|
+
timeBankActiveSeat: null, // Clear time bank flag on any action
|
|
42
43
|
timestamp: action.timestamp,
|
|
43
44
|
};
|
|
44
45
|
// Check if only one player with a live hand remains
|
|
@@ -78,6 +79,7 @@ function handleCheck(state, action) {
|
|
|
78
79
|
const newState = {
|
|
79
80
|
...state,
|
|
80
81
|
actionHistory: [...state.actionHistory, actionRecord],
|
|
82
|
+
timeBankActiveSeat: null, // Clear time bank flag on any action
|
|
81
83
|
timestamp: action.timestamp,
|
|
82
84
|
};
|
|
83
85
|
// Move to next player
|
|
@@ -115,9 +117,9 @@ function handleCall(state, action) {
|
|
|
115
117
|
// Update current bets
|
|
116
118
|
const newCurrentBets = new Map(state.currentBets);
|
|
117
119
|
newCurrentBets.set(seat, playerBet + callAmount);
|
|
118
|
-
// Add to action history
|
|
120
|
+
// Add to action history (include actual call amount in the action)
|
|
119
121
|
const actionRecord = {
|
|
120
|
-
action,
|
|
122
|
+
action: { ...action, amount: callAmount }, // Populate amount field for history
|
|
121
123
|
seat,
|
|
122
124
|
resultingPot: getTotalPot(state) + callAmount,
|
|
123
125
|
resultingStack: newPlayers[seat].stack,
|
|
@@ -128,6 +130,7 @@ function handleCall(state, action) {
|
|
|
128
130
|
players: newPlayers,
|
|
129
131
|
currentBets: newCurrentBets,
|
|
130
132
|
actionHistory: [...state.actionHistory, actionRecord],
|
|
133
|
+
timeBankActiveSeat: null, // Clear time bank flag on any action
|
|
131
134
|
timestamp: action.timestamp,
|
|
132
135
|
};
|
|
133
136
|
// Move to next player
|
|
@@ -176,6 +179,7 @@ function handleBet(state, action) {
|
|
|
176
179
|
lastRaiseAmount: betAmount,
|
|
177
180
|
lastAggressorSeat: seat,
|
|
178
181
|
actionHistory: [...state.actionHistory, actionRecord],
|
|
182
|
+
timeBankActiveSeat: null, // Clear time bank flag on any action
|
|
179
183
|
timestamp: action.timestamp,
|
|
180
184
|
};
|
|
181
185
|
// Move to next player
|
|
@@ -238,6 +242,7 @@ function handleRaise(state, action) {
|
|
|
238
242
|
lastRaiseAmount: reopensBetting ? raiseIncrement : state.lastRaiseAmount,
|
|
239
243
|
lastAggressorSeat: reopensBetting ? seat : state.lastAggressorSeat,
|
|
240
244
|
actionHistory: [...state.actionHistory, actionRecord],
|
|
245
|
+
timeBankActiveSeat: null, // Clear time bank flag on any action
|
|
241
246
|
timestamp: action.timestamp,
|
|
242
247
|
};
|
|
243
248
|
// Move to next player
|
|
@@ -351,15 +356,8 @@ function awardPotToLastPlayer(state, winningSeat) {
|
|
|
351
356
|
}
|
|
352
357
|
}
|
|
353
358
|
// Calculate uncalled and called portions
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
if (winnersBet > maxOpponentBet) {
|
|
357
|
-
uncalledAmount = winnersBet - maxOpponentBet;
|
|
358
|
-
calledPortion = maxOpponentBet;
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
calledPortion = winnersBet;
|
|
362
|
-
}
|
|
359
|
+
const uncalledAmount = winnersBet > maxOpponentBet ? winnersBet - maxOpponentBet : 0;
|
|
360
|
+
const calledPortion = winnersBet > maxOpponentBet ? maxOpponentBet : winnersBet;
|
|
363
361
|
// Step 1: Return uncalled bet immediately (NO RAKE on uncalled bets)
|
|
364
362
|
if (uncalledAmount > 0) {
|
|
365
363
|
const player = newPlayers[winningSeat];
|
package/dist/actions/dealing.js
CHANGED
|
@@ -15,12 +15,14 @@ const positioning_1 = require("../utils/positioning");
|
|
|
15
15
|
*/
|
|
16
16
|
function handleDeal(state, action) {
|
|
17
17
|
// Move button (Dead Button logic: moves to next seat index regardless of occupancy)
|
|
18
|
-
|
|
18
|
+
let newButtonSeat = moveButton(state);
|
|
19
19
|
// Determine if this is a tournament
|
|
20
20
|
const isTournament = !!state.config.blindStructure;
|
|
21
|
-
|
|
21
|
+
const isClient = !!state.config.isClient;
|
|
22
|
+
// Create and shuffle deck (server only)
|
|
23
|
+
// In client mode, we use an empty deck and deal masked cards
|
|
22
24
|
const rng = state.config.randomProvider ?? Math.random;
|
|
23
|
-
const deck = (0, deck_1.shuffle)((0, deck_1.createDeck)(), rng);
|
|
25
|
+
const deck = isClient ? [] : (0, deck_1.shuffle)((0, deck_1.createDeck)(), rng);
|
|
24
26
|
// Create a copy of timeBanks to modify
|
|
25
27
|
const newTimeBanks = new Map(state.timeBanks);
|
|
26
28
|
// First, merge pendingAddOn into stack for all players
|
|
@@ -46,6 +48,10 @@ function handleDeal(state, action) {
|
|
|
46
48
|
pendingAddOn: 0, // Clear pending add-on
|
|
47
49
|
};
|
|
48
50
|
});
|
|
51
|
+
newButtonSeat = moveHeadsUpButtonToOccupiedSeat(newButtonSeat, {
|
|
52
|
+
...state,
|
|
53
|
+
players: newPlayers,
|
|
54
|
+
});
|
|
49
55
|
// Get blind positions for this hand
|
|
50
56
|
const blindPositions = (0, blinds_1.getBlindPositions)({
|
|
51
57
|
...state,
|
|
@@ -126,10 +132,17 @@ function handleDeal(state, action) {
|
|
|
126
132
|
// Deal 2 cards, one by one, in circle (standard poker procedure)
|
|
127
133
|
for (let round = 0; round < 2; round++) {
|
|
128
134
|
for (const seat of playersToReceive) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
135
|
+
let cardStrings;
|
|
136
|
+
if (isClient) {
|
|
137
|
+
// Client mode: Deal masked cards
|
|
138
|
+
cardStrings = [null];
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Server mode: Deal from deck
|
|
142
|
+
const [cards, nextDeck] = (0, deck_1.dealCards)(remainingDeck, 1);
|
|
143
|
+
remainingDeck = nextDeck;
|
|
144
|
+
cardStrings = (0, cardUtils_1.cardCodesToStrings)(cards);
|
|
145
|
+
}
|
|
133
146
|
// Append to existing hand
|
|
134
147
|
const currentPlayer = newPlayers[seat];
|
|
135
148
|
const currentHand = currentPlayer.hand ?? []; // Should be [] from initialization
|
|
@@ -175,19 +188,24 @@ function handleDeal(state, action) {
|
|
|
175
188
|
// Post big blind (Must exist for hand to start)
|
|
176
189
|
const bbPlayer = newPlayers[bigBlindSeat];
|
|
177
190
|
if (bbPlayer) {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
:
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
+
// In Cash Games: sitting-out players should NEVER post blinds (they are skipped by getBlindPositions)
|
|
192
|
+
// In Tournaments: sitting-out players MUST post blinds to prevent "blinding off" exploit
|
|
193
|
+
const shouldPostBB = isTournament || !bbPlayer.isSittingOut;
|
|
194
|
+
if (shouldPostBB) {
|
|
195
|
+
const bbAmount = Math.min(bbPlayer.stack, state.bigBlind);
|
|
196
|
+
currentBets.set(bigBlindSeat, bbAmount);
|
|
197
|
+
newPlayers[bigBlindSeat] = {
|
|
198
|
+
...bbPlayer,
|
|
199
|
+
stack: bbPlayer.stack - bbAmount,
|
|
200
|
+
betThisStreet: bbAmount,
|
|
201
|
+
totalInvestedThisHand: bbAmount,
|
|
202
|
+
status: bbAmount === bbPlayer.stack
|
|
203
|
+
? "ALL_IN" /* PlayerStatus.ALL_IN */
|
|
204
|
+
: bbPlayer.isSittingOut
|
|
205
|
+
? "FOLDED" /* PlayerStatus.FOLDED */
|
|
206
|
+
: "ACTIVE" /* PlayerStatus.ACTIVE */,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
191
209
|
}
|
|
192
210
|
}
|
|
193
211
|
// Post antes if configured
|
|
@@ -269,3 +287,11 @@ function moveButton(state) {
|
|
|
269
287
|
// We do not skip empty seats here.
|
|
270
288
|
return (0, positioning_1.getNextSeat)(state.buttonSeat, state.maxPlayers);
|
|
271
289
|
}
|
|
290
|
+
function moveHeadsUpButtonToOccupiedSeat(buttonSeat, state) {
|
|
291
|
+
const occupiedSeats = state.players.filter((player) => player !== null && player.stack > 0);
|
|
292
|
+
const buttonPlayer = state.players[buttonSeat];
|
|
293
|
+
if (occupiedSeats.length !== 2 || (buttonPlayer !== null && buttonPlayer.stack > 0)) {
|
|
294
|
+
return buttonSeat;
|
|
295
|
+
}
|
|
296
|
+
return (0, positioning_1.getNextOccupiedSeat)(buttonSeat, state.players, state.maxPlayers) ?? buttonSeat;
|
|
297
|
+
}
|
|
@@ -5,6 +5,7 @@ exports.handleStand = handleStand;
|
|
|
5
5
|
exports.handleAddChips = handleAddChips;
|
|
6
6
|
exports.handleReserveSeat = handleReserveSeat;
|
|
7
7
|
const positioning_1 = require("../utils/positioning");
|
|
8
|
+
const betting_1 = require("./betting");
|
|
8
9
|
/**
|
|
9
10
|
* Handle SIT action - add player to table
|
|
10
11
|
*/
|
|
@@ -45,16 +46,36 @@ function handleStand(state, action) {
|
|
|
45
46
|
if (!result) {
|
|
46
47
|
return state;
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
const
|
|
49
|
+
let currentState = state;
|
|
50
|
+
const { player, seat } = result;
|
|
51
|
+
// 1. BEST PRACTICE: If the player is in a live hand, they must FOLD first.
|
|
52
|
+
// This resolves the "ActionTo" pointer, potential winners, and pot eligibility
|
|
53
|
+
// using the standard game rules defined in handleFold.
|
|
54
|
+
const isLiveHand = currentState.handNumber > 0 &&
|
|
55
|
+
currentState.street !== "SHOWDOWN" && // Not needed if hand is over
|
|
56
|
+
(player.status === "ACTIVE" || player.status === "ALL_IN");
|
|
57
|
+
if (isLiveHand) {
|
|
58
|
+
// Execute a "Virtual Fold" to gracefully exit the hand
|
|
59
|
+
currentState = (0, betting_1.handleFold)(currentState, {
|
|
60
|
+
type: "FOLD" /* ActionType.FOLD */,
|
|
61
|
+
playerId: player.id,
|
|
62
|
+
timestamp: action.timestamp,
|
|
63
|
+
});
|
|
64
|
+
// NOTE: handleFold returns a new state where actionTo has already been
|
|
65
|
+
// advanced to the next player. The invariant check will now pass.
|
|
66
|
+
}
|
|
67
|
+
// 2. Remove player from table (Standard Stand Logic)
|
|
68
|
+
const newPlayers = [...currentState.players];
|
|
50
69
|
newPlayers[seat] = null;
|
|
51
70
|
// Remove from time banks
|
|
52
|
-
const newTimeBanks = new Map(
|
|
71
|
+
const newTimeBanks = new Map(currentState.timeBanks);
|
|
53
72
|
newTimeBanks.delete(seat);
|
|
54
73
|
// Remove from active players if present
|
|
55
|
-
|
|
74
|
+
// (Note: handleFold might have already moved them to FOLDED status,
|
|
75
|
+
// but we ensure they are fully removed from tracking here)
|
|
76
|
+
const newActivePlayers = currentState.activePlayers.filter((s) => s !== seat);
|
|
56
77
|
return {
|
|
57
|
-
...
|
|
78
|
+
...currentState,
|
|
58
79
|
players: newPlayers,
|
|
59
80
|
activePlayers: newActivePlayers,
|
|
60
81
|
timeBanks: newTimeBanks,
|
|
@@ -10,5 +10,23 @@ export declare function handleTimeout(state: GameState, action: TimeoutAction):
|
|
|
10
10
|
* Handle TIME_BANK action
|
|
11
11
|
* - Deducts time from player's time bank
|
|
12
12
|
* - Keeps action on same player
|
|
13
|
+
*
|
|
14
|
+
* TIME BANK DEDUCTION POLICY:
|
|
15
|
+
* This implementation uses a "pay-per-activation" model where:
|
|
16
|
+
* - Each time bank activation deducts a fixed amount (default: 10 seconds)
|
|
17
|
+
* - Player receives the full deduction amount as additional time
|
|
18
|
+
* - If remaining time bank is less than the deduction, it is fully consumed
|
|
19
|
+
* - This prevents players from getting "free" time when they have < 10s remaining
|
|
20
|
+
*
|
|
21
|
+
* Example scenarios:
|
|
22
|
+
* - Player has 30s, activates time bank → 20s remaining, gets 10s additional time
|
|
23
|
+
* - Player has 5s, activates time bank → 0s remaining, gets 10s additional time
|
|
24
|
+
* - Player has 0s, cannot activate time bank → forced timeout/fold
|
|
25
|
+
*
|
|
26
|
+
* Alternative design consideration:
|
|
27
|
+
* If you want "time-as-resource" (only deduct what you use), you would need:
|
|
28
|
+
* - Track time used per activation in the UI layer
|
|
29
|
+
* - Deduct actual time consumed rather than fixed amount
|
|
30
|
+
* - Return unused time if action is made before deduction expires
|
|
13
31
|
*/
|
|
14
32
|
export declare function handleTimeBank(state: GameState, action: TimeBankAction): GameState;
|
package/dist/actions/special.js
CHANGED
|
@@ -56,6 +56,24 @@ function handleTimeout(state, action) {
|
|
|
56
56
|
* Handle TIME_BANK action
|
|
57
57
|
* - Deducts time from player's time bank
|
|
58
58
|
* - Keeps action on same player
|
|
59
|
+
*
|
|
60
|
+
* TIME BANK DEDUCTION POLICY:
|
|
61
|
+
* This implementation uses a "pay-per-activation" model where:
|
|
62
|
+
* - Each time bank activation deducts a fixed amount (default: 10 seconds)
|
|
63
|
+
* - Player receives the full deduction amount as additional time
|
|
64
|
+
* - If remaining time bank is less than the deduction, it is fully consumed
|
|
65
|
+
* - This prevents players from getting "free" time when they have < 10s remaining
|
|
66
|
+
*
|
|
67
|
+
* Example scenarios:
|
|
68
|
+
* - Player has 30s, activates time bank → 20s remaining, gets 10s additional time
|
|
69
|
+
* - Player has 5s, activates time bank → 0s remaining, gets 10s additional time
|
|
70
|
+
* - Player has 0s, cannot activate time bank → forced timeout/fold
|
|
71
|
+
*
|
|
72
|
+
* Alternative design consideration:
|
|
73
|
+
* If you want "time-as-resource" (only deduct what you use), you would need:
|
|
74
|
+
* - Track time used per activation in the UI layer
|
|
75
|
+
* - Deduct actual time consumed rather than fixed amount
|
|
76
|
+
* - Return unused time if action is made before deduction expires
|
|
59
77
|
*/
|
|
60
78
|
function handleTimeBank(state, action) {
|
|
61
79
|
const result = (0, positioning_1.getPlayerById)(state, action.playerId);
|
|
@@ -73,6 +91,7 @@ function handleTimeBank(state, action) {
|
|
|
73
91
|
});
|
|
74
92
|
}
|
|
75
93
|
// Deduct time from player's time bank (configurable, default 10 seconds)
|
|
94
|
+
// Uses pay-per-activation model: deduct full amount even if less is available
|
|
76
95
|
const deduction = state.config.timeBankDeductionSeconds ?? 10;
|
|
77
96
|
const newTimeBank = Math.max(0, currentTimeBank - deduction);
|
|
78
97
|
const newTimeBanks = new Map(state.timeBanks);
|
|
@@ -80,6 +99,7 @@ function handleTimeBank(state, action) {
|
|
|
80
99
|
return {
|
|
81
100
|
...state,
|
|
82
101
|
timeBanks: newTimeBanks,
|
|
102
|
+
timeBankActiveSeat: seat, // Mark time bank as active for this player
|
|
83
103
|
timestamp: action.timestamp,
|
|
84
104
|
// Keep actionTo the same (extends player's turn)
|
|
85
105
|
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-compatible entry point for PokerEngine
|
|
3
|
+
*
|
|
4
|
+
* This file provides a browser-safe RNG using Web Crypto API
|
|
5
|
+
* and re-exports all engine functionality for use in web applications.
|
|
6
|
+
*/
|
|
7
|
+
import { PokerEngine } from "./engine/PokerEngine";
|
|
8
|
+
import type { TableConfig } from "@pokertools/types";
|
|
9
|
+
/**
|
|
10
|
+
* Browser-compatible RNG using Web Crypto API
|
|
11
|
+
* Falls back to Math.random() only in environments without crypto
|
|
12
|
+
*/
|
|
13
|
+
export declare function getBrowserRNG(): () => number;
|
|
14
|
+
/**
|
|
15
|
+
* Create a PokerEngine instance with browser-compatible RNG
|
|
16
|
+
*/
|
|
17
|
+
export declare function createBrowserEngine(config: TableConfig): PokerEngine;
|
|
18
|
+
export * from "./engine/PokerEngine";
|
|
19
|
+
export * from "./actions/betting";
|
|
20
|
+
export * from "./actions/dealing";
|
|
21
|
+
export * from "./actions/management";
|
|
22
|
+
export * from "./actions/showdownActions";
|
|
23
|
+
export * from "./actions/special";
|
|
24
|
+
export * from "./utils/viewMasking";
|
|
25
|
+
export * from "./utils/serialization";
|
|
26
|
+
export * from "./utils/cardUtils";
|
|
27
|
+
export * from "./history/exporter";
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser-compatible entry point for PokerEngine
|
|
4
|
+
*
|
|
5
|
+
* This file provides a browser-safe RNG using Web Crypto API
|
|
6
|
+
* and re-exports all engine functionality for use in web applications.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.getBrowserRNG = getBrowserRNG;
|
|
24
|
+
exports.createBrowserEngine = createBrowserEngine;
|
|
25
|
+
const PokerEngine_1 = require("./engine/PokerEngine");
|
|
26
|
+
/**
|
|
27
|
+
* Browser-compatible RNG using Web Crypto API
|
|
28
|
+
* Falls back to Math.random() only in environments without crypto
|
|
29
|
+
*/
|
|
30
|
+
function getBrowserRNG() {
|
|
31
|
+
// Check for Web Crypto API
|
|
32
|
+
if (typeof window !== "undefined" && window.crypto?.getRandomValues) {
|
|
33
|
+
return () => {
|
|
34
|
+
const buffer = new Uint32Array(1);
|
|
35
|
+
window.crypto.getRandomValues(buffer);
|
|
36
|
+
return buffer[0] / 0x100000000;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Check for Node.js crypto (for SSR/testing)
|
|
40
|
+
if (typeof globalThis !== "undefined" && globalThis.crypto?.getRandomValues) {
|
|
41
|
+
return () => {
|
|
42
|
+
const buffer = new Uint32Array(1);
|
|
43
|
+
globalThis.crypto.getRandomValues(buffer);
|
|
44
|
+
return buffer[0] / 0x100000000;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Fallback (warn in development)
|
|
48
|
+
if (process.env.NODE_ENV !== "production") {
|
|
49
|
+
console.warn("[PokerEngine Browser] Web Crypto API not available, using Math.random(). " +
|
|
50
|
+
"This is NOT cryptographically secure.");
|
|
51
|
+
}
|
|
52
|
+
return Math.random;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a PokerEngine instance with browser-compatible RNG
|
|
56
|
+
*/
|
|
57
|
+
function createBrowserEngine(config) {
|
|
58
|
+
return new PokerEngine_1.PokerEngine({
|
|
59
|
+
...config,
|
|
60
|
+
randomProvider: getBrowserRNG(),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// Re-export everything from main engine
|
|
64
|
+
__exportStar(require("./engine/PokerEngine"), exports);
|
|
65
|
+
__exportStar(require("./actions/betting"), exports);
|
|
66
|
+
__exportStar(require("./actions/dealing"), exports);
|
|
67
|
+
__exportStar(require("./actions/management"), exports);
|
|
68
|
+
__exportStar(require("./actions/showdownActions"), exports);
|
|
69
|
+
__exportStar(require("./actions/special"), exports);
|
|
70
|
+
__exportStar(require("./utils/viewMasking"), exports);
|
|
71
|
+
__exportStar(require("./utils/serialization"), exports);
|
|
72
|
+
__exportStar(require("./utils/cardUtils"), exports);
|
|
73
|
+
__exportStar(require("./history/exporter"), exports);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GameState, TableConfig, Action, PublicState } from "@pokertools/types";
|
|
2
2
|
import { Snapshot } from "../utils/serialization";
|
|
3
|
-
import { HandHistory, ExportOptions } from "
|
|
3
|
+
import { HandHistory, ExportOptions } from "@pokertools/types";
|
|
4
4
|
/**
|
|
5
5
|
* Event listener callback type
|
|
6
6
|
*/
|
|
@@ -35,6 +35,27 @@ export declare class PokerEngine {
|
|
|
35
35
|
* If action.timestamp is not provided, the engine will automatically set it
|
|
36
36
|
*/
|
|
37
37
|
act(action: Action): GameState;
|
|
38
|
+
/**
|
|
39
|
+
* Validate an action without executing it
|
|
40
|
+
* Useful for UI state (enabling/disabling buttons)
|
|
41
|
+
*/
|
|
42
|
+
validate(action: Action): {
|
|
43
|
+
valid: true;
|
|
44
|
+
} | {
|
|
45
|
+
valid: false;
|
|
46
|
+
error: string;
|
|
47
|
+
code?: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Reconcile local state with server state
|
|
51
|
+
* Smoothly merges server updates into client engine
|
|
52
|
+
*/
|
|
53
|
+
reconcile(serverState: PublicState | GameState): void;
|
|
54
|
+
/**
|
|
55
|
+
* Optimistically execute an action and return the provisional state
|
|
56
|
+
* Does not modify the engine's actual state
|
|
57
|
+
*/
|
|
58
|
+
optimisticAct(action: Action): GameState;
|
|
38
59
|
/**
|
|
39
60
|
* Undo last action
|
|
40
61
|
*/
|
|
@@ -46,7 +67,7 @@ export declare class PokerEngine {
|
|
|
46
67
|
/**
|
|
47
68
|
* Get player view (masked)
|
|
48
69
|
*/
|
|
49
|
-
view(playerId?: string): PublicState;
|
|
70
|
+
view(playerId?: string, version?: number): PublicState;
|
|
50
71
|
/**
|
|
51
72
|
* Get snapshot for serialization
|
|
52
73
|
*/
|