1087 Commits

Author SHA1 Message Date
wish
b2768e5af8 Merge pull request #138 from Mezeporta/dependabot/go_modules/golang.org/x/net-0.38.0 2025-08-22 11:26:43 +10:00
dependabot[bot]
c13d6e6116 Bump golang.org/x/net from 0.33.0 to 0.38.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.33.0 to 0.38.0.
- [Commits](https://github.com/golang/net/compare/v0.33.0...v0.38.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.38.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-22 01:11:38 +00:00
wish
425a245af5 Merge pull request #137 from Mezeporta/dependabot/go_modules/golang.org/x/crypto-0.35.0 2025-08-22 11:10:30 +10:00
dependabot[bot]
da43ad0cad Bump golang.org/x/crypto from 0.31.0 to 0.35.0
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.31.0 to 0.35.0.
- [Commits](https://github.com/golang/crypto/compare/v0.31.0...v0.35.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.35.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-22 01:09:07 +00:00
wish
8f3624d589 Update README.md 2025-05-16 18:10:13 +10:00
wish
8d1c6a79e2 S6 compatibility fix 2025-05-04 01:47:30 +10:00
wish
d83c784452 Create 26-fix-mail.sql 2025-04-10 23:35:59 +10:00
wish
ee7b099deb Create 25-fix-rasta-id.sql 2025-04-10 23:33:40 +10:00
wish
ef3212da11 Rename fix-weekly-stamps.sql to 24-fix-weekly-stamps.sql 2025-04-10 23:33:08 +10:00
wish
3d0114ce22 fix MhfAcquireCafeItem cost in G1-G5.2 2025-04-01 20:58:33 +11:00
wish
c539905c1d implement SysWaitStageBinary timeout 2025-03-16 23:04:42 +11:00
wish
69a2a7ca3b MhfReadMercenaryW changes 2025-03-16 15:51:10 +11:00
wish
7e58a26693 Merge remote-tracking branch 'origin/main' 2025-03-10 11:38:23 +11:00
wish
8c219be30f fix InfoGuild response on <G10 2025-03-10 11:38:00 +11:00
wish
f9cfb07760 Merge pull request #134 from ZeruLight/fix/packet-queue
fix/packet-queue
2025-03-09 14:41:10 +11:00
wish
f2862ea4b8 prevent concurrent map write to questCache 2025-03-08 11:41:57 +11:00
wish
3e71c308f4 minor MhfInfoGuild changes 2025-03-06 23:01:22 +11:00
wish
3c0d29ed41 fix invalidateSessions 2025-02-27 20:06:05 +11:00
wish
09f09e230d Merge pull request #133 from ZeruLight/main 2025-02-24 12:28:10 +11:00
wish
5028355cfc prevent nil pointer in MhfGetGuildManageRight 2025-02-23 21:46:00 +11:00
wish
ba04b79bd8 partially revert guildMembers query 2025-02-23 19:29:02 +11:00
wish
06c01153f6 Merge branch 'main' into fix/packet-queue 2025-02-18 03:27:01 +11:00
wish
296bc36dbc Merge pull request #131 from ZeruLight/dependabot/go_modules/golang.org/x/net-0.33.0
Bump golang.org/x/net from 0.23.0 to 0.33.0
2025-02-18 03:23:19 +11:00
wish
79b65281f9 Merge branch 'main' into fix/packet-queue 2025-02-18 03:21:11 +11:00
wish
d17d97fefc update workflow 2025-02-18 03:20:43 +11:00
dependabot[bot]
0bf39b9caf Bump golang.org/x/net from 0.23.0 to 0.33.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.23.0 to 0.33.0.
- [Commits](https://github.com/golang/net/compare/v0.23.0...v0.33.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 16:19:53 +00:00
wish
51ae16541f update workflow 2025-02-18 03:18:54 +11:00
wish
d86f50bd29 Merge branch 'main' into fix/packet-queue 2025-02-18 03:16:41 +11:00
wish
7c61f70590 add invalidateSessions 2025-02-18 03:16:18 +11:00
wish
d1dfc3fbb1 packet queue fix proposal 2025-02-18 03:12:09 +11:00
wish
b3305d1185 Update handlers_cafe.go 2025-01-15 00:38:12 +11:00
wish
4eed6a9738 add playtime chat command 2024-11-09 18:20:49 +11:00
wish
ab7bb0d004 revert packet concatenation 2024-11-09 17:39:14 +11:00
wish
7bf2fd5b8f revert packet concatenation 2024-11-09 17:22:43 +11:00
wish
366ec833d5 Merge pull request #130 from Brentdbr/ncafe
modified NetcafeDefaults to contain the retail Netcafe point rewards.
2024-10-20 11:32:58 +11:00
Brentdbr
a4fa55f9c9 modified NetcafeDefaults to contain the retail Netcafe point rewards. 2024-10-20 02:26:47 +02:00
wish
2215afca2b Merge pull request #121 from ZeruLight/dependabot/go_modules/golang.org/x/net-0.23.0
Bump golang.org/x/net from 0.18.0 to 0.23.0
2024-10-20 11:08:30 +11:00
wish
4348aa02a8 temporarily fix rasta expiration 2024-10-09 00:51:51 +11:00
wish
8191994acb add LoopDelay config option 2024-10-08 22:26:00 +11:00
wish
436e30f83d remove duplicate updateRights call 2024-10-08 21:07:13 +11:00
wish
34e84f31df ignore empty packet buffer 2024-10-08 21:06:52 +11:00
wish
1432e8f2b8 Merge remote-tracking branch 'origin/main' 2024-10-08 20:43:20 +11:00
wish
edd357fe50 concatenate packets during send 2024-10-08 20:42:42 +11:00
stratic-dev
ae32951671 Add troubleshooting for setup on docker and add opcode dec and hex to logger 2024-10-05 22:56:53 +01:00
stratic-dev
2d48d63263 added ./bin to ignore when building dockerfile 2024-10-05 04:36:37 +01:00
wish
b20969ddc6 emulate retail semaphore logic 2024-10-03 21:56:06 +10:00
wish
8f68e10f1d Merge remote-tracking branch 'origin/main' 2024-10-01 23:02:08 +10:00
wish
2c5896814f update ico resources 2024-10-01 23:01:15 +10:00
wish
8a55c5ff89 fix inflated festa rewards 2024-09-27 01:12:16 +10:00
wish
7d760bd3b4 fix EntranceServer clan member list limits 2024-08-08 22:16:39 +10:00
wish
04008fceb8 rewrite ReadMercenaryW handler 2024-08-08 22:16:09 +10:00
wish
1ab6940b01 add extra fields to Distributions 2024-08-08 22:14:35 +10:00
wish
ae759be046 Merge pull request #126 from ZeruLight/fix/quest-stamps
fix/quest-stamps
2024-07-24 23:46:13 +10:00
wish
459f382dd7 simplify 2024-07-24 23:41:05 +10:00
wish
f545576fc9 merge changes 2024-07-24 23:33:04 +10:00
wish
4204ab1ecb Merge branch 'refs/heads/main' into fix/quest-stamps 2024-07-24 23:28:13 +10:00
wish
717d785342 fix possible warehouse error 2024-07-23 21:56:01 +10:00
wish
d29b7d00fc fix retro stamp rewards 2024-07-23 21:26:43 +10:00
wish
b755de269e add retro stamp rewards 2024-07-23 00:11:54 +10:00
wish
0ef3b08e86 Merge pull request #125 from ZeruLight/feature/ngword
feature/ngword
2024-07-22 23:47:49 +10:00
wish
aa5d95e7c5 fix sjis ngwords 2024-07-22 23:44:53 +10:00
wish
5de6570510 ascii working, sjis not working 2024-07-16 01:13:17 +10:00
wish
ca38f5671d ascii working, sjis not working 2024-07-16 01:12:02 +10:00
wish
632aa081b9 decode SMC table 2024-07-16 00:57:59 +10:00
wish
0caaeac3af initial ngword commit 2024-07-15 01:07:50 +10:00
wish
dd13713bc1 fix parsing SysTerminalLog 2024-06-25 22:50:58 +10:00
wish
12c7774cc1 fix GetCafeDuration 2024-06-25 20:35:56 +10:00
wish
e12f444b8d fix GetCafeDuration 2024-06-16 18:16:12 +10:00
wish
100ec30fba fix GetCafeDuration 2024-06-16 17:46:12 +10:00
dependabot[bot]
ef99cc7659 Bump golang.org/x/net from 0.18.0 to 0.23.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.18.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.18.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-19 12:40:55 +00:00
stratic-dev
b8be6e7aa8 Merge pull request #120 from Nageld/main
docker updates
2024-03-29 14:14:55 +00:00
stratic-dev
853758a951 Merge pull request #119 from ZeruLight/feature/ps4
Feature/ps4
2024-03-24 19:59:19 +00:00
nageld
5342dc4df1 reference the bin and config in the root directory so they don't need to be duplicated in docker folder 2024-03-23 14:19:23 -04:00
nageld
a10ecf2a11 update init path 2024-03-23 14:17:14 -04:00
stratic-dev
449c3e443b Merge pull request #117 from ZeruLight/feature/screenshot-api
Feature/screenshot api
2024-03-20 19:49:10 +00:00
stratic-dev
4d134d0624 Remove reformatting 2024-03-20 19:44:54 +00:00
stratic-dev
7d7fd50ba8 init ps4 support 2024-03-20 19:12:57 +00:00
wish
fc13b1bdd9 Merge pull request #118 from ZeruLight/fix/weekly-stamps
fix/weekly-stamps
2024-03-18 21:33:41 +11:00
wish
843b6a9dff fix quest stampcard 2024-03-17 16:39:06 +11:00
wish
d26ae4563e fix G1 compatibility 2024-03-17 16:35:16 +11:00
wish
76858bb111 bypass full Stage check if reserve slot exists 2024-03-16 21:02:49 +11:00
stratic-dev
295ff6537b Added utils to verify paths 2024-03-15 20:00:39 +00:00
stratic-dev
d123182a2f Renamed signv2 to api and enabled it by default 2024-03-15 19:37:55 +00:00
stratic-dev
62a2fe9f73 Added more regex 2024-03-15 18:43:33 +00:00
stratic-dev
12b3dd1be3 Add regex 2024-03-15 18:33:23 +00:00
stratic-dev
3797438ca2 No database 2024-03-15 00:54:18 +00:00
stratic-dev
def2bc3d2c initial commit 2024-03-12 23:00:01 +00:00
wish
25bb69b6df test weekly stamp fix 2024-03-11 23:31:39 +11:00
wish
19aadc6e10 enforce Stage.maxPlayers on MoveStage & BackStage 2024-03-10 19:50:21 +11:00
wish
5284fe55cd enforce Stage.maxPlayers on EnterStage 2024-03-10 18:33:55 +11:00
wish
b08c41a886 enforce Stage.maxPlayers on EnterStage 2024-03-10 18:26:26 +11:00
wish
bfb22951f2 fix PatchServer response 2024-03-10 11:05:41 +11:00
wish
89c1db4712 remove PS3 Patch Server default 2024-03-09 14:58:12 +11:00
wish
fac68a2b4b fix UpdateGuacot 2024-03-06 22:17:27 +11:00
wish
d9479ea863 move initialization schema 2024-03-02 21:39:23 +11:00
wish
734a982689 proofreading 2024-03-02 21:37:25 +11:00
wish
846f8d6693 retain excess Room RP 2024-02-28 21:24:55 +11:00
wish
e5703617bb add support for Clan Changing Room 2024-02-28 19:29:06 +11:00
wish
76425efd2e squash psn-link patch-schema 2024-02-25 22:26:44 +11:00
wish
f5c772413e rename instances of HRP to HR 2024-02-25 22:20:12 +11:00
wish
a0282bd11e prevent rand.Intn panic 2024-02-25 21:32:07 +11:00
wish
7640195d2b add min and max Feature Weapons 2024-02-25 21:18:14 +11:00
wish
d217ae1a85 Merge pull request #115 from ZeruLight/feature/warehouse-v2
feature/warehouse-v2
2024-02-25 15:38:35 +11:00
wish
ecffe63d6b index schema 2024-02-25 15:37:26 +11:00
wish
c74ce4b07f simplify reused code 2024-02-25 14:22:21 +11:00
wish
40d4aba3c4 convert other Warehouse types to new system 2024-02-25 14:12:37 +11:00
wish
a9b9c94347 fix RNG 2024-02-21 03:46:15 +11:00
wish
b969c53f3a fix Warehouse packet parsing 2024-02-21 02:09:42 +11:00
wish
e80a03dcc7 fix Warehouse Item functions 2024-02-21 02:09:26 +11:00
wish
020f122bb0 use better RNG for Warehouse IDs 2024-02-21 02:08:59 +11:00
wish
caf4deb1a6 fix Warehouse Equipment dereference 2024-02-20 21:16:31 +11:00
wish
9f19358c8b fix Warehouse serialisation across versions 2024-02-20 21:04:29 +11:00
wish
f51d65cf02 Merge branch 'main' into feature/warehouse-v2 2024-02-20 20:46:49 +11:00
wish
d0e727d444 fix remaining Festa queries 2024-02-20 18:52:56 +11:00
wish
db364110eb Merge branch 'main' into feature/warehouse-v2 2024-02-20 17:50:04 +11:00
wish
c3409996ef rollback unknown Festa values 2024-02-20 15:02:10 +11:00
wish
a968f18438 add support for SIGN requests 2024-02-20 14:53:59 +11:00
wish
c5905d74d4 index Patch Schemas 2024-02-20 04:19:43 +11:00
wish
5bcfe25ede implement Festa Bonus Categories & Guild Character optimisations 2024-02-20 04:18:16 +11:00
wish
d22a7c782f changes to FestivalColor 2024-02-20 04:16:26 +11:00
wish
1c4370b929 fix EnumerateFestaMember prior to Z2 2024-02-20 04:12:22 +11:00
wish
df062613eb add Save pointers for S6.0 2024-02-20 03:08:48 +11:00
wish
b73f85ef4a add Quest timer toggle Chat Command 2024-02-20 00:33:38 +11:00
wish
9cfbd92454 add blank Winner entries to InfoFesta 2024-02-19 18:36:03 +11:00
wish
183f88654b fix InfoFesta response on S6.0 2024-02-19 18:12:51 +11:00
wish
864586a40b exclude 0 values on EnumerateQuest 2024-02-19 17:37:40 +11:00
wish
7549fe63e6 conform Event Quest body size & auto change gathering points 2024-02-19 17:35:24 +11:00
wish
0b3e1f520f use Monster enum on GetPaperData 2024-02-19 17:34:08 +11:00
wish
377ff14a22 use Monster enum on GetPaperData 2024-02-19 17:34:01 +11:00
wish
18cabd03f1 add version case to FestaInfo 2024-02-19 17:32:32 +11:00
wish
79cdc28a01 simplify Gem math 2024-02-14 18:36:06 +11:00
wish
685f51ecb3 clean up Tower responses 2024-02-14 18:03:56 +11:00
wish
5f370896df clean up Tower responses 2024-02-14 17:28:01 +11:00
wish
6ec9d9d869 add AutoBackportQuest DebugOption 2024-02-11 23:22:42 +11:00
wish
771f240d13 implement course 31 2024-02-10 17:45:40 +11:00
wish
bbf4fa2472 further tune value configuration 2024-02-10 03:07:13 +11:00
wish
df9e33bdcc fix dirty pr 2024-02-08 18:29:04 +11:00
stratic-dev
86f79e4331 Merge pull request #112 from ZeruLight/docker
Docker support and Authors
2024-02-01 21:59:57 +00:00
stratic-dev
b4639b628b Create AUTHORS.md 2024-02-01 21:56:43 +00:00
stratic-dev
08e6fd2cda Delete 9.2-init.sql 2024-02-01 21:54:40 +00:00
wish
1bbcae395b Merge pull request #113 from sasospanner/Config-mismatch 2024-01-30 15:58:07 +11:00
sasospanner
20cc4c2a9e fix config mismatch 2024-01-29 21:58:36 -05:00
stratic-dev
851301b088 Updated readme and added init schemas to folder 2024-01-26 17:59:34 +00:00
stratic-dev
abe4744587 Added db init script. Combined all schemas under schemas. Persisted
updates and init
2024-01-24 04:35:24 +00:00
stratic-dev
463ceba555 Added github action 2024-01-22 22:45:31 +00:00
stratic-dev
76e62c6af2 Added readme and comments to docker-compose 2024-01-22 22:35:45 +00:00
stratic-dev
4a7f7b8041 Added docker and docker-compose 2024-01-22 20:06:40 +00:00
wish
59eafbe3d5 fix EnumerateQuest rotation 2024-01-16 19:50:41 +11:00
wish
6b54e40cc6 add tuneValue comments 2024-01-14 14:13:11 +11:00
wish
1a6a9da308 add logging to EnumerateQuest 2024-01-14 14:09:51 +11:00
wish
4fbfd569df Merge pull request #111 from ZeruLight/feature/moderation
feature/moderation
2024-01-11 23:04:29 +11:00
wish
af29ee637e minor session optimisations 2024-01-11 23:03:53 +11:00
wish
2685476022 check against unwrapped error 2024-01-11 23:01:53 +11:00
wish
a7bf38388c fix package collision 2024-01-11 23:01:32 +11:00
wish
4ccb3af5ac simplify cryptography 2024-01-11 23:00:44 +11:00
wish
ba7321b535 fix stringstack & MoveStage error 2024-01-10 19:29:51 +11:00
wish
c8e21387c0 rewrite CastBinary payload handling 2024-01-06 17:43:25 +11:00
wish
f73bdd7445 rewrite CastBinary payload handling 2024-01-05 02:39:25 +11:00
wish
2135c443d8 add ban chat command 2024-01-03 19:30:57 +11:00
wish
e0615dcd0c add support for operator accounts & bans 2024-01-03 19:08:45 +11:00
wish
8cd114988d Merge pull request #110 from ZeruLight/feature/i18n
i18n proposal
2024-01-03 15:43:17 +11:00
wish
ca80a98141 i18n proposal 2024-01-03 04:22:25 +11:00
wish
1766b6f2bd rewrite EntranceServer response 2024-01-02 20:04:40 +11:00
wish
ca09c24656 Merge pull request #108 from ZeruLight/dependabot/go_modules/golang.org/x/crypto-0.17.0
Bump golang.org/x/crypto from 0.15.0 to 0.17.0
2024-01-02 19:58:31 +11:00
wish
d6322e2f80 Merge pull request #103 from matthe815/feature/discord-login
feat: Password resetting by Discord integration
2024-01-02 19:58:02 +11:00
wish
63388aa4f7 re-index patch-schema 2024-01-02 19:53:27 +11:00
wish
1ed8b97347 update onInteraction process 2024-01-01 23:39:29 +11:00
wish
0d28637095 support long messages, rename to RelayChannel, move commands out of main 2024-01-01 21:22:51 +11:00
wish
a602bda47b reuse existing token, JP string & command description 2024-01-01 02:10:27 +11:00
wish
4f5eeb1508 add ico resources 2024-01-01 01:03:20 +11:00
wish
b3a265e218 Merge remote-tracking branch 'origin/main' into feature/discord-login 2023-12-31 22:38:08 +11:00
wish
3db6ee7b25 simplify EntranceServer crypto 2023-12-31 19:56:20 +11:00
wish
57bf1ca6e4 simplify EntranceServer crypto 2023-12-31 19:12:33 +11:00
wish
1aa2e36087 simplify World name concatenation 2023-12-31 16:30:11 +11:00
wish
5a8bc3b67a fix EntranceServer response on G5 2023-12-31 15:12:20 +11:00
wish
32dee9039e simplify config 2023-12-31 12:54:18 +11:00
wish
0ea0dc217b simplify config 2023-12-31 12:51:24 +11:00
wish
52082aaf06 use correct GuildMember length 2023-12-31 11:43:10 +11:00
wish
0069a5029f decode Festa stuff 2023-12-31 11:42:44 +11:00
wish
fd02a12ae9 add DefaultCourses DevModeOption 2023-12-31 10:22:27 +11:00
Matthew
293122b9a1 rm: Unintentional file inclusion 2023-12-20 13:47:08 -08:00
dependabot[bot]
c715578519 Bump golang.org/x/crypto from 0.15.0 to 0.17.0
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.15.0 to 0.17.0.
- [Commits](https://github.com/golang/crypto/compare/v0.15.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 23:59:56 +00:00
wish
b8f431ae66 parse CapLink responses 2023-12-17 17:47:35 +11:00
wish
345126ffcb fix warehouseGetEquipment 2023-12-13 11:50:29 +11:00
wish
7e34862e25 Merge remote-tracking branch 'origin/main' into feature/warehouse-v2
# Conflicts:
#	server/channelserver/handlers.go
2023-12-13 11:38:05 +11:00
wish
6686d59146 fix UdSchedule debug response 2023-12-08 10:47:34 +11:00
wish
24eed13a7c Merge pull request #107 from ZeruLight/fix/goocoo
fix/goocoo
2023-12-05 23:50:56 +11:00
wish
a7ac2c0672 remove comment 2023-12-05 23:48:47 +11:00
Matthew
526a9504bb Merge branch 'feature/discord-login' of https://github.com/matthe815/Erupe into feature/discord-login 2023-12-04 13:48:32 -05:00
Matthew
26438306c6 fix: Missing closing bracket 2023-12-04 13:48:17 -05:00
Matthew
c1b9c75138 Merge branch 'ZeruLight:main' into feature/discord-login 2023-12-04 10:45:26 -08:00
wish
ef7d46ba2e revert UpdateGuacot parsing 2023-12-04 22:29:58 +11:00
wish
7717f2f12a fix Enumerate/UpdateGuacot 2023-12-04 22:06:43 +11:00
wish
4844acee9c fix UpdateEtcPoint logic 2023-12-04 20:10:14 +11:00
wish
b6e7f019de update mhfmon names 2023-12-03 19:56:18 +11:00
wish
8a485f3120 convert EnumeratePrice to use mhfmon enums 2023-12-03 19:35:24 +11:00
wish
ddcef6570f convert EnumeratePrice to use structs 2023-12-03 19:05:30 +11:00
wish
5662564842 add option to dump raw saves 2023-12-03 17:57:23 +11:00
wish
4ce65e47e6 revert stringstack.go changes 2023-12-03 17:50:01 +11:00
wish
da022d913b refactor TransitMessage handler 2023-12-03 17:40:47 +11:00
wish
d67ad93c63 allow TransitMessage to respond to local requests 2023-12-03 16:36:34 +11:00
wish
3d08e64b07 add comments 2023-12-02 21:18:16 +11:00
wish
af3491b996 add TODO 2023-12-02 21:18:00 +11:00
wish
9d54a9746c remove unused variable 2023-12-02 21:16:26 +11:00
wish
a604836b62 enumerate missing clients 2023-12-02 21:16:07 +11:00
wish
11bac4ecf3 handle UnreserveSrg 2023-12-02 21:10:52 +11:00
wish
df173e9edf refactor TransitMessage handler 2023-12-02 20:15:22 +11:00
wish
622b2efa03 refactor TransitMessage handler 2023-12-02 18:38:33 +11:00
wish
64427fd317 refactor TransitMessage handler 2023-12-02 17:51:20 +11:00
wish
d50eb923ba validate additional SysLogin data 2023-12-01 00:51:05 +11:00
wish
4bae0e5758 add option to alter maximum Clan Members 2023-11-30 23:07:13 +11:00
Matthew
22a02f9291 Merge pull request #105 from rockisch/signv2-user-token-id
Make sure signv2 returns user token ID
2023-11-29 20:36:30 -08:00
rockisch
b14b75ee23 Make sure signv2 returns user token ID
Noticed when refactoring 'mhf-iel' to support F5 that this info was
not mapped correctly.
2023-11-30 01:14:06 -03:00
Matthew
b7c5fe70e7 Merge branch 'main' into feature/discord-login 2023-11-29 10:52:01 -08:00
wish
51e1860a92 add support for multiple Conquest War targets 2023-11-30 00:35:39 +11:00
wish
a108a67522 add support for multiple Conquest War targets 2023-11-30 00:34:51 +11:00
wish
67e791be2b parse & stub PostSeibattle 2023-11-30 00:31:09 +11:00
wish
58708eaaf2 fix GetUdSchedule response 2023-11-30 00:30:32 +11:00
wish
c46a3a78f0 fix GetEarthStatus response 2023-11-30 00:07:36 +11:00
wish
617d600f9a test TSP accumulation 2023-11-30 00:07:09 +11:00
wish
4376ed6678 partial backport EnumerateShop 2023-11-29 23:41:06 +11:00
wish
15739ad0d2 fix PostTowerInfo not incrementing 2023-11-29 23:15:32 +11:00
wish
4a962e2701 fix SaveDecoMyset on first save 2023-11-29 23:14:34 +11:00
wish
c996975bf1 correct EnumerateShop response 2023-11-29 21:38:32 +11:00
wish
e914cf406b limit EnumerateShop responses 2023-11-29 21:37:41 +11:00
wish
ea981ca70f add Koban Shop items to OtherShops.sql 2023-11-29 21:36:50 +11:00
Matthew
1d816a8a6a Merge pull request #104 from matthe815/feature/custom-prefix
feat: Custom prefixes and basic help command
2023-11-28 15:14:58 -08:00
wish
d7b400c812 revise command descriptions 2023-11-28 23:41:54 +11:00
wish
1cd60eb5ae hide disabled commands 2023-11-28 23:41:22 +11:00
wish
8d02c9f907 remove unnecessary dependency change 2023-11-28 23:40:47 +11:00
wish
acf942075c use fallback backStage 2023-11-28 23:13:26 +11:00
wish
2502b47077 simplify SaveDecoMyset 2023-11-28 22:25:36 +11:00
wish
2199e07be8 simplify SaveDecoMyset 2023-11-28 22:07:20 +11:00
Matthew
7b7b2874c5 fix: Fixed description for reload command. 2023-11-27 16:14:32 -05:00
Matthew
eeeb998040 Merge branch 'ZeruLight:main' into feature/discord-login 2023-11-27 12:44:25 -08:00
Matthew
de5c3addd1 fix: Show config prefix instead of just ! 2023-11-27 15:34:28 -05:00
Matthew
88652e1dc0 chore: Change command name to show the prefix instead. 2023-11-27 15:32:52 -05:00
Matthew
325f6bebb9 Merge branch 'ZeruLight:main' into feature/custom-prefix 2023-11-27 12:29:15 -08:00
wish
dcac7b433e update Go dependencies 2023-11-27 23:10:25 +11:00
wish
7d0ef7db23 enable save pointers in legacy versions G1->G2 2023-11-27 22:20:17 +11:00
wish
ce849ef06e enable save pointers in legacy versions G3->G9.1 2023-11-27 22:09:02 +11:00
wish
c152e2d0b9 verify save pointers in legacy versions G3->G9.1 2023-11-27 22:00:47 +11:00
wish
f0744b4040 disable KQF command before G10 2023-11-27 21:59:58 +11:00
wish
bc12f4cd3b fix DecoMyset responses in legacy versions 2023-11-27 21:03:26 +11:00
wish
a846a71ca3 rewrite stringstack.go 2023-11-27 20:45:03 +11:00
Matthew
23bc66eda5 fix: Consider prefix length when slicing. 2023-11-27 04:07:44 -05:00
Matthew
ce773a6c56 feat: Finish help command and add description to commands. 2023-11-27 04:05:15 -05:00
Matthew
76ba7cb942 feat: Custom prefixes and basic help command 2023-11-27 03:41:48 -05:00
Matthew
a77d6d53aa refactor: Remove reverted mutex changes 2023-11-27 03:27:20 -05:00
Matthew
7d630088a4 refactor: Fix code formatting and reset config 2023-11-27 03:23:30 -05:00
Matthew
a4745f05d5 refactor: Clean up random token implementation 2023-11-27 03:03:48 -05:00
Matthew
523266fc68 refactor: Move realtime channels to its own config 2023-11-27 02:18:01 -05:00
Matthew
38b57c6d98 refactor: Change to using rand.Read instead of whatever the hell else was before 2023-11-27 01:08:40 -05:00
Matthew
d2e9e3d1a9 fix: Fix default config (whoops) 2023-11-26 16:49:11 -05:00
Matthew
226adddc43 feat: Generate hashes for Discord and allow password resets 2023-11-26 16:47:54 -05:00
Matthew
50946b9c68 Merge branch 'ZeruLight:main' into feature/discord-login 2023-11-26 09:18:54 -08:00
wish
3c6067c8a6 port partial fix/mutex-rework 2023-11-26 23:22:56 +11:00
wish
fc4476ed8c Merge branch 'main' of github.com:ZeruLight/Erupe 2023-11-26 20:55:00 +11:00
wish
22b1d1b716 Merge pull request #99 from rockisch/dev-proxy
Add dev proxy config
2023-11-26 20:53:55 +11:00
wish
8f8e82b3b4 Merge pull request #99 from rockisch/dev-proxy
Add dev proxy config
2023-11-26 20:50:27 +11:00
wish
a2f488e5e3 move ProxyPort config out of DevMode 2023-11-26 20:50:08 +11:00
wish
662c137467 update MezFes config for SignV2 2023-11-26 20:44:13 +11:00
wish
dfc359f5e2 structure & change config for MezFes 2023-11-26 19:42:27 +11:00
wish
a0fbfc248b fix TimeWeekX inconsistencies & limit MezFes duration 2023-11-26 19:21:31 +11:00
wish
b3af01b803 use seconds for arbitrary durations in config 2023-11-26 18:54:04 +11:00
Matthew
33665130cf feat: Discord basic implementation 2023-11-26 01:22:51 -05:00
wish
7e5fd73496 rename Event Quest cycling 'duration' to 'days' 2023-11-26 13:06:49 +11:00
wish
a0970de48c review pass for Event Quest cycling 2023-11-26 13:02:17 +11:00
stratic-dev
d799932f70 Merge pull request #101 from rockisch/signv2-changes
Implement final changes for custom launcher
2023-11-24 08:33:17 +00:00
Matthew
ae7044c771 Merge pull request #81 from Malckyor/main
Implement auto-cycle event quests
2023-11-24 00:26:27 -08:00
Matthew
b823cbf2ae chore: Rename schema to prevent confusion 2023-11-24 03:25:35 -05:00
rockisch
0481b15b9b Allow signv2 response to be configured 2023-11-23 22:12:36 -03:00
rockisch
2481d4871f Ensure save export can be changed in the future 2023-11-23 20:54:27 -03:00
rockisch
a0b50bdf8d Implement final changes for custom launcher 2023-11-23 20:51:25 -03:00
wish
aa77b52233 add legacy support for Frontier Point exchanges 2023-11-23 00:00:23 +11:00
wish
f9d7f56ccb fix Frontier Point exchanges 2023-11-22 23:54:59 +11:00
wish
0550fb21b5 parse & handle PlayFreeGacha 2023-11-22 22:59:36 +11:00
wish
ab6c86ce8e optimise Gacha code & fix rarity bug 2023-11-22 22:54:18 +11:00
wish
3f9c2e87f1 Merge branch 'main' of github.com:ZeruLight/Erupe 2023-11-22 21:31:19 +11:00
wish
5a6ced5a41 document unknown Festa values 2023-11-22 21:19:07 +11:00
wish
46eb75a866 Merge pull request #100 from ZeruLight/fix/legacy-distitem
fix/legacy-distitem
2023-11-22 20:49:07 +11:00
wish
b32c154fa0 decode EnumerateDistItem over multiple versions 2023-11-22 19:05:57 +11:00
rockisch
e39630564e Add dev proxy config 2023-11-22 00:01:04 -03:00
wish
d4ddf7bc25 initial legacy support for DistItem 2023-11-21 23:46:33 +11:00
wish
43f8cef35d fix server-side messages using wrong CID 2023-11-21 21:48:15 +11:00
Matthew
c86b95fe40 Merge branch 'main' of https://github.com/Malckyor/Erupe into pr/81 2023-11-19 14:35:25 -05:00
Matthew
e141b7980c chore: Fix config 2023-11-19 14:35:20 -05:00
Matthew
524009039c Merge branch 'main' into main 2023-11-19 14:34:30 -05:00
Matthew
46587b8d01 fix: Fix variables 2023-11-19 14:27:53 -05:00
Matthew
3b33c1917c sql: Remove new migration code from old patch-schema 2023-11-19 13:52:03 -05:00
Matthew
8dbc54fa14 config: Fixed config back to default values 2023-11-19 13:49:19 -05:00
Matthew
ffb0d25a43 docs: Fixed and cleaned a bit of the documentation 2023-11-19 13:48:43 -05:00
Matthew
858a9adb17 chore: Removed debug code 2023-11-19 13:45:30 -05:00
Matthew
6bd2b637a7 refactor: Moved quest duration variables to uint8 2023-11-19 13:44:11 -05:00
Matthew
3778d03402 feat: Default to always active if inactive time is not set 2023-11-19 13:39:59 -05:00
wish
405e65346b add LogMessageData DevModeOption & disable Logging by default 2023-11-20 00:58:24 +11:00
wish
e9fa4e5261 fix LogOutboundMessages not working 2023-11-20 00:49:50 +11:00
wish
bcf2ba40e5 fix possible integer bounding issues 2023-11-20 00:13:49 +11:00
wish
b6cc8c3a12 fix incorrect Client Version string 2023-11-20 00:01:22 +11:00
wish
105a118163 filter workflow triggers 2023-11-19 23:13:34 +11:00
wish
e066e9566f remove duplicate CleanupObject 2023-11-19 23:13:12 +11:00
wish
d7d3e7c61f update parsing of CastBinary & EnterStage 2023-11-19 23:12:58 +11:00
wish
e5fa0501b7 add packet time profiling 2023-11-19 20:17:03 +11:00
wish
1e6675b3f5 add support for Festa Trial voting 2023-11-19 04:59:30 +11:00
wish
85fc76edd5 update parsing of many packets 2023-11-19 02:34:02 +11:00
wish
fc57d63689 update parsing of many packets 2023-11-19 00:35:22 +11:00
Matthew
47ca302384 feat: Cycle simulation (simulate cycles if beyond a single set) 2023-11-18 03:18:35 -05:00
wish
734b60bee1 Merge branch 'main' of github.com:ZeruLight/Erupe 2023-11-18 15:54:05 +11:00
wish
c554943140 Merge pull request #96 from matthe815/seasons-fix
Fix: Re-add Seasons & Bug Fixes
2023-11-18 15:45:14 +11:00
wish
490aecd94b rewrite comments & change quest flag code 2023-11-18 15:44:59 +11:00
Matthew
c20380b79d fix: Continue instead of ending event quest parsing if an error occurs on a single quest 2023-11-17 22:27:50 -05:00
Matthew
a34a0e42b2 fix: Commit to database via unique index rather than quest_id 2023-11-17 22:21:48 -05:00
Matthew
50d3ec36b2 chore: Fix formatting 2023-11-17 22:21:15 -05:00
Matthew
233990f452 refactor: Change event quest updating to use transactions rather than directly commiting 2023-11-17 22:18:07 -05:00
Matthew
800e993c1f sql: Added 11-event_quest_cycling migration sql 2023-11-17 21:14:19 -05:00
Matthe815
6384d79a7a fix: Removed unnecessary condition 2023-11-16 11:29:31 -05:00
Matthe815
2e2d129871 docs: Fix annotation for custom quest conditions 2023-11-16 11:10:46 -05:00
Matthe815
34044f72b0 chore: Fix config.json 2023-11-16 11:07:00 -05:00
wish
6c32eae9f2 simplify code 2023-11-16 21:56:48 +11:00
wish
72bda06916 implement Quest caching 2023-11-16 21:51:28 +11:00
wish
15253cdc1f remove useless CIDs 2023-11-16 21:49:43 +11:00
wish
8c69a98c58 remove arbitrary test code 2023-11-16 21:31:31 +11:00
Matthew
a27d15bff1 style: Fixed inconsistent spacing and cleaned up SQL query strings 2023-11-16 02:38:58 -05:00
Matthe815
a9b8bb4c56 fix: Added flags to sql query 2023-11-16 02:00:01 -05:00
Matthe815
f588d47aa1 chore: Reset config files 2023-11-12 16:01:19 -05:00
wish
4a83b68725 Merge pull request #97 from ZeruLight/fix/rework-distributions
fix/rework-distributions
2023-11-11 19:42:08 +11:00
Matthe815
3e4e325675 feat: Implement event quest season/time flag override 2023-11-11 03:42:08 -05:00
Matthew
08a1f352cb Merge branch 'ZeruLight:main' into seasons-fix 2023-11-11 03:35:29 -05:00
Matthe815
611cb2da5b feat: Request custom files based on time of day. 2023-11-08 13:28:05 -05:00
Matthe815
378dfd0372 fix: Fixed issues with improper loading of areas 2023-11-07 21:16:03 -05:00
wish
af519a59cf rewrite EnumerateStage & parse ReserveStage 2023-11-07 21:14:45 -05:00
wish
7eaf37c1ff simplify DistributionDemo script 2023-11-07 22:00:07 +11:00
wish
317daef04b rewrite EnumerateDistItem handler 2023-11-07 21:26:45 +11:00
wish
14e61fd661 fix Distribution typing, accepting & add demo 2023-11-07 21:07:49 +11:00
wish
29904d5b92 fix signing of min/max Rank Distributions 2023-11-07 20:23:02 +11:00
wish
6ff20858ed rewrite EnumerateStage & parse ReserveStage 2023-11-07 16:50:39 +11:00
Matthe815
5e760da8bc chore: Removed credentials 2023-11-05 19:21:12 -05:00
Matthe815
cce64d4010 fix: Removed random print from code 2023-11-05 19:19:55 -05:00
Matthe815
68de64a05f fix: Fixed issue with seasons not properly displaying on client 2023-11-05 19:08:02 -05:00
Matthe815
4edeaedea3 fix: Restore seasons functionality into quests 2023-11-05 15:23:34 -05:00
wish
be6f55b5a8 initial distributions rework 2023-11-05 00:31:16 +11:00
wish
cf8a5da0b2 Update handlers_stage.go 2023-11-01 08:12:00 +11:00
wish
f9280f483f simplify & handle Mail better 2023-10-31 00:21:05 +11:00
wish
ffcf511c20 simplify UseKeepLoginBoost 2023-10-30 23:54:50 +11:00
wish
b526608f4b fix titles not updating correctly 2023-10-30 23:37:07 +11:00
wish
542b8f8bf6 rewrite EnumerateStage 2023-10-30 23:23:11 +11:00
wish
04858f11ea Merge pull request #95 from rockisch/signv2server-update
Update signv2server to return more data
2023-10-30 22:27:49 +11:00
rockisch
9d9cc0bf5d Use Go's naming recommendations 2023-10-29 21:24:51 -03:00
rockisch
60dd5df8bc Update signv2server to return more data 2023-10-29 21:21:11 -03:00
wish
e75a77e6b8 optimise grpToGR 2023-10-28 11:55:06 +11:00
wish
8abefd7441 fix null LoadScenarioData response 2023-10-28 11:53:53 +11:00
wish
0b75a42682 Update README.md 2023-10-26 22:31:00 +11:00
wish
3edc77d3b5 Update README.md 2023-10-26 22:30:04 +11:00
wish
58b401d978 Update README.md 2023-10-26 22:29:42 +11:00
wish
13375fa8e9 fix quest enumeration 2023-10-24 23:03:08 +11:00
wish
72f00c98e8 Merge pull request #91 from ZeruLight/feature/pax-fix
Added paxes fix and missing fields to db
2023-10-24 22:20:14 +11:00
wish
64cb106c70 formatting, strip out unknown values 2023-10-24 22:18:09 +11:00
wish
431b3bbeff Merge branch 'main' of github.com:ZeruLight/Erupe 2023-10-24 21:25:34 +11:00
wish
ba50dc419a fix parsing and handling of DistItem packets 2023-10-24 21:24:35 +11:00
wish
b7b077ca0b Merge pull request #93 from ZeruLight/fix/optimise-guild-treasure
fix/optimise-guild-treasure
2023-10-24 21:23:07 +11:00
wish
2f8d09b09e more GuildTresure optimisation 2023-10-24 21:21:21 +11:00
stratic-dev
c4e8cd5999 Added paxes fix and missing fields to db 2023-10-24 01:48:20 +01:00
wish
e688fdf3c5 more GuildTresure optimisation 2023-10-17 00:35:06 +11:00
wish
bf44944884 more GuildTresure optimisation 2023-10-14 14:14:28 +11:00
wish
7194cdbc07 optimise GuildTresure handlers 2023-10-12 23:54:35 +11:00
wish
94f9174afa change Airou struct definition & remove airoulist.bin 2023-10-12 23:27:54 +11:00
wish
0de15e8440 rewrite ReadMercenaryW parser 2023-10-12 23:26:12 +11:00
wish
dd26fc73c3 adjust GUrgentRate definition 2023-10-12 23:25:35 +11:00
wish
6f99698525 fix indentation 2023-10-08 20:37:04 +11:00
wish
641032f862 implement hunt data logging (partial #82) 2023-10-08 19:25:48 +11:00
wish
f37915bcae simplify Guild Huntdata & decimal conversions 2023-10-07 19:59:37 +11:00
wish
8e27617727 convert Guild Missions to struct 2023-10-07 19:58:49 +11:00
wish
7962dd723d Merge pull request #74 from stratic-dev/feature/scenario-counter
feat: added scenario counter driven by database
2023-10-07 17:33:58 +11:00
wish
80a2822214 #74 update file names & default scenarios 2023-10-07 17:33:40 +11:00
wish
6d31707414 Merge pull request #88 from legayacruise/legayacruise-patch-1
Correct leftover instances of "gook" to goocoo
2023-10-07 15:52:17 +11:00
wish
03f8997150 Merge pull request #87 from Samboge/main
Forward.5 Fixes
2023-10-07 12:55:53 +11:00
wish
0f2edbf028 simplify & fix UpdateRavi 2023-10-03 23:05:45 +11:00
wish
8fbbf13822 use better Bookshelf pointer & simplify pointer assignment 2023-10-03 00:48:37 +11:00
wish
d0431fbc1c ignore name-checker if using Season modes 2023-10-02 23:13:19 +11:00
wish
6bc883cc0e update README 2023-10-02 23:10:48 +11:00
wish
d389f110a8 test new pointers 2023-10-02 22:09:20 +11:00
wish
aa98e89d77 cover more versions with Hiden savedata 2023-10-02 01:19:56 +11:00
wish
2539afb5d3 simplify Festa reward data 2023-10-02 00:45:28 +11:00
wish
5d4a81a84f fix BookshelfData length 2023-10-01 23:18:23 +11:00
wish
1e1790eb84 fix incorrect case for EnumerateHouse response 2023-10-01 23:17:07 +11:00
wish
a6c8314187 convert some values to decimal 2023-10-01 15:54:45 +11:00
Samboge
aecb6af9e5 My Mission Fix for MHF-F5
Client only sent 322 byte (32 header + 290 byte of data)
2023-10-01 08:03:14 +07:00
wish
a9f280a2ef initial warehouse-v2 concept commit 2023-10-01 03:17:51 +11:00
legayacruise
b58eddca85 Correct instances of "gook" to goocoo
Thank you to Samboge for pointing that out.
2023-09-27 12:02:29 -04:00
Samboge
8f1317f498 Fix RP for MHF-F5
forgot to modify updateSaveDataWithStruct() to include forward 5
2023-09-27 13:52:29 +07:00
Samboge
2027238250 Fix for Festa Rewards and House Visit MHF-F5
Partial Fix for Forward 5
2023-09-27 07:12:27 +07:00
wish
4bf8dc32eb Merge pull request #86 from ZeruLight/chore/rename-goocoo
rename instances of gook to goocoo
2023-09-25 20:11:13 +10:00
wish
059f1942a9 rename instances of gook to goocoo 2023-09-17 23:45:32 +10:00
wish
4a883c601b Merge pull request #84 from ZeruLight/fix/ravi-v3
fix/ravi-v3
2023-09-17 20:38:03 +10:00
wish
4a35be488c rework Semaphores 2023-09-03 00:00:08 +10:00
wish
0bdd873336 broadcast Raviente party message correctly 2023-09-02 23:52:15 +10:00
wish
a5d9aea88a Merge remote-tracking branch 'origin/main' into fix/ravi-v3 2023-08-31 22:24:12 +10:00
wish
e4efb55a03 fix LoadDecoMyset response for G8 and G9 2023-08-31 00:08:03 +10:00
wish
56a32b879c fix invalid length tuneValues 2023-08-31 00:07:27 +10:00
wish
9f76d34e46 fix Raviente ID 2023-08-30 23:58:50 +10:00
wish
5b5621a3d8 fix and rework various Raviente ID systems 2023-08-30 23:43:56 +10:00
wish
42abdfb0c7 change getRaviSemaphore scope & handle RegisterEvent 2023-08-30 22:29:49 +10:00
wish
813a3df6a7 correctly parse RegisterEvent & move handlers 2023-08-30 22:18:37 +10:00
wish
81e8d21d4b clean up 2023-08-30 21:08:40 +10:00
wish
e6f1298935 disable incompatible ravi commands 2023-08-30 00:15:52 +10:00
wish
48fcfbd304 Merge remote-tracking branch 'origin/main' into fix/ravi-v3
# Conflicts:
#	server/channelserver/handlers_cast_binary.go
2023-08-29 23:38:24 +10:00
wish
83b84a8a19 Merge pull request #83 from ZeruLight/fix/chat-commands-args
fix/chat-commands-args
2023-08-29 23:28:27 +10:00
wish
1590d9c8d6 fix wrong arg 2023-08-29 23:26:10 +10:00
wish
4a95535314 Merge remote-tracking branch 'origin/main' into fix/chat-commands-args
# Conflicts:
#	server/channelserver/handlers_cast_binary.go
2023-08-29 22:41:59 +10:00
Ewerton B. S
45e912a8d9 Merge branch 'ZeruLight:main' into main 2023-08-28 05:48:31 +09:00
wish
1685f409e7 initial ravi-v3 commit 2023-08-27 22:16:51 +10:00
wish
a0f37d98b9 fix Semaphore backwards compatibility 2023-08-27 22:09:59 +10:00
wish
e329e00d5a backwards compatibility for Campaigns 2023-08-27 08:41:38 +10:00
wish
3fe31f58bd backwards compatibility for Campaigns 2023-08-27 07:59:51 +10:00
Ewerton B. S
b74e571beb Update handlers_quest.go 2023-08-23 08:07:15 +09:00
Ewerton B. S
5cd268df23 Update 03-event_quests.sql auto-cycle 2023-08-23 05:31:12 +09:00
Ewerton B. S
43c59da809 Removed auto-cycle option 2023-08-23 05:30:27 +09:00
Ewerton B. S
c4f11721c6 Removed auto-cycle option 2023-08-23 05:30:02 +09:00
Ewerton B. S
d3a6121b2c Reworke auto-cycle code 2023-08-23 05:28:49 +09:00
wish
f680e33f16 fix EnumerateQuest parsing and limit tuneValue slice length 2023-08-21 22:22:15 +10:00
wish
192e68ba86 correctly parse some ravi packets & ignore zeroes 2023-08-21 21:39:22 +10:00
Ewerton B. S
391e0c9d98 Update default weeklyCycle value
This value cannot be null or the quests won't appear in game.
2023-08-21 08:55:05 +09:00
Ewerton B. S
5d156021dc Update a condition 2023-08-21 08:53:49 +09:00
Ewerton B. S
30a215396b Update 03-event_quests.sql auto-cycle 2023-08-21 03:23:37 +09:00
Ewerton B. S
c0d11bea4b Update config.go auto-cycle 2023-08-21 03:22:45 +09:00
Ewerton B. S
6708c9fc8f Update config.json auto cycle 2023-08-21 03:21:49 +09:00
Ewerton B. S
f7c4a1c925 Update auto-cycle code
Cycle amount can now be set in the config.json.
Instead of making a new database table it's now using the events table.
2023-08-21 03:20:46 +09:00
wish
ab81ca9233 fix built-in shadowing in generateFeatureWeapons 2023-08-20 22:25:57 +10:00
wish
9381534a7d rename Event type variables 2023-08-20 22:24:04 +10:00
wish
a9fabcab23 clean up config.go 2023-08-20 22:19:16 +10:00
wish
b7903f4e7a update to Golang 1.21 2023-08-20 18:44:33 +10:00
wish
6856d71cec delete unused timeserver module 2023-08-20 16:38:57 +10:00
wish
fdb966b11c update Golang version in actions workflow 2023-08-20 16:19:05 +10:00
wish
6f9974fa26 update Golang dependencies 2023-08-20 15:30:24 +10:00
Ewerton B. S
f643960b62 Cleaning leftover of personal if-else 2023-08-20 08:38:23 +09:00
Ewerton B. S
f5b40b55b9 Update 03-event_quests.sql for auto-cycle 2023-08-20 08:00:39 +09:00
Ewerton B. S
fe465b5de4 Update config.json for auto-cycle 2023-08-20 07:59:45 +09:00
Ewerton B. S
292426bb5d Update config for auto-cycle 2023-08-20 07:58:59 +09:00
Ewerton B. S
f2bf8be1ae Auto-cycle event quests in the database 2023-08-20 07:58:08 +09:00
wish
b69b396978 fix maximum FP data size in response 2023-08-17 22:15:36 +10:00
wish
92771f0076 test backwards compatible event quests 2023-08-17 01:07:53 +10:00
wish
ec1b6e3f50 Merge pull request #80 from ZeruLight/feature/raviente-latency
implement customisable Raviente latency
2023-08-13 11:49:49 +10:00
wish
6860098829 implement customisable Raviente latency 2023-08-09 23:20:50 +10:00
wish
616299668c Merge pull request #79 from ZeruLight/feature/psn-link
feature/psn-link
2023-08-09 22:06:09 +10:00
wish
86f63d6a38 properly support PS3 account linking 2023-08-09 22:04:15 +10:00
wish
6c68b2f3ed prevent PSN fake login from attempting to create a character 2023-08-02 21:04:08 +10:00
wish
165bdaf760 prevent link command from duplicating PSN connections 2023-08-02 21:03:24 +10:00
wish
de53e9ded1 Merge remote-tracking branch 'origin/main' into feature/psn-link
# Conflicts:
#	server/signserver/session.go
2023-08-02 19:50:03 +10:00
wish
f2c7986d82 hide Gacha before it was reworked 2023-07-31 21:17:40 +10:00
wish
b0f6428216 decode & stub GetRandFromTable 2023-07-30 23:26:06 +10:00
wish
ade4d7ea21 additional Gacha functionality 2023-07-30 23:25:31 +10:00
wish
872459e7bd fix dumpSaveData not recursively creating folders 2023-07-30 22:39:31 +10:00
wish
559ce45f05 simplify EquipSkinHist 2023-07-30 20:31:07 +10:00
wish
357ba57f16 fix EquipSkinHist in Z1 & Z2 2023-07-30 20:14:41 +10:00
wish
d79481f0c8 implement Trend Weapons 2023-07-30 19:40:11 +10:00
wish
00a06fab17 order 9.3 Patch Schema files 2023-07-30 19:05:51 +10:00
wish
d0db775c11 parse TerminalLog correctly 2023-07-30 18:43:28 +10:00
wish
385a672c3d rewrite Channel response structure 2023-07-30 18:05:33 +10:00
wish
1912e1d68b increase maximum capacity of Semaphores 2023-07-30 18:04:49 +10:00
wish
8a7eb12a0c fix Event Quests not being selectable 2023-07-30 18:04:16 +10:00
wish
9642787631 rework Stage Object IDs 2023-07-29 22:35:08 +10:00
wish
69cc64b3b8 add EventQuests Bundled Schema 2023-07-29 21:37:01 +10:00
wish
4f5a876b57 Revert "simplify and expand Stage Object indexer"
This reverts commit 19e1eae5e2.
2023-07-29 17:25:28 +10:00
wish
b5a32344c3 Merge branch 'main' of github.com:ZeruLight/Erupe 2023-07-29 17:21:58 +10:00
wish
986a5d3d92 Merge pull request #73 from matthe815/main
Feature: Databased Event Lists & Dynamic Seasons Dev Option
2023-07-29 17:18:44 +10:00
wish
d1d3ddd803 Merge branch 'main' into main 2023-07-29 17:18:32 +10:00
wish
c80afa6005 add customisable Raviente max players 2023-07-29 17:15:53 +10:00
wish
2eeab72c1c update legacy WIIU code 2023-07-25 00:45:11 +10:00
wish
7edf07d853 use universal Sign request names 2023-07-25 00:44:19 +10:00
wish
a3e1207dfd fix conflicts 2023-07-24 23:42:51 +10:00
wish
2a9504cd26 Merge remote-tracking branch 'origin/main' into feature/psn-link
# Conflicts:
#	server/signserver/dbutils.go
#	server/signserver/dsgn_resp.go
#	server/signserver/session.go
2023-07-24 23:36:38 +10:00
wish
eb969f1cdc add VITASGN:000 to valid login requests 2023-07-24 23:16:40 +10:00
wish
478e5230cc rewrite chat commands into args processor 2023-07-23 16:24:41 +10:00
wish
19e1eae5e2 simplify and expand Stage Object indexer 2023-07-23 13:27:10 +10:00
wish
769f989c91 add MaximumFP option, hide null Festa Armor 2023-07-22 23:12:26 +10:00
wish
e6393d73dc fix and structise InfoFesta 2023-07-22 21:11:53 +10:00
wish
da3686b653 fix encryption not working with S6 2023-07-22 19:00:25 +10:00
wish
aad9425a73 guess Forward.5 compatibility 2023-07-22 18:22:21 +10:00
wish
32fe9335e2 Merge pull request #78 from ZeruLight/fix/transit-message
fix/transit-message
2023-07-22 16:49:37 +10:00
wish
dbedab4d33 add ClientMode support based on Forward.4 2023-07-22 16:47:44 +10:00
wish
cc428d85d3 read additional Find Party data into struct 2023-07-22 13:49:30 +10:00
wish
c625f595e3 set default StagePrefix for Find Party 2023-07-22 13:40:01 +10:00
wish
c3ee5ef759 rewrite TransitMessage Find Party 2023-07-22 13:34:29 +10:00
wish
0b4dca5c45 fix RP not being consistent between clients 2023-07-22 03:00:07 +10:00
wish
b3876f771f fix CreateAcquireSemaphore on S6 2023-07-21 23:41:56 +10:00
wish
4c13931000 fix TerminalLog on S6 2023-07-21 21:10:11 +10:00
wish
a66a32936f add S6 Savedata compatibility 2023-07-21 20:54:36 +10:00
wish
123434c374 add S6 Entrance compatibility 2023-07-21 20:18:14 +10:00
wish
2bcd3eb4f0 fix EnumerateShop on G1 2023-07-20 22:51:26 +10:00
wish
6a34fc9a76 add KaijiEvent GameplayOption 2023-07-20 22:51:05 +10:00
wish
893e89937f fix Quest Mark being labelled incorrectly 2023-07-19 23:23:31 +10:00
wish
d3f2dcf7ed change default SaveDumps destination 2023-07-19 22:14:17 +10:00
wish
d700b8bd91 simplify Savedata pointers 2023-07-19 22:13:01 +10:00
wish
db67746c30 parse & handle GetSenyuDailyCount 2023-07-19 21:44:24 +10:00
wish
5c68dc1ddc parse ReadLastWeekBeatRanking 2023-07-19 21:44:00 +10:00
wish
cd189e7ca3 parse SetCaAchievementHist 2023-07-19 21:43:41 +10:00
wish
4826882bcd correctly parse SexChanger 2023-07-19 21:42:54 +10:00
wish
06892439ac remove unused code 2023-07-19 21:40:36 +10:00
wish
452e8433be fix Quests not enumerating 2023-07-19 00:17:17 +10:00
wish
064659c829 split into questSuffix function 2023-07-19 00:03:09 +10:00
wish
ab3acecce6 fix Quest Enumeration strings 2023-07-19 00:00:40 +10:00
wish
f23da6fba5 remove Season from database 2023-07-18 23:00:00 +10:00
wish
f2cd6b7edb refactor loadQuestFile 2023-07-18 21:53:58 +10:00
wish
2ae42d59af refactor Quest Enumeration 2023-07-18 21:40:42 +10:00
wish
c6618b7688 squash Quest Enumeration functions 2023-07-17 19:48:54 +10:00
Matthe815
a497eaf4de refactor: Enumerate quests turned into a struct and loops 2023-07-16 19:00:25 -04:00
Matthew
86f3d08270 Merge branch 'ZeruLight:main' into main 2023-07-16 15:56:49 -04:00
wish
a98ebf5d52 rewrite into SeasonOverride 2023-07-16 21:57:29 +10:00
wish
568fa5e116 fix not reading from quest file 2023-07-16 21:16:44 +10:00
wish
411477f9b3 fix time calculations & undo config changes 2023-07-16 21:14:44 +10:00
wish
d6b8ac96d8 rename Campaign packet variables 2023-07-16 13:01:15 +10:00
wish
15e31d7786 decode EnumerateEvent 2023-07-16 13:00:25 +10:00
wish
8425c0a99e README formatting 2023-07-16 12:59:23 +10:00
wish
f2947f90c0 minor Campaign fixes 2023-07-16 11:48:09 +10:00
wish
e7a0813023 port Campaign structs 2023-07-16 10:16:23 +10:00
wish
aa442b3b7d parse most Campaign packets 2023-07-16 09:00:07 +10:00
wish
4e2cb1fad9 skip invalid pointers 2023-07-13 18:12:46 +10:00
wish
0d1ee983f8 decode Tournament handlers 2023-07-10 22:23:22 +10:00
wish
216893e3ce InfoGuild decoding & GetGuildManageRight cleanup 2023-07-09 15:57:48 +10:00
wish
9886f81b2b fix scenario responses 2023-07-09 01:05:27 +10:00
wish
3fc9a6f2ac clean up InfoScenarioCounter 2023-07-09 00:34:56 +10:00
wish
db6b7795c5 clean up OperateGuild 2023-07-08 22:41:57 +10:00
wish
4639a59e60 Merge remote-tracking branch 'origin/main' 2023-07-08 22:27:01 +10:00
wish
436d92cd7e fix MezFes Tickets not resetting & cleanup 2023-07-08 22:18:41 +10:00
wish
053343befb prevent Login Notices from overflowing 2023-07-08 22:17:41 +10:00
wish
a23e1b62a2 GetGuildInfo further decoding 2023-07-08 22:16:58 +10:00
wish
8030178b45 Merge pull request #75 from stratic-dev/feature/readme-update
clean: added config to readme
2023-07-08 22:14:34 +10:00
wish
88970a3ec3 readme review pass 2 2023-07-08 22:14:18 +10:00
straticspaff
229e9323ba feat: added veteran + beginner scenarios 2023-07-07 23:38:24 +01:00
wish
cf1da979ec readme review pass 1 2023-07-08 00:55:26 +10:00
wish
b46f0354d6 typing and formatting review 2023-07-08 00:41:03 +10:00
wish
310e049a23 correctly parse UpdateBeatLevel 2023-07-08 00:35:41 +10:00
wish
ab83e64f84 fix limited friends & clanmates amount 2023-07-08 00:35:15 +10:00
wish
60e86c74fe mitigate LoadDecoMyset crashing on older versions 2023-07-08 00:34:11 +10:00
Matthew
65ea285ee4 Merge pull request #2 from matthe815/seasons
fix: Timescale fixes for seasons
2023-07-06 17:14:24 -04:00
Matthe815
6938b57a60 fix: Timescale fixes for seasons 2023-07-06 17:00:17 -04:00
Matthew
eea8530511 Merge pull request #1 from matthe815/seasons
Feature: Dynamic Seasons
2023-07-05 19:35:06 -04:00
Matthe815
830bee8c6f config: Add config options for seasons 2023-07-05 19:31:26 -04:00
Matthe815
35f9d5ac18 feature: Season implementation 2023-07-05 19:29:39 -04:00
Matthe815
e9d151be33 Merge branch 'main' of https://github.com/matthe815/Erupe-1 2023-07-04 21:12:23 -04:00
Matthe815
ba20d2da84 fix: Fix quest success check 2023-07-04 21:12:08 -04:00
wish
f487db83da change Enumerated Quest format 2023-07-05 00:03:16 +10:00
wish
414eb3da90 fix Quest ID padding 2023-07-04 20:34:00 +10:00
straticspaff
5af40ab46a clean: added version info 2023-07-03 21:32:11 +01:00
straticspaff
ec1c9631c8 clean: added config to readme 2023-07-03 21:25:46 +01:00
straticspaff
a6650bb392 feat: added scenario counter driven by database 2023-07-03 20:29:56 +01:00
wish
e29ce1d82f fix events_quests id missing PK flag 2023-07-03 20:33:03 +10:00
wish
0bd4658a23 golang formatting pass 2023-07-03 20:31:53 +10:00
Matthe815
b16ec769ce Forgot to clear config 2023-07-03 03:15:57 -04:00
Matthe815
43b7418558 refactor: General code clean up 2023-07-03 03:08:35 -04:00
Matthe815
c3fb6aa821 refactor: Remove more debug code 2023-07-03 02:58:10 -04:00
Matthe815
99bbb08758 refactor: Remove debug coded 2023-07-03 02:53:45 -04:00
Matthe815
a065643783 feature: JPK encryption and databased events 2023-07-03 02:50:38 -04:00
wish
76a3d73102 add WIIUSGN:000 2023-07-03 03:59:00 +10:00
wish
d130233860 add support for SVR Entrance responses 2023-07-03 03:13:23 +10:00
wish
d23b6eb61a forgot SAF 2023-07-03 02:08:05 +10:00
wish
1f93419cb7 add support for more versions 2023-07-03 00:30:44 +10:00
wish
b7f9751787 handle BoostTime packets 2023-07-02 22:56:52 +10:00
wish
758bd90ab3 fix the last two bytes of HunterNavi savedata being clipped off 2023-07-02 17:06:28 +10:00
wish
35b383cba6 Merge pull request #72 from ZeruLight/fix/dynamic-tune-vals
dynamic tune values
2023-07-01 23:59:57 +10:00
wish
1169684e5b remove test PaperMission data 2023-07-01 12:53:17 +10:00
wish
f526624fd6 fix diva defense timestamps 2023-06-30 21:55:57 +10:00
wish
9c09ed1c4a fix diva defense timestamps 2023-06-30 21:51:28 +10:00
wish
e96e6372f5 hacky fix for PSSGN panic 2023-06-27 22:39:44 +10:00
wish
aaefb207de prevent lockup on Z1 StampcardStamp 2023-06-27 22:29:44 +10:00
wish
586ae8b388 add comment descriptions for PaperData 2023-06-25 21:44:59 +10:00
wish
fb5294e705 decode Get/PostNotice and GemHistory 2023-06-25 12:24:20 +10:00
wish
cdf7b09c48 partial Tenrouirai progression automation 2023-06-25 02:47:40 +10:00
wish
fa5b5bb774 fix variable mistake 2023-06-25 00:19:44 +10:00
wish
36cdc77321 fix contribution sorting 2023-06-25 00:18:08 +10:00
wish
4a21272c42 partial Tenrouirai automation and Gem fix 2023-06-25 00:11:47 +10:00
wish
796927ac61 add PS3_TROP to constant courses 2023-06-20 21:42:06 +10:00
wish
b60bf4979b fix ContractMercenary 2023-06-19 22:44:20 +10:00
wish
6865e2d530 rename Zone to Block 2023-06-19 22:43:32 +10:00
wish
0929592110 rework PaperData 2023-06-19 22:43:07 +10:00
wish
5464594c98 rename Zone to Block 2023-06-18 20:38:04 +10:00
wish
a9c3f82903 add ClientMode config option 2023-06-18 20:33:39 +10:00
wish
b4df642ee3 add ClientMode config option 2023-06-18 20:31:18 +10:00
wish
0b4108fb85 various Conquest changes 2023-06-12 23:23:53 +10:00
wish
d269d5f777 various Tower changes 2023-06-12 19:56:00 +10:00
wish
03dde7d60d various Tower changes 2023-06-12 00:05:51 +10:00
wish
75d5ceed4f various Tower changes 2023-06-12 00:01:20 +10:00
wish
2c8391b5a4 various Tower changes 2023-06-11 18:51:56 +10:00
wish
f69aebc9da Merge remote-tracking branch 'origin/main' into fix/dynamic-tune-vals 2023-06-11 13:51:41 +10:00
wish
fbecbfa571 rewrite Earth packet handlers 2023-06-10 23:09:50 +10:00
wish
d16acbc824 rewrite default Earth data 2023-06-10 16:06:19 +10:00
wish
ba1eea81e7 prevent save error crashes 2023-06-10 16:04:17 +10:00
wish
d16600a1f4 add comments 2023-06-10 14:50:42 +10:00
wish
f52c9e58fc add comments 2023-06-10 14:01:07 +10:00
wish
813dc5747b add DisableHunterNavi GameplayOption 2023-06-10 13:33:10 +10:00
wish
3d0316e669 add GCPMultiplier GameplayOption 2023-06-10 12:29:08 +10:00
wish
acdd9cf0db decode various Ryoudama packets 2023-05-28 16:07:06 +10:00
wish
430f27cfc3 decode various Ryoudama packets 2023-05-28 16:01:16 +10:00
wish
0703577571 fix errors 2023-05-28 14:57:32 +10:00
wish
64344ee2ee parse and stub various packets 2023-05-28 14:41:35 +10:00
wish
4e09726d97 add EarthStatus override options 2023-05-28 12:48:11 +10:00
wish
00d51e3e0b remove redundant conversion 2023-05-28 12:45:28 +10:00
wish
9278bfee18 add comments to tune values 2023-05-28 12:00:51 +10:00
wish
4c5c7b1c94 add ExtraCarves GameplayOption 2023-05-28 12:00:05 +10:00
wish
e814bfec68 add DisableRoad GameplayOption 2023-05-28 07:29:10 +10:00
wish
99919d0243 remove unused value 2023-05-23 21:55:32 +10:00
wish
f43f011b0b Merge remote-tracking branch 'origin/main' into fix/dynamic-tune-vals 2023-05-23 21:54:27 +10:00
wish
f40196b530 add EarthStatusOverride 2023-05-23 21:53:53 +10:00
wish
7d7da7e146 add customisable tune values 2023-05-17 22:32:20 +10:00
wish
d243a8c598 add customisable tune values 2023-05-17 22:18:18 +10:00
wish
2a7454d0ad add customisable tune values 2023-05-14 15:50:11 +10:00
wish
9dd9931176 add customisable tune values 2023-05-14 15:34:33 +10:00
wish
9aae992f64 tie into live time 2023-05-13 16:04:13 +10:00
wish
8ac0552ec1 initial decoding 2023-05-13 14:07:04 +10:00
wish
086b338f84 automatically create new character when none exist 2023-05-13 01:21:37 +10:00
wish
e1eea87d73 add mezfes tickets to gameplay options 2023-05-04 23:53:45 +10:00
wish
cf28660957 hacky fix for PS3 object desync 2023-05-04 23:41:51 +10:00
wish
a260500bb5 further sign server rewrite 2023-04-30 13:51:30 +10:00
wish
6601285218 unfinished proof of concept 2023-04-30 01:32:38 +10:00
wish
4d6a2b3ea9 fix multiple login notices 2023-04-29 15:00:13 +10:00
wish
cc979dbb41 Merge remote-tracking branch 'origin/feature/wiiusgn' 2023-04-26 21:27:57 +10:00
wish
e3c5b4b7a7 Merge remote-tracking branch 'origin/main' 2023-04-26 21:24:46 +10:00
wish
5780c2f025 support language swapping on patch servers 2023-04-26 21:24:22 +10:00
wish
9bcf7e7b43 support language swapping on patch servers 2023-04-26 19:37:54 +10:00
wish
b6c6257036 Merge pull request #67 from Evotushon/main
Make README.md adequate to Markdown Styling Standards
2023-04-25 01:23:32 +10:00
Evotushon
3f6b7cd95e Remove typo 2023-04-24 16:31:48 +02:00
Evotushon
75a803f1a2 Make README.md adequate to Markdown Style Standards 2023-04-24 16:26:56 +02:00
wish
6fecfdd63f rewrite EnumerateGuildMember 2023-04-23 21:48:13 +10:00
wish
e61d6a60f3 rewrite EnumerateGuild 2023-04-23 20:26:51 +10:00
wish
e04c18bccf fix DeleteSemaphore variable naming 2023-04-23 15:35:18 +10:00
wish
058c387b11 only read first 64 bytes of wiiusgn key 2023-04-16 21:03:21 +10:00
wish
56ec654c72 wiiusgn test 2023-04-16 19:55:08 +10:00
wish
d31b6a74e6 redirect to stub patch server 2023-04-16 18:49:31 +10:00
wish
f379c27a01 combine login process again 2023-04-16 14:29:29 +10:00
wish
2e8d5fa823 implement support for PS3SGN 2023-04-16 14:15:22 +10:00
wish
01c5627274 Merge pull request #66 from ZeruLight/feature/vita
feature/vita
2023-04-15 13:36:49 +10:00
wish
90cb8525e5 add support for PS3SGN 2023-04-15 11:27:43 +10:00
wish
aeab3352ae rename psn command 2023-04-15 11:19:19 +10:00
wish
f5ae129cad implement psn linking capability 2023-04-15 11:00:49 +10:00
wish
69edc6f961 fix mezfes 2023-04-15 10:49:20 +10:00
wish
2ede81925a rewrite signserver 2023-04-12 05:37:41 +10:00
wish
23138b2d5b update versioning 2023-04-11 21:08:00 +10:00
wish
3be014ba7f remove unused code 2023-04-11 21:07:43 +10:00
wish
4ffb176049 prevent reading past message board packet 2023-04-10 18:52:12 +10:00
wish
b0d53431c0 Merge pull request #65 from BlackhawkGT/main
Fix pointerGender offset
2023-04-07 19:40:15 +10:00
Sophie R
13522ef2c9 Fix pointerGender offset being wrong
Every character seems to be assigned as male no matter what and changing the offset to 0x51 fixes this.
2023-04-06 14:44:27 +02:00
wish
f0db7f0a19 finalise 9.2 2023-04-01 17:58:26 +11:00
wish
7c5b027457 fix schema 2023-03-31 23:43:48 +11:00
wish
0345fb6da9 undo drop column 2023-03-31 23:43:07 +11:00
wish
006f44f3a6 fix feature weapon RNG 2023-03-31 00:53:50 +11:00
wish
31adb0b1d6 add miscellaneous cleanup queries 2023-03-31 00:46:48 +11:00
wish
7d884da938 replace deprecated code 2023-03-31 00:04:51 +11:00
wish
29f91bcd9b link gacha demo templates 2023-03-30 23:50:54 +11:00
wish
759b8e47d1 create schema for gacha demos 2023-03-30 23:42:39 +11:00
wish
a042cef5b1 fix possible infinite loop in gacha rolls 2023-03-30 23:32:10 +11:00
wish
84c3944e19 update default rights integer 2023-03-30 22:17:44 +11:00
wish
8749674a63 replace deprecated rand call 2023-03-30 21:59:51 +11:00
wish
61d15ddd43 remove mail item workaround 2023-03-30 21:48:23 +11:00
wish
107eddfea5 stub interception map packets 2023-03-27 21:29:23 +11:00
wish
f85be55a6d fix login boost creating hanging connections 2023-03-14 02:16:09 +11:00
wish
8189f90031 fix shop-db schema 2023-03-13 23:37:00 +11:00
wish
265b74b6b0 fix shop-db schema 2023-03-13 23:25:12 +11:00
wish
c204813be2 merge optional shop items from feature/diva 2023-03-13 14:31:52 +11:00
wish
c344fdd4c9 fix scout enumeration data 2023-03-12 23:43:30 +11:00
wish
a2a4989cda replace outdated code 2023-03-12 23:36:26 +11:00
wish
6aa075009e timestamp fixes 2023-03-12 23:31:39 +11:00
wish
ccfd2ac36f create RNG in token module 2023-03-12 23:29:50 +11:00
wish
cce558db9c amend comment 2023-03-12 22:28:27 +11:00
wish
a2d24837bd correct minor mistake 2023-03-12 22:10:13 +11:00
wish
2136638c37 fix missing primary key 2023-03-12 22:08:07 +11:00
wish
40d5c67902 merge shop enumeration fixes from feature/diva 2023-03-12 22:05:42 +11:00
wish
511757838e Merge pull request #64 from ZeruLight/feature/rights-v4
feature/rights-v4
2023-03-12 02:11:08 +11:00
wish
5761a38000 extra content 2023-03-12 02:09:36 +11:00
wish
9a42042686 improve course command responses 2023-03-12 01:59:21 +11:00
wish
baf53ea212 flip error check in course command and remove unused code 2023-03-11 23:40:49 +11:00
wish
c95d02ec82 fix edge case on 0 rights int 2023-03-11 23:34:43 +11:00
wish
41df26928c remove useless time initialisers 2023-03-11 23:34:19 +11:00
wish
0a98a651b1 simplify course alias definition 2023-03-11 23:33:48 +11:00
wish
bcb71536ec initial rights v4 concept 2023-03-11 23:17:14 +11:00
wish
29cf7add11 rework netcafe course activation 2023-03-11 16:26:16 +11:00
wish
c110082ab5 test session timeout 2023-03-11 01:08:21 +11:00
wish
ab4669acc9 unhide EnumerateQuest packet logs 2023-03-11 00:57:14 +11:00
wish
051f2d2a4d parse GetRyoudama correctly 2023-03-11 00:55:28 +11:00
wish
d92270a249 fix PostTinyBin parsing 2023-03-11 00:55:23 +11:00
wish
7704481e78 fix fpoint items schema 2023-03-10 01:09:49 +11:00
wish
8df5697dd3 make raviente multiplier more accurate 2023-03-09 22:56:21 +11:00
wish
ce30c1231d remove countdown on auto restart 2023-03-09 22:23:45 +11:00
wish
3692a14067 Merge pull request #63 from ZeruLight/feature/new-log-syntax
feature/new-log-syntax
2023-03-09 22:13:17 +11:00
wish
0caf610d33 rework logging code 2023-03-09 22:11:55 +11:00
wish
dcab41a6c7 rework logging code 2023-03-09 22:05:32 +11:00
wish
b6fcc1ca14 add option to change daily quest allowance 2023-03-09 20:31:39 +11:00
wish
644a76cb9a add support for multiple login notices 2023-03-09 20:12:59 +11:00
wish
29988f2bdd fix disable boost time 2023-03-09 19:33:50 +11:00
wish
986a0034c8 add various gameplay options 2023-03-09 19:23:31 +11:00
wish
a3b1b2841f move active features to gameplay options 2023-03-09 18:54:53 +11:00
wish
1f349a342e add some gameplay options 2023-03-09 18:51:36 +11:00
wish
ee4d2ab705 prevent rp logs being nil 2023-03-09 17:34:42 +11:00
wish
cd53f5f9db prevent applicants from receiving message board notifications 2023-03-09 17:34:05 +11:00
wish
d5dc15fc93 implement guild semaphore locking 2023-03-09 17:31:43 +11:00
wish
9a8edf0b64 fix feature weapons not generating correctly 2023-03-07 21:03:42 +11:00
wish
ae5368b696 Merge pull request #62 from ZeruLight/fix/stage-concurrent-map 2023-03-06 11:47:10 +11:00
wish
78f7f29247 Merge branch 'main' into fix/stage-concurrent-map 2023-03-05 22:31:03 +11:00
wish
445b300b8b remove duplicate stage lock 2023-03-05 22:30:28 +11:00
wish
cfe6bd118c update startup logging 2023-03-05 22:24:33 +11:00
wish
1ab452fda7 update golang dependencies 2023-03-05 18:35:03 +11:00
wish
f886e6f183 Merge pull request #61 from ZeruLight/fix/time
fix/time
2023-03-05 18:14:26 +11:00
wish
b3e4da2c73 simplify guild message board query 2023-03-04 23:49:42 +11:00
wish
1158b60638 fix netcafe timestamp 2023-03-04 23:49:21 +11:00
wish
9cf637d842 fix feature weapon times 2023-03-04 23:22:00 +11:00
wish
c241a33657 add login boost schema 2023-03-04 22:56:26 +11:00
wish
4cfba97701 fix return expiry 2023-03-04 22:56:13 +11:00
wish
ecb93dbc13 fix guild meal enumeration 2023-03-04 22:15:39 +11:00
wish
a6bbb45101 fix guild meal timer 2023-03-04 21:50:49 +11:00
wish
e811dd1274 initial time fix 2023-03-04 21:43:10 +11:00
wish
42ab117c7f fix mezfes data saving 2023-02-28 23:15:21 +11:00
wish
d061ac6b1a remove attainable items from road shop 2023-02-28 18:19:38 +11:00
wish
bef11ce82e support more courses 2023-02-28 18:18:22 +11:00
wish
747f21c4db workaround for localhost connections 2023-02-25 16:12:51 +11:00
wish
bbaec08b67 remove unused database tables 2023-02-20 00:34:39 +11:00
wish
81dbbd62f4 Merge pull request #60 from ZeruLight/feature/gacha-enum
feature/gacha-enum
2023-02-18 18:07:53 +11:00
wish
a47303bec2 remove unused code 2023-02-18 18:05:51 +11:00
wish
a7aa0f1c33 separate out gacha function code 2023-02-18 18:05:33 +11:00
wish
66b13c8f58 rearrange gacha functions 2023-02-18 17:20:54 +11:00
wish
9b866967b8 add stepup and box gacha rewards to storage 2023-02-18 15:58:38 +11:00
wish
dfe4998649 implement box gacha 2023-02-18 15:57:17 +11:00
wish
7d5ec5a67e correctly enumerate box gacha 2023-02-18 14:55:45 +11:00
wish
0fcacc24a0 implement stepup gacha, fix unfulfilled rewards 2023-02-18 12:36:17 +11:00
wish
c3306de2ee fix gacha rewards overflowing 2023-02-18 10:43:47 +11:00
wish
8e6fa5e349 fix gacha reward handling 2023-02-17 00:22:58 +11:00
wish
6791740a76 Merge branch 'main' into feature/gacha-enum 2023-02-16 23:45:08 +11:00
wish
cc76e689f6 hacky fix for nil rows on treasureHuntUnregister 2023-02-16 22:58:57 +11:00
wish
c960430cc2 refactor guild message board code 2023-02-16 20:31:17 +11:00
wish
dc9059ea81 fix guild message board enumerating too many posts 2023-02-15 23:38:36 +11:00
wish
036c4adba1 fix gacha koban my mission exchange 2023-02-15 23:31:14 +11:00
wish
e73d4a03f4 fix gacha rolling and add guaranteed rewards 2023-02-15 23:30:42 +11:00
wish
e1986cb58b create transactGacha function 2023-02-15 00:22:28 +11:00
wish
403b5f1c7f add support for multiple rolls 2023-02-15 00:13:43 +11:00
wish
9805991c95 track gacha coin spending correctly 2023-02-13 23:41:01 +11:00
wish
452404e48c fix gacha enumeration recommendation tag 2023-02-13 23:40:17 +11:00
wish
f3995d3c74 Merge branch 'main' into feature/gacha-enum 2023-02-13 22:28:19 +11:00
wish
e98259a11a move various packet handlers 2023-02-13 22:27:07 +11:00
wish
091a8cd3da move caravan event handlers 2023-02-13 22:27:01 +11:00
wish
52d1bd1617 Merge remote-tracking branch 'origin/fix/stage-concurrent-map' into fix/stage-concurrent-map 2023-02-12 15:56:32 +11:00
wish
67122eb908 rewrite broadcast functions 2023-02-12 15:56:04 +11:00
wish
6897a03781 fix issue where broadcasts can go to unmapped sessions 2023-02-12 15:55:31 +11:00
wish
c718e9a5a7 fix various packet responses 2023-02-12 14:04:16 +11:00
wish
174f58c014 fix nil savedata error proper 2023-02-12 01:35:48 +11:00
wish
e9d57b477f fix incorrect patch schema 2023-02-12 01:31:11 +11:00
wish
2287e5a6b1 implement additional currency distribution handling 2023-02-12 01:27:49 +11:00
wish
91d9540021 add event rp donation tracking 2023-02-12 00:55:37 +11:00
wish
939c4e2496 fix nil savedata on logout 2023-02-11 20:36:55 +11:00
wish
955ed73dbb test using alternative tracking raviente semaphore 2023-02-08 00:03:23 +11:00
wish
132870f020 add support for JP chat command responses 2023-02-08 00:01:02 +11:00
wish
a47bde7a4a rewrite CastBinary parsing 2023-02-05 19:41:36 +11:00
wish
717a34b5b9 implement automatic damage scaling for raviente 2023-02-04 22:41:06 +11:00
wish
bea4a8ad3a make various handlers not error fatally 2023-02-04 22:14:30 +11:00
wish
09f2d138c0 make various handlers not error fatally 2023-02-04 15:44:07 +11:00
Yarg-mirror
3afaba5193 Update handlers_data.go
Under Windows: no change
Under Linux: Fix directory creation with no read/write permissions that failed the creation of save data dump
2023-02-04 14:32:10 +11:00
wish
e6845d74d0 make various handlers not error fatally 2023-02-04 14:29:28 +11:00
wish
218693ef40 clean up various save handlers 2023-02-02 21:08:09 +11:00
wish
c6b770672e swap placeholder data 2023-01-31 23:54:24 +11:00
wish
29d62634fa clean up various save handlers 2023-01-29 22:32:52 +11:00
wish
7ed3702cc0 make cafe overflow errors not fatal 2023-01-29 21:37:16 +11:00
wish
068b7ba72d clean up various save handlers 2023-01-29 21:35:01 +11:00
wish
beacffc2fe Merge pull request #57 from ZeruLight/feature/rasta
feature/rasta
2023-01-29 21:14:00 +11:00
wish
9f7a065971 Merge branch 'main' into feature/rasta
# Conflicts:
#	server/channelserver/handlers_mercenary.go
2023-01-29 21:01:10 +11:00
wish
de20a0668b clean up various mercenary handlers 2023-01-29 20:59:16 +11:00
wish
6181f7e5a4 fix GetEarthStatus response 2023-01-29 20:57:28 +11:00
wish
c37755f7c3 further decode merc packets 2023-01-29 14:40:27 +11:00
wish
1382e99fc6 further decode merc packets 2023-01-29 12:22:07 +11:00
wish
753d215211 fix reading and cancelling rasta contracts 2023-01-29 02:18:23 +11:00
wish
bd42b5d0c2 various changes 2023-01-29 01:27:46 +11:00
wish
15d2273724 Merge branch 'main' into feature/gacha-enum 2023-01-23 22:55:22 +11:00
wish
6be1e0c927 handle stampcard progression 2023-01-22 22:43:34 +11:00
wish
19897e76aa use placeholder data blob for quest enumeration 2023-01-22 20:07:34 +11:00
wish
7bede20f38 track etc points 2023-01-22 15:16:00 +11:00
wish
605b247f21 fix vs quest bets 2023-01-21 10:29:06 +11:00
wish
cc30b0d98a fix concurrent stage map write 2023-01-20 06:11:42 +11:00
wish
7d4559b589 variable changes 2023-01-15 21:36:50 +11:00
wish
e1df9fca04 fix p2w currency enumeration 2023-01-15 20:42:17 +11:00
wish
341276c0ff implement normal gacha functionality 2023-01-15 19:55:08 +11:00
wish
5a9d22a28a add point limitations 2023-01-08 19:16:45 +11:00
wish
c389348c3b stub InfoTournament 2023-01-08 18:45:12 +11:00
wish
2d96bcf9c7 stub InfoTournament 2023-01-08 18:39:44 +11:00
wish
d5e69aa83c fix handling new characters 2023-01-05 01:20:54 +11:00
wish
0774518eeb handle unnamed new characters 2023-01-04 10:47:24 +11:00
wish
a0917fdd06 remove obsolete LauncherServer 2022-12-31 01:59:55 +11:00
wish
aa3deca70a remove obsolete LauncherServer 2022-12-31 01:57:16 +11:00
wish
5bf9a946f6 update readme 2022-12-24 00:17:33 +11:00
wish
f8e21483ef escape db connection arguments 2022-12-24 00:09:38 +11:00
wish
3b96cfc0bd Merge pull request #56 from ZeruLight/fix/shop-enum
fix/shop-enum
2022-12-23 23:55:36 +11:00
wish
9234d82110 add option to flag corruption attempted saves as deleted 2022-12-23 23:18:00 +11:00
wish
7676f2e7d5 terminate session on save corruption 2022-12-23 23:12:01 +11:00
wish
00d3c05e6e Merge branch 'main' of github.com:ZeruLight/Erupe 2022-12-23 22:37:40 +11:00
wish
7c75e9118f prevent generating too many featured weapons 2022-12-23 22:37:19 +11:00
wish
9d0e47c2a8 Update README.md 2022-12-11 22:44:08 +11:00
wish
355ee39193 attach fpoint defaults 2022-11-26 08:38:38 +11:00
wish
3913316310 code cleanup 2022-11-26 08:37:33 +11:00
wish
7ddf63e0a1 fix vs quest items 2022-11-23 06:56:30 +11:00
wish
d21ecf2b31 shop enumeration pass 2 2022-11-21 11:42:19 +11:00
wish
9103debe99 shop enumeration first pass 2022-11-21 09:27:29 +11:00
wish
6dbb702665 fix GetGemInfo response 2022-11-18 21:17:41 +11:00
wish
539fcf9f07 add comments 2022-11-18 20:56:36 +11:00
wish
3294d0e222 Merge pull request #53 from ZeruLight/feature/lang
feature/languages
2022-11-12 13:37:46 +11:00
wish
b73ddb8866 support printing non-blocking packets 2022-11-12 13:36:27 +11:00
wish
85bff0cb19 raviente broadcast fixes 2022-11-12 13:09:59 +11:00
wish
5ecaa81b52 raviente string adjustments 2022-11-12 12:56:40 +11:00
wish
624fc70910 add raviente broadcast translations 2022-11-12 10:43:53 +11:00
wish
3ad5d7eea2 fix issue where broadcasts can go to unmapped sessions 2022-11-12 02:50:32 +11:00
wish
a9c1ab80b8 add missing period 2022-11-11 18:38:51 +11:00
wish
77b9079104 add JP strings for guild mail 2022-11-11 15:04:08 +11:00
wish
9fb8165be0 temporarily revert versioning 2022-11-10 14:43:58 +11:00
wish
c7ba4bd3fa fix netcafe time reset 2022-11-10 14:43:23 +11:00
wish
b717aeb9a6 add support for more strings 2022-11-10 14:42:29 +11:00
wish
94c729a212 add support for guild scout languages 2022-11-09 23:51:24 +11:00
wish
10b2ddcfd7 map language to server instead of session 2022-11-09 23:50:40 +11:00
wish
ec2ff61199 update versioning 2022-11-07 08:43:46 +11:00
wish
f52f50a0d6 Merge pull request #52 from rockisch/newsign
implement new sign server
2022-11-07 08:38:06 +11:00
wish
492e64d0d0 rename sign server and merge conflicts 2022-11-07 08:37:40 +11:00
wish
4682988442 Merge branch 'main' into pr/sign-v2 2022-11-07 08:28:37 +11:00
wish
7789424a08 initial multi-language concept 2022-11-07 00:35:45 +11:00
wish
6c3be9c32e decode and support screenshot sharing 2022-11-07 00:31:42 +11:00
wish
6605c6f28a rearrange config options 2022-11-07 00:30:24 +11:00
wish
d3e9d6971f rearrange config options 2022-11-07 00:28:43 +11:00
wish
f19dcf7483 rearrange config options 2022-11-07 00:24:11 +11:00
wish
181ea56837 convert token to library 2022-11-07 00:22:16 +11:00
rockisch
7f45d09d96 implement new sign server 2022-11-05 20:28:52 -03:00
wish
c9955a724f post-9.1 cleanup 2022-11-05 00:23:07 +11:00
wish
bce9838790 remove obsolete EnableLauncherServer option 2022-11-04 19:31:41 +11:00
wish
a99fa78fc2 change recurring course names 2022-11-04 18:02:41 +11:00
wish
e4ac849309 remove free course from config 2022-11-04 12:54:11 +11:00
wish
77f8f2019d finalise 9.1 2022-11-02 23:44:35 +11:00
wish
226f785c1b repository cleanup 2022-11-02 23:41:58 +11:00
wish
faee3a3513 Merge pull request #51 from ZeruLight/feature/quest-enum
feature/quest-enum
2022-11-02 23:36:26 +11:00
wish
cace0bb829 Merge branch 'main' into feature/quest-enum 2022-11-02 23:31:57 +11:00
wish
a30268a54a prevent invalid bitfield 2022-11-02 22:01:36 +11:00
wish
57fa0f5750 Merge pull request #50 from ZeruLight/feature/rightsv3.1
feature/rights-v3.1
2022-11-02 21:06:44 +11:00
wish
84f5a0ad42 only accumulate cafeTime with course 2022-11-02 20:57:45 +11:00
wish
5bb9637db8 rights v3.1 2022-11-02 20:44:53 +11:00
wish
ada593990e update CheckMonthlyItem 2022-11-02 19:13:23 +11:00
wish
5bf8c9d9a9 update course calculations 2022-11-02 13:30:16 +11:00
wish
1085f54c0f merge fixes 2022-11-01 12:41:45 +11:00
wish
f435c97f67 Merge branch 'main' into feature/quest-enum
# Conflicts:
#	server/channelserver/handlers_quest.go
2022-11-01 12:24:23 +11:00
wish
8326e22d9f empty ClientContext struct 2022-11-01 10:54:30 +11:00
wish
4a7cde77ea fix nil StrConv on save 2022-11-01 10:49:28 +11:00
wish
96993f62bd Merge pull request #48 from ZeruLight/feature/rights-v3
feature/rights-v3
2022-10-30 23:27:38 +11:00
wish
fe413b897a update default config 2022-10-30 23:19:52 +11:00
wish
4390617ccf update rights integer via struct 2022-10-30 23:18:53 +11:00
wish
676bb736bf lockable courses via config 2022-10-30 16:43:58 +11:00
wish
8afec7a7df upgrade to go 1.19 2022-10-30 16:42:10 +11:00
wish
31bac7bd68 initial course command 2022-10-30 15:03:12 +11:00
wish
bac4e70be4 course enumeration concept 2022-10-30 11:44:22 +11:00
wish
da1a48ee2c gitkeep files for quest folders 2022-10-30 09:59:07 +11:00
wish
a99939eba1 set default featured weapons to 1 2022-10-28 09:11:14 +11:00
wish
702471577b print correct missing scenario path 2022-10-28 08:54:45 +11:00
wish
e943b54df4 add patch server option 2022-10-27 13:11:56 +11:00
wish
82eeb79229 crash client on missing quest file 2022-10-27 13:04:52 +11:00
wish
75bd425fbf remove migrations directory 2022-10-24 18:33:55 +11:00
wish
55f1de11fe add account creation toggle 2022-10-24 17:48:57 +11:00
wish
fda2e74442 persist cafe time 2022-10-24 16:51:56 +11:00
wish
50c8d39d7f hide application notification for non recruiters 2022-10-24 16:09:43 +11:00
wish
cad882e899 normalise config 2022-10-24 16:01:26 +11:00
wish
77ed0564ce normalise config 2022-10-24 16:00:58 +11:00
wish
318cf6626c Merge pull request #46 from ZeruLight/feature/netcafe-reset
feature/netcafe reset
2022-10-24 09:27:29 +11:00
wish
9560cdc7df adjust wording 2022-10-24 09:25:20 +11:00
wish
25a6527c93 automate netcafe reset 2022-10-24 09:14:57 +11:00
wish
2013f51233 prevent panic on nil host 2022-10-24 07:56:36 +11:00
wish
4dfc6c11dc fix disconnect not applying to other stages 2022-10-24 05:23:05 +11:00
wish
ae8741dbd2 prevent panic on nil stage 2022-10-24 05:04:28 +11:00
wish
a71ad2aa3e fix festa prize enumeration 2022-10-23 18:50:48 +11:00
wish
cfb2dff9c3 sort festa members by soul count 2022-10-23 18:46:41 +11:00
wish
1ff7561d5c merge linting 2022-10-23 18:34:58 +11:00
wish
470eb32763 merge linting 2022-10-23 18:32:46 +11:00
wish
3cd756c35d fix road leaderboard overflow 2022-10-23 18:22:56 +11:00
wish
f960678918 Merge pull request #45 from rockisch/guild-pages
Guild Pagination
2022-10-23 17:36:27 +11:00
wish
1e3095781c optimise road leaderboard code 2022-10-23 17:31:14 +11:00
wish
33685fe36a fix road leaderboard overflow 2022-10-23 16:30:52 +11:00
rockisch
a9a7573687 handle pagination in guild enumeration 2022-10-23 01:20:27 -03:00
rockisch
b69305a8a9 read static byte in 'Parse' call 2022-10-23 01:20:22 -03:00
wish
7691b84259 add persistent featured weapons 2022-10-23 12:45:10 +11:00
wish
e5e3750045 auto-unregister from host-less quests 2022-10-22 05:54:53 +11:00
wish
6413be5320 enhance quest debugging tools 2022-10-19 23:09:43 +11:00
wish
9fc26405bb defer closing entranceserver connections 2022-10-18 12:03:12 +11:00
wish
5e42402a3d signserver cleanup 2022-10-18 11:42:12 +11:00
wish
c6c247b56b better festa responses 2022-10-17 13:41:30 +11:00
wish
ef5afa3899 add quest coordinate print option 2022-10-17 12:38:27 +11:00
wish
25491834df fix ud shop coin response 2022-10-13 04:21:47 +11:00
wish
07c00cc2e3 stub guild hunt box 2022-10-13 04:21:07 +11:00
wish
45b736db2d fix guild enumeration overflow 2022-10-12 22:44:08 +11:00
wish
f346c181d3 add versioning print 2022-10-12 19:27:35 +11:00
wish
7d3aa8c5b9 use default currentplayers integer on fail 2022-10-12 05:19:48 +11:00
wish
38cd00e41e Merge branch 'main' of github.com:ZeruLight/Erupe 2022-10-12 05:16:00 +11:00
wish
f9e9aaa303 use default season integer on fail 2022-10-12 05:15:40 +11:00
wish
6d169688d8 Merge pull request #43 from ZeruLight/packet-fix
address packet queueing issues
2022-10-12 05:07:40 +11:00
wish
1f95033e28 prevent fatal crash on missing savedata 2022-10-12 05:06:22 +11:00
wish
0bbb90a927 address packet queueing issues 2022-10-12 01:41:29 +11:00
wish
f2e697f3e7 disable Teleport command by default 2022-10-09 06:46:19 +11:00
wish
ced173be5e translate RoadShopItems to SQL 2022-10-09 06:33:18 +11:00
wish
6cffb84606 repository cleanup 2022-10-09 05:49:38 +11:00
wish
1152ec8970 fix default GR1 2022-10-09 05:14:11 +11:00
wish
748d2542e2 fix guild enumeration 2022-10-09 04:30:02 +11:00
wish
bc7b30afed dump goocoo savedata 2022-10-09 00:47:09 +11:00
wish
6ee9234745 fix various savedata bugs 2022-10-08 13:59:48 +11:00
wish
4f2a94cc50 partially decode TerminalLog 2022-10-06 02:23:01 +11:00
wish
d9541a6d1a rewrite dumpSaveData 2022-10-05 13:33:14 +11:00
wish
4fe56cd6e3 implement guild poogie outfits 2022-10-05 13:08:53 +11:00
wish
c4505ce30d fix event exchange response 2022-10-04 21:25:08 +11:00
wish
88fd6fbb7c Merge pull request #41 from ZeruLight/feature/systems-rework
feature/systems-rework
2022-10-04 20:25:55 +11:00
wish
a5b47310d1 clean up guild queries 2022-10-04 20:23:13 +11:00
wish
8f9648d9d8 fix alliance enumeration bugs 2022-10-01 01:26:00 +10:00
wish
665c2dd32f handle alliance kicking 2022-10-01 00:10:00 +10:00
wish
34f0eb8315 handle leaving alliance 2022-09-30 23:54:16 +10:00
wish
40a86364d9 handle alliance enumeration 2022-09-30 23:05:10 +10:00
wish
ca9f2de457 fix return not expiring 2022-09-30 17:59:56 +10:00
wish
e0c658363c fix struct save data 2022-09-30 17:40:23 +10:00
wish
e90e3da142 add KQF command 2022-09-30 03:47:59 +10:00
wish
6c323275a9 Merge branch 'main' into feature/systems-rework 2022-09-30 03:33:56 +10:00
wish
2b2fe9628f Merge pull request #40 from EclipseKnight/main
Command configuration and Scope increase
2022-09-30 03:20:02 +10:00
wish
9b1f3f8012 revise command rework 2022-09-30 02:54:37 +10:00
Eclipse
2f123d96df Implemented the ability to enable/disable entrance, sign, and channel servers 2022-09-22 20:51:18 -04:00
Eclipse
44a42a3365 Implemented the ability to enable and disable commands in configuration as well as increased scope of the config to the entire project. 2022-09-18 14:15:11 -04:00
wish
a35dfa21b5 create default response on rengoku ranking 2022-09-10 23:15:08 +10:00
wish
128f375cd2 dump savedata without name 2022-09-10 22:43:23 +10:00
wish
d81e55cab4 stub GetGemInfo 2022-09-08 15:16:44 +10:00
wish
580bfb12fe decode dsgn 2022-09-08 15:15:23 +10:00
wish
88815c0a05 dump other savedata types 2022-09-05 15:42:16 +10:00
wish
c60385e61f dump other savedata types 2022-09-05 15:36:01 +10:00
wish
616d58e70e dump other savedata types 2022-09-05 15:29:24 +10:00
wish
b172168418 implement proper house entry verification 2022-09-05 15:26:57 +10:00
wish
e38c892614 fix guild application enumeration 2022-09-05 15:24:07 +10:00
wish
65d35a5188 dump navi savedata 2022-09-05 14:34:48 +10:00
wish
bb12a89074 fix nil character data error 2022-09-05 14:29:25 +10:00
wish
2ca7218076 Merge pull request #38 from EclipseKnight/main
Added world_name and land columns to the servers table
2022-09-05 04:59:55 +10:00
wish
670f8f7882 update schema to merge existing data, move trophy 2022-09-04 18:12:51 +10:00
wish
377bb39be6 fix house password checking 2022-09-04 17:45:05 +10:00
wish
e0176ca774 indexing changes and add world description 2022-09-04 16:40:06 +10:00
Eclipse
3c096fa8d7 proper formating 2022-09-04 02:10:46 -04:00
wish
9259476316 implement persistent house data 2022-09-04 15:53:24 +10:00
wish
6c9e39a5cd fix savedata bugs 2022-09-04 15:52:50 +10:00
Eclipse
3ba56abfa8 Forgot to add alter lines if table already exists 2022-09-04 01:48:38 -04:00
Eclipse
dc874877d7 Added world_name and land columns to the servers table to provide easier identification for external and internal applications utilizing the database 2022-09-04 01:16:15 -04:00
wish
2e6aa1f1e4 remove unused config options 2022-09-04 03:32:43 +10:00
wish
90314fa411 rework savedata 2022-09-04 03:19:32 +10:00
wish
cd6561dd61 rework guild operations 2022-09-03 19:49:39 +10:00
wish
df1a4834ba fix airou dismissal 2022-09-02 20:28:58 +10:00
wish
1aa7bfdd51 Update README.md 2022-09-01 22:26:28 +10:00
wish
b0543c998e Merge branch 'main' of https://github.com/ZeruLight/Erupe 2022-09-01 20:43:06 +10:00
wish
1df961d2aa update readme 2022-09-01 20:40:31 +10:00
wish
a32040eaac Merge branch 'main' into feature/quest-enum 2022-09-01 01:22:44 +10:00
wish
5fa6348714 Delete issue-bug.md 2022-08-31 17:08:09 +10:00
wish
fd873be34f Update issue templates 2022-08-31 17:07:39 +10:00
wish
8c42dcafe8 partial courses rework 2022-08-31 16:44:35 +10:00
wish
991b79a64d stub rookie guild entry 2022-08-30 18:38:51 +10:00
wish
c39e263308 Merge pull request #36 from Tsugami/refacor/search-session-by-charId
refactor: change `FindSessionByCharID` to search on channel sessions
2022-08-30 16:58:23 +10:00
Yslan Ramos
63a829c913 refactor: change FindSessionByCharID to search on channel sessions 2022-08-27 20:05:25 -03:00
wish
b33248c370 Merge pull request #35 from ZeruLight/feature/return
implement return course
2022-08-26 21:07:05 +10:00
wish
dd1460b74b implement return course 2022-08-26 21:02:31 +10:00
wish
20c6ad2c8c update default login notice 2022-08-26 20:17:50 +10:00
wish
9e0511d7f1 Merge pull request #34 from ZeruLight/feature/festa
feature/festa
2022-08-26 20:09:21 +10:00
wish
7495731f87 update default diva status 2022-08-26 20:03:26 +10:00
wish
dc838adbcf CanRecruit function in guild 2022-08-26 20:01:10 +10:00
wish
9d589b3338 diva cleanup 2022-08-26 19:51:52 +10:00
wish
4537ba9492 update config 2022-08-26 17:30:35 +10:00
wish
09b5de79d3 diva scheduler and cleanup 2022-08-26 17:26:24 +10:00
wish
f80a807fb1 fix unneeded enumerations 2022-08-26 16:08:51 +10:00
wish
951c8e9c21 correct some festa functions 2022-08-26 15:46:31 +10:00
wish
2c51ddc518 fix launcher character enumeration 2022-08-25 20:53:28 +10:00
wish
d9b85cdf5b Merge remote-tracking branch 'origin/main' 2022-08-23 18:38:27 +10:00
wish
8099c5fd66 make launcher server optional 2022-08-23 18:38:13 +10:00
wish
f6148271ea simplify guild code 2022-08-23 09:26:09 +10:00
wish
745b7ee6e1 Update go.mod 2022-08-22 12:04:51 +10:00
wish
af667d8b00 Update go.mod 2022-08-22 12:03:15 +10:00
wish
5ecf8d945f Revert "Update go.mod"
This reverts commit 602aa8440b.
2022-08-22 11:31:10 +10:00
wish
602aa8440b Update go.mod 2022-08-22 11:24:29 +10:00
wish
1364de9a5e guild scouting improvements 2022-08-21 23:11:07 +10:00
wish
62dacd3a78 guild improvements 2022-08-21 18:44:28 +10:00
wish
40bcbfbbd6 Merge branch 'main' into feature/festa 2022-08-19 21:12:39 +10:00
wish
6e7259a068 dump more save data types to backup 2022-08-19 19:46:55 +10:00
wish
f87c1e480f add missing static stages 2022-08-19 17:27:40 +10:00
wish
2a1ce2b79d match houses by wildcard name 2022-08-19 17:06:15 +10:00
wish
a56309014b persistent BackStage 2022-08-19 16:39:07 +10:00
wish
8a3daa1cfa add exchanged tkts to warehouse gift box 2022-08-19 14:42:00 +10:00
wish
c4d128ec18 correctly handle yearly sub exchanges 2022-08-19 14:00:59 +10:00
wish
33150215e6 Merge pull request #31 from ZeruLight/feature/road-leaderboard
feature/road-leaderboard
2022-08-19 13:49:21 +10:00
wish
1ba3d55566 road leaderboard initial implementation 2022-08-19 03:53:28 +10:00
wish
56ae30745d remove unused static stages 2022-08-18 00:23:48 +10:00
wish
6864bc12cb Merge pull request #30 from ZeruLight/feature/discord-v2
feature/discord v2
2022-08-18 00:17:26 +10:00
wish
a79c09d205 restrict local chat, enable world chat 2022-08-18 00:11:54 +10:00
wish
e0c50bb5d7 correct padding on chat broadcast 2022-08-17 23:38:09 +10:00
wish
14d3b37435 discord bot cleanup 2022-08-17 23:29:16 +10:00
wish
97c57762f0 add query to reset savemercenary 2022-08-17 17:04:13 +10:00
wish
3c099acec4 update launcher links 2022-08-17 05:07:37 +10:00
wish
89683e6063 further TransitMessage decoding 2022-08-17 04:55:42 +10:00
wish
602cf31ed5 stub OperationInvGuild packets 2022-08-17 00:41:22 +10:00
wish
ed3687548c prevent CSVs from adding existing values 2022-08-16 21:03:30 +10:00
wish
5aa386a92c add player reload command 2022-08-16 13:06:16 +10:00
wish
7ef5b6ec2e Merge pull request #29 from ZeruLight/feature/warehouse
feature/warehouse
2022-08-16 01:58:23 +10:00
wish
bc75902da1 prevent nil warehouse error 2022-08-16 01:39:53 +10:00
wish
81e40b988d warehouse equipment updates 2022-08-15 21:53:00 +10:00
wish
b7d41c1c7f warehouse item updates 2022-08-15 20:09:19 +10:00
wish
86cb254d1a initial warehouse concept 2022-08-15 15:12:50 +10:00
wish
7a303d6e31 prevent use of reserved semaphore indexes 2022-08-14 19:03:11 +10:00
wish
d7cc7ab5e3 fix invalid semaphore id for raviente support 2022-08-14 18:52:53 +10:00
wish
d48a64e208 rename rights variable 2022-08-14 18:09:06 +10:00
wish
6b70771884 Merge pull request #28 from ZeruLight/feature/stamps
feature/stamps
2022-08-14 17:58:14 +10:00
wish
cecfb1348d add missing import 2022-08-14 17:39:25 +10:00
wish
6ab961fa90 initial stamp implementation 2022-08-14 17:38:25 +10:00
wish
12ac12ff3f stub mercenary data 2022-08-14 09:49:35 +10:00
wish
04fb399bc7 Merge pull request #27 from ZeruLight/feature/netcafe
Thanks Misumi!
2022-08-13 21:54:19 +10:00
wish
0edfd255fd correct backwards comparison 2022-08-13 21:46:05 +10:00
wish
440b73f696 implement netcafe points and boost time 2022-08-13 21:23:02 +10:00
wish
d8072ee06e default netcafe rewards and maintenance 2022-08-13 18:22:56 +10:00
wish
0ba9adcc88 handle receiving multiple items 2022-08-13 17:46:17 +10:00
wish
ac90c2dd09 correct minutes->seconds 2022-08-13 17:23:33 +10:00
wish
3bb0ab6295 cleanup logic and update cafe time 2022-08-13 17:21:24 +10:00
wish
18989e9435 initial netcafe implementation 2022-08-13 16:25:32 +10:00
wish
b093d98d01 decode tournament info 2022-08-13 02:08:26 +10:00
wish
0bf19c8ac8 temp handle monthly guild allowance 2022-08-12 16:38:00 +10:00
wish
d58f765898 prevent null souls on applicant members 2022-08-12 16:36:22 +10:00
wish
ce31b248eb loaddata fallback 2022-08-12 15:13:31 +10:00
wish
5ae2a606e0 Merge pull request #26 from ZeruLight/merge/feature/festa
merge changes into feature/festa
2022-08-12 00:43:46 +10:00
wish
712b3a732a Merge branch 'feature/festa' into merge/feature/festa 2022-08-12 00:41:32 +10:00
wish
263ce50569 Merge pull request #25 from ZeruLight/feature/titles
feature/titles
2022-08-11 18:49:14 +10:00
wish
a0dbe9d8c6 change title db syntax 2022-08-11 18:47:50 +10:00
wish
43ea158fe7 Merge branch 'main' of github.com:ZeruLight/Erupe 2022-08-11 18:21:26 +10:00
wish
315cc391ff fix management right acknowledgement 2022-08-11 18:21:10 +10:00
wish
2304581f90 Merge pull request #24 from ZeruLight/bug/user-binary-db-leak
actually fix db leak
2022-08-11 16:04:32 +10:00
wish
1b129ac630 actually prevent leak 2022-08-11 16:03:15 +10:00
wish
7dab9e3ae1 achievement fallback 2022-08-11 15:21:04 +10:00
wish
29d8617779 achievement fallback 2022-08-11 15:17:50 +10:00
wish
10b0f87182 Merge pull request #23 from ZeruLight/bug/user-binary-db-leak
clean up user binary querying
2022-08-11 15:02:25 +10:00
wish
33c3865da6 remove unused import 2022-08-11 15:00:15 +10:00
wish
e89c6f50ae clean up user binary querying 2022-08-11 14:58:58 +10:00
wish
2a65977a44 prevent panic on invalid string transform 2022-08-11 02:53:51 +10:00
wish
9fe1b1d04a initial titles implementation 2022-08-11 02:50:59 +10:00
wish
37e4b42b23 fix character gender offset 2022-08-10 01:17:00 +10:00
wish
077e03ff0d Merge pull request #21 from ZeruLight/feature/mercenaries
feature/mercenaries
2022-08-09 16:36:35 +10:00
wish
af48d75522 remove debug command 2022-08-09 13:45:04 +10:00
wish
032ee1eac7 add missing castbinary messagetype 2022-08-08 22:17:44 +10:00
wish
483490bbd5 use simplesucceed for existing semaphores 2022-08-08 22:17:14 +10:00
wish
265dc25800 fix merc saving/loading 2022-08-08 21:02:07 +10:00
wish
4968252491 initial mercenaries build 2022-08-08 18:21:54 +10:00
wish
4598220b2f Merge pull request #19 from ZeruLight/feature/achievements
feature/achievements
2022-08-08 05:06:40 +10:00
wish
c0bc7c2439 add comments 2022-08-08 05:04:06 +10:00
wish
781827c6bf update curve map 2022-08-08 05:01:18 +10:00
wish
503e944c2d enumerate achievement data 2022-08-08 04:53:55 +10:00
wish
06d4c56a65 Merge pull request #18 from ZeruLight/main
update achievement branch
2022-08-07 21:08:09 +10:00
wish
fd3405b392 resolve conflicts 2022-08-07 21:04:47 +10:00
wish
d993a095a0 update gitignore 2022-08-07 20:49:15 +10:00
wish
d10dcbc630 remove unused import 2022-08-07 20:16:21 +10:00
wish
f8ed2ef40d use sequential seasons 2022-08-07 17:16:54 +10:00
wish
057e598cbc retire questlists dir 2022-08-06 21:54:22 +10:00
wish
40f5744a7b recurse quest enum into dirs 2022-08-06 19:59:45 +10:00
wish
e84bdd5adf initial quest enumeration concept 2022-08-06 07:02:38 +10:00
wish
0b90dfd458 fix binpath reference when overriding saves 2022-08-05 20:47:20 +10:00
wish
ea63e3247c fix user binary query 2022-08-05 17:03:30 +10:00
wish
7a5b65f5b8 Merge pull request #17 from ZeruLight/feature/transit-message
handle TransitMessage
2022-08-05 16:59:46 +10:00
wish
43beb46221 rename EnumerateStage variable 2022-08-05 16:41:49 +10:00
wish
09812fa81b stage improvements 2022-08-05 16:38:42 +10:00
wish
56841a5ab3 add config option to toggle MF MP game 2022-08-05 07:42:45 +10:00
wish
820563dc4c matchmaking support 2022-08-05 07:39:37 +10:00
wish
08a7b91e11 handle TransitMessage 2022-08-05 01:57:56 +10:00
wish
e9cc5cc3e2 parse host as FQDN or IP 2022-08-04 23:52:13 +10:00
wish
a7ec76f865 document DisableSoftCrash 2022-08-04 23:18:26 +10:00
wish
cdbc11c4b2 add option to disable soft-crashing 2022-08-04 23:11:19 +10:00
wish
2f35823e1e fix enumerate client and handle type L stages 2022-08-04 23:04:55 +10:00
wish
96247a0101 Merge remote-tracking branch 'origin/main' into main 2022-08-04 22:56:04 +10:00
wish
816ff0eac5 correct failsafe size on PaddedString transform fail 2022-08-04 22:55:32 +10:00
wish
dd883a2216 Update go.yml 2022-08-04 21:20:27 +10:00
wish
556198af72 softfail on paddedstring and login cleanup 2022-08-04 21:01:32 +10:00
wish
e40ac7539c update login notice 2022-08-04 10:53:38 +10:00
wish
ed11b5ced9 implement token verification 2022-08-04 10:51:31 +10:00
wish
bf851b5c67 add missing mail query 2022-08-04 10:34:38 +10:00
wish
2570dda066 revert road shop changes 2022-08-04 10:34:22 +10:00
wish
05db1922d5 launcher improvements 2022-08-04 10:10:03 +10:00
wish
dcd6b35478 implement guild recruiters 2022-08-04 09:06:21 +10:00
wish
b2ebb8f1d9 recruiting guilds, stub EnumerateInvGuild 2022-08-04 07:56:31 +10:00
wish
38747d389c guild recruitment closing 2022-08-04 07:31:28 +10:00
wish
260d8d0dd8 guild pagination and cleanup 2022-08-04 07:08:10 +10:00
wish
ba927f877d fix guild enumeration and applications 2022-08-04 06:43:41 +10:00
wish
872a0b3785 treasure expiration and prevent overflow 2022-08-04 03:04:42 +10:00
wish
3bdc206ff7 cast binary fixes 2022-08-04 02:46:04 +10:00
wish
6424a5c639 support SJIS mail (#15) 2022-08-04 01:15:04 +10:00
wish
af2cd5cd7c Update LICENSE
Please read the following to understand why the license has been updated.

The entity known as 'The Erupe Developers' (currently only known as Fist, Andoryuuta and possibly some others), previously published a source of Erupe that was available under MIT License. This fork was used by the 'Einherjar Team' to modify and redistribute Erupe which is fully available under MIT.

However, when the 'Einherjar Team' updated the license, they stated 'The Erupe Developers from Einherjar Team'. However none of the persons under the entity 'The Erupe Developers' are part of the 'Einherjar Team'. This ultimately forfeits the licensing of any work that has been published by the 'Einherjar Team'.

The 'Einherjar Team' name will be left in the license as it previously was, this is out of respect for them, their work and the rights of the license itself, however no work exists in this repository that is able to be licensed by the 'Einherjar Team'.

'The Erupe Developers' entity has been separated, as it was in the original license and ZeruLight has also been appended to the list of contributors. Should future contributors like to have their work licensed within this fork of Erupe, they are welcome to append they or the the entity they represent to the license.
2022-08-03 22:27:14 +10:00
Evotushon
95104571a6 Rewrite README.md (#14) 2022-08-03 22:11:02 +10:00
wish
daa788815f post-SU9 cleanup 2022-08-03 17:23:11 +10:00
wish
8350273ab1 merge changes 2022-08-03 17:14:46 +10:00
wish
1e62e8bf96 achievements concept 2022-07-28 15:34:50 +10:00
wish
732199358a handle acquiring festa finale 2022-07-28 02:36:50 +10:00
wish
69eb7e1cba implement canned festa prizes 2022-07-28 01:51:17 +10:00
wish
3638d8aabf further decoding and guild fix 2022-07-27 21:07:15 +10:00
wish
9c772a09fc initial festa build 2022-07-27 21:05:57 +10:00
393 changed files with 17855 additions and 10873 deletions

1
.dockerignore Normal file
View File

@@ -0,0 +1 @@
bin/

21
.github/ISSUE_TEMPLATE/bug.md vendored Normal file
View File

@@ -0,0 +1,21 @@
---
name: Bug
about: Bug
title: ''
labels: bug
assignees: ''
---
**Description**:
A clear and concise description of what the bug is.
**Reproduction Steps**:
1.
2.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

17
.github/ISSUE_TEMPLATE/feature.md vendored Normal file
View File

@@ -0,0 +1,17 @@
---
name: Feature
about: Feature
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to an existing issue?**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Additional context**
Add any other context or screenshots about the feature request here.

48
.github/workflows/docker.yml vendored Normal file
View File

@@ -0,0 +1,48 @@
name: Create and publish a Docker image
# Configures this workflow to run every time a tag is created.
on:
push:
tags:
- '*'
# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
jobs:
build-and-push-image:
runs-on: ubuntu-latest
# Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
permissions:
contents: read
packages: write
#
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
# It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
# It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@@ -1,30 +1,55 @@
name: Build
on: [push]
on:
push:
paths:
- 'common/**'
- 'config/**'
- 'network/**'
- 'server/**'
- 'go.mod'
- 'go.sum'
- 'main.go'
- '.github/workflows/go.yml'
jobs:
build:
runs-on: windows-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v3
uses: actions/setup-go@v5
with:
go-version: 1.18
go-version: '1.21'
- name: Build
run: go build -v
- name: Build Linux-amd64
run: env GOOS=linux GOARCH=amd64 go build -v
- name: Upload artifacts
uses: actions/upload-artifact@v3
- name: Upload Linux-amd64 artifacts
uses: actions/upload-artifact@v4
with:
name: Erupe
name: Linux-amd64
path: |
./erupe-ce
./config.json
./www/
./savedata/
./bin/
./bundled-schema/
- name: Build Windows-amd64
run: env GOOS=windows GOARCH=amd64 go build -v
- name: Upload Windows-amd64 artifacts
uses: actions/upload-artifact@v4
with:
name: Windows-amd64
path: |
./erupe-ce.exe
./config.json
./www/
./savedata/
./bin/
./RoadShopItems.csv
./bundled-schema/

11
.gitignore vendored
View File

@@ -2,13 +2,10 @@
www/jp/
vendor/
bin/*.bin
bin/*.bak
bin/quests/*.bin
bin/questlists/*.bin
bin/scenarios/*.bin
bin/debug/*.bin
*.bin
savedata/*/
*.exe
*.lnk
*.bat
*.bat
/docker/db-data
screenshots/*

30
AUTHORS.md Normal file
View File

@@ -0,0 +1,30 @@
# List of authors who contributed to Erupe
## Point of current development
The project is currently developed under https://github.com/ZeruLight/Erupe
## History of development
Development of this project dates back to 2019, and was developed under various umbrellas over time:
* Cappuccino (Fist/Ando/Ellie42) ("The Erupe Developers"), 2019-2020 (https://github.com/Ellie42/Erupe / https://github.com/ricochhet/Erupe-Legacy) (Still active closed source)
* Einherjar Team, ????-2022 Feb (There is no git history for this period, this team's work was taken and used as a foundation for future repositories)
* Community Edition, 2022 (https://github.com/xl3lackout/Erupe)
* sekaiwish Fork, 2022 (https://github.com/sekaiwish/Erupe)
* ZeruLight, 2022-2023 (https://github.com/ZeruLight/Erupe)
## Authorship of the code
Authorship is assigned for each commit within the git history, which is stored in these git repos:
* https://github.com/ZeruLight/Erupe
* https://github.com/Ellie42/Erupe
* https://github.com/ricochhet/Erupe-Legacy
* https://github.com/xl3lackout/Erupe
Note the divergence between Ellie42's branch and xl3lackout's where history has been lost.
Unfortunately, we have no detailed information on the history of Erupe before 2022.
If somebody can provide information, please contact us, so that we can make this history available.
## Exceptions with third-party libraries
The third-party libraries have their own way of addressing authorship and the authorship of commits importing/updating
a third-party library reflects who did the importing instead of who wrote the code within the commit.
The authors of third-party libraries are not explicitly mentioned, and usually is possible to obtain from the files belonging to the third-party libraries.

14
Dockerfile Normal file
View File

@@ -0,0 +1,14 @@
FROM golang:1.21-alpine3.19
ENV GO111MODULE=on
WORKDIR /app/erupe
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
CMD [ "go", "run", "." ]

View File

@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2019 The Erupe Developers from Einherjar Team
Copyright (c) 2019 The Erupe Developers, The Erupe Developers from Einherjar Team, ZeruLight
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,7 +1,52 @@
# Erupe Community Edition
This is a community upload of a community project. The amount of people who worked on it is innumerous, and hard to keep track of. Credits to Andoryuuta, Fist's Team, the French Team, Mai's Team and many others. No matter the relations, these files will remain public and open source, free for all to use and modify.
# Erupe
A pastebin with various links, tips, and FAQ: https://pastebin.com/QqAwZSTC
## Client Compatibility
### Platforms
- PC
- PlayStation 3
- PlayStation Vita
- Wii U (Up to Z2)
### Versions (ClientMode)
- All versions after HR compression (G10-ZZ) have been tested extensively and have great functionality.
- All versions available on Wii U (G3-Z2) have been tested and should have good functionality.
- The second oldest found version is Forward.4 (FW.4), this version has basic functionality.
- The oldest found version is Season 6.0 (S6.0), however functionality is very limited.
An upload for the quest and scenario files exists here: https://github.com/xl3lackout/MHFZ-Quest-Files
(Over 300k+ files)
If you have an **installed** copy of Monster Hunter Frontier on an old hard drive, **please** get in contact so we can archive it!
## Setup
If you are only looking to install Erupe, please use [a pre-compiled binary](https://github.com/ZeruLight/Erupe/releases/latest).
If you want to modify or compile Erupe yourself, please read on.
## Requirements
- [Go](https://go.dev/dl/)
- [PostgreSQL](https://www.postgresql.org/download/)
## Installation
1. Bring up a fresh database by using the [backup file attached with the latest release](https://github.com/ZeruLight/Erupe/releases/latest/download/SCHEMA.sql).
2. Run each script under [patch-schema](./schemas/patch-schema) as they introduce newer schema.
3. Edit [config.json](./config.json) such that the database password matches your PostgreSQL setup.
4. Run `go build` or `go run .` to compile Erupe.
## Docker
Please see [docker/README.md](./docker/README.md). This is intended for quick installs and development, not for production.
## Schemas
We source control the following schemas:
- Initialization Schema: This initializes the application database to a specific version (9.1.0).
- Update Schemas: These are update files that should be ran on top of the initialization schema.
- Patch Schemas: These are for development and should be run after running all initialization and update schema. These get condensed into `Update Schemas` and deleted when updated to a new release.
- Bundled Schemas: These are demo reference files to give servers standard set-ups.
Note: Patch schemas are subject to change! You should only be using them if you are following along with development.
## Resources
- [Quest and Scenario Binary Files](https://files.catbox.moe/xf0l7w.7z)
- [Mezeporta Square Discord](https://discord.gg/DnwcpXM488)

View File

@@ -1,911 +0,0 @@
10,6,1,2146,25,1,0,0,1,1,0,1,0,0
10,6,2,2147,25,1,0,0,1,1,0,1,0,0
10,6,3,2148,25,1,0,0,1,1,0,1,0,0
10,6,4,2149,25,1,0,0,1,1,0,1,0,0
10,6,5,2150,25,1,0,0,1,1,0,1,0,0
10,6,6,2151,25,1,0,0,1,1,0,1,0,0
10,6,7,2152,25,1,0,0,1,1,0,1,0,0
10,6,8,2153,25,1,0,0,1,1,0,1,0,0
10,6,9,2154,25,1,0,0,1,1,0,1,0,0
10,6,10,2155,25,1,0,0,1,1,0,1,0,0
10,6,11,4398,25,1,0,0,1,1,0,1,0,0
10,6,12,12460,25,1,0,0,1,1,0,1,0,0
10,6,13,12461,25,1,0,0,1,1,0,1,0,0
10,6,14,12462,25,1,0,0,1,1,0,1,0,0
10,6,15,12463,25,1,0,0,1,1,0,1,0,0
10,6,16,12464,25,1,0,0,1,1,0,1,0,0
10,6,17,12465,25,1,0,0,1,1,0,1,0,0
10,6,18,12466,25,1,0,0,1,1,0,1,0,0
10,6,19,12467,25,1,0,0,1,1,0,1,0,0
10,6,20,12468,25,1,0,0,1,1,0,1,0,0
10,6,21,12469,25,1,0,0,1,1,0,1,0,0
10,6,22,15109,1000,1,0,0,1,1,0,1,0,0
10,6,23,15110,1000,1,0,0,1,1,0,1,0,0
10,6,24,2158,200,100,0,0,1,1,0,1,0,0
10,6,25,12306,2,1,0,0,1,1,0,1,80,0
10,6,26,12306,20000,10000,0,0,1,1,0,1,80,0
10,4,27,11664,20000,1,0,0,1,1,0,1,0,0
10,4,28,11665,20000,1,0,0,1,1,0,1,0,0
10,4,29,11666,20000,1,0,0,1,1,0,1,0,0
10,4,30,11667,20000,1,0,0,1,1,0,1,0,0
10,4,31,11668,20000,1,0,0,1,1,0,1,0,0
10,4,32,11669,20000,1,0,0,1,1,0,1,0,0
10,4,33,11670,20000,1,0,0,1,1,0,1,0,0
10,4,34,11671,20000,1,0,0,1,1,0,1,0,0
10,4,35,11672,20000,1,0,0,1,1,0,1,0,0
10,4,36,11673,20000,1,0,0,1,1,0,1,0,0
10,4,37,11674,20000,1,0,0,1,1,0,1,0,0
10,4,38,11675,20000,1,0,0,1,1,0,1,0,0
10,4,39,11676,20000,1,0,0,1,1,0,1,0,0
10,4,40,11677,20000,1,0,0,1,1,0,1,0,0
10,4,41,11678,20000,1,0,0,1,1,0,1,0,0
10,4,42,11679,20000,1,0,0,1,1,0,1,0,0
10,4,43,11680,20000,1,0,0,1,1,0,1,0,0
10,4,44,11681,20000,1,0,0,1,1,0,1,0,0
10,4,45,11682,20000,1,0,0,1,1,0,1,0,0
10,4,46,11683,20000,1,0,0,1,1,0,1,0,0
10,4,47,11684,20000,1,0,0,1,1,0,1,0,0
10,4,48,11685,20000,1,0,0,1,1,0,1,0,0
10,4,49,11686,20000,1,0,0,1,1,0,1,0,0
10,4,50,11687,20000,1,0,0,1,1,0,1,0,0
10,4,51,11688,20000,1,0,0,1,1,0,1,0,0
10,4,52,11689,20000,1,0,0,1,1,0,1,0,0
10,4,53,11690,20000,1,0,0,1,1,0,1,0,0
10,4,54,11691,20000,1,0,0,1,1,0,1,0,0
10,4,55,11692,20000,1,0,0,1,1,0,1,0,0
10,4,56,11693,20000,1,0,0,1,1,0,1,0,0
10,4,57,11694,20000,1,0,0,1,1,0,1,0,0
10,4,58,11695,20000,1,0,0,1,1,0,1,0,0
10,4,59,11696,20000,1,0,0,1,1,0,1,0,0
10,4,60,11697,20000,1,0,0,1,1,0,1,0,0
10,4,61,12893,20000,1,0,0,1,1,0,1,0,0
10,4,62,12894,20000,1,0,0,1,1,0,1,0,0
10,4,63,12895,20000,1,0,0,1,1,0,1,0,0
10,4,64,12896,20000,1,0,0,1,1,0,1,0,0
10,4,65,12897,20000,1,0,0,1,1,0,1,0,0
10,4,66,12898,20000,1,0,0,1,1,0,1,0,0
10,4,67,12899,20000,1,0,0,1,1,0,1,0,0
10,4,68,14337,20000,1,0,0,1,1,0,1,0,0
10,4,69,14338,20000,1,0,0,1,1,0,1,0,0
10,4,70,14339,20000,1,0,0,1,1,0,1,0,0
10,4,71,14340,20000,1,0,0,1,1,0,1,0,0
10,4,72,14341,20000,1,0,0,1,1,0,1,0,0
10,4,73,14342,20000,1,0,0,1,1,0,1,0,0
10,4,74,14343,20000,1,0,0,1,1,0,1,0,0
10,4,75,14344,20000,1,0,0,1,1,0,1,0,0
10,4,76,14345,20000,1,0,0,1,1,0,1,0,0
10,4,77,9254,10000,1,0,0,1,1,0,1,0,0
10,4,78,9255,10000,1,0,0,1,1,0,1,0,0
10,4,79,9256,10000,1,0,0,1,1,0,1,0,0
10,4,80,9257,10000,1,0,0,1,1,0,1,0,0
10,4,81,9258,10000,1,0,0,1,1,0,1,0,0
10,4,82,9259,10000,1,0,0,1,1,0,1,0,0
10,4,83,9260,10000,1,0,0,1,1,0,1,0,0
10,4,84,9261,10000,1,0,0,1,1,0,1,0,0
10,4,85,9262,10000,1,0,0,1,1,0,1,0,0
10,4,86,9263,10000,1,0,0,1,1,0,1,0,0
10,4,87,9264,10000,1,0,0,1,1,0,1,0,0
10,4,88,9265,10000,1,0,0,1,1,0,1,0,0
10,4,89,9266,10000,1,0,0,1,1,0,1,0,0
10,4,90,9267,10000,1,0,0,1,1,0,1,0,0
10,4,91,9268,10000,1,0,0,1,1,0,1,0,0
10,4,92,9269,10000,1,0,0,1,1,0,1,0,0
10,4,93,9270,10000,1,0,0,1,1,0,1,0,0
10,4,94,9271,10000,1,0,0,1,1,0,1,0,0
10,4,95,9272,10000,1,0,0,1,1,0,1,0,0
10,4,96,9273,10000,1,0,0,1,1,0,1,0,0
10,4,97,9274,10000,1,0,0,1,1,0,1,0,0
10,4,98,9275,10000,1,0,0,1,1,0,1,0,0
10,4,99,9276,10000,1,0,0,1,1,0,1,0,0
10,4,100,9277,10000,1,0,0,1,1,0,1,0,0
10,4,101,9278,10000,1,0,0,1,1,0,1,0,0
10,4,102,9279,10000,1,0,0,1,1,0,1,0,0
10,4,103,9280,10000,1,0,0,1,1,0,1,0,0
10,4,104,9281,10000,1,0,0,1,1,0,1,0,0
10,4,105,9282,10000,1,0,0,1,1,0,1,0,0
10,4,106,9283,10000,1,0,0,1,1,0,1,0,0
10,4,107,9284,10000,1,0,0,1,1,0,1,0,0
10,4,108,9285,10000,1,0,0,1,1,0,1,0,0
10,4,109,9286,10000,1,0,0,1,1,0,1,0,0
10,4,110,9287,10000,1,0,0,1,1,0,1,0,0
10,4,111,9288,10000,1,0,0,1,1,0,1,0,0
10,4,112,9289,10000,1,0,0,1,1,0,1,0,0
10,4,113,9290,10000,1,0,0,1,1,0,1,0,0
10,4,114,9291,10000,1,0,0,1,1,0,1,0,0
10,4,115,9292,10000,1,0,0,1,1,0,1,0,0
10,4,116,9293,10000,1,0,0,1,1,0,1,0,0
10,4,117,9294,10000,1,0,0,1,1,0,1,0,0
10,4,118,9295,10000,1,0,0,1,1,0,1,0,0
10,4,119,9296,10000,1,0,0,1,1,0,1,0,0
10,4,120,9297,10000,1,0,0,1,1,0,1,0,0
10,4,121,9298,10000,1,0,0,1,1,0,1,0,0
10,4,122,9299,10000,1,0,0,1,1,0,1,0,0
10,4,123,9300,10000,1,0,0,1,1,0,1,0,0
10,4,124,9301,10000,1,0,0,1,1,0,1,0,0
10,4,125,13196,10000,1,0,0,1,1,0,1,0,0
10,4,126,13197,10000,1,0,0,1,1,0,1,0,0
10,4,127,13198,10000,1,0,0,1,1,0,1,0,0
10,4,128,13199,10000,1,0,0,1,1,0,1,0,0
10,4,129,15542,10000,1,0,0,1,1,0,1,0,0
10,4,130,15543,10000,1,0,0,1,1,0,1,0,0
10,4,131,15544,10000,1,0,0,1,1,0,1,0,0
10,4,132,15545,10000,1,0,0,1,1,0,1,0,0
10,4,133,13640,20000,1,0,0,1,1,0,1,0,0
10,4,134,13641,20000,1,0,0,1,1,0,1,0,0
10,4,135,13642,20000,1,0,0,1,1,0,1,0,0
10,4,136,13643,20000,1,0,0,1,1,0,1,0,0
10,4,137,13644,20000,1,0,0,1,1,0,1,0,0
10,4,138,13645,20000,1,0,0,1,1,0,1,0,0
10,4,139,13646,20000,1,0,0,1,1,0,1,0,0
10,4,140,13647,20000,1,0,0,1,1,0,1,0,0
10,4,141,13648,20000,1,0,0,1,1,0,1,0,0
10,4,142,13649,20000,1,0,0,1,1,0,1,0,0
10,4,143,13650,20000,1,0,0,1,1,0,1,0,0
10,4,144,13651,20000,1,0,0,1,1,0,1,0,0
10,4,145,13652,20000,1,0,0,1,1,0,1,0,0
10,4,146,13653,20000,1,0,0,1,1,0,1,0,0
10,4,147,13654,20000,1,0,0,1,1,0,1,0,0
10,4,148,13655,20000,1,0,0,1,1,0,1,0,0
10,4,149,13656,20000,1,0,0,1,1,0,1,0,0
10,4,150,13657,20000,1,0,0,1,1,0,1,0,0
10,4,151,13658,20000,1,0,0,1,1,0,1,0,0
10,4,152,13659,20000,1,0,0,1,1,0,1,0,0
10,4,153,13660,20000,1,0,0,1,1,0,1,0,0
10,4,154,13661,20000,1,0,0,1,1,0,1,0,0
10,4,155,13662,20000,1,0,0,1,1,0,1,0,0
10,4,156,13663,20000,1,0,0,1,1,0,1,0,0
10,4,157,13664,20000,1,0,0,1,1,0,1,0,0
10,4,158,13665,20000,1,0,0,1,1,0,1,0,0
10,4,159,13666,20000,1,0,0,1,1,0,1,0,0
10,4,160,13667,20000,1,0,0,1,1,0,1,0,0
10,4,161,13668,20000,1,0,0,1,1,0,1,0,0
10,4,162,13669,20000,1,0,0,1,1,0,1,0,0
10,4,163,13670,20000,1,0,0,1,1,0,1,0,0
10,4,164,13671,20000,1,0,0,1,1,0,1,0,0
10,4,165,13672,20000,1,0,0,1,1,0,1,0,0
10,4,166,13673,20000,1,0,0,1,1,0,1,0,0
10,4,167,13674,20000,1,0,0,1,1,0,1,0,0
10,4,168,13675,20000,1,0,0,1,1,0,1,0,0
10,4,169,13676,20000,1,0,0,1,1,0,1,0,0
10,4,170,13677,20000,1,0,0,1,1,0,1,0,0
10,4,171,13678,20000,1,0,0,1,1,0,1,0,0
10,4,172,13679,20000,1,0,0,1,1,0,1,0,0
10,4,173,13680,20000,1,0,0,1,1,0,1,0,0
10,4,174,13681,20000,1,0,0,1,1,0,1,0,0
10,4,175,13682,20000,1,0,0,1,1,0,1,0,0
10,4,176,13683,20000,1,0,0,1,1,0,1,0,0
10,4,177,13684,20000,1,0,0,1,1,0,1,0,0
10,4,178,13685,20000,1,0,0,1,1,0,1,0,0
10,4,179,13686,20000,1,0,0,1,1,0,1,0,0
10,4,180,13687,20000,1,0,0,1,1,0,1,0,0
10,4,181,13688,20000,1,0,0,1,1,0,1,0,0
10,4,182,13689,20000,1,0,0,1,1,0,1,0,0
10,4,183,13690,20000,1,0,0,1,1,0,1,0,0
10,4,184,13691,20000,1,0,0,1,1,0,1,0,0
10,4,185,15546,20000,1,0,0,1,1,0,1,0,0
10,4,186,15547,20000,1,0,0,1,1,0,1,0,0
10,4,187,15548,20000,1,0,0,1,1,0,1,0,0
10,4,188,15549,20000,1,0,0,1,1,0,1,0,0
10,4,189,16162,35000,1,0,0,1,1,0,1,0,0
10,4,190,16163,35000,1,0,0,1,1,0,1,0,0
10,4,191,16164,35000,1,0,0,1,1,0,1,0,0
10,4,192,16165,35000,1,0,0,1,1,0,1,0,0
10,4,193,16166,35000,1,0,0,1,1,0,1,0,0
10,4,194,16167,35000,1,0,0,1,1,0,1,0,0
10,4,195,16168,35000,1,0,0,1,1,0,1,0,0
10,4,196,16169,35000,1,0,0,1,1,0,1,0,0
10,4,197,16172,35000,1,0,0,1,1,0,1,0,0
10,4,198,16173,35000,1,0,0,1,1,0,1,0,0
10,4,199,16174,35000,1,0,0,1,1,0,1,0,0
10,4,200,16175,35000,1,0,0,1,1,0,1,0,0
10,4,201,16176,35000,1,0,0,1,1,0,1,0,0
10,4,202,16177,35000,1,0,0,1,1,0,1,0,0
10,4,203,16178,35000,1,0,0,1,1,0,1,0,0
10,4,204,16179,35000,1,0,0,1,1,0,1,0,0
10,4,205,16182,35000,1,0,0,1,1,0,1,0,0
10,4,206,16183,35000,1,0,0,1,1,0,1,0,0
10,4,207,16184,35000,1,0,0,1,1,0,1,0,0
10,4,208,16185,35000,1,0,0,1,1,0,1,0,0
10,4,209,16186,35000,1,0,0,1,1,0,1,0,0
10,4,210,16187,35000,1,0,0,1,1,0,1,0,0
10,4,211,16188,35000,1,0,0,1,1,0,1,0,0
10,4,212,16189,35000,1,0,0,1,1,0,1,0,0
10,4,213,16192,35000,1,0,0,1,1,0,1,0,0
10,4,214,16193,35000,1,0,0,1,1,0,1,0,0
10,4,215,16194,35000,1,0,0,1,1,0,1,0,0
10,4,216,16195,35000,1,0,0,1,1,0,1,0,0
10,4,217,16196,35000,1,0,0,1,1,0,1,0,0
10,4,218,16197,35000,1,0,0,1,1,0,1,0,0
10,4,219,16198,35000,1,0,0,1,1,0,1,0,0
10,4,220,16199,35000,1,0,0,1,1,0,1,0,0
10,4,221,16202,35000,1,0,0,1,1,0,1,0,0
10,4,222,16203,35000,1,0,0,1,1,0,1,0,0
10,4,223,16204,35000,1,0,0,1,1,0,1,0,0
10,4,224,16205,35000,1,0,0,1,1,0,1,0,0
10,4,225,16206,35000,1,0,0,1,1,0,1,0,0
10,4,226,16207,35000,1,0,0,1,1,0,1,0,0
10,4,227,16208,35000,1,0,0,1,1,0,1,0,0
10,4,228,16209,35000,1,0,0,1,1,0,1,0,0
10,4,229,16212,35000,1,0,0,1,1,0,1,0,0
10,4,230,16213,35000,1,0,0,1,1,0,1,0,0
10,4,231,16214,35000,1,0,0,1,1,0,1,0,0
10,4,232,16215,35000,1,0,0,1,1,0,1,0,0
10,4,233,16216,35000,1,0,0,1,1,0,1,0,0
10,4,234,16217,35000,1,0,0,1,1,0,1,0,0
10,4,235,16218,35000,1,0,0,1,1,0,1,0,0
10,4,236,16219,35000,1,0,0,1,1,0,1,0,0
10,4,237,16222,35000,1,0,0,1,1,0,1,0,0
10,4,238,16223,35000,1,0,0,1,1,0,1,0,0
10,4,239,16224,35000,1,0,0,1,1,0,1,0,0
10,4,240,16225,35000,1,0,0,1,1,0,1,0,0
10,4,241,16226,35000,1,0,0,1,1,0,1,0,0
10,4,242,16227,35000,1,0,0,1,1,0,1,0,0
10,4,243,16228,35000,1,0,0,1,1,0,1,0,0
10,4,244,16229,35000,1,0,0,1,1,0,1,0,0
10,4,245,16232,35000,1,0,0,1,1,0,1,0,0
10,4,246,16233,35000,1,0,0,1,1,0,1,0,0
10,4,247,16234,35000,1,0,0,1,1,0,1,0,0
10,4,248,16235,35000,1,0,0,1,1,0,1,0,0
10,4,249,16236,35000,1,0,0,1,1,0,1,0,0
10,4,250,16237,35000,1,0,0,1,1,0,1,0,0
10,4,251,16238,35000,1,0,0,1,1,0,1,0,0
10,4,252,16239,35000,1,0,0,1,1,0,1,0,0
10,4,253,16242,35000,1,0,0,1,1,0,1,0,0
10,4,254,16243,35000,1,0,0,1,1,0,1,0,0
10,4,255,16244,35000,1,0,0,1,1,0,1,0,0
10,4,256,16245,35000,1,0,0,1,1,0,1,0,0
10,4,257,16246,35000,1,0,0,1,1,0,1,0,0
10,4,258,16247,35000,1,0,0,1,1,0,1,0,0
10,4,259,16248,35000,1,0,0,1,1,0,1,0,0
10,4,260,16249,35000,1,0,0,1,1,0,1,0,0
10,4,261,16252,35000,1,0,0,1,1,0,1,0,0
10,4,262,16253,35000,1,0,0,1,1,0,1,0,0
10,4,263,16254,35000,1,0,0,1,1,0,1,0,0
10,4,264,16255,35000,1,0,0,1,1,0,1,0,0
10,4,265,16256,35000,1,0,0,1,1,0,1,0,0
10,4,266,16257,35000,1,0,0,1,1,0,1,0,0
10,4,267,16258,35000,1,0,0,1,1,0,1,0,0
10,4,268,16259,35000,1,0,0,1,1,0,1,0,0
10,4,269,16262,35000,1,0,0,1,1,0,1,0,0
10,4,270,16263,35000,1,0,0,1,1,0,1,0,0
10,4,271,16264,35000,1,0,0,1,1,0,1,0,0
10,4,272,16265,35000,1,0,0,1,1,0,1,0,0
10,4,273,16266,35000,1,0,0,1,1,0,1,0,0
10,4,274,16267,35000,1,0,0,1,1,0,1,0,0
10,4,275,16268,35000,1,0,0,1,1,0,1,0,0
10,4,276,16269,35000,1,0,0,1,1,0,1,0,0
10,4,277,16272,35000,1,0,0,1,1,0,1,0,0
10,4,278,16273,35000,1,0,0,1,1,0,1,0,0
10,4,279,16274,35000,1,0,0,1,1,0,1,0,0
10,4,280,16275,35000,1,0,0,1,1,0,1,0,0
10,4,281,16276,35000,1,0,0,1,1,0,1,0,0
10,4,282,16277,35000,1,0,0,1,1,0,1,0,0
10,4,283,16278,35000,1,0,0,1,1,0,1,0,0
10,4,284,16279,35000,1,0,0,1,1,0,1,0,0
10,4,285,16282,35000,1,0,0,1,1,0,1,0,0
10,4,286,16283,35000,1,0,0,1,1,0,1,0,0
10,4,287,16284,35000,1,0,0,1,1,0,1,0,0
10,4,288,16285,35000,1,0,0,1,1,0,1,0,0
10,4,289,16286,35000,1,0,0,1,1,0,1,0,0
10,4,290,16287,35000,1,0,0,1,1,0,1,0,0
10,4,291,16288,35000,1,0,0,1,1,0,1,0,0
10,4,292,16289,35000,1,0,0,1,1,0,1,0,0
10,4,293,16292,35000,1,0,0,1,1,0,1,0,0
10,4,294,16293,35000,1,0,0,1,1,0,1,0,0
10,4,295,16294,35000,1,0,0,1,1,0,1,0,0
10,4,296,16295,35000,1,0,0,1,1,0,1,0,0
10,4,297,16296,35000,1,0,0,1,1,0,1,0,0
10,4,298,16297,35000,1,0,0,1,1,0,1,0,0
10,4,299,16298,35000,1,0,0,1,1,0,1,0,0
10,4,300,16299,35000,1,0,0,1,1,0,1,0,0
10,8,301,14136,15000,1,0,0,1,1,0,1,0,0
10,8,302,14137,15000,1,0,0,1,1,0,1,0,0
10,8,303,14138,15000,1,0,0,1,1,0,1,0,0
10,8,304,14139,15000,1,0,0,1,1,0,1,0,0
10,8,305,14140,15000,1,0,0,1,1,0,1,0,0
10,8,306,14141,15000,1,0,0,1,1,0,1,0,0
10,8,307,14142,15000,1,0,0,1,1,0,1,0,0
10,8,308,14143,15000,1,0,0,1,1,0,1,0,0
10,8,309,14144,15000,1,0,0,1,1,0,1,0,0
10,8,310,14145,15000,1,0,0,1,1,0,1,0,0
10,8,311,14454,30000,1,0,0,1,1,0,1,0,0
10,8,312,14455,30000,1,0,0,1,1,0,1,0,0
10,8,313,14456,30000,1,0,0,1,1,0,1,0,0
10,8,314,14457,30000,1,0,0,1,1,0,1,0,0
10,8,315,14458,30000,1,0,0,1,1,0,1,0,0
10,8,316,14459,30000,1,0,0,1,1,0,1,0,0
10,8,317,14460,30000,1,0,0,1,1,0,1,0,0
10,8,318,14461,30000,1,0,0,1,1,0,1,0,0
10,8,319,14462,30000,1,0,0,1,1,0,1,0,0
10,8,320,14463,30000,1,0,0,1,1,0,1,0,0
10,8,321,12724,50000,1,0,0,1,1,0,1,0,0
10,8,322,12725,50000,1,0,0,1,1,0,1,0,0
10,8,323,12726,50000,1,0,0,1,1,0,1,0,0
10,8,324,12727,50000,1,0,0,1,1,0,1,0,0
10,8,325,12728,50000,1,0,0,1,1,0,1,0,0
10,8,326,12729,50000,1,0,0,1,1,0,1,0,0
10,8,327,12730,50000,1,0,0,1,1,0,1,0,0
10,8,328,12731,50000,1,0,0,1,1,0,1,0,0
10,8,329,12732,50000,1,0,0,1,1,0,1,0,0
10,8,330,12733,50000,1,0,0,1,1,0,1,0,0
10,8,331,12734,50000,1,0,0,1,1,0,1,0,0
10,8,332,12735,50000,1,0,0,1,1,0,1,0,0
10,8,333,12736,50000,1,0,0,1,1,0,1,0,0
10,8,334,12737,50000,1,0,0,1,1,0,1,0,0
10,8,335,12738,50000,1,0,0,1,1,0,1,0,0
10,8,336,12739,50000,1,0,0,1,1,0,1,0,0
10,8,337,12740,50000,1,0,0,1,1,0,1,0,0
10,8,338,12741,50000,1,0,0,1,1,0,1,0,0
10,8,339,12742,50000,1,0,0,1,1,0,1,0,0
10,8,340,12743,50000,1,0,0,1,1,0,1,0,0
10,8,341,12744,50000,1,0,0,1,1,0,1,0,0
10,8,342,12745,50000,1,0,0,1,1,0,1,0,0
10,8,343,12746,50000,1,0,0,1,1,0,1,0,0
10,8,344,12747,50000,1,0,0,1,1,0,1,0,0
10,8,345,12748,50000,1,0,0,1,1,0,1,0,0
10,8,346,12749,50000,1,0,0,1,1,0,1,0,0
10,8,347,12750,50000,1,0,0,1,1,0,1,0,0
10,8,348,12751,50000,1,0,0,1,1,0,1,0,0
10,8,349,12752,50000,1,0,0,1,1,0,1,0,0
10,8,350,12753,50000,1,0,0,1,1,0,1,0,0
10,8,351,15070,50000,1,0,0,1,1,0,1,0,0
10,8,352,15071,50000,1,0,0,1,1,0,1,0,0
10,8,353,15072,50000,1,0,0,1,1,0,1,0,0
10,8,354,15073,50000,1,0,0,1,1,0,1,0,0
10,8,355,15074,50000,1,0,0,1,1,0,1,0,0
10,8,356,15075,50000,1,0,0,1,1,0,1,0,0
10,8,357,15076,50000,1,0,0,1,1,0,1,0,0
10,8,358,15077,50000,1,0,0,1,1,0,1,0,0
10,8,359,15078,50000,1,0,0,1,1,0,1,0,0
10,8,360,15079,50000,1,0,0,1,1,0,1,0,0
10,8,361,15567,20000,1,0,0,1,1,0,1,0,0
10,8,362,15568,20000,1,0,0,1,1,0,1,0,0
10,8,363,15569,20000,1,0,0,1,1,0,1,0,0
10,8,364,15570,20000,1,0,0,1,1,0,1,0,0
10,8,365,15571,20000,1,0,0,1,1,0,1,0,0
10,8,366,15572,20000,1,0,0,1,1,0,1,0,0
10,8,367,15573,20000,1,0,0,1,1,0,1,0,0
10,8,368,15574,20000,1,0,0,1,1,0,1,0,0
10,8,369,15575,20000,1,0,0,1,1,0,1,0,0
10,8,370,15576,20000,1,0,0,1,1,0,1,0,0
10,8,371,15577,20000,1,0,0,1,1,0,1,0,0
10,8,372,15578,20000,1,0,0,1,1,0,1,0,0
10,8,373,15579,20000,1,0,0,1,1,0,1,0,0
10,8,374,15580,20000,1,0,0,1,1,0,1,0,0
10,8,375,15581,20000,1,0,0,1,1,0,1,0,0
10,8,376,15582,20000,1,0,0,1,1,0,1,0,0
10,8,377,15583,20000,1,0,0,1,1,0,1,0,0
10,8,378,15584,20000,1,0,0,1,1,0,1,0,0
10,8,379,15585,20000,1,0,0,1,1,0,1,0,0
10,8,380,15586,20000,1,0,0,1,1,0,1,0,0
10,8,381,15587,20000,1,0,0,1,1,0,1,0,0
10,8,382,15588,20000,1,0,0,1,1,0,1,0,0
10,8,383,15589,20000,1,0,0,1,1,0,1,0,0
10,8,384,15590,20000,1,0,0,1,1,0,1,0,0
10,8,385,15591,20000,1,0,0,1,1,0,1,0,0
10,8,386,15592,20000,1,0,0,1,1,0,1,0,0
10,8,387,15593,20000,1,0,0,1,1,0,1,0,0
10,8,388,15594,20000,1,0,0,1,1,0,1,0,0
10,8,389,15595,20000,1,0,0,1,1,0,1,0,0
10,8,390,15596,20000,1,0,0,1,1,0,1,0,0
10,8,391,15597,20000,1,0,0,1,1,0,1,0,0
10,8,392,15598,20000,1,0,0,1,1,0,1,0,0
10,8,393,15599,20000,1,0,0,1,1,0,1,0,0
10,8,394,15600,20000,1,0,0,1,1,0,1,0,0
10,8,395,15601,20000,1,0,0,1,1,0,1,0,0
10,8,396,15602,20000,1,0,0,1,1,0,1,0,0
10,8,397,15603,20000,1,0,0,1,1,0,1,0,0
10,8,398,15604,20000,1,0,0,1,1,0,1,0,0
10,8,399,15605,20000,1,0,0,1,1,0,1,0,0
10,8,400,15606,20000,1,0,0,1,1,0,1,0,0
10,8,401,15607,20000,1,0,0,1,1,0,1,0,0
10,8,402,15608,20000,1,0,0,1,1,0,1,0,0
10,8,403,15609,20000,1,0,0,1,1,0,1,0,0
10,8,404,15610,20000,1,0,0,1,1,0,1,0,0
10,8,405,15611,20000,1,0,0,1,1,0,1,0,0
10,8,406,15612,20000,1,0,0,1,1,0,1,0,0
10,8,407,15613,20000,1,0,0,1,1,0,1,0,0
10,8,408,15614,20000,1,0,0,1,1,0,1,0,0
10,8,409,15615,20000,1,0,0,1,1,0,1,0,0
10,8,410,15616,20000,1,0,0,1,1,0,1,0,0
10,8,411,15617,20000,1,0,0,1,1,0,1,0,0
10,8,412,15618,20000,1,0,0,1,1,0,1,0,0
10,8,413,15619,20000,1,0,0,1,1,0,1,0,0
10,8,414,15620,20000,1,0,0,1,1,0,1,0,0
10,8,415,15621,20000,1,0,0,1,1,0,1,0,0
10,8,416,15622,20000,1,0,0,1,1,0,1,0,0
10,8,417,15623,20000,1,0,0,1,1,0,1,0,0
10,8,418,15624,20000,1,0,0,1,1,0,1,0,0
10,8,419,15625,20000,1,0,0,1,1,0,1,0,0
10,8,420,15626,20000,1,0,0,1,1,0,1,0,0
10,8,421,15627,20000,1,0,0,1,1,0,1,0,0
10,8,422,15628,20000,1,0,0,1,1,0,1,0,0
10,8,423,15629,20000,1,0,0,1,1,0,1,0,0
10,8,424,15630,20000,1,0,0,1,1,0,1,0,0
10,8,425,15631,20000,1,0,0,1,1,0,1,0,0
10,8,426,15632,20000,1,0,0,1,1,0,1,0,0
10,8,427,15633,20000,1,0,0,1,1,0,1,0,0
10,8,428,15634,20000,1,0,0,1,1,0,1,0,0
10,8,429,15635,20000,1,0,0,1,1,0,1,0,0
10,8,430,15636,20000,1,0,0,1,1,0,1,0,0
10,8,431,15637,20000,1,0,0,1,1,0,1,0,0
10,8,432,15638,20000,1,0,0,1,1,0,1,0,0
10,8,433,15639,20000,1,0,0,1,1,0,1,0,0
10,8,434,15640,20000,1,0,0,1,1,0,1,0,0
10,8,435,15641,20000,1,0,0,1,1,0,1,0,0
10,8,436,15642,20000,1,0,0,1,1,0,1,0,0
10,8,437,15643,20000,1,0,0,1,1,0,1,0,0
10,8,438,15644,20000,1,0,0,1,1,0,1,0,0
10,8,439,15645,20000,1,0,0,1,1,0,1,0,0
10,8,440,15646,20000,1,0,0,1,1,0,1,0,0
10,8,441,15647,20000,1,0,0,1,1,0,1,0,0
10,8,442,15648,20000,1,0,0,1,1,0,1,0,0
10,8,443,15649,20000,1,0,0,1,1,0,1,0,0
10,8,444,15650,20000,1,0,0,1,1,0,1,0,0
10,8,445,15651,20000,1,0,0,1,1,0,1,0,0
10,8,446,15652,20000,1,0,0,1,1,0,1,0,0
10,8,447,15653,20000,1,0,0,1,1,0,1,0,0
10,8,448,15654,20000,1,0,0,1,1,0,1,0,0
10,8,449,15655,20000,1,0,0,1,1,0,1,0,0
10,8,450,15656,20000,1,0,0,1,1,0,1,0,0
10,8,451,15657,20000,1,0,0,1,1,0,1,0,0
10,8,452,15658,20000,1,0,0,1,1,0,1,0,0
10,8,453,15659,20000,1,0,0,1,1,0,1,0,0
10,8,454,15660,20000,1,0,0,1,1,0,1,0,0
10,8,455,15661,20000,1,0,0,1,1,0,1,0,0
10,8,456,15662,20000,1,0,0,1,1,0,1,0,0
10,8,457,15663,20000,1,0,0,1,1,0,1,0,0
10,8,458,15664,20000,1,0,0,1,1,0,1,0,0
10,8,459,15665,20000,1,0,0,1,1,0,1,0,0
10,8,460,15666,20000,1,0,0,1,1,0,1,0,0
10,8,461,15667,20000,1,0,0,1,1,0,1,0,0
10,8,462,15668,20000,1,0,0,1,1,0,1,0,0
10,8,463,15669,20000,1,0,0,1,1,0,1,0,0
10,8,464,15670,20000,1,0,0,1,1,0,1,0,0
10,8,465,15671,20000,1,0,0,1,1,0,1,0,0
10,8,466,15672,20000,1,0,0,1,1,0,1,0,0
10,8,467,15673,20000,1,0,0,1,1,0,1,0,0
10,8,468,15674,20000,1,0,0,1,1,0,1,0,0
10,8,469,15675,20000,1,0,0,1,1,0,1,0,0
10,8,470,15676,20000,1,0,0,1,1,0,1,0,0
10,8,471,15677,20000,1,0,0,1,1,0,1,0,0
10,8,472,15678,20000,1,0,0,1,1,0,1,0,0
10,8,473,15679,20000,1,0,0,1,1,0,1,0,0
10,8,474,15680,20000,1,0,0,1,1,0,1,0,0
10,8,475,15681,20000,1,0,0,1,1,0,1,0,0
10,8,476,15682,20000,1,0,0,1,1,0,1,0,0
10,8,477,15683,20000,1,0,0,1,1,0,1,0,0
10,8,478,15684,20000,1,0,0,1,1,0,1,0,0
10,8,479,15685,20000,1,0,0,1,1,0,1,0,0
10,8,480,15686,20000,1,0,0,1,1,0,1,0,0
10,8,481,15687,20000,1,0,0,1,1,0,1,0,0
10,8,482,15688,20000,1,0,0,1,1,0,1,0,0
10,8,483,15689,20000,1,0,0,1,1,0,1,0,0
10,8,484,15690,20000,1,0,0,1,1,0,1,0,0
10,8,485,15691,20000,1,0,0,1,1,0,1,0,0
10,8,486,15692,20000,1,0,0,1,1,0,1,0,0
10,8,487,15693,20000,1,0,0,1,1,0,1,0,0
10,8,488,15694,20000,1,0,0,1,1,0,1,0,0
10,8,489,15695,20000,1,0,0,1,1,0,1,0,0
10,8,490,15696,20000,1,0,0,1,1,0,1,0,0
10,8,491,15697,20000,1,0,0,1,1,0,1,0,0
10,8,492,15698,20000,1,0,0,1,1,0,1,0,0
10,8,493,15699,20000,1,0,0,1,1,0,1,0,0
10,8,494,15700,20000,1,0,0,1,1,0,1,0,0
10,8,495,15701,20000,1,0,0,1,1,0,1,0,0
10,8,496,15702,20000,1,0,0,1,1,0,1,0,0
10,8,497,15703,20000,1,0,0,1,1,0,1,0,0
10,8,498,15704,20000,1,0,0,1,1,0,1,0,0
10,8,499,15705,20000,1,0,0,1,1,0,1,0,0
10,8,500,15706,20000,1,0,0,1,1,0,1,0,0
10,8,501,15707,20000,1,0,0,1,1,0,1,0,0
10,8,502,15708,20000,1,0,0,1,1,0,1,0,0
10,8,503,15709,20000,1,0,0,1,1,0,1,0,0
10,8,504,15710,20000,1,0,0,1,1,0,1,0,0
10,8,505,15711,20000,1,0,0,1,1,0,1,0,0
10,8,506,15712,20000,1,0,0,1,1,0,1,0,0
10,8,507,15713,20000,1,0,0,1,1,0,1,0,0
10,8,508,15714,20000,1,0,0,1,1,0,1,0,0
10,8,509,15715,20000,1,0,0,1,1,0,1,0,0
10,8,510,15716,20000,1,0,0,1,1,0,1,0,0
10,8,511,15717,20000,1,0,0,1,1,0,1,0,0
10,8,512,15718,20000,1,0,0,1,1,0,1,0,0
10,8,513,15719,20000,1,0,0,1,1,0,1,0,0
10,8,514,15720,20000,1,0,0,1,1,0,1,0,0
10,8,515,15721,20000,1,0,0,1,1,0,1,0,0
10,8,516,15722,20000,1,0,0,1,1,0,1,0,0
10,8,517,15723,20000,1,0,0,1,1,0,1,0,0
10,8,518,15724,20000,1,0,0,1,1,0,1,0,0
10,8,519,15725,20000,1,0,0,1,1,0,1,0,0
10,8,520,15726,20000,1,0,0,1,1,0,1,0,0
10,8,521,15727,20000,1,0,0,1,1,0,1,0,0
10,8,522,15728,20000,1,0,0,1,1,0,1,0,0
10,8,523,15729,20000,1,0,0,1,1,0,1,0,0
10,8,524,15730,20000,1,0,0,1,1,0,1,0,0
10,8,525,15731,20000,1,0,0,1,1,0,1,0,0
10,8,526,15732,20000,1,0,0,1,1,0,1,0,0
10,8,527,15733,20000,1,0,0,1,1,0,1,0,0
10,8,528,15734,20000,1,0,0,1,1,0,1,0,0
10,8,529,15735,20000,1,0,0,1,1,0,1,0,0
10,8,530,15736,20000,1,0,0,1,1,0,1,0,0
10,8,531,15737,20000,1,0,0,1,1,0,1,0,0
10,8,532,15738,20000,1,0,0,1,1,0,1,0,0
10,8,533,15739,20000,1,0,0,1,1,0,1,0,0
10,8,534,15740,20000,1,0,0,1,1,0,1,0,0
10,8,535,15741,20000,1,0,0,1,1,0,1,0,0
10,8,536,15742,20000,1,0,0,1,1,0,1,0,0
10,8,537,15743,20000,1,0,0,1,1,0,1,0,0
10,8,538,15744,20000,1,0,0,1,1,0,1,0,0
10,8,539,15745,20000,1,0,0,1,1,0,1,0,0
10,8,540,15746,20000,1,0,0,1,1,0,1,0,0
10,8,541,15747,20000,1,0,0,1,1,0,1,0,0
10,8,542,15748,20000,1,0,0,1,1,0,1,0,0
10,8,543,15749,20000,1,0,0,1,1,0,1,0,0
10,8,544,15750,20000,1,0,0,1,1,0,1,0,0
10,8,545,15751,20000,1,0,0,1,1,0,1,0,0
10,8,546,15752,20000,1,0,0,1,1,0,1,0,0
10,8,547,15753,20000,1,0,0,1,1,0,1,0,0
10,8,548,15754,20000,1,0,0,1,1,0,1,0,0
10,8,549,15755,20000,1,0,0,1,1,0,1,0,0
10,8,550,15756,20000,1,0,0,1,1,0,1,0,0
10,8,551,15757,20000,1,0,0,1,1,0,1,0,0
10,8,552,15758,20000,1,0,0,1,1,0,1,0,0
10,8,553,15759,20000,1,0,0,1,1,0,1,0,0
10,8,554,15760,20000,1,0,0,1,1,0,1,0,0
10,8,555,15761,20000,1,0,0,1,1,0,1,0,0
10,8,556,15762,20000,1,0,0,1,1,0,1,0,0
10,8,557,15763,20000,1,0,0,1,1,0,1,0,0
10,8,558,15764,20000,1,0,0,1,1,0,1,0,0
10,8,559,15765,20000,1,0,0,1,1,0,1,0,0
10,8,560,15766,20000,1,0,0,1,1,0,1,0,0
10,8,561,15919,20000,1,0,0,1,1,0,1,0,0
10,8,562,15920,20000,1,0,0,1,1,0,1,0,0
10,8,563,15921,20000,1,0,0,1,1,0,1,0,0
10,8,564,15922,20000,1,0,0,1,1,0,1,0,0
10,8,565,15923,20000,1,0,0,1,1,0,1,0,0
10,8,566,15924,20000,1,0,0,1,1,0,1,0,0
10,8,567,15925,20000,1,0,0,1,1,0,1,0,0
10,8,568,15926,20000,1,0,0,1,1,0,1,0,0
10,8,569,15927,20000,1,0,0,1,1,0,1,0,0
10,8,570,15928,20000,1,0,0,1,1,0,1,0,0
10,8,571,15929,20000,1,0,0,1,1,0,1,0,0
10,8,572,15930,20000,1,0,0,1,1,0,1,0,0
10,8,573,15931,20000,1,0,0,1,1,0,1,0,0
10,8,574,15932,20000,1,0,0,1,1,0,1,0,0
10,8,575,15933,20000,1,0,0,1,1,0,1,0,0
10,8,576,15934,20000,1,0,0,1,1,0,1,0,0
10,8,577,15935,20000,1,0,0,1,1,0,1,0,0
10,8,578,15936,20000,1,0,0,1,1,0,1,0,0
10,8,579,15937,20000,1,0,0,1,1,0,1,0,0
10,8,580,15938,20000,1,0,0,1,1,0,1,0,0
10,8,581,15939,20000,1,0,0,1,1,0,1,0,0
10,8,582,15940,20000,1,0,0,1,1,0,1,0,0
10,8,583,15941,20000,1,0,0,1,1,0,1,0,0
10,8,584,15942,20000,1,0,0,1,1,0,1,0,0
10,8,585,15943,20000,1,0,0,1,1,0,1,0,0
10,8,586,15944,20000,1,0,0,1,1,0,1,0,0
10,8,587,15945,20000,1,0,0,1,1,0,1,0,0
10,8,588,15946,20000,1,0,0,1,1,0,1,0,0
10,8,589,15947,20000,1,0,0,1,1,0,1,0,0
10,8,590,15948,20000,1,0,0,1,1,0,1,0,0
10,8,591,15949,20000,1,0,0,1,1,0,1,0,0
10,8,592,15950,20000,1,0,0,1,1,0,1,0,0
10,8,593,15951,20000,1,0,0,1,1,0,1,0,0
10,8,594,15952,20000,1,0,0,1,1,0,1,0,0
10,8,595,15953,20000,1,0,0,1,1,0,1,0,0
10,8,596,15954,20000,1,0,0,1,1,0,1,0,0
10,8,597,15955,20000,1,0,0,1,1,0,1,0,0
10,8,598,15956,20000,1,0,0,1,1,0,1,0,0
10,8,599,15957,20000,1,0,0,1,1,0,1,0,0
10,8,600,15958,20000,1,0,0,1,1,0,1,0,0
10,8,601,15959,20000,1,0,0,1,1,0,1,0,0
10,8,602,15960,20000,1,0,0,1,1,0,1,0,0
10,8,603,15961,20000,1,0,0,1,1,0,1,0,0
10,8,604,15962,20000,1,0,0,1,1,0,1,0,0
10,8,605,15963,20000,1,0,0,1,1,0,1,0,0
10,8,606,15964,20000,1,0,0,1,1,0,1,0,0
10,8,607,15965,20000,1,0,0,1,1,0,1,0,0
10,8,608,15966,20000,1,0,0,1,1,0,1,0,0
10,8,609,15967,20000,1,0,0,1,1,0,1,0,0
10,8,610,15968,20000,1,0,0,1,1,0,1,0,0
10,7,611,13506,250,1,0,0,1,1,0,1,50,0
10,7,612,15011,250,1,0,0,1,1,0,1,50,0
10,7,613,13636,250,1,0,0,1,1,0,1,50,0
10,7,614,1227,250,1,0,0,1,1,0,1,50,0
10,7,615,15022,250,1,0,0,1,1,0,1,50,0
10,8,616,4407,1000,1,0,0,1,1,0,1,0,0
10,8,617,4408,1000,1,0,0,1,1,0,1,0,0
10,8,618,4409,1000,1,0,0,1,1,0,1,0,0
10,8,619,4410,1000,1,0,0,1,1,0,1,0,0
10,8,620,4411,1000,1,0,0,1,1,0,1,0,0
10,8,621,4412,1000,1,0,0,1,1,0,1,0,0
10,8,622,4413,1000,1,0,0,1,1,0,1,0,0
10,8,623,4414,1000,1,0,0,1,1,0,1,0,0
10,8,624,4823,1000,1,0,0,1,1,0,1,0,0
10,8,625,4824,1000,1,0,0,1,1,0,1,0,0
10,8,626,4825,1000,1,0,0,1,1,0,1,0,0
10,8,627,4826,1000,1,0,0,1,1,0,1,0,0
10,8,628,4827,1000,1,0,0,1,1,0,1,0,0
10,8,629,4828,1000,1,0,0,1,1,0,1,0,0
10,8,630,4829,1000,1,0,0,1,1,0,1,0,0
10,8,631,4830,1000,1,0,0,1,1,0,1,0,0
10,8,632,5194,1000,1,0,0,1,1,0,1,0,0
10,8,633,5195,1000,1,0,0,1,1,0,1,0,0
10,8,634,5196,1000,1,0,0,1,1,0,1,0,0
10,8,635,5197,1000,1,0,0,1,1,0,1,0,0
10,8,636,5198,1000,1,0,0,1,1,0,1,0,0
10,8,637,5199,1000,1,0,0,1,1,0,1,0,0
10,8,638,5200,1000,1,0,0,1,1,0,1,0,0
10,8,639,5201,1000,1,0,0,1,1,0,1,0,0
10,8,640,13630,1000,1,0,0,1,1,0,1,0,0
10,8,641,13631,1000,1,0,0,1,1,0,1,0,0
10,8,642,13632,1000,1,0,0,1,1,0,1,0,0
10,8,643,13633,1000,1,0,0,1,1,0,1,0,0
10,8,644,13634,1000,1,0,0,1,1,0,1,0,0
10,8,645,13635,1000,1,0,0,1,1,0,1,0,0
10,8,646,15103,1000,1,0,0,1,1,0,1,0,0
10,8,647,15104,1000,1,0,0,1,1,0,1,0,0
10,8,648,15105,1000,1,0,0,1,1,0,1,0,0
10,8,649,15106,1000,1,0,0,1,1,0,1,0,0
10,8,650,15107,1000,1,0,0,1,1,0,1,0,0
10,8,651,15108,1000,1,0,0,1,1,0,1,0,0
10,8,652,16459,1000,1,0,0,1,1,0,1,0,0
10,8,653,16460,1000,1,0,0,1,1,0,1,0,0
10,8,654,16461,1000,1,0,0,1,1,0,1,0,0
10,8,655,16462,1000,1,0,0,1,1,0,1,0,0
10,8,656,16463,1000,1,0,0,1,1,0,1,0,0
10,8,657,16464,1000,1,0,0,1,1,0,1,0,0
10,8,658,16465,1000,1,0,0,1,1,0,1,0,0
10,8,659,16466,1000,1,0,0,1,1,0,1,0,0
10,8,660,16467,1000,1,0,0,1,1,0,1,0,0
10,8,661,16468,1000,1,0,0,1,1,0,1,0,0
10,8,662,16469,1000,1,0,0,1,1,0,1,0,0
10,8,663,16470,1000,1,0,0,1,1,0,1,0,0
10,8,664,16471,1000,1,0,0,1,1,0,1,0,0
10,8,665,16472,1000,1,0,0,1,1,0,1,0,0
10,8,666,13416,1000,1,0,0,1,1,0,1,0,0
10,8,667,13417,1000,1,0,0,1,1,0,1,0,0
10,8,668,13418,1000,1,0,0,1,1,0,1,0,0
10,8,669,13419,1000,1,0,0,1,1,0,1,0,0
10,8,670,13420,1000,1,0,0,1,1,0,1,0,0
10,8,671,14283,1000,1,0,0,1,1,0,1,0,0
10,8,672,14284,1000,1,0,0,1,1,0,1,0,0
10,8,673,14285,1000,1,0,0,1,1,0,1,0,0
10,8,674,14286,1000,1,0,0,1,1,0,1,0,0
10,8,675,13182,1000,1,0,0,1,1,0,1,0,0
10,8,676,13507,1000,1,0,0,1,1,0,1,0,0
10,8,677,13981,1000,1,0,0,1,1,0,1,0,0
10,8,678,14744,1000,1,0,0,1,1,0,1,0,0
10,8,679,14893,1000,1,0,0,1,1,0,1,0,0
10,8,680,15785,1000,1,0,0,1,1,0,1,0,0
10,8,681,16419,1000,1,0,0,1,1,0,1,0,0
10,8,682,11470,1000,1,0,0,1,1,0,1,0,0
10,8,683,12512,1000,1,0,0,1,1,0,1,0,0
10,8,684,12884,1000,1,0,0,1,1,0,1,0,0
10,8,685,12513,1000,1,0,0,1,1,0,1,0,0
10,8,686,12514,1000,1,0,0,1,1,0,1,0,0
10,8,687,12515,1000,1,0,0,1,1,0,1,0,0
10,8,688,12516,1000,1,0,0,1,1,0,1,0,0
10,8,689,12517,1000,1,0,0,1,1,0,1,0,0
10,8,690,12518,1000,1,0,0,1,1,0,1,0,0
10,8,691,12519,1000,1,0,0,1,1,0,1,0,0
10,8,692,12520,1000,1,0,0,1,1,0,1,0,0
10,8,693,12521,1000,1,0,0,1,1,0,1,0,0
10,8,694,8179,1000,1,0,0,1,1,0,1,0,0
10,8,695,9704,1000,1,0,0,1,1,0,1,0,0
10,8,696,15448,1000,1,0,0,1,1,0,1,0,0
10,8,697,11162,1000,1,0,0,1,1,0,1,0,0
10,8,698,11163,1000,1,0,0,1,1,0,1,0,0
10,8,699,11164,1000,1,0,0,1,1,0,1,0,0
10,8,700,11165,1000,1,0,0,1,1,0,1,0,0
10,8,701,11661,1000,1,0,0,1,1,0,1,0,0
10,8,702,11662,1000,1,0,0,1,1,0,1,0,0
10,8,703,14639,1000,1,0,0,1,1,0,1,0,0
10,8,704,13607,10,1,0,0,1,1,0,1,0,0
10,7,705,15774,3000,1,0,0,1,1,0,1,100,0
10,7,706,15775,3000,1,0,0,1,1,0,1,100,0
10,7,707,11420,3000,1,0,0,1,1,0,1,100,0
10,7,708,14704,3000,1,0,0,1,1,0,1,100,0
10,7,709,13177,3000,1,0,0,1,1,0,1,100,0
10,7,710,14191,3000,1,0,0,1,1,0,1,100,0
10,7,711,13449,3000,1,0,0,1,1,0,1,100,0
10,7,712,14192,3000,1,0,0,1,1,0,1,100,0
10,7,713,15772,3000,1,0,0,1,1,0,1,100,0
10,7,714,13791,3000,1,0,0,1,1,0,1,100,0
10,7,715,14006,3000,1,0,0,1,1,0,1,100,0
10,7,716,15768,3000,1,0,0,1,1,0,1,100,0
10,7,717,14069,3000,1,0,0,1,1,0,1,100,0
10,7,718,14124,3000,1,0,0,1,1,0,1,100,0
10,7,719,15507,3000,1,0,0,1,1,0,1,100,0
10,7,720,15508,3000,1,0,0,1,1,0,1,100,0
10,7,721,14855,3000,1,0,0,1,1,0,1,100,0
10,7,722,14894,3000,1,0,0,1,1,0,1,100,0
10,7,723,16444,3000,1,0,0,1,1,0,1,100,0
10,7,724,16445,3000,1,0,0,1,1,0,1,100,0
10,7,725,12509,3000,1,0,0,1,1,0,1,100,0
10,7,726,14126,3000,1,0,0,1,1,0,1,100,0
10,7,727,15062,3000,1,0,0,1,1,0,1,100,0
10,7,728,15063,3000,1,0,0,1,1,0,1,100,0
10,7,729,14891,3000,1,0,0,1,1,0,1,100,0
10,7,730,14895,3000,1,0,0,1,1,0,1,100,0
10,7,731,14091,3000,1,0,0,1,1,0,1,100,0
10,7,732,14092,3000,1,0,0,1,1,0,1,100,0
10,7,733,14501,3000,1,0,0,1,1,0,1,100,0
10,7,734,14506,3000,1,0,0,1,1,0,1,100,0
10,7,735,15285,3000,1,0,0,1,1,0,1,100,0
10,7,736,15286,3000,1,0,0,1,1,0,1,100,0
10,7,737,16442,3000,1,0,0,1,1,0,1,100,0
10,7,738,16443,3000,1,0,0,1,1,0,1,100,0
10,7,739,15027,3000,1,0,0,1,1,0,1,100,0
10,7,740,15028,3000,1,0,0,1,1,0,1,100,0
10,7,741,13453,3000,1,0,0,1,1,0,1,100,0
10,7,742,14193,3000,1,0,0,1,1,0,1,100,0
10,7,743,13178,3000,1,0,0,1,1,0,1,100,0
10,7,744,14194,3000,1,0,0,1,1,0,1,100,0
10,7,745,16454,3000,1,0,0,1,1,0,1,100,0
10,7,746,16455,3000,1,0,0,1,1,0,1,100,0
10,7,747,15030,3000,1,0,0,1,1,0,1,100,0
10,7,748,15031,3000,1,0,0,1,1,0,1,100,0
10,7,749,13790,3000,1,0,0,1,1,0,1,100,0
10,7,750,14005,3000,1,0,0,1,1,0,1,100,0
10,7,751,14406,3000,1,0,0,1,1,0,1,100,0
10,7,752,14413,3000,1,0,0,1,1,0,1,100,0
10,7,753,16448,3000,1,0,0,1,1,0,1,100,0
10,7,754,16449,3000,1,0,0,1,1,0,1,100,0
10,7,755,12872,3000,1,0,0,1,1,0,1,100,0
10,7,756,14187,3000,1,0,0,1,1,0,1,100,0
10,7,757,14125,3000,1,0,0,1,1,0,1,100,0
10,7,758,14500,3000,1,0,0,1,1,0,1,100,0
10,7,759,14505,3000,1,0,0,1,1,0,1,100,0
10,7,760,15118,3000,1,0,0,1,1,0,1,100,0
10,7,761,15119,3000,1,0,0,1,1,0,1,100,0
10,7,762,14662,3000,1,0,0,1,1,0,1,100,0
10,7,763,14663,3000,1,0,0,1,1,0,1,100,0
10,7,764,15771,3000,1,0,0,1,1,0,1,100,0
10,7,765,9700,3000,1,0,0,1,1,0,1,100,0
10,7,766,14498,3000,1,0,0,1,1,0,1,100,0
10,7,767,14913,3000,1,0,0,1,1,0,1,100,0
10,7,768,14914,3000,1,0,0,1,1,0,1,100,0
10,7,769,13508,3000,1,0,0,1,1,0,1,100,0
10,7,770,15115,3000,1,0,0,1,1,0,1,100,0
10,7,771,15116,3000,1,0,0,1,1,0,1,100,0
10,7,772,15113,3000,1,0,0,1,1,0,1,100,0
10,7,773,15114,3000,1,0,0,1,1,0,1,100,0
10,7,774,15222,3000,1,0,0,1,1,0,1,100,0
10,7,775,15223,3000,1,0,0,1,1,0,1,100,0
10,7,776,10750,3000,1,0,0,1,1,0,1,100,0
10,7,777,14705,3000,1,0,0,1,1,0,1,100,0
10,7,778,15027,3000,1,0,0,1,1,0,1,100,0
10,7,779,15028,3000,1,0,0,1,1,0,1,100,0
10,7,780,10380,3000,1,0,0,1,1,0,1,100,0
10,7,781,15060,3000,1,0,0,1,1,0,1,100,0
10,7,782,13963,3000,1,0,0,1,1,0,1,100,0
10,7,783,14026,3000,1,0,0,1,1,0,1,100,0
10,7,784,13964,3000,1,0,0,1,1,0,1,100,0
10,7,785,14027,3000,1,0,0,1,1,0,1,100,0
10,7,786,15064,3000,1,0,0,1,1,0,1,100,0
10,7,787,15065,3000,1,0,0,1,1,0,1,100,0
10,7,788,15524,3000,1,0,0,1,1,0,1,100,0
10,7,789,15525,3000,1,0,0,1,1,0,1,100,0
10,7,790,16450,3000,1,0,0,1,1,0,1,100,0
10,7,791,16451,3000,1,0,0,1,1,0,1,100,0
10,7,792,16344,3000,1,0,0,1,1,0,1,100,0
10,7,793,16345,3000,1,0,0,1,1,0,1,100,0
10,7,794,16342,3000,1,0,0,1,1,0,1,100,0
10,7,795,16343,3000,1,0,0,1,1,0,1,100,0
10,7,796,15220,3000,1,0,0,1,1,0,1,100,0
10,7,797,15221,3000,1,0,0,1,1,0,1,100,0
10,7,798,15066,3000,1,0,0,1,1,0,1,100,0
10,7,799,15067,3000,1,0,0,1,1,0,1,100,0
10,7,800,14089,3000,1,0,0,1,1,0,1,100,0
10,7,801,14090,3000,1,0,0,1,1,0,1,100,0
10,7,802,14195,3000,1,0,0,1,1,0,1,100,0
10,7,803,14196,3000,1,0,0,1,1,0,1,100,0
10,7,804,13965,3000,1,0,0,1,1,0,1,100,0
10,7,805,14028,3000,1,0,0,1,1,0,1,100,0
10,7,806,13508,3000,1,0,0,1,1,0,1,100,0
10,7,807,13962,3000,1,0,0,1,1,0,1,100,0
10,7,808,14314,3000,1,0,0,1,1,0,1,100,0
10,7,809,13404,3000,1,0,0,1,1,0,1,100,0
10,7,810,14188,3000,1,0,0,1,1,0,1,100,0
10,7,811,14032,3000,1,0,0,1,1,0,1,100,0
10,7,812,13960,3000,1,0,0,1,1,0,1,100,0
10,7,813,15819,3000,1,0,0,1,1,0,1,100,0
10,7,814,15820,3000,1,0,0,1,1,0,1,100,0
10,7,815,10750,3000,1,0,0,1,1,0,1,100,0
10,7,816,14705,3000,1,0,0,1,1,0,1,100,0
10,7,817,14407,3000,1,0,0,1,1,0,1,100,0
10,7,818,14414,3000,1,0,0,1,1,0,1,100,0
10,7,819,16352,3000,1,0,0,1,1,0,1,100,0
10,7,820,16353,3000,1,0,0,1,1,0,1,100,0
10,7,821,14502,3000,1,0,0,1,1,0,1,100,0
10,7,822,14507,3000,1,0,0,1,1,0,1,100,0
10,7,823,10811,3000,1,0,0,1,1,0,1,100,0
10,7,824,15061,3000,1,0,0,1,1,0,1,100,0
10,7,825,15823,3000,1,0,0,1,1,0,1,100,0
10,7,826,15824,3000,1,0,0,1,1,0,1,100,0
10,7,827,15224,3000,1,0,0,1,1,0,1,100,0
10,7,828,15225,3000,1,0,0,1,1,0,1,100,0
10,7,829,14503,3000,1,0,0,1,1,0,1,100,0
10,7,830,14510,3000,1,0,0,1,1,0,1,100,0
10,7,831,15776,3000,1,0,0,1,1,0,1,100,0
10,7,832,15777,3000,1,0,0,1,1,0,1,100,0
10,7,833,15821,3000,1,0,0,1,1,0,1,100,0
10,7,834,15822,3000,1,0,0,1,1,0,1,100,0
10,7,835,14198,3000,1,0,0,1,1,0,1,100,0
10,7,836,14197,3000,1,0,0,1,1,0,1,100,0
10,7,837,16446,3000,1,0,0,1,1,0,1,100,0
10,7,838,16447,3000,1,0,0,1,1,0,1,100,0
10,7,839,14905,3000,1,0,0,1,1,0,1,100,0
10,7,840,14907,3000,1,0,0,1,1,0,1,100,0
10,7,841,14904,3000,1,0,0,1,1,0,1,100,0
10,7,842,14906,3000,1,0,0,1,1,0,1,100,0
10,7,843,14659,3000,1,0,0,1,1,0,1,100,0
10,7,844,14660,3000,1,0,0,1,1,0,1,100,0
10,7,845,13326,3000,1,0,0,1,1,0,1,100,0
10,7,846,14416,3000,1,0,0,1,1,0,1,100,0
10,7,847,13450,3000,1,0,0,1,1,0,1,100,0
10,7,848,14031,3000,1,0,0,1,1,0,1,100,0
10,7,849,16492,3000,1,0,0,1,1,0,1,100,0
10,7,850,16493,3000,1,0,0,1,1,0,1,100,0
10,8,851,1520,1,1,0,0,1,1,0,1,0,0
10,8,852,7011,1,1,0,0,1,1,0,1,0,0
10,7,853,14299,500,1,0,0,1,1,0,1,20,0
10,7,854,14389,500,1,0,0,1,1,0,1,20,0
10,7,855,15177,500,1,0,0,1,1,0,1,20,0
10,7,856,14537,500,1,0,0,1,1,0,1,20,0
10,7,857,14758,500,1,0,0,1,1,0,1,20,0
10,7,858,14854,500,1,0,0,1,1,0,1,20,0
10,7,859,13974,500,1,0,0,1,1,0,1,20,0
10,7,860,15021,500,1,0,0,1,1,0,1,20,0
10,7,861,15111,500,1,0,0,1,1,0,1,20,0
10,7,862,15226,500,1,0,0,1,1,0,1,20,0
10,7,863,15773,500,1,0,0,1,1,0,1,20,0
10,7,864,15825,500,1,0,0,1,1,0,1,20,0
10,7,865,15827,500,1,0,0,1,1,0,1,20,0
10,7,866,16340,500,1,0,0,1,1,0,1,20,0
10,7,867,16341,500,1,0,0,1,1,0,1,20,0
10,7,868,16457,500,1,0,0,1,1,0,1,20,0
10,7,869,16458,500,1,0,0,1,1,0,1,20,0
10,7,870,11698,250,1,0,0,1,1,0,1,50,0
10,7,871,11700,250,1,0,0,1,1,0,1,50,0
10,8,872,4358,10,1,0,0,1,1,0,1,0,0
10,8,873,7981,1,1,0,0,1,1,0,1,0,0
10,8,874,7267,20,1,0,0,1,1,0,1,0,0
10,8,875,9958,20,1,0,0,1,1,0,1,0,999
10,8,876,1548,20,1,0,0,1,1,0,1,0,0
10,8,877,1613,20,1,0,0,1,1,0,1,0,0
10,8,878,1026,1,1,0,0,1,1,0,1,0,0
10,8,879,5380,1,1,0,0,1,1,0,1,0,0
10,8,880,11284,15,1,0,0,1,1,0,1,0,0
10,8,881,11285,15,1,0,0,1,1,0,1,0,0
10,8,882,11286,15,1,0,0,1,1,0,1,0,0
10,8,883,10356,500,1,0,0,1,1,0,1,0,0
10,8,884,12511,500,1,0,0,1,1,0,1,0,0
10,8,885,13238,500,1,0,0,1,1,0,1,0,0
10,8,886,1691,1,1,0,0,1,1,0,1,0,0
10,8,887,9708,1,1,0,0,1,1,0,1,0,0
10,8,888,11383,10,1,0,0,1,1,0,1,0,0
10,8,889,11382,10,1,0,0,1,1,0,1,0,0
10,8,890,11381,10,1,0,0,1,1,0,1,0,0
10,7,891,16348,3000,1,0,0,1,1,0,1,100,0
10,8,892,11386,10,1,0,0,1,1,0,1,0,0
10,8,893,5767,1,10000,0,0,1,1,0,1,0,0
10,8,894,5765,1,10000,0,0,1,1,0,1,0,0
10,8,895,5768,1,10000,0,0,1,1,0,1,0,0
10,8,896,14444,10,1,0,0,1,1,0,1,0,0
10,8,897,14443,10,1,0,0,1,1,0,1,0,0
10,8,898,14445,10,1,0,0,1,1,0,1,0,0
10,8,899,15068,500,1,0,0,1,1,0,1,20,0
10,7,900,16532,1000,1,0,0,1,1,0,1,0,0
10,8,901,100,1,10000,0,0,1,1,0,1,0,0
10,8,902,11243,1,1,0,0,1,1,0,1,0,0
10,8,903,101,1,10000,0,0,1,1,0,1,0,0
10,7,904,14368,3000,1,0,0,1,1,0,1,50,0
10,8,905,8943,1,20,0,0,1,1,0,1,0,0
10,7,906,1622,3000,1,0,0,1,1,0,1,0,0
10,8,907,8953,1,20,0,0,1,1,0,1,0,0
10,8,908,13693,1,20,0,0,1,1,0,1,0,0
10,8,909,8949,1,20,0,0,1,1,0,1,0,0
10,8,910,8955,1,20,0,0,1,1,0,1,0,0
10,7,911,16456,500,1,0,0,1,1,0,1,0,0
1 10 6 1 2146 25 1 0 0 1 1 0 1 0 0
2 10 6 2 2147 25 1 0 0 1 1 0 1 0 0
3 10 6 3 2148 25 1 0 0 1 1 0 1 0 0
4 10 6 4 2149 25 1 0 0 1 1 0 1 0 0
5 10 6 5 2150 25 1 0 0 1 1 0 1 0 0
6 10 6 6 2151 25 1 0 0 1 1 0 1 0 0
7 10 6 7 2152 25 1 0 0 1 1 0 1 0 0
8 10 6 8 2153 25 1 0 0 1 1 0 1 0 0
9 10 6 9 2154 25 1 0 0 1 1 0 1 0 0
10 10 6 10 2155 25 1 0 0 1 1 0 1 0 0
11 10 6 11 4398 25 1 0 0 1 1 0 1 0 0
12 10 6 12 12460 25 1 0 0 1 1 0 1 0 0
13 10 6 13 12461 25 1 0 0 1 1 0 1 0 0
14 10 6 14 12462 25 1 0 0 1 1 0 1 0 0
15 10 6 15 12463 25 1 0 0 1 1 0 1 0 0
16 10 6 16 12464 25 1 0 0 1 1 0 1 0 0
17 10 6 17 12465 25 1 0 0 1 1 0 1 0 0
18 10 6 18 12466 25 1 0 0 1 1 0 1 0 0
19 10 6 19 12467 25 1 0 0 1 1 0 1 0 0
20 10 6 20 12468 25 1 0 0 1 1 0 1 0 0
21 10 6 21 12469 25 1 0 0 1 1 0 1 0 0
22 10 6 22 15109 1000 1 0 0 1 1 0 1 0 0
23 10 6 23 15110 1000 1 0 0 1 1 0 1 0 0
24 10 6 24 2158 200 100 0 0 1 1 0 1 0 0
25 10 6 25 12306 2 1 0 0 1 1 0 1 80 0
26 10 6 26 12306 20000 10000 0 0 1 1 0 1 80 0
27 10 4 27 11664 20000 1 0 0 1 1 0 1 0 0
28 10 4 28 11665 20000 1 0 0 1 1 0 1 0 0
29 10 4 29 11666 20000 1 0 0 1 1 0 1 0 0
30 10 4 30 11667 20000 1 0 0 1 1 0 1 0 0
31 10 4 31 11668 20000 1 0 0 1 1 0 1 0 0
32 10 4 32 11669 20000 1 0 0 1 1 0 1 0 0
33 10 4 33 11670 20000 1 0 0 1 1 0 1 0 0
34 10 4 34 11671 20000 1 0 0 1 1 0 1 0 0
35 10 4 35 11672 20000 1 0 0 1 1 0 1 0 0
36 10 4 36 11673 20000 1 0 0 1 1 0 1 0 0
37 10 4 37 11674 20000 1 0 0 1 1 0 1 0 0
38 10 4 38 11675 20000 1 0 0 1 1 0 1 0 0
39 10 4 39 11676 20000 1 0 0 1 1 0 1 0 0
40 10 4 40 11677 20000 1 0 0 1 1 0 1 0 0
41 10 4 41 11678 20000 1 0 0 1 1 0 1 0 0
42 10 4 42 11679 20000 1 0 0 1 1 0 1 0 0
43 10 4 43 11680 20000 1 0 0 1 1 0 1 0 0
44 10 4 44 11681 20000 1 0 0 1 1 0 1 0 0
45 10 4 45 11682 20000 1 0 0 1 1 0 1 0 0
46 10 4 46 11683 20000 1 0 0 1 1 0 1 0 0
47 10 4 47 11684 20000 1 0 0 1 1 0 1 0 0
48 10 4 48 11685 20000 1 0 0 1 1 0 1 0 0
49 10 4 49 11686 20000 1 0 0 1 1 0 1 0 0
50 10 4 50 11687 20000 1 0 0 1 1 0 1 0 0
51 10 4 51 11688 20000 1 0 0 1 1 0 1 0 0
52 10 4 52 11689 20000 1 0 0 1 1 0 1 0 0
53 10 4 53 11690 20000 1 0 0 1 1 0 1 0 0
54 10 4 54 11691 20000 1 0 0 1 1 0 1 0 0
55 10 4 55 11692 20000 1 0 0 1 1 0 1 0 0
56 10 4 56 11693 20000 1 0 0 1 1 0 1 0 0
57 10 4 57 11694 20000 1 0 0 1 1 0 1 0 0
58 10 4 58 11695 20000 1 0 0 1 1 0 1 0 0
59 10 4 59 11696 20000 1 0 0 1 1 0 1 0 0
60 10 4 60 11697 20000 1 0 0 1 1 0 1 0 0
61 10 4 61 12893 20000 1 0 0 1 1 0 1 0 0
62 10 4 62 12894 20000 1 0 0 1 1 0 1 0 0
63 10 4 63 12895 20000 1 0 0 1 1 0 1 0 0
64 10 4 64 12896 20000 1 0 0 1 1 0 1 0 0
65 10 4 65 12897 20000 1 0 0 1 1 0 1 0 0
66 10 4 66 12898 20000 1 0 0 1 1 0 1 0 0
67 10 4 67 12899 20000 1 0 0 1 1 0 1 0 0
68 10 4 68 14337 20000 1 0 0 1 1 0 1 0 0
69 10 4 69 14338 20000 1 0 0 1 1 0 1 0 0
70 10 4 70 14339 20000 1 0 0 1 1 0 1 0 0
71 10 4 71 14340 20000 1 0 0 1 1 0 1 0 0
72 10 4 72 14341 20000 1 0 0 1 1 0 1 0 0
73 10 4 73 14342 20000 1 0 0 1 1 0 1 0 0
74 10 4 74 14343 20000 1 0 0 1 1 0 1 0 0
75 10 4 75 14344 20000 1 0 0 1 1 0 1 0 0
76 10 4 76 14345 20000 1 0 0 1 1 0 1 0 0
77 10 4 77 9254 10000 1 0 0 1 1 0 1 0 0
78 10 4 78 9255 10000 1 0 0 1 1 0 1 0 0
79 10 4 79 9256 10000 1 0 0 1 1 0 1 0 0
80 10 4 80 9257 10000 1 0 0 1 1 0 1 0 0
81 10 4 81 9258 10000 1 0 0 1 1 0 1 0 0
82 10 4 82 9259 10000 1 0 0 1 1 0 1 0 0
83 10 4 83 9260 10000 1 0 0 1 1 0 1 0 0
84 10 4 84 9261 10000 1 0 0 1 1 0 1 0 0
85 10 4 85 9262 10000 1 0 0 1 1 0 1 0 0
86 10 4 86 9263 10000 1 0 0 1 1 0 1 0 0
87 10 4 87 9264 10000 1 0 0 1 1 0 1 0 0
88 10 4 88 9265 10000 1 0 0 1 1 0 1 0 0
89 10 4 89 9266 10000 1 0 0 1 1 0 1 0 0
90 10 4 90 9267 10000 1 0 0 1 1 0 1 0 0
91 10 4 91 9268 10000 1 0 0 1 1 0 1 0 0
92 10 4 92 9269 10000 1 0 0 1 1 0 1 0 0
93 10 4 93 9270 10000 1 0 0 1 1 0 1 0 0
94 10 4 94 9271 10000 1 0 0 1 1 0 1 0 0
95 10 4 95 9272 10000 1 0 0 1 1 0 1 0 0
96 10 4 96 9273 10000 1 0 0 1 1 0 1 0 0
97 10 4 97 9274 10000 1 0 0 1 1 0 1 0 0
98 10 4 98 9275 10000 1 0 0 1 1 0 1 0 0
99 10 4 99 9276 10000 1 0 0 1 1 0 1 0 0
100 10 4 100 9277 10000 1 0 0 1 1 0 1 0 0
101 10 4 101 9278 10000 1 0 0 1 1 0 1 0 0
102 10 4 102 9279 10000 1 0 0 1 1 0 1 0 0
103 10 4 103 9280 10000 1 0 0 1 1 0 1 0 0
104 10 4 104 9281 10000 1 0 0 1 1 0 1 0 0
105 10 4 105 9282 10000 1 0 0 1 1 0 1 0 0
106 10 4 106 9283 10000 1 0 0 1 1 0 1 0 0
107 10 4 107 9284 10000 1 0 0 1 1 0 1 0 0
108 10 4 108 9285 10000 1 0 0 1 1 0 1 0 0
109 10 4 109 9286 10000 1 0 0 1 1 0 1 0 0
110 10 4 110 9287 10000 1 0 0 1 1 0 1 0 0
111 10 4 111 9288 10000 1 0 0 1 1 0 1 0 0
112 10 4 112 9289 10000 1 0 0 1 1 0 1 0 0
113 10 4 113 9290 10000 1 0 0 1 1 0 1 0 0
114 10 4 114 9291 10000 1 0 0 1 1 0 1 0 0
115 10 4 115 9292 10000 1 0 0 1 1 0 1 0 0
116 10 4 116 9293 10000 1 0 0 1 1 0 1 0 0
117 10 4 117 9294 10000 1 0 0 1 1 0 1 0 0
118 10 4 118 9295 10000 1 0 0 1 1 0 1 0 0
119 10 4 119 9296 10000 1 0 0 1 1 0 1 0 0
120 10 4 120 9297 10000 1 0 0 1 1 0 1 0 0
121 10 4 121 9298 10000 1 0 0 1 1 0 1 0 0
122 10 4 122 9299 10000 1 0 0 1 1 0 1 0 0
123 10 4 123 9300 10000 1 0 0 1 1 0 1 0 0
124 10 4 124 9301 10000 1 0 0 1 1 0 1 0 0
125 10 4 125 13196 10000 1 0 0 1 1 0 1 0 0
126 10 4 126 13197 10000 1 0 0 1 1 0 1 0 0
127 10 4 127 13198 10000 1 0 0 1 1 0 1 0 0
128 10 4 128 13199 10000 1 0 0 1 1 0 1 0 0
129 10 4 129 15542 10000 1 0 0 1 1 0 1 0 0
130 10 4 130 15543 10000 1 0 0 1 1 0 1 0 0
131 10 4 131 15544 10000 1 0 0 1 1 0 1 0 0
132 10 4 132 15545 10000 1 0 0 1 1 0 1 0 0
133 10 4 133 13640 20000 1 0 0 1 1 0 1 0 0
134 10 4 134 13641 20000 1 0 0 1 1 0 1 0 0
135 10 4 135 13642 20000 1 0 0 1 1 0 1 0 0
136 10 4 136 13643 20000 1 0 0 1 1 0 1 0 0
137 10 4 137 13644 20000 1 0 0 1 1 0 1 0 0
138 10 4 138 13645 20000 1 0 0 1 1 0 1 0 0
139 10 4 139 13646 20000 1 0 0 1 1 0 1 0 0
140 10 4 140 13647 20000 1 0 0 1 1 0 1 0 0
141 10 4 141 13648 20000 1 0 0 1 1 0 1 0 0
142 10 4 142 13649 20000 1 0 0 1 1 0 1 0 0
143 10 4 143 13650 20000 1 0 0 1 1 0 1 0 0
144 10 4 144 13651 20000 1 0 0 1 1 0 1 0 0
145 10 4 145 13652 20000 1 0 0 1 1 0 1 0 0
146 10 4 146 13653 20000 1 0 0 1 1 0 1 0 0
147 10 4 147 13654 20000 1 0 0 1 1 0 1 0 0
148 10 4 148 13655 20000 1 0 0 1 1 0 1 0 0
149 10 4 149 13656 20000 1 0 0 1 1 0 1 0 0
150 10 4 150 13657 20000 1 0 0 1 1 0 1 0 0
151 10 4 151 13658 20000 1 0 0 1 1 0 1 0 0
152 10 4 152 13659 20000 1 0 0 1 1 0 1 0 0
153 10 4 153 13660 20000 1 0 0 1 1 0 1 0 0
154 10 4 154 13661 20000 1 0 0 1 1 0 1 0 0
155 10 4 155 13662 20000 1 0 0 1 1 0 1 0 0
156 10 4 156 13663 20000 1 0 0 1 1 0 1 0 0
157 10 4 157 13664 20000 1 0 0 1 1 0 1 0 0
158 10 4 158 13665 20000 1 0 0 1 1 0 1 0 0
159 10 4 159 13666 20000 1 0 0 1 1 0 1 0 0
160 10 4 160 13667 20000 1 0 0 1 1 0 1 0 0
161 10 4 161 13668 20000 1 0 0 1 1 0 1 0 0
162 10 4 162 13669 20000 1 0 0 1 1 0 1 0 0
163 10 4 163 13670 20000 1 0 0 1 1 0 1 0 0
164 10 4 164 13671 20000 1 0 0 1 1 0 1 0 0
165 10 4 165 13672 20000 1 0 0 1 1 0 1 0 0
166 10 4 166 13673 20000 1 0 0 1 1 0 1 0 0
167 10 4 167 13674 20000 1 0 0 1 1 0 1 0 0
168 10 4 168 13675 20000 1 0 0 1 1 0 1 0 0
169 10 4 169 13676 20000 1 0 0 1 1 0 1 0 0
170 10 4 170 13677 20000 1 0 0 1 1 0 1 0 0
171 10 4 171 13678 20000 1 0 0 1 1 0 1 0 0
172 10 4 172 13679 20000 1 0 0 1 1 0 1 0 0
173 10 4 173 13680 20000 1 0 0 1 1 0 1 0 0
174 10 4 174 13681 20000 1 0 0 1 1 0 1 0 0
175 10 4 175 13682 20000 1 0 0 1 1 0 1 0 0
176 10 4 176 13683 20000 1 0 0 1 1 0 1 0 0
177 10 4 177 13684 20000 1 0 0 1 1 0 1 0 0
178 10 4 178 13685 20000 1 0 0 1 1 0 1 0 0
179 10 4 179 13686 20000 1 0 0 1 1 0 1 0 0
180 10 4 180 13687 20000 1 0 0 1 1 0 1 0 0
181 10 4 181 13688 20000 1 0 0 1 1 0 1 0 0
182 10 4 182 13689 20000 1 0 0 1 1 0 1 0 0
183 10 4 183 13690 20000 1 0 0 1 1 0 1 0 0
184 10 4 184 13691 20000 1 0 0 1 1 0 1 0 0
185 10 4 185 15546 20000 1 0 0 1 1 0 1 0 0
186 10 4 186 15547 20000 1 0 0 1 1 0 1 0 0
187 10 4 187 15548 20000 1 0 0 1 1 0 1 0 0
188 10 4 188 15549 20000 1 0 0 1 1 0 1 0 0
189 10 4 189 16162 35000 1 0 0 1 1 0 1 0 0
190 10 4 190 16163 35000 1 0 0 1 1 0 1 0 0
191 10 4 191 16164 35000 1 0 0 1 1 0 1 0 0
192 10 4 192 16165 35000 1 0 0 1 1 0 1 0 0
193 10 4 193 16166 35000 1 0 0 1 1 0 1 0 0
194 10 4 194 16167 35000 1 0 0 1 1 0 1 0 0
195 10 4 195 16168 35000 1 0 0 1 1 0 1 0 0
196 10 4 196 16169 35000 1 0 0 1 1 0 1 0 0
197 10 4 197 16172 35000 1 0 0 1 1 0 1 0 0
198 10 4 198 16173 35000 1 0 0 1 1 0 1 0 0
199 10 4 199 16174 35000 1 0 0 1 1 0 1 0 0
200 10 4 200 16175 35000 1 0 0 1 1 0 1 0 0
201 10 4 201 16176 35000 1 0 0 1 1 0 1 0 0
202 10 4 202 16177 35000 1 0 0 1 1 0 1 0 0
203 10 4 203 16178 35000 1 0 0 1 1 0 1 0 0
204 10 4 204 16179 35000 1 0 0 1 1 0 1 0 0
205 10 4 205 16182 35000 1 0 0 1 1 0 1 0 0
206 10 4 206 16183 35000 1 0 0 1 1 0 1 0 0
207 10 4 207 16184 35000 1 0 0 1 1 0 1 0 0
208 10 4 208 16185 35000 1 0 0 1 1 0 1 0 0
209 10 4 209 16186 35000 1 0 0 1 1 0 1 0 0
210 10 4 210 16187 35000 1 0 0 1 1 0 1 0 0
211 10 4 211 16188 35000 1 0 0 1 1 0 1 0 0
212 10 4 212 16189 35000 1 0 0 1 1 0 1 0 0
213 10 4 213 16192 35000 1 0 0 1 1 0 1 0 0
214 10 4 214 16193 35000 1 0 0 1 1 0 1 0 0
215 10 4 215 16194 35000 1 0 0 1 1 0 1 0 0
216 10 4 216 16195 35000 1 0 0 1 1 0 1 0 0
217 10 4 217 16196 35000 1 0 0 1 1 0 1 0 0
218 10 4 218 16197 35000 1 0 0 1 1 0 1 0 0
219 10 4 219 16198 35000 1 0 0 1 1 0 1 0 0
220 10 4 220 16199 35000 1 0 0 1 1 0 1 0 0
221 10 4 221 16202 35000 1 0 0 1 1 0 1 0 0
222 10 4 222 16203 35000 1 0 0 1 1 0 1 0 0
223 10 4 223 16204 35000 1 0 0 1 1 0 1 0 0
224 10 4 224 16205 35000 1 0 0 1 1 0 1 0 0
225 10 4 225 16206 35000 1 0 0 1 1 0 1 0 0
226 10 4 226 16207 35000 1 0 0 1 1 0 1 0 0
227 10 4 227 16208 35000 1 0 0 1 1 0 1 0 0
228 10 4 228 16209 35000 1 0 0 1 1 0 1 0 0
229 10 4 229 16212 35000 1 0 0 1 1 0 1 0 0
230 10 4 230 16213 35000 1 0 0 1 1 0 1 0 0
231 10 4 231 16214 35000 1 0 0 1 1 0 1 0 0
232 10 4 232 16215 35000 1 0 0 1 1 0 1 0 0
233 10 4 233 16216 35000 1 0 0 1 1 0 1 0 0
234 10 4 234 16217 35000 1 0 0 1 1 0 1 0 0
235 10 4 235 16218 35000 1 0 0 1 1 0 1 0 0
236 10 4 236 16219 35000 1 0 0 1 1 0 1 0 0
237 10 4 237 16222 35000 1 0 0 1 1 0 1 0 0
238 10 4 238 16223 35000 1 0 0 1 1 0 1 0 0
239 10 4 239 16224 35000 1 0 0 1 1 0 1 0 0
240 10 4 240 16225 35000 1 0 0 1 1 0 1 0 0
241 10 4 241 16226 35000 1 0 0 1 1 0 1 0 0
242 10 4 242 16227 35000 1 0 0 1 1 0 1 0 0
243 10 4 243 16228 35000 1 0 0 1 1 0 1 0 0
244 10 4 244 16229 35000 1 0 0 1 1 0 1 0 0
245 10 4 245 16232 35000 1 0 0 1 1 0 1 0 0
246 10 4 246 16233 35000 1 0 0 1 1 0 1 0 0
247 10 4 247 16234 35000 1 0 0 1 1 0 1 0 0
248 10 4 248 16235 35000 1 0 0 1 1 0 1 0 0
249 10 4 249 16236 35000 1 0 0 1 1 0 1 0 0
250 10 4 250 16237 35000 1 0 0 1 1 0 1 0 0
251 10 4 251 16238 35000 1 0 0 1 1 0 1 0 0
252 10 4 252 16239 35000 1 0 0 1 1 0 1 0 0
253 10 4 253 16242 35000 1 0 0 1 1 0 1 0 0
254 10 4 254 16243 35000 1 0 0 1 1 0 1 0 0
255 10 4 255 16244 35000 1 0 0 1 1 0 1 0 0
256 10 4 256 16245 35000 1 0 0 1 1 0 1 0 0
257 10 4 257 16246 35000 1 0 0 1 1 0 1 0 0
258 10 4 258 16247 35000 1 0 0 1 1 0 1 0 0
259 10 4 259 16248 35000 1 0 0 1 1 0 1 0 0
260 10 4 260 16249 35000 1 0 0 1 1 0 1 0 0
261 10 4 261 16252 35000 1 0 0 1 1 0 1 0 0
262 10 4 262 16253 35000 1 0 0 1 1 0 1 0 0
263 10 4 263 16254 35000 1 0 0 1 1 0 1 0 0
264 10 4 264 16255 35000 1 0 0 1 1 0 1 0 0
265 10 4 265 16256 35000 1 0 0 1 1 0 1 0 0
266 10 4 266 16257 35000 1 0 0 1 1 0 1 0 0
267 10 4 267 16258 35000 1 0 0 1 1 0 1 0 0
268 10 4 268 16259 35000 1 0 0 1 1 0 1 0 0
269 10 4 269 16262 35000 1 0 0 1 1 0 1 0 0
270 10 4 270 16263 35000 1 0 0 1 1 0 1 0 0
271 10 4 271 16264 35000 1 0 0 1 1 0 1 0 0
272 10 4 272 16265 35000 1 0 0 1 1 0 1 0 0
273 10 4 273 16266 35000 1 0 0 1 1 0 1 0 0
274 10 4 274 16267 35000 1 0 0 1 1 0 1 0 0
275 10 4 275 16268 35000 1 0 0 1 1 0 1 0 0
276 10 4 276 16269 35000 1 0 0 1 1 0 1 0 0
277 10 4 277 16272 35000 1 0 0 1 1 0 1 0 0
278 10 4 278 16273 35000 1 0 0 1 1 0 1 0 0
279 10 4 279 16274 35000 1 0 0 1 1 0 1 0 0
280 10 4 280 16275 35000 1 0 0 1 1 0 1 0 0
281 10 4 281 16276 35000 1 0 0 1 1 0 1 0 0
282 10 4 282 16277 35000 1 0 0 1 1 0 1 0 0
283 10 4 283 16278 35000 1 0 0 1 1 0 1 0 0
284 10 4 284 16279 35000 1 0 0 1 1 0 1 0 0
285 10 4 285 16282 35000 1 0 0 1 1 0 1 0 0
286 10 4 286 16283 35000 1 0 0 1 1 0 1 0 0
287 10 4 287 16284 35000 1 0 0 1 1 0 1 0 0
288 10 4 288 16285 35000 1 0 0 1 1 0 1 0 0
289 10 4 289 16286 35000 1 0 0 1 1 0 1 0 0
290 10 4 290 16287 35000 1 0 0 1 1 0 1 0 0
291 10 4 291 16288 35000 1 0 0 1 1 0 1 0 0
292 10 4 292 16289 35000 1 0 0 1 1 0 1 0 0
293 10 4 293 16292 35000 1 0 0 1 1 0 1 0 0
294 10 4 294 16293 35000 1 0 0 1 1 0 1 0 0
295 10 4 295 16294 35000 1 0 0 1 1 0 1 0 0
296 10 4 296 16295 35000 1 0 0 1 1 0 1 0 0
297 10 4 297 16296 35000 1 0 0 1 1 0 1 0 0
298 10 4 298 16297 35000 1 0 0 1 1 0 1 0 0
299 10 4 299 16298 35000 1 0 0 1 1 0 1 0 0
300 10 4 300 16299 35000 1 0 0 1 1 0 1 0 0
301 10 8 301 14136 15000 1 0 0 1 1 0 1 0 0
302 10 8 302 14137 15000 1 0 0 1 1 0 1 0 0
303 10 8 303 14138 15000 1 0 0 1 1 0 1 0 0
304 10 8 304 14139 15000 1 0 0 1 1 0 1 0 0
305 10 8 305 14140 15000 1 0 0 1 1 0 1 0 0
306 10 8 306 14141 15000 1 0 0 1 1 0 1 0 0
307 10 8 307 14142 15000 1 0 0 1 1 0 1 0 0
308 10 8 308 14143 15000 1 0 0 1 1 0 1 0 0
309 10 8 309 14144 15000 1 0 0 1 1 0 1 0 0
310 10 8 310 14145 15000 1 0 0 1 1 0 1 0 0
311 10 8 311 14454 30000 1 0 0 1 1 0 1 0 0
312 10 8 312 14455 30000 1 0 0 1 1 0 1 0 0
313 10 8 313 14456 30000 1 0 0 1 1 0 1 0 0
314 10 8 314 14457 30000 1 0 0 1 1 0 1 0 0
315 10 8 315 14458 30000 1 0 0 1 1 0 1 0 0
316 10 8 316 14459 30000 1 0 0 1 1 0 1 0 0
317 10 8 317 14460 30000 1 0 0 1 1 0 1 0 0
318 10 8 318 14461 30000 1 0 0 1 1 0 1 0 0
319 10 8 319 14462 30000 1 0 0 1 1 0 1 0 0
320 10 8 320 14463 30000 1 0 0 1 1 0 1 0 0
321 10 8 321 12724 50000 1 0 0 1 1 0 1 0 0
322 10 8 322 12725 50000 1 0 0 1 1 0 1 0 0
323 10 8 323 12726 50000 1 0 0 1 1 0 1 0 0
324 10 8 324 12727 50000 1 0 0 1 1 0 1 0 0
325 10 8 325 12728 50000 1 0 0 1 1 0 1 0 0
326 10 8 326 12729 50000 1 0 0 1 1 0 1 0 0
327 10 8 327 12730 50000 1 0 0 1 1 0 1 0 0
328 10 8 328 12731 50000 1 0 0 1 1 0 1 0 0
329 10 8 329 12732 50000 1 0 0 1 1 0 1 0 0
330 10 8 330 12733 50000 1 0 0 1 1 0 1 0 0
331 10 8 331 12734 50000 1 0 0 1 1 0 1 0 0
332 10 8 332 12735 50000 1 0 0 1 1 0 1 0 0
333 10 8 333 12736 50000 1 0 0 1 1 0 1 0 0
334 10 8 334 12737 50000 1 0 0 1 1 0 1 0 0
335 10 8 335 12738 50000 1 0 0 1 1 0 1 0 0
336 10 8 336 12739 50000 1 0 0 1 1 0 1 0 0
337 10 8 337 12740 50000 1 0 0 1 1 0 1 0 0
338 10 8 338 12741 50000 1 0 0 1 1 0 1 0 0
339 10 8 339 12742 50000 1 0 0 1 1 0 1 0 0
340 10 8 340 12743 50000 1 0 0 1 1 0 1 0 0
341 10 8 341 12744 50000 1 0 0 1 1 0 1 0 0
342 10 8 342 12745 50000 1 0 0 1 1 0 1 0 0
343 10 8 343 12746 50000 1 0 0 1 1 0 1 0 0
344 10 8 344 12747 50000 1 0 0 1 1 0 1 0 0
345 10 8 345 12748 50000 1 0 0 1 1 0 1 0 0
346 10 8 346 12749 50000 1 0 0 1 1 0 1 0 0
347 10 8 347 12750 50000 1 0 0 1 1 0 1 0 0
348 10 8 348 12751 50000 1 0 0 1 1 0 1 0 0
349 10 8 349 12752 50000 1 0 0 1 1 0 1 0 0
350 10 8 350 12753 50000 1 0 0 1 1 0 1 0 0
351 10 8 351 15070 50000 1 0 0 1 1 0 1 0 0
352 10 8 352 15071 50000 1 0 0 1 1 0 1 0 0
353 10 8 353 15072 50000 1 0 0 1 1 0 1 0 0
354 10 8 354 15073 50000 1 0 0 1 1 0 1 0 0
355 10 8 355 15074 50000 1 0 0 1 1 0 1 0 0
356 10 8 356 15075 50000 1 0 0 1 1 0 1 0 0
357 10 8 357 15076 50000 1 0 0 1 1 0 1 0 0
358 10 8 358 15077 50000 1 0 0 1 1 0 1 0 0
359 10 8 359 15078 50000 1 0 0 1 1 0 1 0 0
360 10 8 360 15079 50000 1 0 0 1 1 0 1 0 0
361 10 8 361 15567 20000 1 0 0 1 1 0 1 0 0
362 10 8 362 15568 20000 1 0 0 1 1 0 1 0 0
363 10 8 363 15569 20000 1 0 0 1 1 0 1 0 0
364 10 8 364 15570 20000 1 0 0 1 1 0 1 0 0
365 10 8 365 15571 20000 1 0 0 1 1 0 1 0 0
366 10 8 366 15572 20000 1 0 0 1 1 0 1 0 0
367 10 8 367 15573 20000 1 0 0 1 1 0 1 0 0
368 10 8 368 15574 20000 1 0 0 1 1 0 1 0 0
369 10 8 369 15575 20000 1 0 0 1 1 0 1 0 0
370 10 8 370 15576 20000 1 0 0 1 1 0 1 0 0
371 10 8 371 15577 20000 1 0 0 1 1 0 1 0 0
372 10 8 372 15578 20000 1 0 0 1 1 0 1 0 0
373 10 8 373 15579 20000 1 0 0 1 1 0 1 0 0
374 10 8 374 15580 20000 1 0 0 1 1 0 1 0 0
375 10 8 375 15581 20000 1 0 0 1 1 0 1 0 0
376 10 8 376 15582 20000 1 0 0 1 1 0 1 0 0
377 10 8 377 15583 20000 1 0 0 1 1 0 1 0 0
378 10 8 378 15584 20000 1 0 0 1 1 0 1 0 0
379 10 8 379 15585 20000 1 0 0 1 1 0 1 0 0
380 10 8 380 15586 20000 1 0 0 1 1 0 1 0 0
381 10 8 381 15587 20000 1 0 0 1 1 0 1 0 0
382 10 8 382 15588 20000 1 0 0 1 1 0 1 0 0
383 10 8 383 15589 20000 1 0 0 1 1 0 1 0 0
384 10 8 384 15590 20000 1 0 0 1 1 0 1 0 0
385 10 8 385 15591 20000 1 0 0 1 1 0 1 0 0
386 10 8 386 15592 20000 1 0 0 1 1 0 1 0 0
387 10 8 387 15593 20000 1 0 0 1 1 0 1 0 0
388 10 8 388 15594 20000 1 0 0 1 1 0 1 0 0
389 10 8 389 15595 20000 1 0 0 1 1 0 1 0 0
390 10 8 390 15596 20000 1 0 0 1 1 0 1 0 0
391 10 8 391 15597 20000 1 0 0 1 1 0 1 0 0
392 10 8 392 15598 20000 1 0 0 1 1 0 1 0 0
393 10 8 393 15599 20000 1 0 0 1 1 0 1 0 0
394 10 8 394 15600 20000 1 0 0 1 1 0 1 0 0
395 10 8 395 15601 20000 1 0 0 1 1 0 1 0 0
396 10 8 396 15602 20000 1 0 0 1 1 0 1 0 0
397 10 8 397 15603 20000 1 0 0 1 1 0 1 0 0
398 10 8 398 15604 20000 1 0 0 1 1 0 1 0 0
399 10 8 399 15605 20000 1 0 0 1 1 0 1 0 0
400 10 8 400 15606 20000 1 0 0 1 1 0 1 0 0
401 10 8 401 15607 20000 1 0 0 1 1 0 1 0 0
402 10 8 402 15608 20000 1 0 0 1 1 0 1 0 0
403 10 8 403 15609 20000 1 0 0 1 1 0 1 0 0
404 10 8 404 15610 20000 1 0 0 1 1 0 1 0 0
405 10 8 405 15611 20000 1 0 0 1 1 0 1 0 0
406 10 8 406 15612 20000 1 0 0 1 1 0 1 0 0
407 10 8 407 15613 20000 1 0 0 1 1 0 1 0 0
408 10 8 408 15614 20000 1 0 0 1 1 0 1 0 0
409 10 8 409 15615 20000 1 0 0 1 1 0 1 0 0
410 10 8 410 15616 20000 1 0 0 1 1 0 1 0 0
411 10 8 411 15617 20000 1 0 0 1 1 0 1 0 0
412 10 8 412 15618 20000 1 0 0 1 1 0 1 0 0
413 10 8 413 15619 20000 1 0 0 1 1 0 1 0 0
414 10 8 414 15620 20000 1 0 0 1 1 0 1 0 0
415 10 8 415 15621 20000 1 0 0 1 1 0 1 0 0
416 10 8 416 15622 20000 1 0 0 1 1 0 1 0 0
417 10 8 417 15623 20000 1 0 0 1 1 0 1 0 0
418 10 8 418 15624 20000 1 0 0 1 1 0 1 0 0
419 10 8 419 15625 20000 1 0 0 1 1 0 1 0 0
420 10 8 420 15626 20000 1 0 0 1 1 0 1 0 0
421 10 8 421 15627 20000 1 0 0 1 1 0 1 0 0
422 10 8 422 15628 20000 1 0 0 1 1 0 1 0 0
423 10 8 423 15629 20000 1 0 0 1 1 0 1 0 0
424 10 8 424 15630 20000 1 0 0 1 1 0 1 0 0
425 10 8 425 15631 20000 1 0 0 1 1 0 1 0 0
426 10 8 426 15632 20000 1 0 0 1 1 0 1 0 0
427 10 8 427 15633 20000 1 0 0 1 1 0 1 0 0
428 10 8 428 15634 20000 1 0 0 1 1 0 1 0 0
429 10 8 429 15635 20000 1 0 0 1 1 0 1 0 0
430 10 8 430 15636 20000 1 0 0 1 1 0 1 0 0
431 10 8 431 15637 20000 1 0 0 1 1 0 1 0 0
432 10 8 432 15638 20000 1 0 0 1 1 0 1 0 0
433 10 8 433 15639 20000 1 0 0 1 1 0 1 0 0
434 10 8 434 15640 20000 1 0 0 1 1 0 1 0 0
435 10 8 435 15641 20000 1 0 0 1 1 0 1 0 0
436 10 8 436 15642 20000 1 0 0 1 1 0 1 0 0
437 10 8 437 15643 20000 1 0 0 1 1 0 1 0 0
438 10 8 438 15644 20000 1 0 0 1 1 0 1 0 0
439 10 8 439 15645 20000 1 0 0 1 1 0 1 0 0
440 10 8 440 15646 20000 1 0 0 1 1 0 1 0 0
441 10 8 441 15647 20000 1 0 0 1 1 0 1 0 0
442 10 8 442 15648 20000 1 0 0 1 1 0 1 0 0
443 10 8 443 15649 20000 1 0 0 1 1 0 1 0 0
444 10 8 444 15650 20000 1 0 0 1 1 0 1 0 0
445 10 8 445 15651 20000 1 0 0 1 1 0 1 0 0
446 10 8 446 15652 20000 1 0 0 1 1 0 1 0 0
447 10 8 447 15653 20000 1 0 0 1 1 0 1 0 0
448 10 8 448 15654 20000 1 0 0 1 1 0 1 0 0
449 10 8 449 15655 20000 1 0 0 1 1 0 1 0 0
450 10 8 450 15656 20000 1 0 0 1 1 0 1 0 0
451 10 8 451 15657 20000 1 0 0 1 1 0 1 0 0
452 10 8 452 15658 20000 1 0 0 1 1 0 1 0 0
453 10 8 453 15659 20000 1 0 0 1 1 0 1 0 0
454 10 8 454 15660 20000 1 0 0 1 1 0 1 0 0
455 10 8 455 15661 20000 1 0 0 1 1 0 1 0 0
456 10 8 456 15662 20000 1 0 0 1 1 0 1 0 0
457 10 8 457 15663 20000 1 0 0 1 1 0 1 0 0
458 10 8 458 15664 20000 1 0 0 1 1 0 1 0 0
459 10 8 459 15665 20000 1 0 0 1 1 0 1 0 0
460 10 8 460 15666 20000 1 0 0 1 1 0 1 0 0
461 10 8 461 15667 20000 1 0 0 1 1 0 1 0 0
462 10 8 462 15668 20000 1 0 0 1 1 0 1 0 0
463 10 8 463 15669 20000 1 0 0 1 1 0 1 0 0
464 10 8 464 15670 20000 1 0 0 1 1 0 1 0 0
465 10 8 465 15671 20000 1 0 0 1 1 0 1 0 0
466 10 8 466 15672 20000 1 0 0 1 1 0 1 0 0
467 10 8 467 15673 20000 1 0 0 1 1 0 1 0 0
468 10 8 468 15674 20000 1 0 0 1 1 0 1 0 0
469 10 8 469 15675 20000 1 0 0 1 1 0 1 0 0
470 10 8 470 15676 20000 1 0 0 1 1 0 1 0 0
471 10 8 471 15677 20000 1 0 0 1 1 0 1 0 0
472 10 8 472 15678 20000 1 0 0 1 1 0 1 0 0
473 10 8 473 15679 20000 1 0 0 1 1 0 1 0 0
474 10 8 474 15680 20000 1 0 0 1 1 0 1 0 0
475 10 8 475 15681 20000 1 0 0 1 1 0 1 0 0
476 10 8 476 15682 20000 1 0 0 1 1 0 1 0 0
477 10 8 477 15683 20000 1 0 0 1 1 0 1 0 0
478 10 8 478 15684 20000 1 0 0 1 1 0 1 0 0
479 10 8 479 15685 20000 1 0 0 1 1 0 1 0 0
480 10 8 480 15686 20000 1 0 0 1 1 0 1 0 0
481 10 8 481 15687 20000 1 0 0 1 1 0 1 0 0
482 10 8 482 15688 20000 1 0 0 1 1 0 1 0 0
483 10 8 483 15689 20000 1 0 0 1 1 0 1 0 0
484 10 8 484 15690 20000 1 0 0 1 1 0 1 0 0
485 10 8 485 15691 20000 1 0 0 1 1 0 1 0 0
486 10 8 486 15692 20000 1 0 0 1 1 0 1 0 0
487 10 8 487 15693 20000 1 0 0 1 1 0 1 0 0
488 10 8 488 15694 20000 1 0 0 1 1 0 1 0 0
489 10 8 489 15695 20000 1 0 0 1 1 0 1 0 0
490 10 8 490 15696 20000 1 0 0 1 1 0 1 0 0
491 10 8 491 15697 20000 1 0 0 1 1 0 1 0 0
492 10 8 492 15698 20000 1 0 0 1 1 0 1 0 0
493 10 8 493 15699 20000 1 0 0 1 1 0 1 0 0
494 10 8 494 15700 20000 1 0 0 1 1 0 1 0 0
495 10 8 495 15701 20000 1 0 0 1 1 0 1 0 0
496 10 8 496 15702 20000 1 0 0 1 1 0 1 0 0
497 10 8 497 15703 20000 1 0 0 1 1 0 1 0 0
498 10 8 498 15704 20000 1 0 0 1 1 0 1 0 0
499 10 8 499 15705 20000 1 0 0 1 1 0 1 0 0
500 10 8 500 15706 20000 1 0 0 1 1 0 1 0 0
501 10 8 501 15707 20000 1 0 0 1 1 0 1 0 0
502 10 8 502 15708 20000 1 0 0 1 1 0 1 0 0
503 10 8 503 15709 20000 1 0 0 1 1 0 1 0 0
504 10 8 504 15710 20000 1 0 0 1 1 0 1 0 0
505 10 8 505 15711 20000 1 0 0 1 1 0 1 0 0
506 10 8 506 15712 20000 1 0 0 1 1 0 1 0 0
507 10 8 507 15713 20000 1 0 0 1 1 0 1 0 0
508 10 8 508 15714 20000 1 0 0 1 1 0 1 0 0
509 10 8 509 15715 20000 1 0 0 1 1 0 1 0 0
510 10 8 510 15716 20000 1 0 0 1 1 0 1 0 0
511 10 8 511 15717 20000 1 0 0 1 1 0 1 0 0
512 10 8 512 15718 20000 1 0 0 1 1 0 1 0 0
513 10 8 513 15719 20000 1 0 0 1 1 0 1 0 0
514 10 8 514 15720 20000 1 0 0 1 1 0 1 0 0
515 10 8 515 15721 20000 1 0 0 1 1 0 1 0 0
516 10 8 516 15722 20000 1 0 0 1 1 0 1 0 0
517 10 8 517 15723 20000 1 0 0 1 1 0 1 0 0
518 10 8 518 15724 20000 1 0 0 1 1 0 1 0 0
519 10 8 519 15725 20000 1 0 0 1 1 0 1 0 0
520 10 8 520 15726 20000 1 0 0 1 1 0 1 0 0
521 10 8 521 15727 20000 1 0 0 1 1 0 1 0 0
522 10 8 522 15728 20000 1 0 0 1 1 0 1 0 0
523 10 8 523 15729 20000 1 0 0 1 1 0 1 0 0
524 10 8 524 15730 20000 1 0 0 1 1 0 1 0 0
525 10 8 525 15731 20000 1 0 0 1 1 0 1 0 0
526 10 8 526 15732 20000 1 0 0 1 1 0 1 0 0
527 10 8 527 15733 20000 1 0 0 1 1 0 1 0 0
528 10 8 528 15734 20000 1 0 0 1 1 0 1 0 0
529 10 8 529 15735 20000 1 0 0 1 1 0 1 0 0
530 10 8 530 15736 20000 1 0 0 1 1 0 1 0 0
531 10 8 531 15737 20000 1 0 0 1 1 0 1 0 0
532 10 8 532 15738 20000 1 0 0 1 1 0 1 0 0
533 10 8 533 15739 20000 1 0 0 1 1 0 1 0 0
534 10 8 534 15740 20000 1 0 0 1 1 0 1 0 0
535 10 8 535 15741 20000 1 0 0 1 1 0 1 0 0
536 10 8 536 15742 20000 1 0 0 1 1 0 1 0 0
537 10 8 537 15743 20000 1 0 0 1 1 0 1 0 0
538 10 8 538 15744 20000 1 0 0 1 1 0 1 0 0
539 10 8 539 15745 20000 1 0 0 1 1 0 1 0 0
540 10 8 540 15746 20000 1 0 0 1 1 0 1 0 0
541 10 8 541 15747 20000 1 0 0 1 1 0 1 0 0
542 10 8 542 15748 20000 1 0 0 1 1 0 1 0 0
543 10 8 543 15749 20000 1 0 0 1 1 0 1 0 0
544 10 8 544 15750 20000 1 0 0 1 1 0 1 0 0
545 10 8 545 15751 20000 1 0 0 1 1 0 1 0 0
546 10 8 546 15752 20000 1 0 0 1 1 0 1 0 0
547 10 8 547 15753 20000 1 0 0 1 1 0 1 0 0
548 10 8 548 15754 20000 1 0 0 1 1 0 1 0 0
549 10 8 549 15755 20000 1 0 0 1 1 0 1 0 0
550 10 8 550 15756 20000 1 0 0 1 1 0 1 0 0
551 10 8 551 15757 20000 1 0 0 1 1 0 1 0 0
552 10 8 552 15758 20000 1 0 0 1 1 0 1 0 0
553 10 8 553 15759 20000 1 0 0 1 1 0 1 0 0
554 10 8 554 15760 20000 1 0 0 1 1 0 1 0 0
555 10 8 555 15761 20000 1 0 0 1 1 0 1 0 0
556 10 8 556 15762 20000 1 0 0 1 1 0 1 0 0
557 10 8 557 15763 20000 1 0 0 1 1 0 1 0 0
558 10 8 558 15764 20000 1 0 0 1 1 0 1 0 0
559 10 8 559 15765 20000 1 0 0 1 1 0 1 0 0
560 10 8 560 15766 20000 1 0 0 1 1 0 1 0 0
561 10 8 561 15919 20000 1 0 0 1 1 0 1 0 0
562 10 8 562 15920 20000 1 0 0 1 1 0 1 0 0
563 10 8 563 15921 20000 1 0 0 1 1 0 1 0 0
564 10 8 564 15922 20000 1 0 0 1 1 0 1 0 0
565 10 8 565 15923 20000 1 0 0 1 1 0 1 0 0
566 10 8 566 15924 20000 1 0 0 1 1 0 1 0 0
567 10 8 567 15925 20000 1 0 0 1 1 0 1 0 0
568 10 8 568 15926 20000 1 0 0 1 1 0 1 0 0
569 10 8 569 15927 20000 1 0 0 1 1 0 1 0 0
570 10 8 570 15928 20000 1 0 0 1 1 0 1 0 0
571 10 8 571 15929 20000 1 0 0 1 1 0 1 0 0
572 10 8 572 15930 20000 1 0 0 1 1 0 1 0 0
573 10 8 573 15931 20000 1 0 0 1 1 0 1 0 0
574 10 8 574 15932 20000 1 0 0 1 1 0 1 0 0
575 10 8 575 15933 20000 1 0 0 1 1 0 1 0 0
576 10 8 576 15934 20000 1 0 0 1 1 0 1 0 0
577 10 8 577 15935 20000 1 0 0 1 1 0 1 0 0
578 10 8 578 15936 20000 1 0 0 1 1 0 1 0 0
579 10 8 579 15937 20000 1 0 0 1 1 0 1 0 0
580 10 8 580 15938 20000 1 0 0 1 1 0 1 0 0
581 10 8 581 15939 20000 1 0 0 1 1 0 1 0 0
582 10 8 582 15940 20000 1 0 0 1 1 0 1 0 0
583 10 8 583 15941 20000 1 0 0 1 1 0 1 0 0
584 10 8 584 15942 20000 1 0 0 1 1 0 1 0 0
585 10 8 585 15943 20000 1 0 0 1 1 0 1 0 0
586 10 8 586 15944 20000 1 0 0 1 1 0 1 0 0
587 10 8 587 15945 20000 1 0 0 1 1 0 1 0 0
588 10 8 588 15946 20000 1 0 0 1 1 0 1 0 0
589 10 8 589 15947 20000 1 0 0 1 1 0 1 0 0
590 10 8 590 15948 20000 1 0 0 1 1 0 1 0 0
591 10 8 591 15949 20000 1 0 0 1 1 0 1 0 0
592 10 8 592 15950 20000 1 0 0 1 1 0 1 0 0
593 10 8 593 15951 20000 1 0 0 1 1 0 1 0 0
594 10 8 594 15952 20000 1 0 0 1 1 0 1 0 0
595 10 8 595 15953 20000 1 0 0 1 1 0 1 0 0
596 10 8 596 15954 20000 1 0 0 1 1 0 1 0 0
597 10 8 597 15955 20000 1 0 0 1 1 0 1 0 0
598 10 8 598 15956 20000 1 0 0 1 1 0 1 0 0
599 10 8 599 15957 20000 1 0 0 1 1 0 1 0 0
600 10 8 600 15958 20000 1 0 0 1 1 0 1 0 0
601 10 8 601 15959 20000 1 0 0 1 1 0 1 0 0
602 10 8 602 15960 20000 1 0 0 1 1 0 1 0 0
603 10 8 603 15961 20000 1 0 0 1 1 0 1 0 0
604 10 8 604 15962 20000 1 0 0 1 1 0 1 0 0
605 10 8 605 15963 20000 1 0 0 1 1 0 1 0 0
606 10 8 606 15964 20000 1 0 0 1 1 0 1 0 0
607 10 8 607 15965 20000 1 0 0 1 1 0 1 0 0
608 10 8 608 15966 20000 1 0 0 1 1 0 1 0 0
609 10 8 609 15967 20000 1 0 0 1 1 0 1 0 0
610 10 8 610 15968 20000 1 0 0 1 1 0 1 0 0
611 10 7 611 13506 250 1 0 0 1 1 0 1 50 0
612 10 7 612 15011 250 1 0 0 1 1 0 1 50 0
613 10 7 613 13636 250 1 0 0 1 1 0 1 50 0
614 10 7 614 1227 250 1 0 0 1 1 0 1 50 0
615 10 7 615 15022 250 1 0 0 1 1 0 1 50 0
616 10 8 616 4407 1000 1 0 0 1 1 0 1 0 0
617 10 8 617 4408 1000 1 0 0 1 1 0 1 0 0
618 10 8 618 4409 1000 1 0 0 1 1 0 1 0 0
619 10 8 619 4410 1000 1 0 0 1 1 0 1 0 0
620 10 8 620 4411 1000 1 0 0 1 1 0 1 0 0
621 10 8 621 4412 1000 1 0 0 1 1 0 1 0 0
622 10 8 622 4413 1000 1 0 0 1 1 0 1 0 0
623 10 8 623 4414 1000 1 0 0 1 1 0 1 0 0
624 10 8 624 4823 1000 1 0 0 1 1 0 1 0 0
625 10 8 625 4824 1000 1 0 0 1 1 0 1 0 0
626 10 8 626 4825 1000 1 0 0 1 1 0 1 0 0
627 10 8 627 4826 1000 1 0 0 1 1 0 1 0 0
628 10 8 628 4827 1000 1 0 0 1 1 0 1 0 0
629 10 8 629 4828 1000 1 0 0 1 1 0 1 0 0
630 10 8 630 4829 1000 1 0 0 1 1 0 1 0 0
631 10 8 631 4830 1000 1 0 0 1 1 0 1 0 0
632 10 8 632 5194 1000 1 0 0 1 1 0 1 0 0
633 10 8 633 5195 1000 1 0 0 1 1 0 1 0 0
634 10 8 634 5196 1000 1 0 0 1 1 0 1 0 0
635 10 8 635 5197 1000 1 0 0 1 1 0 1 0 0
636 10 8 636 5198 1000 1 0 0 1 1 0 1 0 0
637 10 8 637 5199 1000 1 0 0 1 1 0 1 0 0
638 10 8 638 5200 1000 1 0 0 1 1 0 1 0 0
639 10 8 639 5201 1000 1 0 0 1 1 0 1 0 0
640 10 8 640 13630 1000 1 0 0 1 1 0 1 0 0
641 10 8 641 13631 1000 1 0 0 1 1 0 1 0 0
642 10 8 642 13632 1000 1 0 0 1 1 0 1 0 0
643 10 8 643 13633 1000 1 0 0 1 1 0 1 0 0
644 10 8 644 13634 1000 1 0 0 1 1 0 1 0 0
645 10 8 645 13635 1000 1 0 0 1 1 0 1 0 0
646 10 8 646 15103 1000 1 0 0 1 1 0 1 0 0
647 10 8 647 15104 1000 1 0 0 1 1 0 1 0 0
648 10 8 648 15105 1000 1 0 0 1 1 0 1 0 0
649 10 8 649 15106 1000 1 0 0 1 1 0 1 0 0
650 10 8 650 15107 1000 1 0 0 1 1 0 1 0 0
651 10 8 651 15108 1000 1 0 0 1 1 0 1 0 0
652 10 8 652 16459 1000 1 0 0 1 1 0 1 0 0
653 10 8 653 16460 1000 1 0 0 1 1 0 1 0 0
654 10 8 654 16461 1000 1 0 0 1 1 0 1 0 0
655 10 8 655 16462 1000 1 0 0 1 1 0 1 0 0
656 10 8 656 16463 1000 1 0 0 1 1 0 1 0 0
657 10 8 657 16464 1000 1 0 0 1 1 0 1 0 0
658 10 8 658 16465 1000 1 0 0 1 1 0 1 0 0
659 10 8 659 16466 1000 1 0 0 1 1 0 1 0 0
660 10 8 660 16467 1000 1 0 0 1 1 0 1 0 0
661 10 8 661 16468 1000 1 0 0 1 1 0 1 0 0
662 10 8 662 16469 1000 1 0 0 1 1 0 1 0 0
663 10 8 663 16470 1000 1 0 0 1 1 0 1 0 0
664 10 8 664 16471 1000 1 0 0 1 1 0 1 0 0
665 10 8 665 16472 1000 1 0 0 1 1 0 1 0 0
666 10 8 666 13416 1000 1 0 0 1 1 0 1 0 0
667 10 8 667 13417 1000 1 0 0 1 1 0 1 0 0
668 10 8 668 13418 1000 1 0 0 1 1 0 1 0 0
669 10 8 669 13419 1000 1 0 0 1 1 0 1 0 0
670 10 8 670 13420 1000 1 0 0 1 1 0 1 0 0
671 10 8 671 14283 1000 1 0 0 1 1 0 1 0 0
672 10 8 672 14284 1000 1 0 0 1 1 0 1 0 0
673 10 8 673 14285 1000 1 0 0 1 1 0 1 0 0
674 10 8 674 14286 1000 1 0 0 1 1 0 1 0 0
675 10 8 675 13182 1000 1 0 0 1 1 0 1 0 0
676 10 8 676 13507 1000 1 0 0 1 1 0 1 0 0
677 10 8 677 13981 1000 1 0 0 1 1 0 1 0 0
678 10 8 678 14744 1000 1 0 0 1 1 0 1 0 0
679 10 8 679 14893 1000 1 0 0 1 1 0 1 0 0
680 10 8 680 15785 1000 1 0 0 1 1 0 1 0 0
681 10 8 681 16419 1000 1 0 0 1 1 0 1 0 0
682 10 8 682 11470 1000 1 0 0 1 1 0 1 0 0
683 10 8 683 12512 1000 1 0 0 1 1 0 1 0 0
684 10 8 684 12884 1000 1 0 0 1 1 0 1 0 0
685 10 8 685 12513 1000 1 0 0 1 1 0 1 0 0
686 10 8 686 12514 1000 1 0 0 1 1 0 1 0 0
687 10 8 687 12515 1000 1 0 0 1 1 0 1 0 0
688 10 8 688 12516 1000 1 0 0 1 1 0 1 0 0
689 10 8 689 12517 1000 1 0 0 1 1 0 1 0 0
690 10 8 690 12518 1000 1 0 0 1 1 0 1 0 0
691 10 8 691 12519 1000 1 0 0 1 1 0 1 0 0
692 10 8 692 12520 1000 1 0 0 1 1 0 1 0 0
693 10 8 693 12521 1000 1 0 0 1 1 0 1 0 0
694 10 8 694 8179 1000 1 0 0 1 1 0 1 0 0
695 10 8 695 9704 1000 1 0 0 1 1 0 1 0 0
696 10 8 696 15448 1000 1 0 0 1 1 0 1 0 0
697 10 8 697 11162 1000 1 0 0 1 1 0 1 0 0
698 10 8 698 11163 1000 1 0 0 1 1 0 1 0 0
699 10 8 699 11164 1000 1 0 0 1 1 0 1 0 0
700 10 8 700 11165 1000 1 0 0 1 1 0 1 0 0
701 10 8 701 11661 1000 1 0 0 1 1 0 1 0 0
702 10 8 702 11662 1000 1 0 0 1 1 0 1 0 0
703 10 8 703 14639 1000 1 0 0 1 1 0 1 0 0
704 10 8 704 13607 10 1 0 0 1 1 0 1 0 0
705 10 7 705 15774 3000 1 0 0 1 1 0 1 100 0
706 10 7 706 15775 3000 1 0 0 1 1 0 1 100 0
707 10 7 707 11420 3000 1 0 0 1 1 0 1 100 0
708 10 7 708 14704 3000 1 0 0 1 1 0 1 100 0
709 10 7 709 13177 3000 1 0 0 1 1 0 1 100 0
710 10 7 710 14191 3000 1 0 0 1 1 0 1 100 0
711 10 7 711 13449 3000 1 0 0 1 1 0 1 100 0
712 10 7 712 14192 3000 1 0 0 1 1 0 1 100 0
713 10 7 713 15772 3000 1 0 0 1 1 0 1 100 0
714 10 7 714 13791 3000 1 0 0 1 1 0 1 100 0
715 10 7 715 14006 3000 1 0 0 1 1 0 1 100 0
716 10 7 716 15768 3000 1 0 0 1 1 0 1 100 0
717 10 7 717 14069 3000 1 0 0 1 1 0 1 100 0
718 10 7 718 14124 3000 1 0 0 1 1 0 1 100 0
719 10 7 719 15507 3000 1 0 0 1 1 0 1 100 0
720 10 7 720 15508 3000 1 0 0 1 1 0 1 100 0
721 10 7 721 14855 3000 1 0 0 1 1 0 1 100 0
722 10 7 722 14894 3000 1 0 0 1 1 0 1 100 0
723 10 7 723 16444 3000 1 0 0 1 1 0 1 100 0
724 10 7 724 16445 3000 1 0 0 1 1 0 1 100 0
725 10 7 725 12509 3000 1 0 0 1 1 0 1 100 0
726 10 7 726 14126 3000 1 0 0 1 1 0 1 100 0
727 10 7 727 15062 3000 1 0 0 1 1 0 1 100 0
728 10 7 728 15063 3000 1 0 0 1 1 0 1 100 0
729 10 7 729 14891 3000 1 0 0 1 1 0 1 100 0
730 10 7 730 14895 3000 1 0 0 1 1 0 1 100 0
731 10 7 731 14091 3000 1 0 0 1 1 0 1 100 0
732 10 7 732 14092 3000 1 0 0 1 1 0 1 100 0
733 10 7 733 14501 3000 1 0 0 1 1 0 1 100 0
734 10 7 734 14506 3000 1 0 0 1 1 0 1 100 0
735 10 7 735 15285 3000 1 0 0 1 1 0 1 100 0
736 10 7 736 15286 3000 1 0 0 1 1 0 1 100 0
737 10 7 737 16442 3000 1 0 0 1 1 0 1 100 0
738 10 7 738 16443 3000 1 0 0 1 1 0 1 100 0
739 10 7 739 15027 3000 1 0 0 1 1 0 1 100 0
740 10 7 740 15028 3000 1 0 0 1 1 0 1 100 0
741 10 7 741 13453 3000 1 0 0 1 1 0 1 100 0
742 10 7 742 14193 3000 1 0 0 1 1 0 1 100 0
743 10 7 743 13178 3000 1 0 0 1 1 0 1 100 0
744 10 7 744 14194 3000 1 0 0 1 1 0 1 100 0
745 10 7 745 16454 3000 1 0 0 1 1 0 1 100 0
746 10 7 746 16455 3000 1 0 0 1 1 0 1 100 0
747 10 7 747 15030 3000 1 0 0 1 1 0 1 100 0
748 10 7 748 15031 3000 1 0 0 1 1 0 1 100 0
749 10 7 749 13790 3000 1 0 0 1 1 0 1 100 0
750 10 7 750 14005 3000 1 0 0 1 1 0 1 100 0
751 10 7 751 14406 3000 1 0 0 1 1 0 1 100 0
752 10 7 752 14413 3000 1 0 0 1 1 0 1 100 0
753 10 7 753 16448 3000 1 0 0 1 1 0 1 100 0
754 10 7 754 16449 3000 1 0 0 1 1 0 1 100 0
755 10 7 755 12872 3000 1 0 0 1 1 0 1 100 0
756 10 7 756 14187 3000 1 0 0 1 1 0 1 100 0
757 10 7 757 14125 3000 1 0 0 1 1 0 1 100 0
758 10 7 758 14500 3000 1 0 0 1 1 0 1 100 0
759 10 7 759 14505 3000 1 0 0 1 1 0 1 100 0
760 10 7 760 15118 3000 1 0 0 1 1 0 1 100 0
761 10 7 761 15119 3000 1 0 0 1 1 0 1 100 0
762 10 7 762 14662 3000 1 0 0 1 1 0 1 100 0
763 10 7 763 14663 3000 1 0 0 1 1 0 1 100 0
764 10 7 764 15771 3000 1 0 0 1 1 0 1 100 0
765 10 7 765 9700 3000 1 0 0 1 1 0 1 100 0
766 10 7 766 14498 3000 1 0 0 1 1 0 1 100 0
767 10 7 767 14913 3000 1 0 0 1 1 0 1 100 0
768 10 7 768 14914 3000 1 0 0 1 1 0 1 100 0
769 10 7 769 13508 3000 1 0 0 1 1 0 1 100 0
770 10 7 770 15115 3000 1 0 0 1 1 0 1 100 0
771 10 7 771 15116 3000 1 0 0 1 1 0 1 100 0
772 10 7 772 15113 3000 1 0 0 1 1 0 1 100 0
773 10 7 773 15114 3000 1 0 0 1 1 0 1 100 0
774 10 7 774 15222 3000 1 0 0 1 1 0 1 100 0
775 10 7 775 15223 3000 1 0 0 1 1 0 1 100 0
776 10 7 776 10750 3000 1 0 0 1 1 0 1 100 0
777 10 7 777 14705 3000 1 0 0 1 1 0 1 100 0
778 10 7 778 15027 3000 1 0 0 1 1 0 1 100 0
779 10 7 779 15028 3000 1 0 0 1 1 0 1 100 0
780 10 7 780 10380 3000 1 0 0 1 1 0 1 100 0
781 10 7 781 15060 3000 1 0 0 1 1 0 1 100 0
782 10 7 782 13963 3000 1 0 0 1 1 0 1 100 0
783 10 7 783 14026 3000 1 0 0 1 1 0 1 100 0
784 10 7 784 13964 3000 1 0 0 1 1 0 1 100 0
785 10 7 785 14027 3000 1 0 0 1 1 0 1 100 0
786 10 7 786 15064 3000 1 0 0 1 1 0 1 100 0
787 10 7 787 15065 3000 1 0 0 1 1 0 1 100 0
788 10 7 788 15524 3000 1 0 0 1 1 0 1 100 0
789 10 7 789 15525 3000 1 0 0 1 1 0 1 100 0
790 10 7 790 16450 3000 1 0 0 1 1 0 1 100 0
791 10 7 791 16451 3000 1 0 0 1 1 0 1 100 0
792 10 7 792 16344 3000 1 0 0 1 1 0 1 100 0
793 10 7 793 16345 3000 1 0 0 1 1 0 1 100 0
794 10 7 794 16342 3000 1 0 0 1 1 0 1 100 0
795 10 7 795 16343 3000 1 0 0 1 1 0 1 100 0
796 10 7 796 15220 3000 1 0 0 1 1 0 1 100 0
797 10 7 797 15221 3000 1 0 0 1 1 0 1 100 0
798 10 7 798 15066 3000 1 0 0 1 1 0 1 100 0
799 10 7 799 15067 3000 1 0 0 1 1 0 1 100 0
800 10 7 800 14089 3000 1 0 0 1 1 0 1 100 0
801 10 7 801 14090 3000 1 0 0 1 1 0 1 100 0
802 10 7 802 14195 3000 1 0 0 1 1 0 1 100 0
803 10 7 803 14196 3000 1 0 0 1 1 0 1 100 0
804 10 7 804 13965 3000 1 0 0 1 1 0 1 100 0
805 10 7 805 14028 3000 1 0 0 1 1 0 1 100 0
806 10 7 806 13508 3000 1 0 0 1 1 0 1 100 0
807 10 7 807 13962 3000 1 0 0 1 1 0 1 100 0
808 10 7 808 14314 3000 1 0 0 1 1 0 1 100 0
809 10 7 809 13404 3000 1 0 0 1 1 0 1 100 0
810 10 7 810 14188 3000 1 0 0 1 1 0 1 100 0
811 10 7 811 14032 3000 1 0 0 1 1 0 1 100 0
812 10 7 812 13960 3000 1 0 0 1 1 0 1 100 0
813 10 7 813 15819 3000 1 0 0 1 1 0 1 100 0
814 10 7 814 15820 3000 1 0 0 1 1 0 1 100 0
815 10 7 815 10750 3000 1 0 0 1 1 0 1 100 0
816 10 7 816 14705 3000 1 0 0 1 1 0 1 100 0
817 10 7 817 14407 3000 1 0 0 1 1 0 1 100 0
818 10 7 818 14414 3000 1 0 0 1 1 0 1 100 0
819 10 7 819 16352 3000 1 0 0 1 1 0 1 100 0
820 10 7 820 16353 3000 1 0 0 1 1 0 1 100 0
821 10 7 821 14502 3000 1 0 0 1 1 0 1 100 0
822 10 7 822 14507 3000 1 0 0 1 1 0 1 100 0
823 10 7 823 10811 3000 1 0 0 1 1 0 1 100 0
824 10 7 824 15061 3000 1 0 0 1 1 0 1 100 0
825 10 7 825 15823 3000 1 0 0 1 1 0 1 100 0
826 10 7 826 15824 3000 1 0 0 1 1 0 1 100 0
827 10 7 827 15224 3000 1 0 0 1 1 0 1 100 0
828 10 7 828 15225 3000 1 0 0 1 1 0 1 100 0
829 10 7 829 14503 3000 1 0 0 1 1 0 1 100 0
830 10 7 830 14510 3000 1 0 0 1 1 0 1 100 0
831 10 7 831 15776 3000 1 0 0 1 1 0 1 100 0
832 10 7 832 15777 3000 1 0 0 1 1 0 1 100 0
833 10 7 833 15821 3000 1 0 0 1 1 0 1 100 0
834 10 7 834 15822 3000 1 0 0 1 1 0 1 100 0
835 10 7 835 14198 3000 1 0 0 1 1 0 1 100 0
836 10 7 836 14197 3000 1 0 0 1 1 0 1 100 0
837 10 7 837 16446 3000 1 0 0 1 1 0 1 100 0
838 10 7 838 16447 3000 1 0 0 1 1 0 1 100 0
839 10 7 839 14905 3000 1 0 0 1 1 0 1 100 0
840 10 7 840 14907 3000 1 0 0 1 1 0 1 100 0
841 10 7 841 14904 3000 1 0 0 1 1 0 1 100 0
842 10 7 842 14906 3000 1 0 0 1 1 0 1 100 0
843 10 7 843 14659 3000 1 0 0 1 1 0 1 100 0
844 10 7 844 14660 3000 1 0 0 1 1 0 1 100 0
845 10 7 845 13326 3000 1 0 0 1 1 0 1 100 0
846 10 7 846 14416 3000 1 0 0 1 1 0 1 100 0
847 10 7 847 13450 3000 1 0 0 1 1 0 1 100 0
848 10 7 848 14031 3000 1 0 0 1 1 0 1 100 0
849 10 7 849 16492 3000 1 0 0 1 1 0 1 100 0
850 10 7 850 16493 3000 1 0 0 1 1 0 1 100 0
851 10 8 851 1520 1 1 0 0 1 1 0 1 0 0
852 10 8 852 7011 1 1 0 0 1 1 0 1 0 0
853 10 7 853 14299 500 1 0 0 1 1 0 1 20 0
854 10 7 854 14389 500 1 0 0 1 1 0 1 20 0
855 10 7 855 15177 500 1 0 0 1 1 0 1 20 0
856 10 7 856 14537 500 1 0 0 1 1 0 1 20 0
857 10 7 857 14758 500 1 0 0 1 1 0 1 20 0
858 10 7 858 14854 500 1 0 0 1 1 0 1 20 0
859 10 7 859 13974 500 1 0 0 1 1 0 1 20 0
860 10 7 860 15021 500 1 0 0 1 1 0 1 20 0
861 10 7 861 15111 500 1 0 0 1 1 0 1 20 0
862 10 7 862 15226 500 1 0 0 1 1 0 1 20 0
863 10 7 863 15773 500 1 0 0 1 1 0 1 20 0
864 10 7 864 15825 500 1 0 0 1 1 0 1 20 0
865 10 7 865 15827 500 1 0 0 1 1 0 1 20 0
866 10 7 866 16340 500 1 0 0 1 1 0 1 20 0
867 10 7 867 16341 500 1 0 0 1 1 0 1 20 0
868 10 7 868 16457 500 1 0 0 1 1 0 1 20 0
869 10 7 869 16458 500 1 0 0 1 1 0 1 20 0
870 10 7 870 11698 250 1 0 0 1 1 0 1 50 0
871 10 7 871 11700 250 1 0 0 1 1 0 1 50 0
872 10 8 872 4358 10 1 0 0 1 1 0 1 0 0
873 10 8 873 7981 1 1 0 0 1 1 0 1 0 0
874 10 8 874 7267 20 1 0 0 1 1 0 1 0 0
875 10 8 875 9958 20 1 0 0 1 1 0 1 0 999
876 10 8 876 1548 20 1 0 0 1 1 0 1 0 0
877 10 8 877 1613 20 1 0 0 1 1 0 1 0 0
878 10 8 878 1026 1 1 0 0 1 1 0 1 0 0
879 10 8 879 5380 1 1 0 0 1 1 0 1 0 0
880 10 8 880 11284 15 1 0 0 1 1 0 1 0 0
881 10 8 881 11285 15 1 0 0 1 1 0 1 0 0
882 10 8 882 11286 15 1 0 0 1 1 0 1 0 0
883 10 8 883 10356 500 1 0 0 1 1 0 1 0 0
884 10 8 884 12511 500 1 0 0 1 1 0 1 0 0
885 10 8 885 13238 500 1 0 0 1 1 0 1 0 0
886 10 8 886 1691 1 1 0 0 1 1 0 1 0 0
887 10 8 887 9708 1 1 0 0 1 1 0 1 0 0
888 10 8 888 11383 10 1 0 0 1 1 0 1 0 0
889 10 8 889 11382 10 1 0 0 1 1 0 1 0 0
890 10 8 890 11381 10 1 0 0 1 1 0 1 0 0
891 10 7 891 16348 3000 1 0 0 1 1 0 1 100 0
892 10 8 892 11386 10 1 0 0 1 1 0 1 0 0
893 10 8 893 5767 1 10000 0 0 1 1 0 1 0 0
894 10 8 894 5765 1 10000 0 0 1 1 0 1 0 0
895 10 8 895 5768 1 10000 0 0 1 1 0 1 0 0
896 10 8 896 14444 10 1 0 0 1 1 0 1 0 0
897 10 8 897 14443 10 1 0 0 1 1 0 1 0 0
898 10 8 898 14445 10 1 0 0 1 1 0 1 0 0
899 10 8 899 15068 500 1 0 0 1 1 0 1 20 0
900 10 7 900 16532 1000 1 0 0 1 1 0 1 0 0
901 10 8 901 100 1 10000 0 0 1 1 0 1 0 0
902 10 8 902 11243 1 1 0 0 1 1 0 1 0 0
903 10 8 903 101 1 10000 0 0 1 1 0 1 0 0
904 10 7 904 14368 3000 1 0 0 1 1 0 1 50 0
905 10 8 905 8943 1 20 0 0 1 1 0 1 0 0
906 10 7 906 1622 3000 1 0 0 1 1 0 1 0 0
907 10 8 907 8953 1 20 0 0 1 1 0 1 0 0
908 10 8 908 13693 1 20 0 0 1 1 0 1 0 0
909 10 8 909 8949 1 20 0 0 1 1 0 1 0 0
910 10 8 910 8955 1 20 0 0 1 1 0 1 0 0
911 10 7 911 16456 500 1 0 0 1 1 0 1 0 0

0
bin/events/.gitkeep Normal file
View File

View File

@@ -1,16 +0,0 @@
BEGIN;
CREATE TABLE questlists (
ind int NOT NULL PRIMARY KEY,
questlist bytea
);
END;
INSERT INTO questlists (ind, questlist) VALUES ('0', pg_read_binary_file('c:\save\quest_0_0.bin'));
INSERT INTO questlists (ind, questlist) VALUES ('42', pg_read_binary_file('c:\save\quest_42_2A.bin'));
INSERT INTO questlists (ind, questlist) VALUES ('84', pg_read_binary_file('c:\save\quest_84_54.bin'));
INSERT INTO questlists (ind, questlist) VALUES ('126', pg_read_binary_file('c:\save\quest_126_7E.bin'));
INSERT INTO questlists (ind, questlist) VALUES ('168', pg_read_binary_file('c:\save\quest_168_A8.bin'));

0
bin/quests/.gitkeep Normal file
View File

0
bin/scenarios/.gitkeep Normal file
View File

View File

@@ -138,6 +138,10 @@ func (b *ByteFrame) DataFromCurrent() []byte {
return b.buf[b.index:b.usedSize]
}
func (b *ByteFrame) Index() uint {
return b.index
}
// SetLE sets the byte order to litte endian.
func (b *ByteFrame) SetLE() {
b.byteOrder = binary.LittleEndian

109
common/decryption/jpk.go Normal file
View File

@@ -0,0 +1,109 @@
package decryption
/*
This code is HEAVILY based from
https://github.com/Chakratos/ReFrontier/blob/master/ReFrontier/Unpack.cs
*/
import (
"erupe-ce/common/byteframe"
"io"
)
var mShiftIndex = 0
var mFlag = byte(0)
func UnpackSimple(data []byte) []byte {
mShiftIndex = 0
mFlag = byte(0)
bf := byteframe.NewByteFrameFromBytes(data)
bf.SetLE()
header := bf.ReadUint32()
if header == 0x1A524B4A {
bf.Seek(0x2, io.SeekCurrent)
jpkType := bf.ReadUint16()
switch jpkType {
case 3:
startOffset := bf.ReadInt32()
outSize := bf.ReadInt32()
outBuffer := make([]byte, outSize)
bf.Seek(int64(startOffset), io.SeekStart)
ProcessDecode(bf, outBuffer)
return outBuffer
}
}
return data
}
func ProcessDecode(data *byteframe.ByteFrame, outBuffer []byte) {
outIndex := 0
for int(data.Index()) < len(data.Data()) && outIndex < len(outBuffer)-1 {
if JPKBitShift(data) == 0 {
outBuffer[outIndex] = ReadByte(data)
outIndex++
continue
} else {
if JPKBitShift(data) == 0 {
length := (JPKBitShift(data) << 1) | JPKBitShift(data)
off := ReadByte(data)
JPKCopy(outBuffer, int(off), int(length)+3, &outIndex)
continue
} else {
hi := ReadByte(data)
lo := ReadByte(data)
length := int(hi&0xE0) >> 5
off := ((int(hi) & 0x1F) << 8) | int(lo)
if length != 0 {
JPKCopy(outBuffer, off, length+2, &outIndex)
continue
} else {
if JPKBitShift(data) == 0 {
length := (JPKBitShift(data) << 3) | (JPKBitShift(data) << 2) | (JPKBitShift(data) << 1) | JPKBitShift(data)
JPKCopy(outBuffer, off, int(length)+2+8, &outIndex)
continue
} else {
temp := ReadByte(data)
if temp == 0xFF {
for i := 0; i < off+0x1B; i++ {
outBuffer[outIndex] = ReadByte(data)
outIndex++
continue
}
} else {
JPKCopy(outBuffer, off, int(temp)+0x1a, &outIndex)
}
}
}
}
}
}
}
func JPKBitShift(data *byteframe.ByteFrame) byte {
mShiftIndex--
if mShiftIndex < 0 {
mShiftIndex = 7
mFlag = ReadByte(data)
}
return (byte)((mFlag >> mShiftIndex) & 1)
}
func JPKCopy(outBuffer []byte, offset int, length int, index *int) {
for i := 0; i < length; i++ {
outBuffer[*index] = outBuffer[*index-offset-1]
*index++
}
}
func ReadByte(bf *byteframe.ByteFrame) byte {
value := bf.ReadUint8()
return value
}

54
common/mhfcid/mhfcid.go Normal file
View File

@@ -0,0 +1,54 @@
package mhfcid
import (
"math"
)
// ConvertCID converts a MHF Character ID String to integer
//
// Banned characters: 0, I, O, S
func ConvertCID(ID string) (r uint32) {
if len(ID) != 6 {
return
}
m := map[rune]uint32{
'1': 0,
'2': 1,
'3': 2,
'4': 3,
'5': 4,
'6': 5,
'7': 6,
'8': 7,
'9': 8,
'A': 9,
'B': 10,
'C': 11,
'D': 12,
'E': 13,
'F': 14,
'G': 15,
'H': 16,
'J': 17,
'K': 18,
'L': 19,
'M': 20,
'N': 21,
'P': 22,
'Q': 23,
'R': 24,
'T': 25,
'U': 26,
'V': 27,
'W': 28,
'X': 29,
'Y': 30,
'Z': 31,
}
for i, c := range ID {
r += m[c] * uint32(math.Pow(32, float64(i)))
}
return
}

View File

@@ -0,0 +1,112 @@
package mhfcourse
import (
_config "erupe-ce/config"
"math"
"sort"
"time"
)
type Course struct {
ID uint16
Expiry time.Time
}
var aliases = map[uint16][]string{
1: {"Trial", "TL"},
2: {"HunterLife", "HL"},
3: {"Extra", "ExtraA", "EX"},
4: {"ExtraB"},
5: {"Mobile"},
6: {"Premium"},
7: {"Pallone", "ExtraC"},
8: {"Assist", "***ist", "Legend", "Rasta"},
9: {"N"},
10: {"Hiden", "Secret"},
11: {"HunterSupport", "HunterAid", "Support", "Aid", "Royal"},
12: {"NBoost", "NetCafeBoost", "Boost"},
// 13-19 show up as (unknown)
20: {"DEBUG"},
21: {"COG_LINK_EXPIRED"},
22: {"360_GOLD"},
23: {"PS3_TROP"},
24: {"COG"},
25: {"CAFE_SP"},
26: {"NetCafe", "Cafe", "OfficialCafe", "Official"},
27: {"HLRenewing", "HLR", "HLRenewal", "HLRenew", "CardHL"},
28: {"EXRenewing", "EXR", "EXRenewal", "EXRenew", "CardEX"},
29: {"Free"},
// 30 = Real NetCafe course
}
func (c Course) Aliases() []string {
return aliases[c.ID]
}
func Courses() []Course {
courses := make([]Course, 32)
for i := range courses {
courses[i].ID = uint16(i)
}
return courses
}
func (c Course) Value() uint32 {
return uint32(math.Pow(2, float64(c.ID)))
}
// CourseExists returns true if the named course exists in the given slice
func CourseExists(ID uint16, c []Course) bool {
for _, course := range c {
if course.ID == ID {
return true
}
}
return false
}
// GetCourseStruct returns a slice of Course(s) from a rights integer
func GetCourseStruct(rights uint32) ([]Course, uint32) {
var resp []Course
for _, c := range _config.ErupeConfig.DefaultCourses {
resp = append(resp, Course{ID: c})
}
s := Courses()
sort.Slice(s, func(i, j int) bool {
return s[i].ID > s[j].ID
})
var normalCafeCourseSet, netcafeCourseSet, hidenCourseSet bool
for _, course := range s {
if rights-course.Value() < 0x80000000 {
switch course.ID {
case 26:
if normalCafeCourseSet {
break
}
normalCafeCourseSet = true
resp = append(resp, Course{ID: 25})
fallthrough
case 9:
if netcafeCourseSet {
break
}
netcafeCourseSet = true
resp = append(resp, Course{ID: 30})
case 10:
if hidenCourseSet {
break
}
hidenCourseSet = true
resp = append(resp, Course{ID: 31})
}
course.Expiry = time.Date(2030, 1, 1, 0, 0, 0, 0, time.FixedZone("UTC+9", 9*60*60))
resp = append(resp, course)
rights -= course.Value()
}
}
rights = 0
for _, course := range resp {
rights += course.Value()
}
return resp, rights
}

175
common/mhfitem/mhfitem.go Normal file
View File

@@ -0,0 +1,175 @@
package mhfitem
import (
"erupe-ce/common/byteframe"
"erupe-ce/common/token"
_config "erupe-ce/config"
)
type MHFItem struct {
ItemID uint16
}
type MHFSigilEffect struct {
ID uint16
Level uint16
}
type MHFSigil struct {
Effects []MHFSigilEffect
Unk0 uint8
Unk1 uint8
Unk2 uint8
Unk3 uint8
}
type MHFEquipment struct {
WarehouseID uint32
ItemType uint8
Unk0 uint8
ItemID uint16
Level uint16
Decorations []MHFItem
Sigils []MHFSigil
Unk1 uint16
}
type MHFItemStack struct {
WarehouseID uint32
Item MHFItem
Quantity uint16
Unk0 uint32
}
func ReadWarehouseItem(bf *byteframe.ByteFrame) MHFItemStack {
var item MHFItemStack
item.WarehouseID = bf.ReadUint32()
if item.WarehouseID == 0 {
item.WarehouseID = token.RNG.Uint32()
}
item.Item.ItemID = bf.ReadUint16()
item.Quantity = bf.ReadUint16()
item.Unk0 = bf.ReadUint32()
return item
}
func DiffItemStacks(o []MHFItemStack, u []MHFItemStack) []MHFItemStack {
// o = old, u = update, f = final
var f []MHFItemStack
for _, uItem := range u {
exists := false
for i := range o {
if o[i].WarehouseID == uItem.WarehouseID {
exists = true
o[i].Quantity = uItem.Quantity
}
}
if !exists {
uItem.WarehouseID = token.RNG.Uint32()
f = append(f, uItem)
}
}
for _, oItem := range o {
if oItem.Quantity > 0 {
f = append(f, oItem)
}
}
return f
}
func (is MHFItemStack) ToBytes() []byte {
bf := byteframe.NewByteFrame()
bf.WriteUint32(is.WarehouseID)
bf.WriteUint16(is.Item.ItemID)
bf.WriteUint16(is.Quantity)
bf.WriteUint32(is.Unk0)
return bf.Data()
}
func SerializeWarehouseItems(i []MHFItemStack) []byte {
bf := byteframe.NewByteFrame()
bf.WriteUint16(uint16(len(i)))
bf.WriteUint16(0) // Unused
for _, j := range i {
bf.WriteBytes(j.ToBytes())
}
return bf.Data()
}
func ReadWarehouseEquipment(bf *byteframe.ByteFrame) MHFEquipment {
var equipment MHFEquipment
equipment.Decorations = make([]MHFItem, 3)
equipment.Sigils = make([]MHFSigil, 3)
for i := 0; i < 3; i++ {
equipment.Sigils[i].Effects = make([]MHFSigilEffect, 3)
}
equipment.WarehouseID = bf.ReadUint32()
if equipment.WarehouseID == 0 {
equipment.WarehouseID = token.RNG.Uint32()
}
equipment.ItemType = bf.ReadUint8()
equipment.Unk0 = bf.ReadUint8()
equipment.ItemID = bf.ReadUint16()
equipment.Level = bf.ReadUint16()
for i := 0; i < 3; i++ {
equipment.Decorations[i].ItemID = bf.ReadUint16()
}
if _config.ErupeConfig.RealClientMode >= _config.G1 {
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
equipment.Sigils[i].Effects[j].ID = bf.ReadUint16()
}
for j := 0; j < 3; j++ {
equipment.Sigils[i].Effects[j].Level = bf.ReadUint16()
}
equipment.Sigils[i].Unk0 = bf.ReadUint8()
equipment.Sigils[i].Unk1 = bf.ReadUint8()
equipment.Sigils[i].Unk2 = bf.ReadUint8()
equipment.Sigils[i].Unk3 = bf.ReadUint8()
}
}
if _config.ErupeConfig.RealClientMode >= _config.Z1 {
equipment.Unk1 = bf.ReadUint16()
}
return equipment
}
func (e MHFEquipment) ToBytes() []byte {
bf := byteframe.NewByteFrame()
bf.WriteUint32(e.WarehouseID)
bf.WriteUint8(e.ItemType)
bf.WriteUint8(e.Unk0)
bf.WriteUint16(e.ItemID)
bf.WriteUint16(e.Level)
for i := 0; i < 3; i++ {
bf.WriteUint16(e.Decorations[i].ItemID)
}
if _config.ErupeConfig.RealClientMode >= _config.G1 {
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
bf.WriteUint16(e.Sigils[i].Effects[j].ID)
}
for j := 0; j < 3; j++ {
bf.WriteUint16(e.Sigils[i].Effects[j].Level)
}
bf.WriteUint8(e.Sigils[i].Unk0)
bf.WriteUint8(e.Sigils[i].Unk1)
bf.WriteUint8(e.Sigils[i].Unk2)
bf.WriteUint8(e.Sigils[i].Unk3)
}
}
if _config.ErupeConfig.RealClientMode >= _config.Z1 {
bf.WriteUint16(e.Unk1)
}
return bf.Data()
}
func SerializeWarehouseEquipment(i []MHFEquipment) []byte {
bf := byteframe.NewByteFrame()
bf.WriteUint16(uint16(len(i)))
bf.WriteUint16(0) // Unused
for _, j := range i {
bf.WriteBytes(j.ToBytes())
}
return bf.Data()
}

366
common/mhfmon/mhfmon.go Normal file
View File

@@ -0,0 +1,366 @@
package mhfmon
const (
Mon0 = iota
Rathian
Fatalis
Kelbi
Mosswine
Bullfango
YianKutKu
LaoShanLung
Cephadrome
Felyne
VeggieElder
Rathalos
Aptonoth
Genprey
Diablos
Khezu
Velociprey
Gravios
Mon18
Vespoid
Gypceros
Plesioth
Basarios
Melynx
Hornetaur
Apceros
Monoblos
Velocidrome
Gendrome
Mon29
Ioprey
Iodrome
Mon32
Kirin
Cephalos
Giaprey
CrimsonFatalis
PinkRathian
BlueYianKutKu
PurpleGypceros
YianGaruga
SilverRathalos
GoldRathian
BlackDiablos
WhiteMonoblos
RedKhezu
GreenPlesioth
BlackGravios
DaimyoHermitaur
AzureRathalos
AshenLaoShanLung
Blangonga
Congalala
Rajang
KushalaDaora
ShenGaoren
GreatThunderbug
Shakalaka
YamaTsukami
Chameleos
RustedKushalaDaora
Blango
Conga
Remobra
Lunastra
Teostra
Hermitaur
ShogunCeanataur
Bulldrome
Anteka
Popo
WhiteFatalis
Mon72
Ceanataur
Hypnocatrice
Lavasioth
Tigrex
Akantor
BrightHypnoc
RedLavasioth
Espinas
BurningEspinas
WhiteHypnoc
AqraVashimu
AqraJebia
Berukyurosu
Mon86
Mon87
Mon88
Pariapuria
PearlEspinas
KamuOrugaron
NonoOrugaron
Raviente
Dyuragaua
Doragyurosu
Gurenzeburu
Burukku
Erupe
Rukodiora
Unknown
Gogomoa
Kokomoa
TaikunZamuza
Abiorugu
Kuarusepusu
Odibatorasu
Disufiroa
Rebidiora
Anorupatisu
Hyujikiki
Midogaron
Giaorugu
MiRu
Farunokku
Pokaradon
Shantien
Pokara
Mon118
Goruganosu
Aruganosu
Baruragaru
Zerureusu
Gougarf
Uruki
Forokururu
Meraginasu
Diorex
GarubaDaora
Inagami
Varusaburosu
Poborubarumu
Block1Duremudira
Mon133
Mon134
Mon135
Mon136
Mon137
Mon138
Gureadomosu
Harudomerugu
Toridcless
Gasurabazura
Kusubami
YamaKurai
Block2Duremudira
Zinogre
Deviljho
Brachydios
BerserkRaviente
ToaTesukatora
Barioth
Uragaan
StygianZinogre
Guanzorumu
SavageDeviljho
Mon156
Egyurasu
Voljang
Nargacuga
Keoaruboru
Zenaserisu
GoreMagala
BlinkingNargacuga
ShagaruMagala
Amatsu
Eruzerion
MusouDuremudira
Mon168
Seregios
Bogabadorumu
Mon171
MusouBogabadorumu
CostumedUruki
MusouZerureusu
Rappy
KingShakalaka
)
type Monster struct {
Name string
Large bool
}
var Monsters = []Monster{
{"Mon0", false},
{"Rathian", true},
{"Fatalis", true},
{"Kelbi", false},
{"Mosswine", false},
{"Bullfango", false},
{"Yian Kut-Ku", true},
{"Lao-Shan Lung", true},
{"Cephadrome", true},
{"Felyne", false},
{"Veggie Elder", false},
{"Rathalos", true},
{"Aptonoth", false},
{"Genprey", false},
{"Diablos", true},
{"Khezu", true},
{"Velociprey", false},
{"Gravios", true},
{"Mon18", false},
{"Vespoid", false},
{"Gypceros", true},
{"Plesioth", true},
{"Basarios", true},
{"Melynx", false},
{"Hornetaur", false},
{"Apceros", false},
{"Monoblos", true},
{"Velocidrome", true},
{"Gendrome", true},
{"Mon29", false},
{"Ioprey", false},
{"Iodrome", true},
{"Mon32", false},
{"Kirin", true},
{"Cephalos", false},
{"Giaprey", false},
{"Crimson Fatalis", true},
{"Pink Rathian", true},
{"Blue Yian Kut-Ku", true},
{"Purple Gypceros", true},
{"Yian Garuga", true},
{"Silver Rathalos", true},
{"Gold Rathian", true},
{"Black Diablos", true},
{"White Monoblos", true},
{"Red Khezu", true},
{"Green Plesioth", true},
{"Black Gravios", true},
{"Daimyo Hermitaur", true},
{"Azure Rathalos", true},
{"Ashen Lao-Shan Lung", true},
{"Blangonga", true},
{"Congalala", true},
{"Rajang", true},
{"Kushala Daora", true},
{"Shen Gaoren", true},
{"Great Thunderbug", false},
{"Shakalaka", false},
{"Yama Tsukami", true},
{"Chameleos", true},
{"Rusted Kushala Daora", true},
{"Blango", false},
{"Conga", false},
{"Remobra", false},
{"Lunastra", true},
{"Teostra", true},
{"Hermitaur", false},
{"Shogun Ceanataur", true},
{"Bulldrome", true},
{"Anteka", false},
{"Popo", false},
{"White Fatalis", true},
{"Mon72", false},
{"Ceanataur", false},
{"Hypnocatrice", true},
{"Lavasioth", true},
{"Tigrex", true},
{"Akantor", true},
{"Bright Hypnocatrice", true},
{"Red Lavasioth", true},
{"Espinas", true},
{"Burning Espinas", true},
{"White Hypnocatrice", true},
{"Aqra Vashimu", true},
{"Aqra Jebia", true},
{"Berukyurosu", true},
{"Mon86", false},
{"Mon87", false},
{"Mon88", false},
{"Pariapuria", true},
{"Pearl Espinas", true},
{"Kamu Orugaron", true},
{"Nono Orugaron", true},
{"Raviente", true}, // + Violent
{"Dyuragaua", true},
{"Doragyurosu", true},
{"Gurenzeburu", true},
{"Burukku", false},
{"Erupe", false},
{"Rukodiora", true},
{"Unknown", true},
{"Gogomoa", true},
{"Kokomoa", false},
{"Taikun Zamuza", true},
{"Abiorugu", true},
{"Kuarusepusu", true},
{"Odibatorasu", true},
{"Disufiroa", true},
{"Rebidiora", true},
{"Anorupatisu", true},
{"Hyujikiki", true},
{"Midogaron", true},
{"Giaorugu", true},
{"Mi-Ru", true}, // + Musou
{"Farunokku", true},
{"Pokaradon", true},
{"Shantien", true},
{"Pokara", false},
{"Mon118", false},
{"Goruganosu", true},
{"Aruganosu", true},
{"Baruragaru", true},
{"Zerureusu", true},
{"Gougarf", true}, // Both
{"Uruki", false},
{"Forokururu", true},
{"Meraginasu", true},
{"Diorex", true},
{"Garuba Daora", true},
{"Inagami", true},
{"Varusablos", true},
{"Poborubarumu", true},
{"1st Block Duremudira", true},
{"Mon133", false},
{"Mon134", false},
{"Mon135", false},
{"Mon136", false},
{"Mon137", false},
{"Mon138", false},
{"Gureadomosu", true},
{"Harudomerugu", true},
{"Toridcless", true},
{"Gasurabazura", true},
{"Kusubami", false},
{"Yama Kurai", true},
{"2nd Block Duremudira", true},
{"Zinogre", true},
{"Deviljho", true},
{"Brachydios", true},
{"Berserk Raviente", true},
{"Toa Tesukatora", true},
{"Barioth", true},
{"Uragaan", true},
{"Stygian Zinogre", true},
{"Guanzorumu", true},
{"Savage Deviljho", true}, // + Starving/Heavenly
{"Mon156", false},
{"Egyurasu", false},
{"Voljang", true},
{"Nargacuga", true},
{"Keoaruboru", true},
{"Zenaserisu", true},
{"Gore Magala", true},
{"Blinking Nargacuga", true},
{"Shagaru Magala", true},
{"Amatsu", true},
{"Eruzerion", true}, // + Musou
{"Musou Duremudira", true},
{"Mon168", false},
{"Seregios", true},
{"Bogabadorumu", true},
{"Mon171", false},
{"Musou Bogabadorumu", true},
{"Costumed Uruki", false},
{"Musou Zerureusu", true},
{"Rappy", false},
{"King Shakalaka", false},
}

View File

@@ -11,7 +11,8 @@ func Uint8(bf *byteframe.ByteFrame, x string, t bool) {
e := japanese.ShiftJIS.NewEncoder()
xt, _, err := transform.String(e, x)
if err != nil {
panic(err)
bf.WriteUint8(0)
return
}
x = xt
}
@@ -24,7 +25,8 @@ func Uint16(bf *byteframe.ByteFrame, x string, t bool) {
e := japanese.ShiftJIS.NewEncoder()
xt, _, err := transform.String(e, x)
if err != nil {
panic(err)
bf.WriteUint16(0)
return
}
x = xt
}
@@ -37,7 +39,8 @@ func Uint32(bf *byteframe.ByteFrame, x string, t bool) {
e := japanese.ShiftJIS.NewEncoder()
xt, _, err := transform.String(e, x)
if err != nil {
panic(err)
bf.WriteUint32(0)
return
}
x = xt
}

View File

@@ -6,13 +6,12 @@ import (
// StringStack is a basic LIFO "stack" for storing strings.
type StringStack struct {
Locked bool
stack []string
stack []string
}
// New creates a new instance of StringStack
func New() *StringStack {
return &StringStack{Locked: false}
return &StringStack{}
}
// Set sets up a new StringStack
@@ -20,20 +19,6 @@ func (s *StringStack) Set(v string) {
s.stack = []string{v}
}
// Lock freezes the StringStack
func (s *StringStack) Lock() {
if !s.Locked {
s.Locked = true
}
}
// Unlock unfreezes the StringStack
func (s *StringStack) Unlock() {
if s.Locked {
s.Locked = false
}
}
// Push pushes a string onto the stack.
func (s *StringStack) Push(v string) {
s.stack = append(s.stack, v)
@@ -41,11 +26,12 @@ func (s *StringStack) Push(v string) {
// Pop pops a string from the stack.
func (s *StringStack) Pop() (string, error) {
var x string
if len(s.stack) == 0 {
return "", errors.New("no items on stack")
return x, errors.New("no items on stack")
}
x := s.stack[len(s.stack)-1]
x = s.stack[len(s.stack)-1]
s.stack = s.stack[:len(s.stack)-1]
return x, nil

View File

@@ -2,87 +2,15 @@ package stringsupport
import (
"bytes"
"io/ioutil"
"fmt"
"io"
"strconv"
"strings"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/japanese"
"golang.org/x/text/transform"
)
// StringConverter is a small helper for encoding/decoding strings.
type StringConverter struct {
Encoding encoding.Encoding
}
// Decode decodes the given bytes as the set encoding.
func (sc *StringConverter) Decode(data []byte) (string, error) {
decoded, err := ioutil.ReadAll(transform.NewReader(bytes.NewBuffer(data), sc.Encoding.NewDecoder()))
if err != nil {
return "", err
}
return string(decoded), nil
}
// MustDecode decodes the given bytes as the set encoding. Panics on decode failure.
func (sc *StringConverter) MustDecode(data []byte) string {
decoded, err := sc.Decode(data)
if err != nil {
panic(err)
}
return decoded
}
// Encode encodes the given string as the set encoding.
func (sc *StringConverter) Encode(data string) ([]byte, error) {
encoded, err := ioutil.ReadAll(transform.NewReader(bytes.NewBuffer([]byte(data)), sc.Encoding.NewEncoder()))
if err != nil {
return nil, err
}
return encoded, nil
}
// MustEncode encodes the given string as the set encoding. Panics on encode failure.
func (sc *StringConverter) MustEncode(data string) []byte {
encoded, err := sc.Encode(data)
if err != nil {
panic(err)
}
return encoded
}
/*
func MustConvertShiftJISToUTF8(text string) string {
result, err := ConvertShiftJISToUTF8(text)
if err != nil {
panic(err)
}
return result
}
func MustConvertUTF8ToShiftJIS(text string) string {
result, err := ConvertUTF8ToShiftJIS(text)
if err != nil {
panic(err)
}
return result
}
func ConvertShiftJISToUTF8(text string) (string, error) {
r := bytes.NewBuffer([]byte(text))
decoded, err := ioutil.ReadAll(transform.NewReader(r, japanese.ShiftJIS.NewDecoder()))
if err != nil {
return "", err
}
return string(decoded), nil
}
*/
func UTF8ToSJIS(x string) []byte {
e := japanese.ShiftJIS.NewEncoder()
xt, _, err := transform.String(e, x)
@@ -94,19 +22,36 @@ func UTF8ToSJIS(x string) []byte {
func SJISToUTF8(b []byte) string {
d := japanese.ShiftJIS.NewDecoder()
result, err := ioutil.ReadAll(transform.NewReader(bytes.NewReader(b), d))
result, err := io.ReadAll(transform.NewReader(bytes.NewReader(b), d))
if err != nil {
panic(err)
}
return string(result)
}
func ToNGWord(x string) []uint16 {
var w []uint16
for _, r := range []rune(x) {
if r > 0xFF {
t := UTF8ToSJIS(string(r))
if len(t) > 1 {
w = append(w, uint16(t[1])<<8|uint16(t[0]))
} else {
w = append(w, uint16(t[0]))
}
} else {
w = append(w, uint16(r))
}
}
return w
}
func PaddedString(x string, size uint, t bool) []byte {
if t {
e := japanese.ShiftJIS.NewEncoder()
xt, _, err := transform.String(e, x)
if err != nil {
panic(err)
return make([]byte, size)
}
x = xt
}
@@ -120,7 +65,11 @@ func CSVAdd(csv string, v int) string {
if len(csv) == 0 {
return strconv.Itoa(v)
}
return csv + "," + strconv.Itoa(v)
if CSVContains(csv, v) {
return csv
} else {
return csv + "," + strconv.Itoa(v)
}
}
func CSVRemove(csv string, v int) string {
@@ -137,7 +86,7 @@ func CSVRemove(csv string, v int) string {
func CSVContains(csv string, v int) bool {
s := strings.Split(csv, ",")
for i := 0; i < len(s); i++ {
j, _ := strconv.ParseInt(s[i], 10, 64)
j, _ := strconv.ParseInt(s[i], 10, 32)
if int(j) == v {
return true
}
@@ -160,27 +109,28 @@ func CSVElems(csv string) []int {
}
s := strings.Split(csv, ",")
for i := 0; i < len(s); i++ {
j, _ := strconv.ParseInt(s[i], 10, 64)
j, _ := strconv.ParseInt(s[i], 10, 32)
r = append(r, int(j))
}
return r
}
// ConvertUTF8ToShiftJIS converts a UTF8 string to a Shift-JIS []byte.
func ConvertUTF8ToShiftJIS(text string) ([]byte, error) {
r := bytes.NewBuffer([]byte(text))
encoded, err := ioutil.ReadAll(transform.NewReader(r, japanese.ShiftJIS.NewEncoder()))
if err != nil {
return nil, err
func CSVGetIndex(csv string, i int) int {
s := CSVElems(csv)
if i < len(s) {
return s[i]
}
return encoded, nil
return 0
}
func ConvertUTF8ToSJIS(text string) (string, error) {
r, _, err := transform.String(japanese.ShiftJIS.NewEncoder(), text)
if err != nil {
return "", err
func CSVSetIndex(csv string, i int, v int) string {
s := CSVElems(csv)
if i < len(s) {
s[i] = v
}
return r, nil
var r []string
for j := 0; j < len(s); j++ {
r = append(r, fmt.Sprintf(`%d`, s[j]))
}
return strings.Join(r, ",")
}

23
common/token/token.go Normal file
View File

@@ -0,0 +1,23 @@
package token
import (
"math/rand"
"time"
)
var RNG = NewRNG()
// Generate returns an alphanumeric token of specified length
func Generate(length int) string {
var chars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
b := make([]rune, length)
for i := range b {
b[i] = chars[RNG.Intn(len(chars))]
}
return string(b)
}
// NewRNG returns a new NewRNG generator
func NewRNG() *rand.Rand {
return rand.New(rand.NewSource(time.Now().UnixNano()))
}

View File

@@ -1,82 +1,252 @@
{
"host_ip": "127.0.0.1",
"bin_path": "bin",
"devmode": true,
"devmodeoptions": {
"serverName" : "",
"hideLoginNotice": false,
"loginNotice": "<BODY><CENTER><SIZE_3><C_4>Welcome to Erupe SU9!<BR><BODY><LEFT><SIZE_2><C_5>Erupe is experimental software<C_7>, we are not liable for any<BR><BODY>issues caused by installing the software!<BR><BODY><BR><BODY><C_4>■Report bugs on Discord!<C_7><BR><BODY><BR><BODY><C_4>■Test everything!<C_7><BR><BODY><BR><BODY><C_4>■Don't talk to softlocking NPCs!<C_7><BR><BODY><BR><BODY><C_4>■Fork the code on GitHub!<C_7><BR><BODY><BR><BODY>Thank you to all of the contributors,<BR><BODY><BR><BODY>this wouldn't exist without you.",
"cleandb": false,
"maxlauncherhr": false,
"Host": "127.0.0.1",
"BinPath": "bin",
"Language": "en",
"DisableSoftCrash": false,
"HideLoginNotice": true,
"LoginNotices": [
"<BODY><CENTER><SIZE_3><C_4>Welcome to Erupe SU9.3!<BR><BODY><LEFT><SIZE_2><C_5>Erupe is experimental software<C_7>, we are not liable for any<BR><BODY>issues caused by installing the software!<BR><BODY><BR><BODY><C_4>■Report bugs on Discord!<C_7><BR><BODY><BR><BODY><C_4>■Test everything!<C_7><BR><BODY><BR><BODY><C_4>■Don't talk to softlocking NPCs!<C_7><BR><BODY><BR><BODY><C_4>■Fork the code on GitHub!<C_7><BR><BODY><BR><BODY>Thank you to all of the contributors,<BR><BODY><BR><BODY>this wouldn't exist without you."
],
"PatchServerManifest": "",
"PatchServerFile": "",
"Screenshots":{
"Enabled":true,
"Host":"127.0.0.1",
"Port":8080,
"OutputDir":"screenshots",
"UploadQuality":100
},
"DeleteOnSaveCorruption": false,
"ClientMode": "ZZ",
"QuestCacheExpiry": 300,
"CommandPrefix": "!",
"AutoCreateAccount": true,
"LoopDelay": 50,
"DefaultCourses": [1, 23, 24],
"EarthStatus": 0,
"EarthID": 0,
"EarthMonsters": [0, 0, 0, 0],
"SaveDumps": {
"Enabled": true,
"RawEnabled": false,
"OutputDir": "save-backups"
},
"DebugOptions": {
"CleanDB": false,
"MaxLauncherHR": false,
"LogInboundMessages": false,
"LogOutboundMessages": false,
"LogMessageData": false,
"MaxHexdumpLength": 256,
"Event": 0,
"DivaEvent": 0,
"FestaEvent": 0,
"TournamentEvent": 0,
"MezFesEvent": true,
"SaveDumps": {
"Enabled": true,
"OutputDir": "savedata"
"DivaOverride": 0,
"FestaOverride": -1,
"TournamentOverride": 0,
"DisableTokenCheck": false,
"QuestTools": false,
"AutoQuestBackport": true,
"ProxyPort": 0,
"CapLink": {
"Values": [51728, 20000, 51729, 1, 20000],
"Key": "",
"Host": "",
"Port": 80
}
},
"discord": {
"enabled": false,
"bottoken": "",
"realtimeChannelID": "",
"serverId": "",
"devRoles": [],
"devMode": false
"GameplayOptions": {
"MinFeatureWeapons": 0,
"MaxFeatureWeapons": 1,
"MaximumNP": 100000,
"MaximumRP": 50000,
"MaximumFP": 120000,
"TreasureHuntExpiry": 604800,
"DisableLoginBoost": false,
"DisableBoostTime": false,
"BoostTimeDuration": 7200,
"ClanMealDuration": 3600,
"ClanMemberLimits": [[0, 30], [3, 40], [7, 50], [10, 60]],
"BonusQuestAllowance": 3,
"DailyQuestAllowance": 1,
"LowLatencyRaviente": false,
"RegularRavienteMaxPlayers": 8,
"ViolentRavienteMaxPlayers": 8,
"BerserkRavienteMaxPlayers": 32,
"ExtremeRavienteMaxPlayers": 32,
"SmallBerserkRavienteMaxPlayers": 8,
"GUrgentRate": 0.10,
"GCPMultiplier": 1.00,
"HRPMultiplier": 1.00,
"HRPMultiplierNC": 1.00,
"SRPMultiplier": 1.00,
"SRPMultiplierNC": 1.00,
"GRPMultiplier": 1.00,
"GRPMultiplierNC": 1.00,
"GSRPMultiplier": 1.00,
"GSRPMultiplierNC": 1.00,
"ZennyMultiplier": 1.00,
"ZennyMultiplierNC": 1.00,
"GZennyMultiplier": 1.00,
"GZennyMultiplierNC": 1.00,
"MaterialMultiplier": 1.00,
"MaterialMultiplierNC": 1.00,
"GMaterialMultiplier": 1.00,
"GMaterialMultiplierNC": 1.00,
"ExtraCarves": 0,
"ExtraCarvesNC": 0,
"GExtraCarves": 0,
"GExtraCarvesNC": 0,
"DisableHunterNavi": false,
"MezFesSoloTickets": 5,
"MezFesGroupTickets": 1,
"MezFesDuration": 172800,
"MezFesSwitchMinigame": false,
"EnableKaijiEvent": false,
"EnableHiganjimaEvent": false,
"EnableNierEvent": false,
"DisableRoad": false,
"SeasonOverride": false
},
"database": {
"host": "localhost",
"port": 5432,
"user": "postgres",
"password": "",
"database": "erupe"
"Discord": {
"Enabled": false,
"BotToken": "",
"RelayChannel": {
"Enabled": false,
"MaxMessageLength": 183,
"RelayChannelID": ""
}
},
"launcher": {
"port": 80,
"UseOriginalLauncherFiles": false
"Commands": [
{
"Name": "Help",
"Enabled": true,
"Description": "Show enabled chat commands",
"Prefix": "help"
}, {
"Name": "Rights",
"Enabled": false,
"Description": "Overwrite the Rights value on your account",
"Prefix": "rights"
}, {
"Name": "Raviente",
"Enabled": true,
"Description": "Various Raviente siege commands",
"Prefix": "ravi"
}, {
"Name": "Teleport",
"Enabled": false,
"Description": "Teleport to specified coordinates",
"Prefix": "tele"
}, {
"Name": "Reload",
"Enabled": true,
"Description": "Reload all players in your Land",
"Prefix": "reload"
}, {
"Name": "KeyQuest",
"Enabled": false,
"Description": "Overwrite your HR Key Quest progress",
"Prefix": "kqf"
}, {
"Name": "Course",
"Enabled": true,
"Description": "Toggle Courses on your account",
"Prefix": "course"
}, {
"Name": "PSN",
"Enabled": true,
"Description": "Link a PlayStation Network ID to your account",
"Prefix": "psn"
}, {
"Name": "Discord",
"Enabled": true,
"Description": "Generate a token to link your Discord account",
"Prefix": "discord"
}, {
"Name": "Ban",
"Enabled": false,
"Description": "Ban/Temp Ban a user",
"Prefix": "ban"
}, {
"Name": "Timer",
"Enabled": true,
"Description": "Toggle the Quest timer",
"Prefix": "timer"
}, {
"Name": "Playtime",
"Enabled": true,
"Description": "Show your playtime",
"Prefix": "playtime"
}
],
"Courses": [
{"Name": "HunterLife", "Enabled": true},
{"Name": "Extra", "Enabled": true},
{"Name": "Premium", "Enabled": true},
{"Name": "Assist", "Enabled": false},
{"Name": "N", "Enabled": false},
{"Name": "Hiden", "Enabled": false},
{"Name": "HunterSupport", "Enabled": false},
{"Name": "NBoost", "Enabled": false},
{"Name": "NetCafe", "Enabled": true},
{"Name": "HLRenewing", "Enabled": true},
{"Name": "EXRenewing", "Enabled": true}
],
"Database": {
"Host": "localhost",
"Port": 5432,
"User": "postgres",
"Password": "",
"Database": "erupe"
},
"sign": {
"port": 53312
"Sign": {
"Enabled": true,
"Port": 53312
},
"entrance": {
"port": 53310,
"entries": [
"API": {
"Enabled": true,
"Port": 8080,
"PatchServer": "",
"Banners": [],
"Messages": [],
"Links": []
},
"Channel": {
"Enabled": true
},
"Entrance": {
"Enabled": true,
"Port": 53310,
"Entries": [
{
"name": "Newbie", "description": "", "ip": "", "type": 3, "recommended": 2, "allowedclientflags": 0,
"channels": [
{ "port": 54001, "MaxPlayers": 100 },
{ "port": 54002, "MaxPlayers": 100 }
"Name": "Newbie", "Description": "", "IP": "", "Type": 3, "Recommended": 2, "AllowedClientFlags": 0,
"Channels": [
{ "Port": 54001, "MaxPlayers": 100 },
{ "Port": 54002, "MaxPlayers": 100 }
]
}, {
"name": "Normal", "description": "", "ip": "", "type": 1, "recommended": 0, "allowedclientflags": 0,
"channels": [
{ "port": 54003, "MaxPlayers": 100 },
{ "port": 54004, "MaxPlayers": 100 }
"Name": "Normal", "Description": "", "IP": "", "Type": 1, "Recommended": 0, "AllowedClientFlags": 0,
"Channels": [
{ "Port": 54003, "MaxPlayers": 100 },
{ "Port": 54004, "MaxPlayers": 100 }
]
}, {
"name": "Cities", "description": "", "ip": "", "type": 2, "recommended": 0, "allowedclientflags": 0,
"channels": [
{ "port": 54005, "MaxPlayers": 100 }
"Name": "Cities", "Description": "", "IP": "", "Type": 2, "Recommended": 0, "AllowedClientFlags": 0,
"Channels": [
{ "Port": 54005, "MaxPlayers": 100 }
]
}, {
"name": "Tavern", "description": "", "ip": "", "type": 4, "recommended": 0, "allowedclientflags": 0,
"channels": [
{ "port": 54006, "MaxPlayers": 100 }
"Name": "Tavern", "Description": "", "IP": "", "Type": 4, "Recommended": 0, "AllowedClientFlags": 0,
"Channels": [
{ "Port": 54006, "MaxPlayers": 100 }
]
}, {
"name": "Return", "description": "", "ip": "", "type": 5, "recommended": 0, "allowedclientflags": 0,
"channels": [
{ "port": 54007, "MaxPlayers": 100 }
"Name": "Return", "Description": "", "IP": "", "Type": 5, "Recommended": 0, "AllowedClientFlags": 0,
"Channels": [
{ "Port": 54007, "MaxPlayers": 100 }
]
}, {
"name": "MezFes", "description": "", "ip": "", "type": 6, "recommended": 6, "allowedclientflags": 0,
"channels": [
{ "port": 54008, "MaxPlayers": 100 }
"Name": "MezFes", "Description": "", "IP": "", "Type": 6, "Recommended": 6, "AllowedClientFlags": 0,
"Channels": [
{ "Port": 54008, "MaxPlayers": 100 }
]
}
]

View File

@@ -1,57 +1,226 @@
package config
package _config
import (
"fmt"
"log"
"net"
"os"
"strings"
"time"
"github.com/spf13/viper"
)
// Config holds the global server-wide config.
type Config struct {
HostIP string `mapstructure:"host_ip"`
BinPath string `mapstructure:"bin_path"`
DevMode bool
type Mode int
DevModeOptions DevModeOptions
Discord Discord
Database Database
Launcher Launcher
Sign Sign
Entrance Entrance
const (
S1 Mode = iota + 1
S15
S2
S25
S3
S35
S4
S5
S55
S6
S7
S8
S85
S9
S10
F1
F2
F3
F4
F5
G1
G2
G3
G31
G32
GG
G5
G51
G52
G6
G61
G7
G8
G81
G9
G91
G10
G101
Z1
Z2
ZZ
)
var versionStrings = []string{"S1.0", "S1.5", "S2.0", "S2.5", "S3.0", "S3.5", "S4.0", "S5.0", "S5.5", "S6.0", "S7.0",
"S8.0", "S8.5", "S9.0", "S10", "FW.1", "FW.2", "FW.3", "FW.4", "FW.5", "G1", "G2", "G3", "G3.1", "G3.2", "GG", "G5",
"G5.1", "G5.2", "G6", "G6.1", "G7", "G8", "G8.1", "G9", "G9.1", "G10", "G10.1", "Z1", "Z2", "ZZ"}
func (m Mode) String() string {
return versionStrings[m]
}
// DevModeOptions holds various debug/temporary options for use while developing Erupe.
type DevModeOptions struct {
ServerName string // To get specific instance server about (Current Players/Event Week)
HideLoginNotice bool // Hide the Erupe notice on login
LoginNotice string // MHFML string of the login notice displayed
CleanDB bool // Automatically wipes the DB on server reset.
MaxLauncherHR bool // Sets the HR returned in the launcher to HR9 so that you can join non-beginner worlds.
FixedStageID bool // Causes all move_stage to use the ID sl1Ns200p0a0u0 to get you into all stages
LogInboundMessages bool // Log all messages sent to the server
LogOutboundMessages bool // Log all messages sent to the clients
MaxHexdumpLength int // Maximum number of bytes printed when logs are enabled
DivaEvent int // Diva Defense event status
FestaEvent int // Hunter's Festa event status
TournamentEvent int // VS Tournament event status
MezFesEvent bool // MezFes status
SaveDumps SaveDumpOptions
// Config holds the global server-wide config.
type Config struct {
Host string `mapstructure:"Host"`
BinPath string `mapstructure:"BinPath"`
Language string
DisableSoftCrash bool // Disables the 'Press Return to exit' dialog allowing scripts to reboot the server automatically
HideLoginNotice bool // Hide the Erupe notice on login
LoginNotices []string // MHFML string of the login notices displayed
PatchServerManifest string // Manifest patch server override
PatchServerFile string // File patch server override
DeleteOnSaveCorruption bool // Attempts to save corrupted data will flag the save for deletion
ClientMode string
RealClientMode Mode
QuestCacheExpiry int // Number of seconds to keep quest data cached
CommandPrefix string // The prefix for commands
AutoCreateAccount bool // Automatically create accounts if they don't exist
LoopDelay int // Delay in milliseconds between each loop iteration
DefaultCourses []uint16
EarthStatus int32
EarthID int32
EarthMonsters []int32
SaveDumps SaveDumpOptions
Screenshots ScreenshotsOptions
DebugOptions DebugOptions
GameplayOptions GameplayOptions
Discord Discord
Commands []Command
Courses []Course
Database Database
Sign Sign
API API
Channel Channel
Entrance Entrance
}
type SaveDumpOptions struct {
Enabled bool
OutputDir string
Enabled bool
RawEnabled bool
OutputDir string
}
type ScreenshotsOptions struct {
Enabled bool
Host string // Destination for screenshots uploaded to BBS
Port uint32 // Port for screenshots API
OutputDir string
UploadQuality int //Determines the upload quality to the server
}
// DebugOptions holds various debug/temporary options for use while developing Erupe.
type DebugOptions struct {
CleanDB bool // Automatically wipes the DB on server reset.
MaxLauncherHR bool // Sets the HR returned in the launcher to HR7 so that you can join non-beginner worlds.
LogInboundMessages bool // Log all messages sent to the server
LogOutboundMessages bool // Log all messages sent to the clients
LogMessageData bool // Log all bytes transferred as a hexdump
MaxHexdumpLength int // Maximum number of bytes printed when logs are enabled
DivaOverride int // Diva Defense event status
FestaOverride int // Hunter's Festa event status
TournamentOverride int // VS Tournament event status
DisableTokenCheck bool // Disables checking login token exists in the DB (security risk!)
QuestTools bool // Enable various quest debug logs
AutoQuestBackport bool // Automatically backport quest files
ProxyPort uint16 // Forces the game to connect to a channel server proxy
CapLink CapLinkOptions
}
type CapLinkOptions struct {
Values []uint16
Key string
Host string
Port int
}
// GameplayOptions has various gameplay modifiers
type GameplayOptions struct {
MinFeatureWeapons int // Minimum number of Active Feature weapons to generate daily
MaxFeatureWeapons int // Maximum number of Active Feature weapons to generate daily
MaximumNP int // Maximum number of NP held by a player
MaximumRP uint16 // Maximum number of RP held by a player
MaximumFP uint32 // Maximum number of FP held by a player
TreasureHuntExpiry uint32 // Seconds until a Clan Treasure Hunt will expire
TreasureHuntPartnyaCooldown uint32 // Seconds until a Partnya can be assigned to another Clan Treasure Hunt
DisableLoginBoost bool // Disables the Login Boost system
DisableBoostTime bool // Disables the daily NetCafe Boost Time
BoostTimeDuration int // Second that the NetCafe Boost Time lasts
ClanMealDuration int // Second that a Clan Meal can be activated for after cooking
ClanMemberLimits [][]uint8 // Array of maximum Clan Members -> [Rank, Members]
BonusQuestAllowance uint32 // Number of Bonus Point Quests to allow daily
DailyQuestAllowance uint32 // Number of Daily Quests to allow daily
LowLatencyRaviente bool // Toggles low latency mode for Raviente, can be network intensive
RegularRavienteMaxPlayers uint8
ViolentRavienteMaxPlayers uint8
BerserkRavienteMaxPlayers uint8
ExtremeRavienteMaxPlayers uint8
SmallBerserkRavienteMaxPlayers uint8
GUrgentRate float32 // Adjusts the rate of G Urgent quests spawning
GCPMultiplier float32 // Adjusts the multiplier of GCP rewarded for quest completion
HRPMultiplier float32 // Adjusts the multiplier of Hunter Rank Points rewarded for quest completion
HRPMultiplierNC float32 // Adjusts the multiplier of Hunter Rank Points rewarded for quest completion in a NetCafe
SRPMultiplier float32 // Adjusts the multiplier of Skill Rank Points rewarded for quest completion
SRPMultiplierNC float32 // Adjusts the multiplier of Skill Rank Points rewarded for quest completion in a NetCafe
GRPMultiplier float32 // Adjusts the multiplier of G Rank Points rewarded for quest completion
GRPMultiplierNC float32 // Adjusts the multiplier of G Rank Points rewarded for quest completion in a NetCafe
GSRPMultiplier float32 // Adjusts the multiplier of G Skill Rank Points rewarded for quest completion
GSRPMultiplierNC float32 // Adjusts the multiplier of G Skill Rank Points rewarded for quest completion in a NetCafe
ZennyMultiplier float32 // Adjusts the multiplier of Zenny rewarded for quest completion
ZennyMultiplierNC float32 // Adjusts the multiplier of Zenny rewarded for quest completion in a NetCafe
GZennyMultiplier float32 // Adjusts the multiplier of G Zenny rewarded for quest completion
GZennyMultiplierNC float32 // Adjusts the multiplier of G Zenny rewarded for quest completion in a NetCafe
MaterialMultiplier float32 // Adjusts the multiplier of Monster Materials rewarded for quest completion
MaterialMultiplierNC float32 // Adjusts the multiplier of Monster Materials rewarded for quest completion in a NetCafe
GMaterialMultiplier float32 // Adjusts the multiplier of G Rank Monster Materials rewarded for quest completion
GMaterialMultiplierNC float32 // Adjusts the multiplier of G Rank Monster Materials rewarded for quest completion in a NetCafe
ExtraCarves uint16 // Grant n extra chances to carve ALL carcasses
ExtraCarvesNC uint16 // Grant n extra chances to carve ALL carcasses in a NetCafe
GExtraCarves uint16 // Grant n extra chances to carve ALL G Rank carcasses
GExtraCarvesNC uint16 // Grant n extra chances to carve ALL G Rank carcasses in a NetCafe
DisableHunterNavi bool // Disables the Hunter Navi
MezFesSoloTickets uint32 // Number of solo tickets given weekly
MezFesGroupTickets uint32 // Number of group tickets given weekly
MezFesDuration int // Seconds that MezFes will last for weekly (from 12AM Mon backwards)
MezFesSwitchMinigame bool // Swaps out Volpakkun Together for Tokotoko Partnya
EnableKaijiEvent bool // Enables the Kaiji event in the Rasta Bar
EnableHiganjimaEvent bool // Enables the Higanjima event in the Rasta Bar
EnableNierEvent bool // Enables the Nier event in the Rasta Bar
DisableRoad bool // Disables the Hunting Road
SeasonOverride bool // Overrides the Quest Season with the current Mezeporta Season
}
// Discord holds the discord integration config.
type Discord struct {
Enabled bool
BotToken string
ServerID string
RealtimeChannelID string
DevRoles []string
DevMode bool
Enabled bool
BotToken string
RelayChannel DiscordRelay
}
type DiscordRelay struct {
Enabled bool
MaxMessageLength int
RelayChannelID string
}
// Command is a channelserver chat command
type Command struct {
Name string
Enabled bool
Description string
Prefix string
}
// Course represents a course within MHF
type Course struct {
Name string
Enabled bool
}
// Database holds the postgres database config.
@@ -63,19 +232,47 @@ type Database struct {
Database string
}
// Launcher holds the launcher server config.
type Launcher struct {
Port int
UseOriginalLauncherFiles bool
}
// Sign holds the sign server config.
type Sign struct {
Port int
Enabled bool
Port int
}
// API holds server config
type API struct {
Enabled bool
Port int
PatchServer string
Banners []APISignBanner
Messages []APISignMessage
Links []APISignLink
}
type APISignBanner struct {
Src string `json:"src"` // Displayed image URL
Link string `json:"link"` // Link accessed on click
}
type APISignMessage struct {
Message string `json:"message"` // Displayed message
Date int64 `json:"date"` // Displayed date
Kind int `json:"kind"` // 0 for 'Default', 1 for 'New'
Link string `json:"link"` // Link accessed on click
}
type APISignLink struct {
Name string `json:"name"` // Displayed name
Icon string `json:"icon"` // Displayed icon. It will be cast as a monochrome color as long as it is transparent.
Link string `json:"link"` // Link accessed on click
}
type Channel struct {
Enabled bool
}
// Entrance holds the entrance server config.
type Entrance struct {
Enabled bool
Port uint16
Entries []EntranceServerInfo
}
@@ -102,6 +299,16 @@ type EntranceChannelInfo struct {
CurrentPlayers uint16
}
var ErupeConfig *Config
func init() {
var err error
ErupeConfig, err = LoadConfig()
if err != nil {
preventClose(fmt.Sprintf("Failed to load config: %s", err.Error()))
}
}
// getOutboundIP4 gets the preferred outbound ip4 of this machine
// From https://stackoverflow.com/a/37382208
func getOutboundIP4() net.IP {
@@ -122,8 +329,8 @@ func LoadConfig() (*Config, error) {
viper.AddConfigPath(".")
viper.SetDefault("DevModeOptions.SaveDumps", SaveDumpOptions{
Enabled: false,
OutputDir: "savedata",
Enabled: true,
OutputDir: "save-backups",
})
err := viper.ReadInConfig()
@@ -137,9 +344,44 @@ func LoadConfig() (*Config, error) {
return nil, err
}
if c.HostIP == "" {
c.HostIP = getOutboundIP4().To4().String()
if c.Host == "" {
c.Host = getOutboundIP4().To4().String()
}
for i := range versionStrings {
if strings.ToUpper(c.ClientMode) == versionStrings[i] {
c.RealClientMode = Mode(i + 1)
c.ClientMode = strings.ToUpper(c.ClientMode)
if c.RealClientMode <= G101 {
c.ClientMode += " (Debug only)"
}
}
}
if c.RealClientMode == 0 {
c.ClientMode = versionStrings[len(versionStrings)-1]
c.RealClientMode = ZZ
}
if c.GameplayOptions.MinFeatureWeapons > c.GameplayOptions.MaxFeatureWeapons {
c.GameplayOptions.MinFeatureWeapons = c.GameplayOptions.MaxFeatureWeapons
}
return c, nil
}
func preventClose(text string) {
if ErupeConfig.DisableSoftCrash {
os.Exit(0)
}
fmt.Println("\nFailed to start Erupe:\n" + text)
go wait()
fmt.Println("\nPress Enter/Return to exit...")
fmt.Scanln()
os.Exit(0)
}
func wait() {
for {
time.Sleep(time.Millisecond * 100)
}
}

70
docker/README.md Normal file
View File

@@ -0,0 +1,70 @@
# Docker for erupe
## Building the container
Run the following from the route of the soruce folder. In this example we give it the tag of dev to seperate it from any other container verions.
```bash
docker build . -t erupe:dev
```
## Running the container in isolation
This is just running the container. You can do volume mounts into the container for the `config.json` to tell it to communicate to a database. You will need to do this also for other folders such as `bin` and `savedata`
```bash
docker run erupe:dev
```
## Docker compose
Docker compose allows you to run multiple containers at once. The docker compose in this folder has 3 things set up.
- postgres
- pg admin (Admin interface to make db changes)
- erupe
We automatically populate the database to the latest version on start. If you you are updating you will need to apply the new schemas manually.
Before we get started you should make sure the database info matches whats in the docker compose file for the environment variables `POSTGRES_PASSWORD`,`POSTGRES_USER` and `POSTGRES_DB`. You can set the host to be the service name `db`.
Here is a example of what you would put in the config.json if you was to leave the defaults. It is strongly recommended to change the password.
```txt
"Database": {
"Host": "db",
"Port": 5432,
"User": "postgres",
"Password": "password",
"Database": "erupe"
},
```
Place this file within ./docker/config.json
You will need to do the same for your bins place these in ./docker/bin
# Setting up the web hosted materials
Clone the Severs repo into ./docker/Severs
Make sure your hosts are pointing to where this is hosted
## Turning off the server safely
```bash
docker-compose stop
```
## Turning off the server destructive
```bash
docker-compose down
```
Make sure if you want to delete your data you delete the folders that persisted
- ./docker/savedata
- ./docker/db-data
## Turning on the server again
This boots the db pgadmin and the server in a detached state
```bash
docker-compose up -d
```
if you want all the logs and you want it to be in an attached state
```bash
docker-compose up
```
# Troubleshooting
Q: My Postgres will not populate. A: You're setup.sh is maybe saved as CRLF it needs to be saved as LF.

71
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,71 @@
version: "3.9"
# 1. docker-compose up db pgadmin
# 2. Use pgadmin to restore db and also apply patch-schema
# 3. Configure the config.json example. in docker you can point to the service name for the database i.e db
# 4. In seperate terminal docker-compose up server
# 5. If all went well happy hunting!
services:
db:
image: postgres
environment:
# (Make sure these match config.json)
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
- POSTGRES_DB=erupe
ports:
- "5432:5432"
volumes:
- ./db-data/:/var/lib/postgresql/data/
- ../schemas/:/schemas/
- ./init/setup.sh:/docker-entrypoint-initdb.d/setup.sh
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
pgadmin:
image: dpage/pgadmin4
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: user@pgadmin.com
PGADMIN_DEFAULT_PASSWORD: password
ports:
- "5050:80"
depends_on:
db:
condition: service_healthy
server:
depends_on:
db:
condition: service_healthy
# If using prebuilt container change paths and config
build:
context: ../
volumes:
- ../config.json:/app/erupe/config.json
- ../bin:/app/erupe/bin
- ./savedata:/app/erupe/savedata
ports:
# (Make sure these match config.json)
- "53312:53312" #Sign V1
- "8080:8080" #Sign V2
- "53310:53310" #Entrance
# Channels
- "54001:54001"
- "54002:54002"
- "54003:54003"
- "54004:54004"
- "54005:54005"
- "54006:54006"
- "54007:54007"
- "54008:54008"
web:
image: httpd:latest
container_name: my-apache-app
ports:
- '80:80'
volumes:
- ./Servers:/usr/local/apache2/htdocs
depends_on:
db:
condition: service_healthy

22
docker/init/setup.sh Normal file
View File

@@ -0,0 +1,22 @@
#!/bin/bash
set -e
echo "INIT!"
pg_restore --username="$POSTGRES_USER" --dbname="$POSTGRES_DB" --verbose /schemas/init.sql
echo "Updating!"
for file in /schemas/update-schema/*
do
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -1 -f $file
done
echo "Patching!"
for file in /schemas/patch-schema/*
do
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -1 -f $file
done

BIN
erupe.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

55
go.mod
View File

@@ -1,27 +1,38 @@
module erupe-ce
go 1.16
go 1.23.0
require (
github.com/bwmarrin/discordgo v0.23.2
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/gorilla/handlers v1.5.1
github.com/gorilla/mux v1.8.0
github.com/gorilla/websocket v1.4.2 // indirect
github.com/jmoiron/sqlx v1.3.4
github.com/lib/pq v1.10.4
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
github.com/mitchellh/mapstructure v1.4.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sachaos/lottery v0.0.0-20180520074626-61949d99bd96
github.com/spf13/viper v1.8.1
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.7.0 // indirect
go.uber.org/zap v1.18.1
golang.org/x/crypto v0.0.0-20211202192323-5770296d904e
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d // indirect
golang.org/x/text v0.3.7
golang.org/x/tools v0.1.8 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
github.com/bwmarrin/discordgo v0.27.1
github.com/gorilla/handlers v1.5.2
github.com/gorilla/mux v1.8.1
github.com/jmoiron/sqlx v1.3.5
github.com/lib/pq v1.10.9
github.com/spf13/viper v1.17.0
go.uber.org/zap v1.26.0
golang.org/x/crypto v0.36.0
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
golang.org/x/text v0.23.0
)
require (
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/gorilla/websocket v1.5.1 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.3.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/net v0.38.0 // indirect
golang.org/x/sys v0.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

306
go.sum
View File

@@ -3,6 +3,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
@@ -15,9 +16,7 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -26,7 +25,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
@@ -36,19 +34,12 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
github.com/bwmarrin/discordgo v0.23.2 h1:BzrtTktixGHIu9Tt7dEE6diysEF9HWnXeHuoJEt2fH4=
github.com/bwmarrin/discordgo v0.23.2/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M=
github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
@@ -57,32 +48,27 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ=
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -94,9 +80,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -111,9 +94,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -124,10 +104,9 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@@ -140,163 +119,109 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jmoiron/sqlx v1.3.4 h1:wv+0IJZfL5z0uZoUjlpKgHkgaFSYD+r9CfrXjEXsO7w=
github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg=
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs=
github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ=
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sachaos/lottery v0.0.0-20180520074626-61949d99bd96 h1:BanNeULiV7hOXjHPUQt3tgF6qVHGZ0uLMnCr0WZ5CTk=
github.com/sachaos/lottery v0.0.0-20180520074626-61949d99bd96/go.mod h1:NuxNqEW5jNyYkZ5WSBB70WQXtRKY1jUPMzX74wr5JFo=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ=
github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44=
github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec=
go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
go.uber.org/zap v1.18.1 h1:CSUJ2mjFszzEWt4CdKISEuChVIXGBn3lAPwkRGyVrc4=
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20211202192323-5770296d904e h1:MUP6MR3rJ7Gk9LEia0LP2ytiH6MuCfs7qYz+47jGdD8=
golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -307,6 +232,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -320,8 +247,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
@@ -332,12 +257,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -364,14 +285,12 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -381,9 +300,6 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -394,10 +310,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -407,7 +320,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -429,18 +341,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d h1:FjkYO/PPp4Wi0EAUOVLxePm7qVW4r4ctbWpURyuOD0E=
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -448,10 +354,10 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -461,7 +367,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
@@ -471,8 +376,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -495,7 +398,6 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
@@ -504,12 +406,8 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.8 h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w=
golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -533,9 +431,6 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -566,7 +461,6 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
@@ -578,12 +472,8 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -597,13 +487,9 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -614,23 +500,17 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

299
main.go
View File

@@ -1,19 +1,21 @@
package main
import (
_config "erupe-ce/config"
"fmt"
"math/rand"
"net"
"os"
"os/signal"
"runtime/debug"
"syscall"
"time"
"erupe-ce/config"
"erupe-ce/server/api"
"erupe-ce/server/channelserver"
"erupe-ce/server/discordbot"
"erupe-ce/server/entranceserver"
"erupe-ce/server/launcherserver"
"erupe-ce/server/signserver"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
"go.uber.org/zap"
@@ -24,180 +26,260 @@ func cleanDB(db *sqlx.DB) {
_ = db.MustExec("DELETE FROM guild_characters")
_ = db.MustExec("DELETE FROM guilds")
_ = db.MustExec("DELETE FROM characters")
_ = db.MustExec("DELETE FROM sign_sessions")
_ = db.MustExec("DELETE FROM users")
}
var Commit = func() string {
if info, ok := debug.ReadBuildInfo(); ok {
for _, setting := range info.Settings {
if setting.Key == "vcs.revision" {
return setting.Value[:7]
}
}
}
return "unknown"
}
func main() {
zapLogger, _ := zap.NewDevelopment()
var err error
var zapLogger *zap.Logger
config := _config.ErupeConfig
zapLogger, _ = zap.NewDevelopment()
defer zapLogger.Sync()
logger := zapLogger.Named("main")
logger.Info("Starting Erupe")
logger.Info(fmt.Sprintf("Starting Erupe (9.3b-%s)", Commit()))
logger.Info(fmt.Sprintf("Client Mode: %s (%d)", config.ClientMode, config.RealClientMode))
// Load the configuration.
erupeConfig, err := config.LoadConfig()
if err != nil {
preventClose(fmt.Sprintf("Failed to load config: %s", err.Error()))
if config.Database.Password == "" {
preventClose("Database password is blank")
}
if erupeConfig.Database.Password == "" {
preventClose("Database password is blank")
if net.ParseIP(config.Host) == nil {
ips, _ := net.LookupIP(config.Host)
for _, ip := range ips {
if ip != nil {
config.Host = ip.String()
break
}
}
if net.ParseIP(config.Host) == nil {
preventClose("Invalid host address")
}
}
// Discord bot
var discordBot *discordbot.DiscordBot = nil
if erupeConfig.Discord.Enabled {
bot, err := discordbot.NewDiscordBot(discordbot.DiscordBotOptions{
if config.Discord.Enabled {
bot, err := discordbot.NewDiscordBot(discordbot.Options{
Logger: logger,
Config: erupeConfig,
Config: _config.ErupeConfig,
})
if err != nil {
preventClose(fmt.Sprintf("Failed to create Discord bot: %s", err.Error()))
preventClose(fmt.Sprintf("Discord: Failed to start, %s", err.Error()))
}
// Discord bot
err = bot.Start()
if err != nil {
preventClose(fmt.Sprintf("Failed to start Discord bot: %s", err.Error()))
preventClose(fmt.Sprintf("Discord: Failed to start, %s", err.Error()))
}
discordBot = bot
_, err = discordBot.Session.ApplicationCommandBulkOverwrite(discordBot.Session.State.User.ID, "", discordbot.Commands)
if err != nil {
preventClose(fmt.Sprintf("Discord: Failed to start, %s", err.Error()))
}
logger.Info("Discord: Started successfully")
} else {
logger.Info("Discord bot is disabled")
logger.Info("Discord: Disabled")
}
// Create the postgres DB pool.
connectString := fmt.Sprintf(
"host=%s port=%d user=%s password=%s dbname= %s sslmode=disable",
erupeConfig.Database.Host,
erupeConfig.Database.Port,
erupeConfig.Database.User,
erupeConfig.Database.Password,
erupeConfig.Database.Database,
"host='%s' port='%d' user='%s' password='%s' dbname='%s' sslmode=disable",
config.Database.Host,
config.Database.Port,
config.Database.User,
config.Database.Password,
config.Database.Database,
)
db, err := sqlx.Open("postgres", connectString)
if err != nil {
preventClose(fmt.Sprintf("Failed to open SQL database: %s", err.Error()))
preventClose(fmt.Sprintf("Database: Failed to open, %s", err.Error()))
}
// Test the DB connection.
err = db.Ping()
if err != nil {
preventClose(fmt.Sprintf("Failed to ping database: %s", err.Error()))
preventClose(fmt.Sprintf("Database: Failed to ping, %s", err.Error()))
}
logger.Info("Connected to database")
logger.Info("Database: Started successfully")
// Clear existing tokens
_ = db.MustExec("DELETE FROM sign_sessions")
// Clear stale data
if config.DebugOptions.ProxyPort == 0 {
_ = db.MustExec("DELETE FROM sign_sessions")
}
_ = db.MustExec("DELETE FROM servers")
_ = db.MustExec(`UPDATE guild_characters SET treasure_hunt=NULL`)
// Clean the DB if the option is on.
if erupeConfig.DevMode && erupeConfig.DevModeOptions.CleanDB {
logger.Info("Cleaning DB")
if config.DebugOptions.CleanDB {
logger.Info("Database: Started clearing...")
cleanDB(db)
logger.Info("Done cleaning DB")
logger.Info("Database: Finished clearing")
}
logger.Info(fmt.Sprintf("Server Time: %s", channelserver.TimeAdjusted().String()))
// Now start our server(s).
// Launcher HTTP server.
launcherServer := launcherserver.NewServer(
&launcherserver.Config{
Logger: logger.Named("launcher"),
ErupeConfig: erupeConfig,
DB: db,
UseOriginalLauncherFiles: erupeConfig.Launcher.UseOriginalLauncherFiles,
})
err = launcherServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Failed to start launcher server: %s", err.Error()))
}
logger.Info("Started launcher server")
// Entrance server.
entranceServer := entranceserver.NewServer(
&entranceserver.Config{
Logger: logger.Named("entrance"),
ErupeConfig: erupeConfig,
DB: db,
})
err = entranceServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Failed to start entrance server: %s", err.Error()))
var entranceServer *entranceserver.Server
if config.Entrance.Enabled {
entranceServer = entranceserver.NewServer(
&entranceserver.Config{
Logger: logger.Named("entrance"),
ErupeConfig: _config.ErupeConfig,
DB: db,
})
err = entranceServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Entrance: Failed to start, %s", err.Error()))
}
logger.Info("Entrance: Started successfully")
} else {
logger.Info("Entrance: Disabled")
}
logger.Info("Started entrance server")
// Sign server.
signServer := signserver.NewServer(
&signserver.Config{
Logger: logger.Named("sign"),
ErupeConfig: erupeConfig,
DB: db,
})
err = signServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Failed to start sign server: %s", err.Error()))
var signServer *signserver.Server
if config.Sign.Enabled {
signServer = signserver.NewServer(
&signserver.Config{
Logger: logger.Named("sign"),
ErupeConfig: _config.ErupeConfig,
DB: db,
})
err = signServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Sign: Failed to start, %s", err.Error()))
}
logger.Info("Sign: Started successfully")
} else {
logger.Info("Sign: Disabled")
}
// New Sign server
var ApiServer *api.APIServer
if config.API.Enabled {
ApiServer = api.NewAPIServer(
&api.Config{
Logger: logger.Named("sign"),
ErupeConfig: _config.ErupeConfig,
DB: db,
})
err = ApiServer.Start()
if err != nil {
preventClose(fmt.Sprintf("API: Failed to start, %s", err.Error()))
}
logger.Info("API: Started successfully")
} else {
logger.Info("API: Disabled")
}
logger.Info("Started sign server")
var channels []*channelserver.Server
channelQuery := ""
si := 0
ci := 0
count := 1
for _, ee := range erupeConfig.Entrance.Entries {
rand.Seed(time.Now().UnixNano())
// Randomly generate a season for the World
season := rand.Intn(3) + 1
for _, ce := range ee.Channels {
sid := (4096 + si*256) + (16 + ci)
c := *channelserver.NewServer(&channelserver.Config{
ID: uint16(sid),
Logger: logger.Named("channel-" + fmt.Sprint(count)),
ErupeConfig: erupeConfig,
DB: db,
DiscordBot: discordBot,
})
err = c.Start(int(ce.Port))
if err != nil {
preventClose(fmt.Sprintf("Failed to start channel server: %s", err.Error()))
} else {
channelQuery += fmt.Sprintf("INSERT INTO servers (server_id, season, current_players) VALUES (%d, %d, 0);", sid, season)
channels = append(channels, &c)
logger.Info(fmt.Sprintf("Started channel server %d on port %d", count, ce.Port))
ci++
count++
if config.Channel.Enabled {
channelQuery := ""
si := 0
ci := 0
count := 1
for j, ee := range config.Entrance.Entries {
for i, ce := range ee.Channels {
sid := (4096 + si*256) + (16 + ci)
c := *channelserver.NewServer(&channelserver.Config{
ID: uint16(sid),
Logger: logger.Named("channel-" + fmt.Sprint(count)),
ErupeConfig: _config.ErupeConfig,
DB: db,
DiscordBot: discordBot,
})
if ee.IP == "" {
c.IP = config.Host
} else {
c.IP = ee.IP
}
c.Port = ce.Port
c.GlobalID = fmt.Sprintf("%02d%02d", j+1, i+1)
err = c.Start()
if err != nil {
preventClose(fmt.Sprintf("Channel: Failed to start, %s", err.Error()))
} else {
channelQuery += fmt.Sprintf(`INSERT INTO servers (server_id, current_players, world_name, world_description, land) VALUES (%d, 0, '%s', '%s', %d);`, sid, ee.Name, ee.Description, i+1)
channels = append(channels, &c)
logger.Info(fmt.Sprintf("Channel %d (%d): Started successfully", count, ce.Port))
ci++
count++
}
}
ci = 0
si++
}
// Register all servers in DB
_ = db.MustExec(channelQuery)
for _, c := range channels {
c.Channels = channels
}
ci = 0
si++
}
// Register all servers in DB
_ = db.MustExec(channelQuery)
for _, c := range channels {
c.Channels = channels
}
logger.Info("Finished starting Erupe")
// Wait for exit or interrupt with ctrl+C.
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
logger.Info("Trying to shutdown gracefully")
for _, c := range channels {
c.Shutdown()
if !config.DisableSoftCrash {
for i := 0; i < 10; i++ {
message := fmt.Sprintf("Shutting down in %d...", 10-i)
for _, c := range channels {
c.BroadcastChatMessage(message)
}
logger.Info(message)
time.Sleep(time.Second)
}
}
if config.Channel.Enabled {
for _, c := range channels {
c.Shutdown()
}
}
if config.Sign.Enabled {
signServer.Shutdown()
}
if config.API.Enabled {
ApiServer.Shutdown()
}
if config.Entrance.Enabled {
entranceServer.Shutdown()
}
signServer.Shutdown()
entranceServer.Shutdown()
launcherServer.Shutdown()
time.Sleep(1 * time.Second)
}
@@ -209,6 +291,9 @@ func wait() {
}
func preventClose(text string) {
if _config.ErupeConfig.DisableSoftCrash {
os.Exit(0)
}
fmt.Println("\nFailed to start Erupe:\n" + text)
go wait()
fmt.Println("\nPress Enter/Return to exit...")

View File

@@ -1,10 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS sign_sessions;
DROP TABLE IF EXISTS characters;
DROP TABLE IF EXISTS users;
DROP DOMAIN IF EXISTS uint8;
DROP DOMAIN IF EXISTS uint16;
END;

View File

@@ -1,37 +0,0 @@
BEGIN;
CREATE DOMAIN uint8 AS smallint
CHECK(VALUE >= 0 AND VALUE <= 255);
CREATE DOMAIN uint16 AS integer
CHECK(VALUE >= 0 AND VALUE <= 65536);
CREATE TABLE users (
id serial NOT NULL PRIMARY KEY,
username text UNIQUE NOT NULL,
password text NOT NULL,
item_box bytea
);
CREATE TABLE characters (
id serial NOT NULL PRIMARY KEY,
user_id bigint REFERENCES users(id),
is_female boolean,
is_new_character boolean,
small_gr_level uint8,
gr_override_mode boolean,
name varchar(15),
unk_desc_string varchar(31),
gr_override_level uint16,
gr_override_unk0 uint8,
gr_override_unk1 uint8
);
CREATE TABLE sign_sessions (
id serial NOT NULL PRIMARY KEY,
user_id bigint REFERENCES users(id),
auth_token_num bigint,
auth_token_str text
);
END;

View File

@@ -1,8 +0,0 @@
BEGIN;
ALTER TABLE characters
DROP COLUMN exp,
DROP COLUMN weapon,
DROP COLUMN last_login;
END;

View File

@@ -1,8 +0,0 @@
BEGIN;
ALTER TABLE characters
ADD COLUMN exp uint16,
ADD COLUMN weapon uint16,
ADD COLUMN last_login integer;
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
ALTER TABLE characters
DROP COLUMN savedata;
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
ALTER TABLE characters
ADD COLUMN savedata bytea;
END;

View File

@@ -1,13 +0,0 @@
BEGIN;
ALTER TABLE characters
DROP COLUMN decomyset,
DROP COLUMN hunternavi,
DROP COLUMN otomoairou,
DROP COLUMN partner,
DROP COLUMN platebox,
DROP COLUMN platedata,
DROP COLUMN platemyset,
DROP COLUMN rengokudata;
END;

View File

@@ -1,14 +0,0 @@
BEGIN;
ALTER TABLE characters
ADD COLUMN decomyset bytea,
ADD COLUMN hunternavi bytea,
ADD COLUMN otomoairou bytea,
ADD COLUMN partner bytea,
ADD COLUMN platebox bytea,
ADD COLUMN platedata bytea,
ADD COLUMN platemyset bytea,
ADD COLUMN trophy bytea,
ADD COLUMN rengokudata bytea;
END;

View File

@@ -1,5 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS questlists;
END;

View File

@@ -1,8 +0,0 @@
BEGIN;
CREATE TABLE questlists (
ind int NOT NULL PRIMARY KEY,
questlist bytea
);
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
ALTER TABLE characters
DROP COLUMN savemercenary;
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
ALTER TABLE characters
ADD COLUMN savemercenary bytea;
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
DROP TABLE guild_characters;
DROP TABLE guilds;
END;

View File

@@ -1,22 +0,0 @@
BEGIN;
CREATE TABLE guilds
(
id serial NOT NULL PRIMARY KEY,
name varchar(24),
created_at timestamp DEFAULT NOW(),
leader_id int NOT NULL,
main_motto varchar(255) DEFAULT ''
);
CREATE TABLE guild_characters
(
id serial NOT NULL PRIMARY KEY,
guild_id bigint REFERENCES guilds (id),
character_id bigint REFERENCES characters (id),
joined_at timestamp DEFAULT NOW()
);
CREATE UNIQUE INDEX guild_character_unique_index ON guild_characters (character_id);
END;

View File

@@ -1,11 +0,0 @@
BEGIN;
ALTER TABLE guilds
DROP COLUMN rp;
ALTER TABLE guild_characters
DROP COLUMN is_applicant,
DROP COLUMN is_sub_leader,
DROP COLUMN order_index;
END;

View File

@@ -1,11 +0,0 @@
BEGIN;
ALTER TABLE guild_characters
ADD COLUMN is_applicant bool NOT NULL DEFAULT false,
ADD COLUMN is_sub_leader bool NOT NULL DEFAULT false,
ADD COLUMN order_index int NOT NULL DEFAULT 1;
ALTER TABLE guilds
ADD COLUMN rp uint16 NOT NULL DEFAULT 0;
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
ALTER TABLE characters
DROP COLUMN restrict_guild_scout;
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
ALTER TABLE characters
ADD COLUMN restrict_guild_scout bool NOT NULL DEFAULT false;
END;

View File

@@ -1,10 +0,0 @@
BEGIN;
ALTER TABLE guilds
DROP COLUMN comment,
DROP COLUMN festival_colour,
DROP COLUMN guild_hall;
DROP TYPE festival_colour;
END;

View File

@@ -1,11 +0,0 @@
BEGIN;
CREATE TYPE festival_colour AS ENUM ('none', 'red', 'blue');
ALTER TABLE guilds
ADD COLUMN comment varchar(255) NOT NULL DEFAULT '',
ADD COLUMN festival_colour festival_colour DEFAULT 'none',
ADD COLUMN guild_hall int DEFAULT 0;
END;

View File

@@ -1,24 +0,0 @@
BEGIN;
ALTER TABLE characters
DROP COLUMN minidata,
DROP COLUMN gacha_trial,
DROP COLUMN gacha_prem,
DROP COLUMN gacha_items,
DROP COLUMN daily_time,
DROP COLUMN frontier_points,
DROP COLUMN netcafe_points,
DROP COLUMN house_info,
DROP COLUMN login_boost,
DROP COLUMN skin_hist,
DROP COLUMN gcp;
DROP TABLE fpoint_items;
DROP TABLE gacha_shop;
DROP TABLE gacha_shop_items;
DROP TABLE lucky_box_state;
DROP TABLE stepup_state;
DROP TABLE normal_shop_items;
DROP TABLE shop_item_state;
END;

View File

@@ -1,100 +0,0 @@
BEGIN;
ALTER TABLE characters
ADD COLUMN minidata bytea,
ADD COLUMN gacha_trial int,
ADD COLUMN gacha_prem int,
ADD COLUMN gacha_items bytea,
ADD COLUMN daily_time timestamp,
ADD COLUMN frontier_points int,
ADD COLUMN netcafe_points int,
ADD COLUMN house_info bytea,
ADD COLUMN login_boost bytea,
ADD COLUMN skin_hist bytea,
ADD COLUMN kouryou_point int,
ADD COLUMN gcp int;
CREATE TABLE fpoint_items
(
hash int,
itemType uint8,
itemID uint16,
quant uint16,
itemValue uint16,
tradeType uint8
);
CREATE TABLE gacha_shop
(
hash bigint,
reqGR int,
reqHR int,
gachaName varchar(255),
gachaLink0 varchar(255),
gachaLink1 varchar(255),
gachaLink2 varchar(255),
extraIcon int,
gachaType int,
hideFlag bool
);
CREATE TABLE gacha_shop_items
(
shophash int,
entryType uint8,
itemhash int UNIQUE NOT NULL,
currType uint8,
currNumber uint16,
currQuant uint16,
percentage uint16,
rarityIcon uint8,
rollsCount uint8,
itemCount uint8,
dailyLimit uint8,
itemType int[],
itemId int[],
quantity int[]
);
CREATE TABLE lucky_box_state
(
char_id bigint REFERENCES characters (id),
shophash int UNIQUE NOT NULL,
used_itemhash int[]
);
CREATE TABLE stepup_state
(
char_id bigint REFERENCES characters (id),
shophash int UNIQUE NOT NULL,
step_progression int,
step_time timestamp
);
CREATE TABLE normal_shop_items
(
shoptype int,
shopid int,
itemhash int UNIQUE NOT NULL,
itemID uint16,
Points uint16,
TradeQuantity uint16,
rankReqLow uint16,
rankReqHigh uint16,
rankReqG uint16,
storeLevelReq uint16,
maximumQuantity uint16,
boughtQuantity uint16,
roadFloorsRequired uint16,
weeklyFatalisKills uint16
);
CREATE TABLE shop_item_state
(
char_id bigint REFERENCES characters (id),
itemhash int UNIQUE NOT NULL,
usedquantity int
);
END;

View File

@@ -1,5 +0,0 @@
BEGIN;
DROP TABLE login_boost_state;
END;

View File

@@ -1,13 +0,0 @@
BEGIN;
CREATE TABLE login_boost_state
(
char_id bigint REFERENCES characters (id),
week_req uint8,
week_count uint8,
available bool,
end_time int,
CONSTRAINT id_week UNIQUE(char_id, week_req)
);
END;

View File

@@ -1,12 +0,0 @@
BEGIN;
ALTER TABLE shop_item_state DROP CONSTRAINT shop_item_state_id_itemhash;
ALTER TABLE shop_item_state ADD CONSTRAINT shop_item_state_itemhash_key UNIQUE (itemhash);
ALTER TABLE stepup_state DROP CONSTRAINT stepup_state_id_shophash;
ALTER TABLE stepup_state ADD CONSTRAINT stepup_state_shophash_key UNIQUE (shophash);
ALTER TABLE lucky_box_state DROP CONSTRAINT lucky_box_state_id_shophash;
ALTER TABLE lucky_box_state ADD CONSTRAINT lucky_box_state_shophash_key UNIQUE (shophash);
END;

View File

@@ -1,12 +0,0 @@
BEGIN;
ALTER TABLE shop_item_state DROP CONSTRAINT shop_item_state_itemhash_key;
ALTER TABLE shop_item_state ADD CONSTRAINT shop_item_state_id_itemhash UNIQUE(char_id, itemhash);
ALTER TABLE stepup_state DROP CONSTRAINT stepup_state_shophash_key;
ALTER TABLE stepup_state ADD CONSTRAINT stepup_state_id_shophash UNIQUE(char_id, shophash);
ALTER TABLE lucky_box_state DROP CONSTRAINT lucky_box_state_shophash_key;
ALTER TABLE lucky_box_state ADD CONSTRAINT lucky_box_state_id_shophash UNIQUE(char_id, shophash);
END;

View File

@@ -1,18 +0,0 @@
BEGIN;
ALTER TABLE guild_characters
RENAME COLUMN avoid_leadership TO is_sub_leader;
ALTER TABLE guild_characters
ADD COLUMN is_applicant bool NOT NULL DEFAULT false;
ALTER TABLE guilds
DROP COLUMN icon,
ALTER COLUMN main_motto TYPE varchar USING '',
DROP COLUMN sub_motto;
ALTER TABLE guilds
ALTER COLUMN main_motto SET DEFAULT '';
DROP TABLE guild_applications;
DROP TYPE guild_application_type;
END;

View File

@@ -1,30 +0,0 @@
BEGIN;
CREATE TYPE guild_application_type AS ENUM ('applied', 'invited');
CREATE TABLE guild_applications
(
id serial NOT NULL PRIMARY KEY,
guild_id int NOT NULL REFERENCES guilds (id),
character_id int NOT NULL REFERENCES characters (id),
actor_id int NOT NULL REFERENCES characters (id),
application_type guild_application_type NOT NULL,
created_at timestamp NOT NULL DEFAULT now(),
CONSTRAINT guild_application_character_id UNIQUE (guild_id, character_id)
);
CREATE INDEX guild_application_type_index ON guild_applications (application_type);
ALTER TABLE guild_characters
DROP COLUMN is_applicant;
ALTER TABLE guild_characters
RENAME COLUMN is_sub_leader TO avoid_leadership;
ALTER TABLE guilds
ALTER COLUMN main_motto SET DEFAULT 0;
ALTER TABLE guilds
ADD COLUMN icon bytea,
ADD COLUMN sub_motto int DEFAULT 0,
ALTER COLUMN main_motto TYPE int USING 0;
END;

View File

@@ -1,3 +0,0 @@
BEGIN;
DROP TABLE mail;
END;

View File

@@ -1,19 +0,0 @@
BEGIN;
CREATE TABLE mail
(
id SERIAL NOT NULL PRIMARY KEY,
sender_id INT NOT NULL REFERENCES characters (id),
recipient_id INT NOT NULL REFERENCES characters (id),
subject VARCHAR NOT NULL DEFAULT '',
body VARCHAR NOT NULL DEFAULT '',
read BOOL NOT NULL DEFAULT FALSE,
attached_item_received BOOL NOT NULL DEFAULT FALSE,
attached_item INT DEFAULT NULL,
attached_item_amount INT NOT NULL DEFAULT 1,
is_guild_invite BOOL NOT NULL DEFAULT FALSE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
deleted BOOL NOT NULL DEFAULT FALSE
);
CREATE INDEX mail_recipient_deleted_created_id_index ON mail (recipient_id, deleted, created_at DESC, id DESC);
END;

View File

@@ -1,3 +0,0 @@
BEGIN;
DROP TABLE public.servers;
END;

View File

@@ -1,21 +0,0 @@
BEGIN;
-- Table: public.servers
-- DROP TABLE IF EXISTS public.servers;
CREATE TABLE IF NOT EXISTS public.servers
(
server_id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
server_name text COLLATE pg_catalog."default",
season integer,
current_players integer,
event_id integer,
event_expiration integer,
CONSTRAINT servers_pkey PRIMARY KEY (server_id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.servers
OWNER to postgres;
END;

View File

@@ -1,6 +0,0 @@
BEGIN;
DROP TABLE public.account_ban;
DROP TABLE public.account_history;
DROP TABLE public.account_moderation;
DROP TABLE public.account_sub;
END;

View File

@@ -1,45 +0,0 @@
BEGIN;
CREATE TABLE IF NOT EXISTS public.account_ban
(
user_id integer NOT NULL,
title text COLLATE pg_catalog."default",
reason text COLLATE pg_catalog."default",
date text COLLATE pg_catalog."default",
pass_origin text COLLATE pg_catalog."default",
pass_block text COLLATE pg_catalog."default",
CONSTRAINT ban_pkey PRIMARY KEY (user_id)
);
CREATE TABLE IF NOT EXISTS public.account_history
(
report_id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
user_id integer,
title text COLLATE pg_catalog."default",
reason text COLLATE pg_catalog."default",
date date,
CONSTRAINT account_history_pkey PRIMARY KEY (report_id)
);
CREATE TABLE IF NOT EXISTS public.account_moderation
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
username text COLLATE pg_catalog."default",
password text COLLATE pg_catalog."default",
type text COLLATE pg_catalog."default",
CONSTRAINT account_moderation_pkey PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS public.account_sub
(
id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
discord_id text COLLATE pg_catalog."default",
erupe_account text COLLATE pg_catalog."default",
erupe_password text COLLATE pg_catalog."default",
date_inscription date,
country text COLLATE pg_catalog."default",
presentation text COLLATE pg_catalog."default",
CONSTRAINT account_auth_pkey PRIMARY KEY (id)
);
END;

View File

@@ -1,3 +0,0 @@
BEGIN;
DROP TABLE public.event_week;
END;

View File

@@ -1,11 +0,0 @@
BEGIN;
CREATE TABLE IF NOT EXISTS public.event_week
(
id integer NOT NULL,
event_id integer NOT NULL,
date_expiration integer NOT NULL,
CONSTRAINT event_week_pkey PRIMARY KEY (id)
);
END;

View File

@@ -1,3 +0,0 @@
BEGIN;
DROP TABLE public.gook;
END;

View File

@@ -1,20 +0,0 @@
BEGIN;
CREATE TABLE IF NOT EXISTS public.gook
(
id serial NOT NULL PRIMARY KEY,
gook0 bytea,
gook1 bytea,
gook2 bytea,
gook3 bytea,
gook4 bytea,
gook5 bytea,
gook0status boolean,
gook1status boolean,
gook2status boolean,
gook3status boolean,
gook4status boolean,
gook5status boolean
);
END;

View File

@@ -1,3 +0,0 @@
BEGIN;
DROP TABLE public.history;
END;

View File

@@ -1,13 +0,0 @@
BEGIN;
CREATE TABLE IF NOT EXISTS public.history
(
user_id integer,
admin_id integer,
report_id integer NOT NULL,
title text COLLATE pg_catalog."default",
reason text COLLATE pg_catalog."default",
CONSTRAINT history_pkey PRIMARY KEY (report_id)
);
END;

View File

@@ -11,7 +11,8 @@ type ChatType uint8
// Chat types
const (
ChatTypeLocal ChatType = 1
ChatTypeWorld ChatType = 0
ChatTypeStage = 1
ChatTypeGuild = 2
ChatTypeAlliance = 3
ChatTypeParty = 4

View File

@@ -16,11 +16,7 @@ func (m MsgBinMailNotify) Parse(bf *byteframe.ByteFrame) error {
func (m MsgBinMailNotify) Build(bf *byteframe.ByteFrame) error {
bf.WriteUint8(0x01) // Unk
byteName, _ := stringsupport.ConvertUTF8ToShiftJIS(m.SenderName)
bf.WriteBytes(byteName)
bf.WriteBytes(make([]byte, 21-len(byteName)))
bf.WriteBytes(stringsupport.PaddedString(m.SenderName, 21, true))
return nil
}

View File

@@ -1,8 +1,4 @@
package clientctx
import "erupe-ce/common/stringsupport"
// ClientContext holds contextual data required for packet encoding/decoding.
type ClientContext struct {
StrConv *stringsupport.StringConverter
}
type ClientContext struct{} // Unused

View File

@@ -3,11 +3,11 @@ package network
import (
"encoding/hex"
"errors"
_config "erupe-ce/config"
"erupe-ce/network/crypto"
"fmt"
"io"
"net"
"erupe-ce/network/crypto"
)
// CryptConn represents a MHF encrypted two-way connection,
@@ -48,7 +48,14 @@ func (cc *CryptConn) ReadPacket() ([]byte, error) {
}
// Now read the encrypted packet body after getting its size from the header.
encryptedPacketBody := make([]byte, cph.DataSize)
var encryptedPacketBody []byte
// Don't know when support for this was added, works in Forward.4, doesn't work in Season 6.0
if _config.ErupeConfig.RealClientMode < _config.F1 {
encryptedPacketBody = make([]byte, cph.DataSize)
} else {
encryptedPacketBody = make([]byte, uint32(cph.DataSize)+(uint32(cph.Pf0-0x03)*0x1000))
}
_, err = io.ReadFull(cc.conn, encryptedPacketBody)
if err != nil {
return nil, err
@@ -56,10 +63,10 @@ func (cc *CryptConn) ReadPacket() ([]byte, error) {
// Update the key rotation before decrypting.
if cph.KeyRotDelta != 0 {
cc.readKeyRot = (uint32(cph.KeyRotDelta) * (cc.readKeyRot + 1))
cc.readKeyRot = uint32(cph.KeyRotDelta) * (cc.readKeyRot + 1)
}
out, combinedCheck, check0, check1, check2 := crypto.Decrypt(encryptedPacketBody, cc.readKeyRot, nil)
out, combinedCheck, check0, check1, check2 := crypto.Crypto(encryptedPacketBody, cc.readKeyRot, false, nil)
if cph.Check0 != check0 || cph.Check1 != check1 || cph.Check2 != check2 {
fmt.Printf("got c0 %X, c1 %X, c2 %X\n", check0, check1, check2)
fmt.Printf("want c0 %X, c1 %X, c2 %X\n", cph.Check0, cph.Check1, cph.Check2)
@@ -69,7 +76,7 @@ func (cc *CryptConn) ReadPacket() ([]byte, error) {
// Attempt to bruteforce it.
fmt.Println("Crypto out of sync? Attempting bruteforce")
for key := byte(0); key < 255; key++ {
out, combinedCheck, check0, check1, check2 = crypto.Decrypt(encryptedPacketBody, 0, &key)
out, combinedCheck, check0, check1, check2 = crypto.Crypto(encryptedPacketBody, 0, false, &key)
//fmt.Printf("Key: 0x%X\n%s\n", key, hex.Dump(out))
if cph.Check0 == check0 && cph.Check1 == check1 && cph.Check2 == check2 {
fmt.Printf("Bruceforce successful, override key: 0x%X\n", key)
@@ -94,11 +101,11 @@ func (cc *CryptConn) SendPacket(data []byte) error {
keyRotDelta := byte(3)
if keyRotDelta != 0 {
cc.sendKeyRot = (uint32(keyRotDelta) * (cc.sendKeyRot + 1))
cc.sendKeyRot = uint32(keyRotDelta) * (cc.sendKeyRot + 1)
}
// Encrypt the data
encData, combinedCheck, check0, check1, check2 := crypto.Encrypt(data, cc.sendKeyRot, nil)
encData, combinedCheck, check0, check1, check2 := crypto.Crypto(data, cc.sendKeyRot, true, nil)
header := &CryptPacketHeader{}
header.Pf0 = byte(((uint(len(encData)) >> 12) & 0xF3) | 3)
@@ -115,9 +122,7 @@ func (cc *CryptConn) SendPacket(data []byte) error {
return err
}
cc.conn.Write(headerBytes)
cc.conn.Write(encData)
cc.conn.Write(append(headerBytes, encData...))
cc.sentPackets++
cc.prevSendPacketCombinedCheck = combinedCheck

View File

@@ -6,46 +6,30 @@ var (
_sharedCryptKey = []byte{0xDD, 0xA8, 0x5F, 0x1E, 0x57, 0xAF, 0xC0, 0xCC, 0x43, 0x35, 0x8F, 0xBB, 0x6F, 0xE6, 0xA1, 0xD6, 0x60, 0xB9, 0x1A, 0xAE, 0x20, 0x49, 0x24, 0x81, 0x21, 0xFE, 0x86, 0x2B, 0x98, 0xB7, 0xB3, 0xD2, 0x91, 0x01, 0x3A, 0x4C, 0x65, 0x92, 0x1C, 0xF4, 0xBE, 0xDD, 0xD9, 0x08, 0xE6, 0x81, 0x98, 0x1B, 0x8D, 0x60, 0xF3, 0x6F, 0xA1, 0x47, 0x24, 0xF1, 0x53, 0x45, 0xC8, 0x7B, 0x88, 0x80, 0x4E, 0x36, 0xC3, 0x0D, 0xC9, 0xD6, 0x8B, 0x08, 0x19, 0x0B, 0xA5, 0xC1, 0x11, 0x4C, 0x60, 0xF8, 0x5D, 0xFC, 0x15, 0x68, 0x7E, 0x32, 0xC0, 0x50, 0xAB, 0x64, 0x1F, 0x8A, 0xD4, 0x08, 0x39, 0x7F, 0xC2, 0xFB, 0xBA, 0x6C, 0xF0, 0xE6, 0xB0, 0x31, 0x10, 0xC1, 0xBF, 0x75, 0x43, 0xBB, 0x18, 0x04, 0x0D, 0xD1, 0x97, 0xF7, 0x23, 0x21, 0x83, 0x8B, 0xCA, 0x25, 0x2B, 0xA3, 0x03, 0x13, 0xEA, 0xAE, 0xFE, 0xF0, 0xEB, 0xFD, 0x85, 0x57, 0x53, 0x65, 0x41, 0x2A, 0x40, 0x99, 0xC0, 0x94, 0x65, 0x7E, 0x7C, 0x93, 0x82, 0xB0, 0xB3, 0xE5, 0xC0, 0x21, 0x09, 0x84, 0xD5, 0xEF, 0x9F, 0xD1, 0x7E, 0xDC, 0x4D, 0xF5, 0x7E, 0xCD, 0x45, 0x3C, 0x7F, 0xF5, 0x59, 0x98, 0xC6, 0x55, 0xFC, 0x9F, 0xA3, 0xB7, 0x74, 0xEE, 0x31, 0x98, 0xE6, 0xB7, 0xBE, 0x26, 0xF4, 0x3C, 0x76, 0xF1, 0x23, 0x7E, 0x02, 0x4E, 0x3C, 0xD1, 0xC7, 0x28, 0x23, 0x73, 0xC4, 0xD9, 0x5E, 0x0D, 0xA1, 0x80, 0xA5, 0xAA, 0x26, 0x0A, 0xA3, 0x44, 0x82, 0x74, 0xE6, 0x3C, 0x44, 0x27, 0x51, 0x0D, 0x5F, 0xC7, 0x9C, 0xD6, 0x63, 0x67, 0xA5, 0x27, 0x97, 0x38, 0xFB, 0x2D, 0xD3, 0xD6, 0x60, 0x25, 0x83, 0x4D, 0x37, 0x5B, 0x40, 0x59, 0x11, 0x77, 0x51, 0x11, 0x14, 0x18, 0x07, 0x63, 0xB1, 0x34, 0x3D, 0xB8, 0x60, 0x13, 0xC2, 0xE8, 0x13, 0x82}
)
// Encrypt encrypts the given data using MHF's custom encryption+checksum method.
// if a overrideByteKey value is supplied (!= nil), it will be used to override the derived/truncated key byte.
func Encrypt(data []byte, key uint32, overrideByteKey *byte) (outputData []byte, combinedCheck uint16, check0 uint16, check1 uint16, check2 uint16) {
return _generalCrypt(data, key, 0, overrideByteKey)
}
// Decrypt decrypts the given data using MHF's custom decryption+checksum method.
// if a overrideByteKey value is supplied (!= nil), it will be used to override the derived/truncated key byte.
func Decrypt(data []byte, key uint32, overrideByteKey *byte) (outputData []byte, combinedCheck uint16, check0 uint16, check1 uint16, check2 uint16) {
return _generalCrypt(data, key, 1, overrideByteKey)
}
// _generalCrypt is a generalized MHF crypto function that can perform both encryption and decryption,
// Crypto is a generalized MHF crypto function that can perform both encryption and decryption,
// these two crypto operations are combined into a single function because they shared most of their logic.
// encrypt: cryptType==0
// decrypt: cryptType==1
func _generalCrypt(data []byte, rotKey uint32, cryptType int, overrideByteKey *byte) ([]byte, uint16, uint16, uint16, uint16) {
func Crypto(data []byte, rotKey uint32, encrypt bool, overrideByteKey *byte) ([]byte, uint16, uint16, uint16, uint16) {
cryptKeyTruncByte := byte(((rotKey >> 1) % 999983) & 0xFF)
if overrideByteKey != nil {
cryptKeyTruncByte = *overrideByteKey
}
derivedCryptKey := int32((uint32(len(data)) * (uint32(cryptKeyTruncByte) + 1)) & 0xFFFFFFFF)
derivedCryptKey := (uint32(len(data)) * (uint32(cryptKeyTruncByte) + 1)) & 0xFFFFFFFF
sharedBufIdx := byte(1)
accumulator0 := uint32(0)
accumulator1 := uint32(0)
accumulator2 := uint32(0)
var accumulator0, accumulator1, accumulator2 uint32
var outputData []byte
if cryptType == 0 {
if encrypt {
for i := 0; i < len(data); i++ {
// Do the encryption for this iteration
encKeyIdx := int32(((uint32(derivedCryptKey) >> 10) ^ uint32(data[i])) & 0xFF)
derivedCryptKey = (0x4FD * (derivedCryptKey + 1))
encKeyIdx := ((derivedCryptKey >> 10) ^ uint32(data[i])) & 0xFF
derivedCryptKey = 1277*derivedCryptKey + 1277
encKeyByte := _encryptKey[encKeyIdx]
// Update the checksum accumulators.
accumulator2 = uint32((accumulator2 + (uint32(sharedBufIdx) * uint32(data[i]))) & 0xFFFFFFFF)
accumulator1 = uint32((accumulator1 + uint32(encKeyIdx)) & 0xFFFFFFFF)
accumulator0 = uint32((accumulator0 + (uint32(encKeyByte)<<(i&7))&0xFFFFFFFF) & 0xFFFFFFFF)
accumulator2 = accumulator2 + (uint32(sharedBufIdx) * uint32(data[i]))
accumulator1 = accumulator1 + encKeyIdx
accumulator0 = accumulator0 + uint32(encKeyByte)<<(i&7)
// Append the output.
outputData = append(outputData, _sharedCryptKey[sharedBufIdx]^encKeyByte)
@@ -53,32 +37,32 @@ func _generalCrypt(data []byte, rotKey uint32, cryptType int, overrideByteKey *b
// Update the sharedBufIdx for the next iteration.
sharedBufIdx = data[i]
}
} else if cryptType == 1 {
} else {
for i := 0; i < len(data); i++ {
// Do the decryption for this iteration
oldSharedBufIdx := sharedBufIdx
tIdx := data[i] ^ _sharedCryptKey[sharedBufIdx]
decKeyByte := _decryptKey[tIdx]
sharedBufIdx = byte(((uint32(derivedCryptKey) >> 10) ^ uint32(decKeyByte)) & 0xFF)
sharedBufIdx = byte((derivedCryptKey >> 10) ^ uint32(decKeyByte))
// Update the checksum accumulators.
accumulator0 = (accumulator0 + ((uint32(tIdx) << (i & 7)) & 0xFFFFFFFF))
accumulator1 = (accumulator1 + uint32(decKeyByte)) & 0xFFFFFFFF
accumulator2 = (accumulator2 + ((uint32(oldSharedBufIdx) * uint32(sharedBufIdx)) & 0xFFFFFFFF)) & 0xFFFFFFFF
accumulator0 = accumulator0 + uint32(tIdx)<<(i&7)
accumulator1 = accumulator1 + uint32(decKeyByte)
accumulator2 = accumulator2 + uint32(oldSharedBufIdx)*uint32(sharedBufIdx)
// Append the output.
outputData = append(outputData, sharedBufIdx)
// Update the key pos for next iteration.
derivedCryptKey = (0x4FD * (derivedCryptKey + 1))
derivedCryptKey = 1277*derivedCryptKey + 1277
}
}
combinedCheck := uint16((accumulator1 + (accumulator0 >> 1) + (accumulator2 >> 2)) & 0xFFFF)
check0 := uint16((accumulator0 ^ ((accumulator0 & 0xFFFF0000) >> 16)) & 0xFFFF)
check1 := uint16((accumulator1 ^ ((accumulator1 & 0xFFFF0000) >> 16)) & 0xFFFF)
check2 := uint16((accumulator2 ^ ((accumulator2 & 0xFFFF0000) >> 16)) & 0xFFFF)
var check [4]uint16
check[0] = uint16(accumulator1 + (accumulator0 >> 1) + (accumulator2 >> 2))
check[1] = uint16(accumulator0 ^ ((accumulator0 & 0xFFFF0000) >> 16))
check[2] = uint16(accumulator1 ^ ((accumulator1 & 0xFFFF0000) >> 16))
check[3] = uint16(accumulator2 ^ ((accumulator2 & 0xFFFF0000) >> 16))
return outputData, combinedCheck, check0, check1, check2
return outputData, check[0], check[1], check[2], check[3]
}

View File

@@ -65,7 +65,7 @@ func TestEncrypt(t *testing.T) {
for k, tt := range tests {
testname := fmt.Sprintf("encrypt_test_%d", k)
t.Run(testname, func(t *testing.T) {
out, cc, c0, c1, c2 := Encrypt(tt.decryptedData, tt.key, nil)
out, cc, c0, c1, c2 := Crypto(tt.decryptedData, tt.key, true, nil)
if cc != tt.ecc {
t.Errorf("got cc 0x%X, want 0x%X", cc, tt.ecc)
} else if c0 != tt.ec0 {
@@ -86,7 +86,7 @@ func TestDecrypt(t *testing.T) {
for k, tt := range tests {
testname := fmt.Sprintf("decrypt_test_%d", k)
t.Run(testname, func(t *testing.T) {
out, cc, c0, c1, c2 := Decrypt(tt.encryptedData, tt.key, nil)
out, cc, c0, c1, c2 := Crypto(tt.decryptedData, tt.key, false, nil)
if cc != tt.ecc {
t.Errorf("got cc 0x%X, want 0x%X", cc, tt.ecc)
} else if c0 != tt.ec0 {

View File

@@ -2,10 +2,11 @@ package mhfpacket
import (
"errors"
_config "erupe-ce/config"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
)
// MsgMhfAcquireCafeItem represents the MSG_MHF_ACQUIRE_CAFE_ITEM
@@ -30,7 +31,11 @@ func (m *MsgMhfAcquireCafeItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cl
m.ItemType = bf.ReadUint16()
m.ItemID = bf.ReadUint16()
m.Quant = bf.ReadUint16()
m.PointCost = bf.ReadUint32()
if _config.ErupeConfig.RealClientMode >= _config.G6 {
m.PointCost = bf.ReadUint32()
} else {
m.PointCost = uint32(bf.ReadUint16())
}
m.Unk0 = bf.ReadUint16()
return nil
}

View File

@@ -1,19 +1,19 @@
package mhfpacket
import (
"errors"
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfAcquireFesta represents the MSG_MHF_ACQUIRE_FESTA
type MsgMhfAcquireFesta struct {
AckHandle uint32
FestaID uint32
GuildID uint32
Unk uint16
AckHandle uint32
FestaID uint32
GuildID uint32
Unk uint8
}
// Opcode returns the ID associated with this packet type.
@@ -23,11 +23,12 @@ func (m *MsgMhfAcquireFesta) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfAcquireFesta) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.FestaID = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
m.Unk = bf.ReadUint16()
return nil
m.AckHandle = bf.ReadUint32()
m.FestaID = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
m.Unk = bf.ReadUint8()
bf.ReadUint8() // Zeroed
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -12,7 +12,7 @@ import (
type MsgMhfAcquireGuildTresure struct {
AckHandle uint32
HuntID uint32
Unk uint8
Unk bool
}
// Opcode returns the ID associated with this packet type.
@@ -24,7 +24,7 @@ func (m *MsgMhfAcquireGuildTresure) Opcode() network.PacketID {
func (m *MsgMhfAcquireGuildTresure) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.HuntID = bf.ReadUint32()
m.Unk = bf.ReadUint8()
m.Unk = bf.ReadBool()
return nil
}

View File

@@ -1,15 +1,20 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfAcquireItem represents the MSG_MHF_ACQUIRE_ITEM
type MsgMhfAcquireItem struct{}
type MsgMhfAcquireItem struct {
AckHandle uint32
Unk0 uint16
Length uint16
Unk1 []uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfAcquireItem) Opcode() network.PacketID {
@@ -18,7 +23,13 @@ func (m *MsgMhfAcquireItem) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfAcquireItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint16()
m.Length = bf.ReadUint16()
for i := 0; i < int(m.Length); i++ {
m.Unk1 = append(m.Unk1, bf.ReadUint32())
}
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,15 +1,21 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfAcquireMonthlyItem represents the MSG_MHF_ACQUIRE_MONTHLY_ITEM
type MsgMhfAcquireMonthlyItem struct{}
type MsgMhfAcquireMonthlyItem struct {
AckHandle uint32
Unk0 uint8
Unk1 uint8
Unk2 uint16
Unk3 uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfAcquireMonthlyItem) Opcode() network.PacketID {
@@ -18,7 +24,13 @@ func (m *MsgMhfAcquireMonthlyItem) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfAcquireMonthlyItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint8()
m.Unk1 = bf.ReadUint8()
m.Unk2 = bf.ReadUint16()
m.Unk3 = bf.ReadUint32()
bf.ReadUint32() // Zeroed
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,15 +1,18 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfAcquireTitle represents the MSG_MHF_ACQUIRE_TITLE
type MsgMhfAcquireTitle struct{}
type MsgMhfAcquireTitle struct {
AckHandle uint32
TitleIDs []uint16
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfAcquireTitle) Opcode() network.PacketID {
@@ -18,7 +21,13 @@ func (m *MsgMhfAcquireTitle) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfAcquireTitle) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
titles := int(bf.ReadUint16())
bf.ReadUint16() // Zeroed
for i := 0; i < titles; i++ {
m.TitleIDs = append(m.TitleIDs, bf.ReadUint16())
}
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,15 +1,18 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfAcquireTournament represents the MSG_MHF_ACQUIRE_TOURNAMENT
type MsgMhfAcquireTournament struct{}
type MsgMhfAcquireTournament struct {
AckHandle uint32
TournamentID uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfAcquireTournament) Opcode() network.PacketID {
@@ -18,7 +21,9 @@ func (m *MsgMhfAcquireTournament) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfAcquireTournament) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.TournamentID = bf.ReadUint32()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -14,7 +14,7 @@ type MsgMhfAnnounce struct {
IPAddress uint32
Port uint16
StageID []byte
Type uint8
Data *byteframe.ByteFrame
}
// Opcode returns the ID associated with this packet type.
@@ -28,10 +28,10 @@ func (m *MsgMhfAnnounce) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientCon
m.IPAddress = bf.ReadUint32()
m.Port = bf.ReadUint16()
_ = bf.ReadUint8()
_ = bf.ReadUint16()
_ = bf.ReadUint8()
_ = bf.ReadUint8()
m.StageID = bf.ReadBytes(32)
_ = bf.ReadUint32()
m.Type = bf.ReadUint8()
m.Data = byteframe.NewByteFrameFromBytes(bf.ReadBytes(uint(bf.ReadUint32())))
return nil
}

View File

@@ -1,15 +1,24 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/common/bfutil"
"erupe-ce/common/stringsupport"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfApplyBbsArticle represents the MSG_MHF_APPLY_BBS_ARTICLE
type MsgMhfApplyBbsArticle struct{}
type MsgMhfApplyBbsArticle struct {
AckHandle uint32
Unk0 uint32
Unk1 []byte
Name string
Title string
Description string
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfApplyBbsArticle) Opcode() network.PacketID {
@@ -18,7 +27,13 @@ func (m *MsgMhfApplyBbsArticle) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfApplyBbsArticle) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
m.Unk1 = bf.ReadBytes(16)
m.Name = stringsupport.SJISToUTF8(bfutil.UpToNull(bf.ReadBytes(32)))
m.Title = stringsupport.SJISToUTF8(bfutil.UpToNull(bf.ReadBytes(128)))
m.Description = stringsupport.SJISToUTF8(bfutil.UpToNull(bf.ReadBytes(256)))
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,17 +1,18 @@
package mhfpacket
import (
"errors"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
)
// MsgMhfApplyCampaign represents the MSG_MHF_APPLY_CAMPAIGN
type MsgMhfApplyCampaign struct {
AckHandle uint32
Unk0 uint8
Unk1 uint8
Unk2 uint16
Unk0 uint32
Unk1 uint16
Unk2 []byte
}
// Opcode returns the ID associated with this packet type.
@@ -22,17 +23,13 @@ func (m *MsgMhfApplyCampaign) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfApplyCampaign) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint8()
m.Unk1 = bf.ReadUint8()
m.Unk2 = bf.ReadUint16()
m.Unk0 = bf.ReadUint32()
m.Unk1 = bf.ReadUint16()
m.Unk2 = bf.ReadBytes(16)
return nil
}
// Build builds a binary packet from the current data.
func (m *MsgMhfApplyCampaign) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
bf.WriteUint32(m.AckHandle)
bf.WriteUint8(m.Unk0)
bf.WriteUint8(m.Unk1)
bf.WriteUint16(m.Unk2)
return nil
return errors.New("NOT IMPLEMENTED")
}

View File

@@ -1,18 +1,20 @@
package mhfpacket
import (
"errors"
"erupe-ce/common/byteframe"
_config "erupe-ce/config"
"erupe-ce/network"
"erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
)
// MsgMhfApplyDistItem represents the MSG_MHF_APPLY_DIST_ITEM
type MsgMhfApplyDistItem struct {
AckHandle uint32
AckHandle uint32
DistributionType uint8
DistributionID uint32
Unk2 uint32
Unk3 uint32
DistributionID uint32
Unk2 uint32
Unk3 uint32
}
// Opcode returns the ID associated with this packet type.
@@ -25,17 +27,16 @@ func (m *MsgMhfApplyDistItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clie
m.AckHandle = bf.ReadUint32()
m.DistributionType = bf.ReadUint8()
m.DistributionID = bf.ReadUint32()
m.Unk2 = bf.ReadUint32()
m.Unk3 = bf.ReadUint32()
if _config.ErupeConfig.RealClientMode >= _config.G8 {
m.Unk2 = bf.ReadUint32()
}
if _config.ErupeConfig.RealClientMode >= _config.G10 {
m.Unk3 = bf.ReadUint32()
}
return nil
}
// Build builds a binary packet from the current data.
func (m *MsgMhfApplyDistItem) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
bf.WriteUint32(m.AckHandle)
bf.WriteUint8(m.DistributionType)
bf.WriteUint32(m.DistributionID)
bf.WriteUint32(m.Unk2)
bf.WriteUint32(m.Unk3)
return nil
}
return errors.New("NOT IMPLEMENTED")
}

View File

@@ -1,9 +1,10 @@
package mhfpacket
import (
"errors"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
)
// MsgMhfArrangeGuildMember represents the MSG_MHF_ARRANGE_GUILD_MEMBER
@@ -22,11 +23,11 @@ func (m *MsgMhfArrangeGuildMember) Opcode() network.PacketID {
func (m *MsgMhfArrangeGuildMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
charCount := bf.ReadUint16()
bf.ReadUint8() // Zeroed
charCount := int(bf.ReadUint8())
m.CharIDs = make([]uint32, charCount)
for i := uint16(0); i < charCount; i++ {
for i := 0; i < charCount; i++ {
m.CharIDs[i] = bf.ReadUint32()
}
@@ -35,13 +36,5 @@ func (m *MsgMhfArrangeGuildMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx
// Build builds a binary packet from the current data.
func (m *MsgMhfArrangeGuildMember) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
bf.WriteUint32(m.AckHandle)
bf.WriteUint32(m.GuildID)
bf.WriteUint16(uint16(len(m.CharIDs)))
for _, charID := range m.CharIDs {
bf.WriteUint32(charID)
}
return nil
return errors.New("NOT IMPLEMENTED")
}

View File

@@ -1,15 +1,20 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfCaravanMyRank represents the MSG_MHF_CARAVAN_MY_RANK
type MsgMhfCaravanMyRank struct{}
type MsgMhfCaravanMyRank struct {
AckHandle uint32
Unk0 uint32
Unk1 uint32
Unk2 uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfCaravanMyRank) Opcode() network.PacketID {
@@ -18,7 +23,11 @@ func (m *MsgMhfCaravanMyRank) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfCaravanMyRank) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
m.Unk1 = bf.ReadUint32()
m.Unk2 = bf.ReadUint32()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,15 +1,24 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfCaravanMyScore represents the MSG_MHF_CARAVAN_MY_SCORE
type MsgMhfCaravanMyScore struct{}
type MsgMhfCaravanMyScore struct {
AckHandle uint32
Unk0 uint32
Unk1 uint32
Unk2 int32
Unk3 int32
Unk4 uint32
Unk5 int32
Unk6 int32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfCaravanMyScore) Opcode() network.PacketID {
@@ -18,7 +27,15 @@ func (m *MsgMhfCaravanMyScore) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfCaravanMyScore) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
m.Unk1 = bf.ReadUint32()
m.Unk2 = bf.ReadInt32()
m.Unk3 = bf.ReadInt32()
m.Unk4 = bf.ReadUint32()
m.Unk5 = bf.ReadInt32()
m.Unk6 = bf.ReadInt32()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,15 +1,20 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfCaravanRanking represents the MSG_MHF_CARAVAN_RANKING
type MsgMhfCaravanRanking struct{}
type MsgMhfCaravanRanking struct {
AckHandle uint32
Unk0 uint32
Unk1 uint32
Unk2 int32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfCaravanRanking) Opcode() network.PacketID {
@@ -18,7 +23,11 @@ func (m *MsgMhfCaravanRanking) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfCaravanRanking) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
m.Unk1 = bf.ReadUint32()
m.Unk2 = bf.ReadInt32()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,19 +1,20 @@
package mhfpacket
import (
"errors"
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfChargeFesta represents the MSG_MHF_CHARGE_FESTA
type MsgMhfChargeFesta struct {
AckHandle uint32
FestaID uint32
GuildID uint32
Souls int
AckHandle uint32
FestaID uint32
GuildID uint32
Souls []uint16
Auto bool
}
// Opcode returns the ID associated with this packet type.
@@ -23,15 +24,14 @@ func (m *MsgMhfChargeFesta) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfChargeFesta) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.FestaID = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
m.Souls = 0
for i := bf.ReadUint16(); i > 0; i-- {
m.Souls += int(bf.ReadUint16())
}
_ = bf.ReadUint8() // Unk
return nil
m.AckHandle = bf.ReadUint32()
m.FestaID = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
for i := bf.ReadUint16(); i > 0; i-- {
m.Souls = append(m.Souls, bf.ReadUint16())
}
m.Auto = bf.ReadBool()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,9 +1,10 @@
package mhfpacket
import (
"errors"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
)
// MsgMhfCheckDailyCafepoint represents the MSG_MHF_CHECK_DAILY_CAFEPOINT
@@ -25,7 +26,5 @@ func (m *MsgMhfCheckDailyCafepoint) Parse(bf *byteframe.ByteFrame, ctx *clientct
}
func (m *MsgMhfCheckDailyCafepoint) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
bf.WriteUint32(m.AckHandle)
bf.WriteUint32(m.Unk)
return nil
return errors.New("NOT IMPLEMENTED")
}

View File

@@ -1,15 +1,18 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfCheckMonthlyItem represents the MSG_MHF_CHECK_MONTHLY_ITEM
type MsgMhfCheckMonthlyItem struct{}
type MsgMhfCheckMonthlyItem struct {
AckHandle uint32
Type uint8
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfCheckMonthlyItem) Opcode() network.PacketID {
@@ -18,7 +21,12 @@ func (m *MsgMhfCheckMonthlyItem) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfCheckMonthlyItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Type = bf.ReadUint8()
bf.ReadUint8() // Zeroed
bf.ReadUint8() // Zeroed
bf.ReadUint8() // Zeroed
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,17 +1,17 @@
package mhfpacket
import (
"errors"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
)
// MsgMhfCheckWeeklyStamp represents the MSG_MHF_CHECK_WEEKLY_STAMP
type MsgMhfCheckWeeklyStamp struct {
AckHandle uint32
Unk0 uint8
StampType string
Unk1 bool
Unk2 uint16 // Hardcoded 0 in the binary
}
// Opcode returns the ID associated with this packet type.
@@ -22,17 +22,19 @@ func (m *MsgMhfCheckWeeklyStamp) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfCheckWeeklyStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint8()
stampType := bf.ReadUint8()
switch stampType {
case 1:
m.StampType = "hl"
case 2:
m.StampType = "ex"
}
m.Unk1 = bf.ReadBool()
m.Unk2 = bf.ReadUint16()
bf.ReadUint16() // Zeroed
return nil
}
// Build builds a binary packet from the current data.
func (m *MsgMhfCheckWeeklyStamp) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
bf.WriteUint32(m.AckHandle)
bf.WriteUint8(m.Unk0)
bf.WriteBool(m.Unk1)
bf.WriteUint16(m.Unk2)
return nil
return errors.New("NOT IMPLEMENTED")
}

View File

@@ -1,15 +1,20 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfContractMercenary represents the MSG_MHF_CONTRACT_MERCENARY
type MsgMhfContractMercenary struct{}
type MsgMhfContractMercenary struct {
AckHandle uint32
PactMercID uint32
CID uint32
Op uint8
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfContractMercenary) Opcode() network.PacketID {
@@ -18,7 +23,11 @@ func (m *MsgMhfContractMercenary) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfContractMercenary) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.PactMercID = bf.ReadUint32()
m.CID = bf.ReadUint32()
m.Op = bf.ReadUint8()
return nil
}
// Build builds a binary packet from the current data.

Some files were not shown because too many files have changed in this diff Show More