377 Commits

Author SHA1 Message Date
wish
de3fb8ce4f initial tui concept 2023-03-06 22:23:13 +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
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
222 changed files with 7827 additions and 6183 deletions

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.

View File

@@ -4,7 +4,7 @@ on: [push]
jobs:
build:
runs-on: windows-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@@ -14,17 +14,32 @@ jobs:
with:
go-version: 1.18
- name: Build
run: go build -v
- name: Build Linux-amd64
run: env GOOS=linux GOARCH=amd64 go build -v
- name: Upload artifacts
- name: Upload Linux-amd64 artifacts
uses: actions/upload-artifact@v3
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@v3
with:
name: Windows-amd64
path: |
./erupe-ce.exe
./config.json
./www/
./savedata/
./bin/
./RoadShopItems.csv
./bundled-schema/

7
.gitignore vendored
View File

@@ -2,12 +2,7 @@
www/jp/
vendor/
bin/*.bin
bin/*.bak
bin/quests/*.bin
bin/questlists/*.bin
bin/scenarios/*.bin
bin/debug/*.bin
*.bin
savedata/*/
*.exe
*.lnk

View File

@@ -1,8 +1,19 @@
# Erupe Community Edition
## Setup
If you are only looking to install Erupe, please use [a pre-compiled binary](https://github.com/ZeruLight/Erupe/releases/latest).
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.
[A pastebin with various links, tips, and FAQ](https://pastebin.com/QqAwZSTC)
[An upload for the quest and scenario files exists here](https://github.com/xl3lackout/MHFZ-Quest-Files)
(Over 300k+ files)
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](./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.
### Note
- You will need to acquire and install the client files and quest binaries separately.
# Resources
- [Quest and Scenario Binary Files](https://files.catbox.moe/xf0l7w.7z)
- [PewPewDojo Discord](https://discord.gg/CFnzbhQ)
- [Community FAQ Pastebin](https://pastebin.com/QqAwZSTC)

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

@@ -0,0 +1,387 @@
INSERT INTO fpoint_items (item_type, item_id, quantity, fpoints, trade_type) VALUES
(7,8895,1,500,0),
(7,8891,1,300,0),
(7,8892,1,300,0),
(7,8893,1,300,0),
(7,8894,1,300,0),
(7,8890,1,10,0),
(7,10354,1,500,0),
(7,11983,1,300,0),
(7,11984,1,300,0),
(7,11985,1,300,0),
(7,11986,1,300,0),
(7,12524,1,500,0),
(7,12470,1,300,0),
(7,12471,1,300,0),
(7,12472,1,300,0),
(7,12473,1,300,0),
(7,2158,2,1,0),
(7,14548,1,500,0),
(7,9509,1,1,0),
(7,9510,1,1,0),
(7,9511,1,1,0),
(7,9512,1,1,0),
(7,9513,1,1,0),
(7,9514,1,1,0),
(7,9515,1,1,0),
(7,10753,1,1,0),
(7,10754,1,1,0),
(7,10755,1,1,0),
(7,10756,1,1,0),
(7,10757,1,1,0),
(7,10758,1,1,0),
(7,10759,1,1,0),
(7,11296,1,1,0),
(7,11297,1,1,0),
(7,11298,1,1,0),
(7,11299,1,1,0),
(7,11300,1,1,0),
(7,12386,1,1,0),
(7,12387,1,1,0),
(7,12388,1,1,0),
(7,12389,1,1,0),
(7,12390,1,1,0),
(7,13034,1,1,0),
(7,13035,1,1,0),
(7,13036,1,1,0),
(7,13037,1,1,0),
(7,13038,1,1,0),
(7,14179,1,1,0),
(7,14180,1,1,0),
(7,14181,1,1,0),
(7,14182,1,1,0),
(7,14183,1,1,0),
(7,13422,1,1,0),
(7,13423,1,1,0),
(7,13424,1,1,0),
(7,13425,1,1,0),
(7,13426,1,1,0),
(7,13427,1,1,0),
(7,9796,1,3,0),
(7,9700,1,3,0),
(7,10380,1,3,0),
(7,10810,1,3,0),
(7,10811,1,3,0),
(7,11436,1,3,0),
(7,9509,1,1,0),
(7,9510,1,1,0),
(7,9511,1,1,0),
(7,9512,1,1,0),
(7,9513,1,1,0),
(7,9514,1,1,0),
(7,9515,1,1,0),
(7,10753,1,1,0),
(7,10754,1,1,0),
(7,10755,1,1,0),
(7,10756,1,1,0),
(7,10757,1,1,0),
(7,10758,1,1,0),
(7,10759,1,1,0),
(7,11296,1,1,0),
(7,11297,1,1,0),
(7,11298,1,1,0),
(7,11299,1,1,0),
(7,11300,1,1,0),
(7,12509,1,3,0),
(7,12386,1,1,0),
(7,12387,1,1,0),
(7,12388,1,1,0),
(7,12389,1,1,0),
(7,12390,1,1,0),
(7,12872,1,3,0),
(7,12873,1,3,0),
(7,12840,1,1,0),
(7,12841,1,1,0),
(7,12874,1,1,0),
(7,12875,1,1,0),
(7,13191,1,3,0),
(7,13177,1,3,0),
(7,13326,1,3,0),
(7,13034,1,1,0),
(7,13035,1,1,0),
(7,13036,1,1,0),
(7,13037,1,1,0),
(7,13038,1,1,0),
(7,13178,1,3,0),
(7,13453,1,3,0),
(7,13449,1,3,0),
(7,13450,1,3,0),
(7,13404,1,3,0),
(7,13422,1,1,0),
(7,13423,1,1,0),
(7,13424,1,1,0),
(7,13425,1,1,0),
(7,13426,1,1,0),
(7,13427,1,1,0),
(7,13791,1,3,0),
(7,14006,1,3,0),
(7,14031,1,3,0),
(7,14032,1,3,0),
(7,13960,1,3,0),
(7,14029,1,3,0),
(7,13956,1,1,0),
(7,13958,1,1,0),
(7,13957,1,1,0),
(7,13959,1,1,0),
(7,13790,1,3,0),
(7,14005,1,3,0),
(7,14010,1,3,0),
(7,14009,1,3,0),
(7,14008,1,3,0),
(7,13965,1,3,0),
(7,14028,1,3,0),
(7,13963,1,3,0),
(7,14026,1,3,0),
(7,13964,1,3,0),
(7,14027,1,3,0),
(7,14069,1,3,0),
(7,14124,1,3,0),
(7,14065,1,1,0),
(7,14066,1,1,0),
(7,14067,1,1,0),
(7,14068,1,1,0),
(7,13962,1,3,0),
(7,14125,1,3,0),
(7,14089,1,3,0),
(7,14090,1,3,0),
(7,14091,1,3,0),
(7,14092,1,3,0),
(7,14194,1,3,0),
(7,14191,1,3,0),
(7,14198,1,3,0),
(7,14197,1,3,0),
(7,14179,1,1,0),
(7,14180,1,1,0),
(7,14181,1,1,0),
(7,14182,1,1,0),
(7,14183,1,1,0),
(7,14196,1,3,0),
(7,14195,1,3,0),
(7,14193,1,3,0),
(7,14192,1,3,0),
(7,14407,1,3,0),
(7,14414,1,3,0),
(7,14406,1,3,0),
(7,14413,1,3,0),
(7,14416,1,3,0),
(7,14549,1,3,0),
(7,14550,1,3,0),
(7,14502,1,3,0),
(7,14507,1,3,0),
(7,14501,1,3,0),
(7,14506,1,3,0),
(7,14500,1,3,0),
(7,14505,1,3,0),
(7,14498,1,3,0),
(7,14659,1,3,0),
(7,14660,1,3,0),
(7,14657,1,1,0),
(7,14658,1,1,0),
(7,11420,1,3,0),
(7,14704,1,3,0),
(7,11288,1,1,0),
(7,11289,1,1,0),
(7,11290,1,1,0),
(7,11291,1,1,0),
(7,10750,1,3,0),
(7,14705,1,3,0),
(7,10633,1,1,0),
(7,10634,1,1,0),
(7,10635,1,1,0),
(7,10636,1,1,0),
(7,14662,1,3,0),
(7,14663,1,3,0),
(7,14665,1,3,0),
(7,14666,1,3,0),
(7,14667,1,3,0),
(7,14668,1,3,0),
(7,14669,1,3,0),
(7,14670,1,3,0),
(7,14671,1,3,0),
(7,14672,1,3,0),
(7,14673,1,3,0),
(7,14674,1,3,0),
(7,14675,1,3,0),
(7,14676,1,3,0),
(7,14677,1,3,0),
(7,14678,1,3,0),
(7,14679,1,3,0),
(7,14680,1,3,0),
(7,14681,1,3,0),
(7,14682,1,3,0),
(7,14683,1,3,0),
(7,14684,1,3,0),
(7,14685,1,3,0),
(7,14686,1,3,0),
(7,14687,1,3,0),
(7,14688,1,3,0),
(7,14689,1,3,0),
(7,14690,1,3,0),
(7,14691,1,3,0),
(7,14692,1,3,0),
(7,14693,1,3,0),
(7,14694,1,3,0),
(7,14695,1,3,0),
(7,14696,1,3,0),
(7,14697,1,3,0),
(7,14698,1,3,0),
(7,14699,1,3,0),
(7,14700,1,3,0),
(7,14314,1,3,0),
(7,14503,1,3,0),
(7,14510,1,3,0),
(7,14904,1,3,0),
(7,14906,1,3,0),
(7,14910,1,1,0),
(7,14912,1,1,0),
(7,14905,1,3,0),
(7,14907,1,3,0),
(7,14911,1,1,0),
(7,14909,1,1,0),
(7,14855,1,3,0),
(7,14894,1,3,0),
(7,14913,1,3,0),
(7,14914,1,3,0),
(7,14891,1,3,0),
(7,14895,1,3,0),
(7,15027,1,3,0),
(7,15028,1,3,0),
(7,15026,1,1,0),
(7,15025,1,1,0),
(7,15024,1,1,0),
(7,15023,1,1,0),
(7,15064,1,3,0),
(7,15065,1,3,0),
(7,15030,1,3,0),
(7,15031,1,3,0),
(7,15062,1,3,0),
(7,15063,1,3,0),
(7,15066,1,3,0),
(7,15067,1,3,0),
(7,15061,1,3,0),
(7,15060,1,3,0),
(7,1227,1,2,0),
(7,13176,1,2,0),
(7,4360,1,2,0),
(7,4358,1,1,0),
(7,15118,1,3,0),
(7,15119,1,3,0),
(7,15113,1,3,0),
(7,15114,1,3,0),
(7,15115,1,3,0),
(7,15116,1,3,0),
(7,15220,1,3,0),
(7,15221,1,3,0),
(7,14126,1,3,0),
(7,15222,1,3,0),
(7,15223,1,3,0),
(7,15224,1,3,0),
(7,15225,1,3,0),
(7,15524,1,3,0),
(7,15525,1,3,0),
(7,15507,1,3,0),
(7,15508,1,3,0),
(7,15285,1,3,0),
(7,15286,1,3,0),
(7,15281,1,1,0),
(7,15282,1,1,0),
(7,15283,1,1,0),
(7,15284,1,1,0),
(7,15776,1,3,0),
(7,15777,1,3,0),
(7,15774,1,3,0),
(7,15775,1,3,0),
(7,15823,1,3,0),
(7,15824,1,3,0),
(7,15343,1,3,0),
(7,15342,1,3,0),
(7,15341,1,3,0),
(7,15340,1,3,0),
(7,15339,1,3,0),
(7,15338,1,3,0),
(7,15337,1,3,0),
(7,15336,1,3,0),
(7,15335,1,3,0),
(7,15334,1,3,0),
(7,15333,1,3,0),
(7,15332,1,3,0),
(7,15331,1,3,0),
(7,15330,1,3,0),
(7,15329,1,3,0),
(7,15328,1,3,0),
(7,15327,1,3,0),
(7,15326,1,3,0),
(7,15325,1,3,0),
(7,15324,1,3,0),
(7,15323,1,3,0),
(7,15322,1,3,0),
(7,15321,1,3,0),
(7,15314,1,3,0),
(7,15312,1,3,0),
(7,15311,1,3,0),
(7,15306,1,3,0),
(7,15307,1,3,0),
(7,15308,1,3,0),
(7,15309,1,3,0),
(7,15310,1,3,0),
(7,15305,1,3,0),
(7,15304,1,3,0),
(7,15303,1,3,0),
(7,15302,1,3,0),
(7,15301,1,3,0),
(7,15300,1,3,0),
(7,15299,1,3,0),
(7,15298,1,3,0),
(7,15297,1,3,0),
(7,15296,1,3,0),
(7,15295,1,3,0),
(7,15293,1,3,0),
(7,15294,1,3,0),
(7,15292,1,3,0),
(7,15291,1,3,0),
(7,15290,1,3,0),
(7,15289,1,3,0),
(7,15315,1,3,0),
(7,15316,1,3,0),
(7,15317,1,3,0),
(7,15318,1,3,0),
(7,15319,1,3,0),
(7,15320,1,3,0),
(7,15819,1,3,0),
(7,15820,1,3,0),
(7,15821,1,3,0),
(7,15822,1,3,0),
(7,16450,1,3,0),
(7,16451,1,3,0),
(7,16459,1,1,0),
(7,16460,1,1,0),
(7,16461,1,1,0),
(7,16462,1,1,0),
(7,16463,1,1,0),
(7,16464,1,1,0),
(7,16465,1,1,0),
(7,16466,1,1,0),
(7,16467,1,1,0),
(7,16468,1,1,0),
(7,16469,1,1,0),
(7,16470,1,1,0),
(7,16471,1,1,0),
(7,16472,1,1,0),
(7,16454,1,3,0),
(7,16455,1,3,0),
(7,16442,1,3,0),
(7,16443,1,3,0),
(7,16342,1,3,0),
(7,16343,1,3,0),
(7,16444,1,3,0),
(7,16445,1,3,0),
(7,16344,1,3,0),
(7,16345,1,3,0),
(7,16352,1,3,0),
(7,16353,1,3,0),
(7,16446,1,3,0),
(7,16447,1,3,0),
(7,16448,1,3,0),
(7,16449,1,3,0),
(7,16348,1,3,0),
(7,16349,1,3,0)

View File

@@ -0,0 +1,260 @@
BEGIN;
-- Ripped prizes
INSERT INTO public.festa_prizes
(type, tier, souls_req, item_id, num_item)
VALUES
('personal', 1, 1, 9647, 7),
('personal', 2, 1, 9647, 7),
('personal', 3, 1, 9647, 7),
('personal', 1, 200, 11284, 4),
('personal', 2, 200, 11284, 4),
('personal', 3, 200, 11284, 4),
('personal', 1, 400, 11381, 3),
('personal', 2, 400, 11381, 3),
('personal', 3, 400, 11381, 3),
('personal', 1, 600, 11284, 8),
('personal', 2, 600, 11284, 8),
('personal', 3, 600, 11284, 8),
('personal', 1, 800, 11384, 3),
('personal', 2, 800, 11384, 3),
('personal', 3, 800, 11384, 3),
('personal', 1, 1000, 11284, 12),
('personal', 2, 1000, 11284, 12),
('personal', 3, 1000, 11284, 12),
('personal', 1, 1200, 11381, 5),
('personal', 2, 1200, 11381, 5),
('personal', 3, 1200, 11381, 5),
('personal', 1, 1400, 11284, 16),
('personal', 2, 1400, 11284, 16),
('personal', 3, 1400, 11284, 16),
('personal', 1, 1700, 11384, 5),
('personal', 2, 1700, 11384, 5),
('personal', 3, 1700, 11384, 5),
('personal', 1, 2000, 11284, 16),
('personal', 2, 2000, 11284, 16),
('personal', 3, 2000, 11284, 16),
('personal', 1, 2500, 11382, 4),
('personal', 2, 2500, 11382, 4),
('personal', 3, 2500, 11382, 4),
('personal', 1, 3000, 11284, 24),
('personal', 2, 3000, 11284, 24),
('personal', 3, 3000, 11284, 24),
('personal', 1, 4000, 11385, 4),
('personal', 2, 4000, 11385, 4),
('personal', 3, 4000, 11385, 4),
('personal', 1, 5000, 11381, 11),
('personal', 2, 5000, 11381, 11),
('personal', 3, 5000, 11381, 11),
('personal', 1, 6000, 5177, 5),
('personal', 2, 6000, 5177, 5),
('personal', 3, 6000, 5177, 5),
('personal', 1, 7000, 11384, 11),
('personal', 2, 7000, 11384, 11),
('personal', 3, 7000, 11384, 11),
('personal', 1, 10000, 11382, 8),
('personal', 2, 10000, 11382, 8),
('personal', 3, 10000, 11382, 8),
('personal', 1, 15000, 11385, 4),
('personal', 2, 15000, 11385, 4),
('personal', 3, 15000, 11385, 4),
('personal', 1, 20000, 11381, 13),
('personal', 2, 20000, 11381, 13),
('personal', 3, 20000, 11381, 13),
('personal', 1, 25000, 11385, 4),
('personal', 2, 25000, 11385, 4),
('personal', 3, 25000, 11385, 4),
('personal', 1, 30000, 11383, 1),
('personal', 2, 30000, 11383, 1),
('personal', 3, 30000, 11383, 1);
INSERT INTO public.festa_prizes
(type, tier, souls_req, item_id, num_item)
VALUES
('guild', 1, 100, 7468, 5),
('guild', 2, 100, 7468, 5),
('guild', 3, 100, 7465, 5),
('guild', 1, 300, 7469, 5),
('guild', 2, 300, 7469, 5),
('guild', 3, 300, 7466, 5),
('guild', 1, 700, 7470, 5),
('guild', 2, 700, 7470, 5),
('guild', 3, 700, 7467, 5),
('guild', 1, 1500, 13405, 14),
('guild', 1, 1500, 1520, 3),
('guild', 2, 1500, 13405, 14),
('guild', 2, 1500, 1520, 3),
('guild', 3, 1500, 7011, 3),
('guild', 3, 1500, 13405, 14),
('guild', 1, 3000, 10201, 10),
('guild', 2, 3000, 10201, 10),
('guild', 3, 3000, 10201, 10),
('guild', 1, 6000, 13895, 14),
('guild', 1, 6000, 1520, 6),
('guild', 2, 6000, 13895, 14),
('guild', 2, 6000, 1520, 6),
('guild', 3, 6000, 13895, 14),
('guild', 3, 6000, 7011, 4),
('guild', 1, 12000, 13406, 14),
('guild', 1, 12000, 1520, 9),
('guild', 2, 12000, 13406, 14),
('guild', 2, 12000, 1520, 9),
('guild', 3, 12000, 13406, 14),
('guild', 3, 12000, 7011, 5),
('guild', 1, 25000, 10207, 10),
('guild', 2, 25000, 10207, 10),
('guild', 3, 25000, 10207, 10),
('guild', 1, 50000, 1520, 12),
('guild', 1, 50000, 13896, 14),
('guild', 2, 50000, 1520, 12),
('guild', 2, 50000, 13896, 14),
('guild', 3, 50000, 7011, 6),
('guild', 3, 50000, 13896, 14),
('guild', 1, 100000, 10201, 10),
('guild', 2, 100000, 10201, 10),
('guild', 3, 100000, 10201, 10),
('guild', 1, 200000, 13406, 16),
('guild', 2, 200000, 13406, 16),
('guild', 3, 200000, 13406, 16),
('guild', 1, 300000, 13896, 16),
('guild', 2, 300000, 13896, 16),
('guild', 3, 300000, 13896, 16),
('guild', 1, 400000, 10207, 10),
('guild', 2, 400000, 10207, 10),
('guild', 3, 400000, 10207, 10),
('guild', 1, 500000, 13407, 6),
('guild', 1, 500000, 13897, 6),
('guild', 2, 500000, 13407, 6),
('guild', 2, 500000, 13897, 6),
('guild', 3, 500000, 13407, 6),
('guild', 3, 500000, 13897, 6);
-- Ripped trials
INSERT INTO public.festa_trials
(objective, goal_id, times_req, locale_req, reward)
VALUES
(1,27,1,0,1),
(5,53034,0,0,400),
(5,22042,0,0,89),
(5,23397,0,0,89),
(1,28,1,0,1),
(1,68,1,0,1),
(1,6,1,0,2),
(1,38,1,0,2),
(1,20,1,0,3),
(1,39,1,0,4),
(1,48,1,0,4),
(1,67,1,0,4),
(1,93,1,0,4),
(1,22,1,0,5),
(1,52,1,0,5),
(1,101,1,0,5),
(1,1,1,0,5),
(1,37,1,0,5),
(1,15,1,0,5),
(1,45,1,0,5),
(1,74,1,0,5),
(1,78,1,0,5),
(1,103,1,0,5),
(1,51,1,0,6),
(1,17,1,0,6),
(1,21,1,0,6),
(1,92,1,0,6),
(1,47,1,0,7),
(1,46,1,0,7),
(1,26,1,0,7),
(1,14,1,0,7),
(1,11,1,0,7),
(1,44,1,0,8),
(1,43,1,0,8),
(1,49,1,0,8),
(1,40,1,0,8),
(1,76,1,0,8),
(1,89,1,0,8),
(1,94,1,0,8),
(1,96,1,0,8),
(1,75,1,0,8),
(1,91,1,0,8),
(1,53,1,0,9),
(1,80,1,0,9),
(1,42,1,0,9),
(1,79,1,0,9),
(1,81,1,0,10),
(1,41,1,0,10),
(1,82,1,0,10),
(1,90,1,0,10),
(1,149,1,0,10),
(1,85,1,0,11),
(1,95,1,0,11),
(1,121,1,0,11),
(1,142,1,0,11),
(1,141,1,0,11),
(1,146,1,0,12),
(1,147,1,0,12),
(1,148,1,0,12),
(1,151,1,0,12),
(1,152,1,0,12),
(1,159,1,0,12),
(1,153,1,0,12),
(1,162,1,0,12),
(1,111,1,0,13),
(1,110,1,0,13),
(1,112,1,0,13),
(1,109,1,0,14),
(1,169,1,0,15),
(2,33,1,0,6),
(2,104,1,0,8),
(2,119,1,0,8),
(2,120,1,0,8),
(2,54,1,0,8),
(2,59,1,0,8),
(2,64,1,0,8),
(2,65,1,0,8),
(2,99,1,0,9),
(2,83,1,0,9),
(2,84,1,0,10),
(2,77,1,0,10),
(2,106,1,0,10),
(2,55,1,0,10),
(2,58,1,0,10),
(2,7,1,0,10),
(2,50,1,0,11),
(2,131,1,0,11),
(2,129,1,0,11),
(2,140,1,0,11),
(2,122,1,0,11),
(2,126,1,0,11),
(2,127,1,0,11),
(2,128,1,0,11),
(2,130,1,0,11),
(2,139,1,0,11),
(2,144,1,0,11),
(2,150,1,0,11),
(2,158,1,0,11),
(2,164,1,0,15),
(2,165,1,0,15),
(2,2,1,7,15),
(2,36,1,0,15),
(2,71,1,0,15),
(2,108,1,0,15),
(2,116,1,0,15),
(2,107,1,0,15),
(2,154,1,0,17),
(2,166,1,0,17),
(2,170,1,0,18),
(3,31,1,0,1),
(3,8,1,0,3),
(3,123,1,0,8),
(3,105,1,0,9),
(3,125,1,0,11),
(3,115,1,0,12),
(3,114,1,0,12),
(3,161,1,0,12),
(4,670,1,0,1),
(4,671,1,0,1),
(4,672,1,0,1),
(4,675,1,0,1),
(4,673,1,0,1),
(4,674,1,0,1);
END;

View File

@@ -0,0 +1,13 @@
BEGIN;
INSERT INTO public.cafebonus (time_req, item_type, item_id, quantity)
VALUES
(1800, 17, 0, 250),
(3600, 17, 0, 500),
(7200, 17, 0, 1000),
(10800, 17, 0, 1500),
(18000, 17, 0, 1750),
(28800, 17, 0, 3000),
(43200, 17, 0, 4000);
END;

View File

@@ -0,0 +1,868 @@
BEGIN;
INSERT INTO public.shop_items
(shop_type, shop_id, item_id, cost, quantity, min_hr, min_sr, min_gr, store_level, max_quantity, road_floors, road_fatalis)
VALUES
(10,4,11664,20000,1,0,0,1,1,0,0,0),
(10,4,11665,20000,1,0,0,1,1,0,0,0),
(10,4,11666,20000,1,0,0,1,1,0,0,0),
(10,4,11667,20000,1,0,0,1,1,0,0,0),
(10,4,11668,20000,1,0,0,1,1,0,0,0),
(10,4,11669,20000,1,0,0,1,1,0,0,0),
(10,4,11670,20000,1,0,0,1,1,0,0,0),
(10,4,11671,20000,1,0,0,1,1,0,0,0),
(10,4,11672,20000,1,0,0,1,1,0,0,0),
(10,4,11673,20000,1,0,0,1,1,0,0,0),
(10,4,11674,20000,1,0,0,1,1,0,0,0),
(10,4,11675,20000,1,0,0,1,1,0,0,0),
(10,4,11676,20000,1,0,0,1,1,0,0,0),
(10,4,11677,20000,1,0,0,1,1,0,0,0),
(10,4,11678,20000,1,0,0,1,1,0,0,0),
(10,4,11679,20000,1,0,0,1,1,0,0,0),
(10,4,11680,20000,1,0,0,1,1,0,0,0),
(10,4,11681,20000,1,0,0,1,1,0,0,0),
(10,4,11682,20000,1,0,0,1,1,0,0,0),
(10,4,11683,20000,1,0,0,1,1,0,0,0),
(10,4,11684,20000,1,0,0,1,1,0,0,0),
(10,4,11685,20000,1,0,0,1,1,0,0,0),
(10,4,11686,20000,1,0,0,1,1,0,0,0),
(10,4,11687,20000,1,0,0,1,1,0,0,0),
(10,4,11688,20000,1,0,0,1,1,0,0,0),
(10,4,11689,20000,1,0,0,1,1,0,0,0),
(10,4,11690,20000,1,0,0,1,1,0,0,0),
(10,4,11691,20000,1,0,0,1,1,0,0,0),
(10,4,11692,20000,1,0,0,1,1,0,0,0),
(10,4,11693,20000,1,0,0,1,1,0,0,0),
(10,4,11694,20000,1,0,0,1,1,0,0,0),
(10,4,11695,20000,1,0,0,1,1,0,0,0),
(10,4,11696,20000,1,0,0,1,1,0,0,0),
(10,4,11697,20000,1,0,0,1,1,0,0,0),
(10,4,12893,20000,1,0,0,1,1,0,0,0),
(10,4,12894,20000,1,0,0,1,1,0,0,0),
(10,4,12895,20000,1,0,0,1,1,0,0,0),
(10,4,12896,20000,1,0,0,1,1,0,0,0),
(10,4,12897,20000,1,0,0,1,1,0,0,0),
(10,4,12898,20000,1,0,0,1,1,0,0,0),
(10,4,12899,20000,1,0,0,1,1,0,0,0),
(10,4,14337,20000,1,0,0,1,1,0,0,0),
(10,4,14338,20000,1,0,0,1,1,0,0,0),
(10,4,14339,20000,1,0,0,1,1,0,0,0),
(10,4,14340,20000,1,0,0,1,1,0,0,0),
(10,4,14341,20000,1,0,0,1,1,0,0,0),
(10,4,14342,20000,1,0,0,1,1,0,0,0),
(10,4,14343,20000,1,0,0,1,1,0,0,0),
(10,4,14344,20000,1,0,0,1,1,0,0,0),
(10,4,14345,20000,1,0,0,1,1,0,0,0),
(10,4,9254,10000,1,0,0,1,1,0,0,0),
(10,4,9255,10000,1,0,0,1,1,0,0,0),
(10,4,9256,10000,1,0,0,1,1,0,0,0),
(10,4,9257,10000,1,0,0,1,1,0,0,0),
(10,4,9258,10000,1,0,0,1,1,0,0,0),
(10,4,9259,10000,1,0,0,1,1,0,0,0),
(10,4,9260,10000,1,0,0,1,1,0,0,0),
(10,4,9261,10000,1,0,0,1,1,0,0,0),
(10,4,9262,10000,1,0,0,1,1,0,0,0),
(10,4,9263,10000,1,0,0,1,1,0,0,0),
(10,4,9264,10000,1,0,0,1,1,0,0,0),
(10,4,9265,10000,1,0,0,1,1,0,0,0),
(10,4,9266,10000,1,0,0,1,1,0,0,0),
(10,4,9267,10000,1,0,0,1,1,0,0,0),
(10,4,9268,10000,1,0,0,1,1,0,0,0),
(10,4,9269,10000,1,0,0,1,1,0,0,0),
(10,4,9270,10000,1,0,0,1,1,0,0,0),
(10,4,9271,10000,1,0,0,1,1,0,0,0),
(10,4,9272,10000,1,0,0,1,1,0,0,0),
(10,4,9273,10000,1,0,0,1,1,0,0,0),
(10,4,9274,10000,1,0,0,1,1,0,0,0),
(10,4,9275,10000,1,0,0,1,1,0,0,0),
(10,4,9276,10000,1,0,0,1,1,0,0,0),
(10,4,9277,10000,1,0,0,1,1,0,0,0),
(10,4,9278,10000,1,0,0,1,1,0,0,0),
(10,4,9279,10000,1,0,0,1,1,0,0,0),
(10,4,9280,10000,1,0,0,1,1,0,0,0),
(10,4,9281,10000,1,0,0,1,1,0,0,0),
(10,4,9282,10000,1,0,0,1,1,0,0,0),
(10,4,9283,10000,1,0,0,1,1,0,0,0),
(10,4,9284,10000,1,0,0,1,1,0,0,0),
(10,4,9285,10000,1,0,0,1,1,0,0,0),
(10,4,9286,10000,1,0,0,1,1,0,0,0),
(10,4,9287,10000,1,0,0,1,1,0,0,0),
(10,4,9288,10000,1,0,0,1,1,0,0,0),
(10,4,9289,10000,1,0,0,1,1,0,0,0),
(10,4,9290,10000,1,0,0,1,1,0,0,0),
(10,4,9291,10000,1,0,0,1,1,0,0,0),
(10,4,9292,10000,1,0,0,1,1,0,0,0),
(10,4,9293,10000,1,0,0,1,1,0,0,0),
(10,4,9294,10000,1,0,0,1,1,0,0,0),
(10,4,9295,10000,1,0,0,1,1,0,0,0),
(10,4,9296,10000,1,0,0,1,1,0,0,0),
(10,4,9297,10000,1,0,0,1,1,0,0,0),
(10,4,9298,10000,1,0,0,1,1,0,0,0),
(10,4,9299,10000,1,0,0,1,1,0,0,0),
(10,4,9300,10000,1,0,0,1,1,0,0,0),
(10,4,9301,10000,1,0,0,1,1,0,0,0),
(10,4,13196,10000,1,0,0,1,1,0,0,0),
(10,4,13197,10000,1,0,0,1,1,0,0,0),
(10,4,13198,10000,1,0,0,1,1,0,0,0),
(10,4,13199,10000,1,0,0,1,1,0,0,0),
(10,4,15542,10000,1,0,0,1,1,0,0,0),
(10,4,15543,10000,1,0,0,1,1,0,0,0),
(10,4,15544,10000,1,0,0,1,1,0,0,0),
(10,4,15545,10000,1,0,0,1,1,0,0,0),
(10,4,13640,20000,1,0,0,1,1,0,0,0),
(10,4,13641,20000,1,0,0,1,1,0,0,0),
(10,4,13642,20000,1,0,0,1,1,0,0,0),
(10,4,13643,20000,1,0,0,1,1,0,0,0),
(10,4,13644,20000,1,0,0,1,1,0,0,0),
(10,4,13645,20000,1,0,0,1,1,0,0,0),
(10,4,13646,20000,1,0,0,1,1,0,0,0),
(10,4,13647,20000,1,0,0,1,1,0,0,0),
(10,4,13648,20000,1,0,0,1,1,0,0,0),
(10,4,13649,20000,1,0,0,1,1,0,0,0),
(10,4,13650,20000,1,0,0,1,1,0,0,0),
(10,4,13651,20000,1,0,0,1,1,0,0,0),
(10,4,13652,20000,1,0,0,1,1,0,0,0),
(10,4,13653,20000,1,0,0,1,1,0,0,0),
(10,4,13654,20000,1,0,0,1,1,0,0,0),
(10,4,13655,20000,1,0,0,1,1,0,0,0),
(10,4,13656,20000,1,0,0,1,1,0,0,0),
(10,4,13657,20000,1,0,0,1,1,0,0,0),
(10,4,13658,20000,1,0,0,1,1,0,0,0),
(10,4,13659,20000,1,0,0,1,1,0,0,0),
(10,4,13660,20000,1,0,0,1,1,0,0,0),
(10,4,13661,20000,1,0,0,1,1,0,0,0),
(10,4,13662,20000,1,0,0,1,1,0,0,0),
(10,4,13663,20000,1,0,0,1,1,0,0,0),
(10,4,13664,20000,1,0,0,1,1,0,0,0),
(10,4,13665,20000,1,0,0,1,1,0,0,0),
(10,4,13666,20000,1,0,0,1,1,0,0,0),
(10,4,13667,20000,1,0,0,1,1,0,0,0),
(10,4,13668,20000,1,0,0,1,1,0,0,0),
(10,4,13669,20000,1,0,0,1,1,0,0,0),
(10,4,13670,20000,1,0,0,1,1,0,0,0),
(10,4,13671,20000,1,0,0,1,1,0,0,0),
(10,4,13672,20000,1,0,0,1,1,0,0,0),
(10,4,13673,20000,1,0,0,1,1,0,0,0),
(10,4,13674,20000,1,0,0,1,1,0,0,0),
(10,4,13675,20000,1,0,0,1,1,0,0,0),
(10,4,13676,20000,1,0,0,1,1,0,0,0),
(10,4,13677,20000,1,0,0,1,1,0,0,0),
(10,4,13678,20000,1,0,0,1,1,0,0,0),
(10,4,13679,20000,1,0,0,1,1,0,0,0),
(10,4,13680,20000,1,0,0,1,1,0,0,0),
(10,4,13681,20000,1,0,0,1,1,0,0,0),
(10,4,13682,20000,1,0,0,1,1,0,0,0),
(10,4,13683,20000,1,0,0,1,1,0,0,0),
(10,4,13684,20000,1,0,0,1,1,0,0,0),
(10,4,13685,20000,1,0,0,1,1,0,0,0),
(10,4,13686,20000,1,0,0,1,1,0,0,0),
(10,4,13687,20000,1,0,0,1,1,0,0,0),
(10,4,13688,20000,1,0,0,1,1,0,0,0),
(10,4,13689,20000,1,0,0,1,1,0,0,0),
(10,4,13690,20000,1,0,0,1,1,0,0,0),
(10,4,13691,20000,1,0,0,1,1,0,0,0),
(10,4,15546,20000,1,0,0,1,1,0,0,0),
(10,4,15547,20000,1,0,0,1,1,0,0,0),
(10,4,15548,20000,1,0,0,1,1,0,0,0),
(10,4,15549,20000,1,0,0,1,1,0,0,0),
(10,4,16162,35000,1,0,0,1,1,0,0,0),
(10,4,16163,35000,1,0,0,1,1,0,0,0),
(10,4,16164,35000,1,0,0,1,1,0,0,0),
(10,4,16165,35000,1,0,0,1,1,0,0,0),
(10,4,16166,35000,1,0,0,1,1,0,0,0),
(10,4,16167,35000,1,0,0,1,1,0,0,0),
(10,4,16168,35000,1,0,0,1,1,0,0,0),
(10,4,16169,35000,1,0,0,1,1,0,0,0),
(10,4,16172,35000,1,0,0,1,1,0,0,0),
(10,4,16173,35000,1,0,0,1,1,0,0,0),
(10,4,16174,35000,1,0,0,1,1,0,0,0),
(10,4,16175,35000,1,0,0,1,1,0,0,0),
(10,4,16176,35000,1,0,0,1,1,0,0,0),
(10,4,16177,35000,1,0,0,1,1,0,0,0),
(10,4,16178,35000,1,0,0,1,1,0,0,0),
(10,4,16179,35000,1,0,0,1,1,0,0,0),
(10,4,16182,35000,1,0,0,1,1,0,0,0),
(10,4,16183,35000,1,0,0,1,1,0,0,0),
(10,4,16184,35000,1,0,0,1,1,0,0,0),
(10,4,16185,35000,1,0,0,1,1,0,0,0),
(10,4,16186,35000,1,0,0,1,1,0,0,0),
(10,4,16187,35000,1,0,0,1,1,0,0,0),
(10,4,16188,35000,1,0,0,1,1,0,0,0),
(10,4,16189,35000,1,0,0,1,1,0,0,0),
(10,4,16192,35000,1,0,0,1,1,0,0,0),
(10,4,16193,35000,1,0,0,1,1,0,0,0),
(10,4,16194,35000,1,0,0,1,1,0,0,0),
(10,4,16195,35000,1,0,0,1,1,0,0,0),
(10,4,16196,35000,1,0,0,1,1,0,0,0),
(10,4,16197,35000,1,0,0,1,1,0,0,0),
(10,4,16198,35000,1,0,0,1,1,0,0,0),
(10,4,16199,35000,1,0,0,1,1,0,0,0),
(10,4,16202,35000,1,0,0,1,1,0,0,0),
(10,4,16203,35000,1,0,0,1,1,0,0,0),
(10,4,16204,35000,1,0,0,1,1,0,0,0),
(10,4,16205,35000,1,0,0,1,1,0,0,0),
(10,4,16206,35000,1,0,0,1,1,0,0,0),
(10,4,16207,35000,1,0,0,1,1,0,0,0),
(10,4,16208,35000,1,0,0,1,1,0,0,0),
(10,4,16209,35000,1,0,0,1,1,0,0,0),
(10,4,16212,35000,1,0,0,1,1,0,0,0),
(10,4,16213,35000,1,0,0,1,1,0,0,0),
(10,4,16214,35000,1,0,0,1,1,0,0,0),
(10,4,16215,35000,1,0,0,1,1,0,0,0),
(10,4,16216,35000,1,0,0,1,1,0,0,0),
(10,4,16217,35000,1,0,0,1,1,0,0,0),
(10,4,16218,35000,1,0,0,1,1,0,0,0),
(10,4,16219,35000,1,0,0,1,1,0,0,0),
(10,4,16222,35000,1,0,0,1,1,0,0,0),
(10,4,16223,35000,1,0,0,1,1,0,0,0),
(10,4,16224,35000,1,0,0,1,1,0,0,0),
(10,4,16225,35000,1,0,0,1,1,0,0,0),
(10,4,16226,35000,1,0,0,1,1,0,0,0),
(10,4,16227,35000,1,0,0,1,1,0,0,0),
(10,4,16228,35000,1,0,0,1,1,0,0,0),
(10,4,16229,35000,1,0,0,1,1,0,0,0),
(10,4,16232,35000,1,0,0,1,1,0,0,0),
(10,4,16233,35000,1,0,0,1,1,0,0,0),
(10,4,16234,35000,1,0,0,1,1,0,0,0),
(10,4,16235,35000,1,0,0,1,1,0,0,0),
(10,4,16236,35000,1,0,0,1,1,0,0,0),
(10,4,16237,35000,1,0,0,1,1,0,0,0),
(10,4,16238,35000,1,0,0,1,1,0,0,0),
(10,4,16239,35000,1,0,0,1,1,0,0,0),
(10,4,16242,35000,1,0,0,1,1,0,0,0),
(10,4,16243,35000,1,0,0,1,1,0,0,0),
(10,4,16244,35000,1,0,0,1,1,0,0,0),
(10,4,16245,35000,1,0,0,1,1,0,0,0),
(10,4,16246,35000,1,0,0,1,1,0,0,0),
(10,4,16247,35000,1,0,0,1,1,0,0,0),
(10,4,16248,35000,1,0,0,1,1,0,0,0),
(10,4,16249,35000,1,0,0,1,1,0,0,0),
(10,4,16252,35000,1,0,0,1,1,0,0,0),
(10,4,16253,35000,1,0,0,1,1,0,0,0),
(10,4,16254,35000,1,0,0,1,1,0,0,0),
(10,4,16255,35000,1,0,0,1,1,0,0,0),
(10,4,16256,35000,1,0,0,1,1,0,0,0),
(10,4,16257,35000,1,0,0,1,1,0,0,0),
(10,4,16258,35000,1,0,0,1,1,0,0,0),
(10,4,16259,35000,1,0,0,1,1,0,0,0),
(10,4,16262,35000,1,0,0,1,1,0,0,0),
(10,4,16263,35000,1,0,0,1,1,0,0,0),
(10,4,16264,35000,1,0,0,1,1,0,0,0),
(10,4,16265,35000,1,0,0,1,1,0,0,0),
(10,4,16266,35000,1,0,0,1,1,0,0,0),
(10,4,16267,35000,1,0,0,1,1,0,0,0),
(10,4,16268,35000,1,0,0,1,1,0,0,0),
(10,4,16269,35000,1,0,0,1,1,0,0,0),
(10,4,16272,35000,1,0,0,1,1,0,0,0),
(10,4,16273,35000,1,0,0,1,1,0,0,0),
(10,4,16274,35000,1,0,0,1,1,0,0,0),
(10,4,16275,35000,1,0,0,1,1,0,0,0),
(10,4,16276,35000,1,0,0,1,1,0,0,0),
(10,4,16277,35000,1,0,0,1,1,0,0,0),
(10,4,16278,35000,1,0,0,1,1,0,0,0),
(10,4,16279,35000,1,0,0,1,1,0,0,0),
(10,4,16282,35000,1,0,0,1,1,0,0,0),
(10,4,16283,35000,1,0,0,1,1,0,0,0),
(10,4,16284,35000,1,0,0,1,1,0,0,0),
(10,4,16285,35000,1,0,0,1,1,0,0,0),
(10,4,16286,35000,1,0,0,1,1,0,0,0),
(10,4,16287,35000,1,0,0,1,1,0,0,0),
(10,4,16288,35000,1,0,0,1,1,0,0,0),
(10,4,16289,35000,1,0,0,1,1,0,0,0),
(10,4,16292,35000,1,0,0,1,1,0,0,0),
(10,4,16293,35000,1,0,0,1,1,0,0,0),
(10,4,16294,35000,1,0,0,1,1,0,0,0),
(10,4,16295,35000,1,0,0,1,1,0,0,0),
(10,4,16296,35000,1,0,0,1,1,0,0,0),
(10,4,16297,35000,1,0,0,1,1,0,0,0),
(10,4,16298,35000,1,0,0,1,1,0,0,0),
(10,4,16299,35000,1,0,0,1,1,0,0,0),
(10,8,14136,15000,1,0,0,1,1,0,0,0),
(10,8,14137,15000,1,0,0,1,1,0,0,0),
(10,8,14138,15000,1,0,0,1,1,0,0,0),
(10,8,14139,15000,1,0,0,1,1,0,0,0),
(10,8,14140,15000,1,0,0,1,1,0,0,0),
(10,8,14141,15000,1,0,0,1,1,0,0,0),
(10,8,14142,15000,1,0,0,1,1,0,0,0),
(10,8,14143,15000,1,0,0,1,1,0,0,0),
(10,8,14144,15000,1,0,0,1,1,0,0,0),
(10,8,14145,15000,1,0,0,1,1,0,0,0),
(10,8,14454,30000,1,0,0,1,1,0,0,0),
(10,8,14455,30000,1,0,0,1,1,0,0,0),
(10,8,14456,30000,1,0,0,1,1,0,0,0),
(10,8,14457,30000,1,0,0,1,1,0,0,0),
(10,8,14458,30000,1,0,0,1,1,0,0,0),
(10,8,14459,30000,1,0,0,1,1,0,0,0),
(10,8,14460,30000,1,0,0,1,1,0,0,0),
(10,8,14461,30000,1,0,0,1,1,0,0,0),
(10,8,14462,30000,1,0,0,1,1,0,0,0),
(10,8,14463,30000,1,0,0,1,1,0,0,0),
(10,8,12724,50000,1,0,0,1,1,0,0,0),
(10,8,12725,50000,1,0,0,1,1,0,0,0),
(10,8,12726,50000,1,0,0,1,1,0,0,0),
(10,8,12727,50000,1,0,0,1,1,0,0,0),
(10,8,12728,50000,1,0,0,1,1,0,0,0),
(10,8,12729,50000,1,0,0,1,1,0,0,0),
(10,8,12730,50000,1,0,0,1,1,0,0,0),
(10,8,12731,50000,1,0,0,1,1,0,0,0),
(10,8,12732,50000,1,0,0,1,1,0,0,0),
(10,8,12733,50000,1,0,0,1,1,0,0,0),
(10,8,12734,50000,1,0,0,1,1,0,0,0),
(10,8,12735,50000,1,0,0,1,1,0,0,0),
(10,8,12736,50000,1,0,0,1,1,0,0,0),
(10,8,12737,50000,1,0,0,1,1,0,0,0),
(10,8,12738,50000,1,0,0,1,1,0,0,0),
(10,8,12739,50000,1,0,0,1,1,0,0,0),
(10,8,12740,50000,1,0,0,1,1,0,0,0),
(10,8,12741,50000,1,0,0,1,1,0,0,0),
(10,8,12742,50000,1,0,0,1,1,0,0,0),
(10,8,12743,50000,1,0,0,1,1,0,0,0),
(10,8,12744,50000,1,0,0,1,1,0,0,0),
(10,8,12745,50000,1,0,0,1,1,0,0,0),
(10,8,12746,50000,1,0,0,1,1,0,0,0),
(10,8,12747,50000,1,0,0,1,1,0,0,0),
(10,8,12748,50000,1,0,0,1,1,0,0,0),
(10,8,12749,50000,1,0,0,1,1,0,0,0),
(10,8,12750,50000,1,0,0,1,1,0,0,0),
(10,8,12751,50000,1,0,0,1,1,0,0,0),
(10,8,12752,50000,1,0,0,1,1,0,0,0),
(10,8,12753,50000,1,0,0,1,1,0,0,0),
(10,8,15070,50000,1,0,0,1,1,0,0,0),
(10,8,15071,50000,1,0,0,1,1,0,0,0),
(10,8,15072,50000,1,0,0,1,1,0,0,0),
(10,8,15073,50000,1,0,0,1,1,0,0,0),
(10,8,15074,50000,1,0,0,1,1,0,0,0),
(10,8,15075,50000,1,0,0,1,1,0,0,0),
(10,8,15076,50000,1,0,0,1,1,0,0,0),
(10,8,15077,50000,1,0,0,1,1,0,0,0),
(10,8,15078,50000,1,0,0,1,1,0,0,0),
(10,8,15079,50000,1,0,0,1,1,0,0,0),
(10,8,15567,20000,1,0,0,1,1,0,0,0),
(10,8,15568,20000,1,0,0,1,1,0,0,0),
(10,8,15569,20000,1,0,0,1,1,0,0,0),
(10,8,15570,20000,1,0,0,1,1,0,0,0),
(10,8,15571,20000,1,0,0,1,1,0,0,0),
(10,8,15572,20000,1,0,0,1,1,0,0,0),
(10,8,15573,20000,1,0,0,1,1,0,0,0),
(10,8,15574,20000,1,0,0,1,1,0,0,0),
(10,8,15575,20000,1,0,0,1,1,0,0,0),
(10,8,15576,20000,1,0,0,1,1,0,0,0),
(10,8,15577,20000,1,0,0,1,1,0,0,0),
(10,8,15578,20000,1,0,0,1,1,0,0,0),
(10,8,15579,20000,1,0,0,1,1,0,0,0),
(10,8,15580,20000,1,0,0,1,1,0,0,0),
(10,8,15581,20000,1,0,0,1,1,0,0,0),
(10,8,15582,20000,1,0,0,1,1,0,0,0),
(10,8,15583,20000,1,0,0,1,1,0,0,0),
(10,8,15584,20000,1,0,0,1,1,0,0,0),
(10,8,15585,20000,1,0,0,1,1,0,0,0),
(10,8,15586,20000,1,0,0,1,1,0,0,0),
(10,8,15587,20000,1,0,0,1,1,0,0,0),
(10,8,15588,20000,1,0,0,1,1,0,0,0),
(10,8,15589,20000,1,0,0,1,1,0,0,0),
(10,8,15590,20000,1,0,0,1,1,0,0,0),
(10,8,15591,20000,1,0,0,1,1,0,0,0),
(10,8,15592,20000,1,0,0,1,1,0,0,0),
(10,8,15593,20000,1,0,0,1,1,0,0,0),
(10,8,15594,20000,1,0,0,1,1,0,0,0),
(10,8,15595,20000,1,0,0,1,1,0,0,0),
(10,8,15596,20000,1,0,0,1,1,0,0,0),
(10,8,15597,20000,1,0,0,1,1,0,0,0),
(10,8,15598,20000,1,0,0,1,1,0,0,0),
(10,8,15599,20000,1,0,0,1,1,0,0,0),
(10,8,15600,20000,1,0,0,1,1,0,0,0),
(10,8,15601,20000,1,0,0,1,1,0,0,0),
(10,8,15602,20000,1,0,0,1,1,0,0,0),
(10,8,15603,20000,1,0,0,1,1,0,0,0),
(10,8,15604,20000,1,0,0,1,1,0,0,0),
(10,8,15605,20000,1,0,0,1,1,0,0,0),
(10,8,15606,20000,1,0,0,1,1,0,0,0),
(10,8,15607,20000,1,0,0,1,1,0,0,0),
(10,8,15608,20000,1,0,0,1,1,0,0,0),
(10,8,15609,20000,1,0,0,1,1,0,0,0),
(10,8,15610,20000,1,0,0,1,1,0,0,0),
(10,8,15611,20000,1,0,0,1,1,0,0,0),
(10,8,15612,20000,1,0,0,1,1,0,0,0),
(10,8,15613,20000,1,0,0,1,1,0,0,0),
(10,8,15614,20000,1,0,0,1,1,0,0,0),
(10,8,15615,20000,1,0,0,1,1,0,0,0),
(10,8,15616,20000,1,0,0,1,1,0,0,0),
(10,8,15617,20000,1,0,0,1,1,0,0,0),
(10,8,15618,20000,1,0,0,1,1,0,0,0),
(10,8,15619,20000,1,0,0,1,1,0,0,0),
(10,8,15620,20000,1,0,0,1,1,0,0,0),
(10,8,15621,20000,1,0,0,1,1,0,0,0),
(10,8,15622,20000,1,0,0,1,1,0,0,0),
(10,8,15623,20000,1,0,0,1,1,0,0,0),
(10,8,15624,20000,1,0,0,1,1,0,0,0),
(10,8,15625,20000,1,0,0,1,1,0,0,0),
(10,8,15626,20000,1,0,0,1,1,0,0,0),
(10,8,15627,20000,1,0,0,1,1,0,0,0),
(10,8,15628,20000,1,0,0,1,1,0,0,0),
(10,8,15629,20000,1,0,0,1,1,0,0,0),
(10,8,15630,20000,1,0,0,1,1,0,0,0),
(10,8,15631,20000,1,0,0,1,1,0,0,0),
(10,8,15632,20000,1,0,0,1,1,0,0,0),
(10,8,15633,20000,1,0,0,1,1,0,0,0),
(10,8,15634,20000,1,0,0,1,1,0,0,0),
(10,8,15635,20000,1,0,0,1,1,0,0,0),
(10,8,15636,20000,1,0,0,1,1,0,0,0),
(10,8,15637,20000,1,0,0,1,1,0,0,0),
(10,8,15638,20000,1,0,0,1,1,0,0,0),
(10,8,15639,20000,1,0,0,1,1,0,0,0),
(10,8,15640,20000,1,0,0,1,1,0,0,0),
(10,8,15641,20000,1,0,0,1,1,0,0,0),
(10,8,15642,20000,1,0,0,1,1,0,0,0),
(10,8,15643,20000,1,0,0,1,1,0,0,0),
(10,8,15644,20000,1,0,0,1,1,0,0,0),
(10,8,15645,20000,1,0,0,1,1,0,0,0),
(10,8,15646,20000,1,0,0,1,1,0,0,0),
(10,8,15647,20000,1,0,0,1,1,0,0,0),
(10,8,15648,20000,1,0,0,1,1,0,0,0),
(10,8,15649,20000,1,0,0,1,1,0,0,0),
(10,8,15650,20000,1,0,0,1,1,0,0,0),
(10,8,15651,20000,1,0,0,1,1,0,0,0),
(10,8,15652,20000,1,0,0,1,1,0,0,0),
(10,8,15653,20000,1,0,0,1,1,0,0,0),
(10,8,15654,20000,1,0,0,1,1,0,0,0),
(10,8,15655,20000,1,0,0,1,1,0,0,0),
(10,8,15656,20000,1,0,0,1,1,0,0,0),
(10,8,15657,20000,1,0,0,1,1,0,0,0),
(10,8,15658,20000,1,0,0,1,1,0,0,0),
(10,8,15659,20000,1,0,0,1,1,0,0,0),
(10,8,15660,20000,1,0,0,1,1,0,0,0),
(10,8,15661,20000,1,0,0,1,1,0,0,0),
(10,8,15662,20000,1,0,0,1,1,0,0,0),
(10,8,15663,20000,1,0,0,1,1,0,0,0),
(10,8,15664,20000,1,0,0,1,1,0,0,0),
(10,8,15665,20000,1,0,0,1,1,0,0,0),
(10,8,15666,20000,1,0,0,1,1,0,0,0),
(10,8,15667,20000,1,0,0,1,1,0,0,0),
(10,8,15668,20000,1,0,0,1,1,0,0,0),
(10,8,15669,20000,1,0,0,1,1,0,0,0),
(10,8,15670,20000,1,0,0,1,1,0,0,0),
(10,8,15671,20000,1,0,0,1,1,0,0,0),
(10,8,15672,20000,1,0,0,1,1,0,0,0),
(10,8,15673,20000,1,0,0,1,1,0,0,0),
(10,8,15674,20000,1,0,0,1,1,0,0,0),
(10,8,15675,20000,1,0,0,1,1,0,0,0),
(10,8,15676,20000,1,0,0,1,1,0,0,0),
(10,8,15677,20000,1,0,0,1,1,0,0,0),
(10,8,15678,20000,1,0,0,1,1,0,0,0),
(10,8,15679,20000,1,0,0,1,1,0,0,0),
(10,8,15680,20000,1,0,0,1,1,0,0,0),
(10,8,15681,20000,1,0,0,1,1,0,0,0),
(10,8,15682,20000,1,0,0,1,1,0,0,0),
(10,8,15683,20000,1,0,0,1,1,0,0,0),
(10,8,15684,20000,1,0,0,1,1,0,0,0),
(10,8,15685,20000,1,0,0,1,1,0,0,0),
(10,8,15686,20000,1,0,0,1,1,0,0,0),
(10,8,15687,20000,1,0,0,1,1,0,0,0),
(10,8,15688,20000,1,0,0,1,1,0,0,0),
(10,8,15689,20000,1,0,0,1,1,0,0,0),
(10,8,15690,20000,1,0,0,1,1,0,0,0),
(10,8,15691,20000,1,0,0,1,1,0,0,0),
(10,8,15692,20000,1,0,0,1,1,0,0,0),
(10,8,15693,20000,1,0,0,1,1,0,0,0),
(10,8,15694,20000,1,0,0,1,1,0,0,0),
(10,8,15695,20000,1,0,0,1,1,0,0,0),
(10,8,15696,20000,1,0,0,1,1,0,0,0),
(10,8,15697,20000,1,0,0,1,1,0,0,0),
(10,8,15698,20000,1,0,0,1,1,0,0,0),
(10,8,15699,20000,1,0,0,1,1,0,0,0),
(10,8,15700,20000,1,0,0,1,1,0,0,0),
(10,8,15701,20000,1,0,0,1,1,0,0,0),
(10,8,15702,20000,1,0,0,1,1,0,0,0),
(10,8,15703,20000,1,0,0,1,1,0,0,0),
(10,8,15704,20000,1,0,0,1,1,0,0,0),
(10,8,15705,20000,1,0,0,1,1,0,0,0),
(10,8,15706,20000,1,0,0,1,1,0,0,0),
(10,8,15707,20000,1,0,0,1,1,0,0,0),
(10,8,15708,20000,1,0,0,1,1,0,0,0),
(10,8,15709,20000,1,0,0,1,1,0,0,0),
(10,8,15710,20000,1,0,0,1,1,0,0,0),
(10,8,15711,20000,1,0,0,1,1,0,0,0),
(10,8,15712,20000,1,0,0,1,1,0,0,0),
(10,8,15713,20000,1,0,0,1,1,0,0,0),
(10,8,15714,20000,1,0,0,1,1,0,0,0),
(10,8,15715,20000,1,0,0,1,1,0,0,0),
(10,8,15716,20000,1,0,0,1,1,0,0,0),
(10,8,15717,20000,1,0,0,1,1,0,0,0),
(10,8,15718,20000,1,0,0,1,1,0,0,0),
(10,8,15719,20000,1,0,0,1,1,0,0,0),
(10,8,15720,20000,1,0,0,1,1,0,0,0),
(10,8,15721,20000,1,0,0,1,1,0,0,0),
(10,8,15722,20000,1,0,0,1,1,0,0,0),
(10,8,15723,20000,1,0,0,1,1,0,0,0),
(10,8,15724,20000,1,0,0,1,1,0,0,0),
(10,8,15725,20000,1,0,0,1,1,0,0,0),
(10,8,15726,20000,1,0,0,1,1,0,0,0),
(10,8,15727,20000,1,0,0,1,1,0,0,0),
(10,8,15728,20000,1,0,0,1,1,0,0,0),
(10,8,15729,20000,1,0,0,1,1,0,0,0),
(10,8,15730,20000,1,0,0,1,1,0,0,0),
(10,8,15731,20000,1,0,0,1,1,0,0,0),
(10,8,15732,20000,1,0,0,1,1,0,0,0),
(10,8,15733,20000,1,0,0,1,1,0,0,0),
(10,8,15734,20000,1,0,0,1,1,0,0,0),
(10,8,15735,20000,1,0,0,1,1,0,0,0),
(10,8,15736,20000,1,0,0,1,1,0,0,0),
(10,8,15737,20000,1,0,0,1,1,0,0,0),
(10,8,15738,20000,1,0,0,1,1,0,0,0),
(10,8,15739,20000,1,0,0,1,1,0,0,0),
(10,8,15740,20000,1,0,0,1,1,0,0,0),
(10,8,15741,20000,1,0,0,1,1,0,0,0),
(10,8,15742,20000,1,0,0,1,1,0,0,0),
(10,8,15743,20000,1,0,0,1,1,0,0,0),
(10,8,15744,20000,1,0,0,1,1,0,0,0),
(10,8,15745,20000,1,0,0,1,1,0,0,0),
(10,8,15746,20000,1,0,0,1,1,0,0,0),
(10,8,15747,20000,1,0,0,1,1,0,0,0),
(10,8,15748,20000,1,0,0,1,1,0,0,0),
(10,8,15749,20000,1,0,0,1,1,0,0,0),
(10,8,15750,20000,1,0,0,1,1,0,0,0),
(10,8,15751,20000,1,0,0,1,1,0,0,0),
(10,8,15752,20000,1,0,0,1,1,0,0,0),
(10,8,15753,20000,1,0,0,1,1,0,0,0),
(10,8,15754,20000,1,0,0,1,1,0,0,0),
(10,8,15755,20000,1,0,0,1,1,0,0,0),
(10,8,15756,20000,1,0,0,1,1,0,0,0),
(10,8,15757,20000,1,0,0,1,1,0,0,0),
(10,8,15758,20000,1,0,0,1,1,0,0,0),
(10,8,15759,20000,1,0,0,1,1,0,0,0),
(10,8,15760,20000,1,0,0,1,1,0,0,0),
(10,8,15761,20000,1,0,0,1,1,0,0,0),
(10,8,15762,20000,1,0,0,1,1,0,0,0),
(10,8,15763,20000,1,0,0,1,1,0,0,0),
(10,8,15764,20000,1,0,0,1,1,0,0,0),
(10,8,15765,20000,1,0,0,1,1,0,0,0),
(10,8,15766,20000,1,0,0,1,1,0,0,0),
(10,8,15919,20000,1,0,0,1,1,0,0,0),
(10,8,15920,20000,1,0,0,1,1,0,0,0),
(10,8,15921,20000,1,0,0,1,1,0,0,0),
(10,8,15922,20000,1,0,0,1,1,0,0,0),
(10,8,15923,20000,1,0,0,1,1,0,0,0),
(10,8,15924,20000,1,0,0,1,1,0,0,0),
(10,8,15925,20000,1,0,0,1,1,0,0,0),
(10,8,15926,20000,1,0,0,1,1,0,0,0),
(10,8,15927,20000,1,0,0,1,1,0,0,0),
(10,8,15928,20000,1,0,0,1,1,0,0,0),
(10,8,15929,20000,1,0,0,1,1,0,0,0),
(10,8,15930,20000,1,0,0,1,1,0,0,0),
(10,8,15931,20000,1,0,0,1,1,0,0,0),
(10,8,15932,20000,1,0,0,1,1,0,0,0),
(10,8,15933,20000,1,0,0,1,1,0,0,0),
(10,8,15934,20000,1,0,0,1,1,0,0,0),
(10,8,15935,20000,1,0,0,1,1,0,0,0),
(10,8,15936,20000,1,0,0,1,1,0,0,0),
(10,8,15937,20000,1,0,0,1,1,0,0,0),
(10,8,15938,20000,1,0,0,1,1,0,0,0),
(10,8,15939,20000,1,0,0,1,1,0,0,0),
(10,8,15940,20000,1,0,0,1,1,0,0,0),
(10,8,15941,20000,1,0,0,1,1,0,0,0),
(10,8,15942,20000,1,0,0,1,1,0,0,0),
(10,8,15943,20000,1,0,0,1,1,0,0,0),
(10,8,15944,20000,1,0,0,1,1,0,0,0),
(10,8,15945,20000,1,0,0,1,1,0,0,0),
(10,8,15946,20000,1,0,0,1,1,0,0,0),
(10,8,15947,20000,1,0,0,1,1,0,0,0),
(10,8,15948,20000,1,0,0,1,1,0,0,0),
(10,8,15949,20000,1,0,0,1,1,0,0,0),
(10,8,15950,20000,1,0,0,1,1,0,0,0),
(10,8,15951,20000,1,0,0,1,1,0,0,0),
(10,8,15952,20000,1,0,0,1,1,0,0,0),
(10,8,15953,20000,1,0,0,1,1,0,0,0),
(10,8,15954,20000,1,0,0,1,1,0,0,0),
(10,8,15955,20000,1,0,0,1,1,0,0,0),
(10,8,15956,20000,1,0,0,1,1,0,0,0),
(10,8,15957,20000,1,0,0,1,1,0,0,0),
(10,8,15958,20000,1,0,0,1,1,0,0,0),
(10,8,15959,20000,1,0,0,1,1,0,0,0),
(10,8,15960,20000,1,0,0,1,1,0,0,0),
(10,8,15961,20000,1,0,0,1,1,0,0,0),
(10,8,15962,20000,1,0,0,1,1,0,0,0),
(10,8,15963,20000,1,0,0,1,1,0,0,0),
(10,8,15964,20000,1,0,0,1,1,0,0,0),
(10,8,15965,20000,1,0,0,1,1,0,0,0),
(10,8,15966,20000,1,0,0,1,1,0,0,0),
(10,8,15967,20000,1,0,0,1,1,0,0,0),
(10,8,15968,20000,1,0,0,1,1,0,0,0),
(10,7,13506,250,1,0,0,1,1,0,50,0),
(10,7,15011,250,1,0,0,1,1,0,50,0),
(10,7,13636,250,1,0,0,1,1,0,50,0),
(10,7,15022,250,1,0,0,1,1,0,50,0),
(10,8,4407,1000,1,0,0,1,1,0,0,0),
(10,8,4408,1000,1,0,0,1,1,0,0,0),
(10,8,4409,1000,1,0,0,1,1,0,0,0),
(10,8,4410,1000,1,0,0,1,1,0,0,0),
(10,8,4411,1000,1,0,0,1,1,0,0,0),
(10,8,4412,1000,1,0,0,1,1,0,0,0),
(10,8,4413,1000,1,0,0,1,1,0,0,0),
(10,8,4414,1000,1,0,0,1,1,0,0,0),
(10,8,4823,1000,1,0,0,1,1,0,0,0),
(10,8,4824,1000,1,0,0,1,1,0,0,0),
(10,8,4825,1000,1,0,0,1,1,0,0,0),
(10,8,4826,1000,1,0,0,1,1,0,0,0),
(10,8,4827,1000,1,0,0,1,1,0,0,0),
(10,8,4828,1000,1,0,0,1,1,0,0,0),
(10,8,4829,1000,1,0,0,1,1,0,0,0),
(10,8,4830,1000,1,0,0,1,1,0,0,0),
(10,8,5194,1000,1,0,0,1,1,0,0,0),
(10,8,5195,1000,1,0,0,1,1,0,0,0),
(10,8,5196,1000,1,0,0,1,1,0,0,0),
(10,8,5197,1000,1,0,0,1,1,0,0,0),
(10,8,5198,1000,1,0,0,1,1,0,0,0),
(10,8,5199,1000,1,0,0,1,1,0,0,0),
(10,8,5200,1000,1,0,0,1,1,0,0,0),
(10,8,5201,1000,1,0,0,1,1,0,0,0),
(10,8,13630,1000,1,0,0,1,1,0,0,0),
(10,8,13631,1000,1,0,0,1,1,0,0,0),
(10,8,13632,1000,1,0,0,1,1,0,0,0),
(10,8,13633,1000,1,0,0,1,1,0,0,0),
(10,8,13634,1000,1,0,0,1,1,0,0,0),
(10,8,13635,1000,1,0,0,1,1,0,0,0),
(10,8,15103,1000,1,0,0,1,1,0,0,0),
(10,8,15104,1000,1,0,0,1,1,0,0,0),
(10,8,15105,1000,1,0,0,1,1,0,0,0),
(10,8,15106,1000,1,0,0,1,1,0,0,0),
(10,8,15107,1000,1,0,0,1,1,0,0,0),
(10,8,15108,1000,1,0,0,1,1,0,0,0),
(10,8,16459,1000,1,0,0,1,1,0,0,0),
(10,8,16460,1000,1,0,0,1,1,0,0,0),
(10,8,16461,1000,1,0,0,1,1,0,0,0),
(10,8,16462,1000,1,0,0,1,1,0,0,0),
(10,8,16463,1000,1,0,0,1,1,0,0,0),
(10,8,16464,1000,1,0,0,1,1,0,0,0),
(10,8,16465,1000,1,0,0,1,1,0,0,0),
(10,8,16466,1000,1,0,0,1,1,0,0,0),
(10,8,16467,1000,1,0,0,1,1,0,0,0),
(10,8,16468,1000,1,0,0,1,1,0,0,0),
(10,8,16469,1000,1,0,0,1,1,0,0,0),
(10,8,16470,1000,1,0,0,1,1,0,0,0),
(10,8,16471,1000,1,0,0,1,1,0,0,0),
(10,8,16472,1000,1,0,0,1,1,0,0,0),
(10,8,13416,1000,1,0,0,1,1,0,0,0),
(10,8,13417,1000,1,0,0,1,1,0,0,0),
(10,8,13418,1000,1,0,0,1,1,0,0,0),
(10,8,13419,1000,1,0,0,1,1,0,0,0),
(10,8,13420,1000,1,0,0,1,1,0,0,0),
(10,8,14283,1000,1,0,0,1,1,0,0,0),
(10,8,14284,1000,1,0,0,1,1,0,0,0),
(10,8,14285,1000,1,0,0,1,1,0,0,0),
(10,8,14286,1000,1,0,0,1,1,0,0,0),
(10,8,13182,1000,1,0,0,1,1,0,0,0),
(10,8,13507,1000,1,0,0,1,1,0,0,0),
(10,8,13981,1000,1,0,0,1,1,0,0,0),
(10,8,14744,1000,1,0,0,1,1,0,0,0),
(10,8,14893,1000,1,0,0,1,1,0,0,0),
(10,8,15785,1000,1,0,0,1,1,0,0,0),
(10,8,16419,1000,1,0,0,1,1,0,0,0),
(10,8,11470,1000,1,0,0,1,1,0,0,0),
(10,8,12512,1000,1,0,0,1,1,0,0,0),
(10,8,12884,1000,1,0,0,1,1,0,0,0),
(10,8,12513,1000,1,0,0,1,1,0,0,0),
(10,8,12514,1000,1,0,0,1,1,0,0,0),
(10,8,12515,1000,1,0,0,1,1,0,0,0),
(10,8,12516,1000,1,0,0,1,1,0,0,0),
(10,8,12517,1000,1,0,0,1,1,0,0,0),
(10,8,12518,1000,1,0,0,1,1,0,0,0),
(10,8,12519,1000,1,0,0,1,1,0,0,0),
(10,8,12520,1000,1,0,0,1,1,0,0,0),
(10,8,12521,1000,1,0,0,1,1,0,0,0),
(10,8,8179,1000,1,0,0,1,1,0,0,0),
(10,8,9704,1000,1,0,0,1,1,0,0,0),
(10,8,15448,1000,1,0,0,1,1,0,0,0),
(10,8,11162,1000,1,0,0,1,1,0,0,0),
(10,8,11163,1000,1,0,0,1,1,0,0,0),
(10,8,11164,1000,1,0,0,1,1,0,0,0),
(10,8,11165,1000,1,0,0,1,1,0,0,0),
(10,8,11661,1000,1,0,0,1,1,0,0,0),
(10,8,11662,1000,1,0,0,1,1,0,0,0),
(10,8,14639,1000,1,0,0,1,1,0,0,0),
(10,7,15774,3000,1,0,0,1,1,0,100,0),
(10,7,15775,3000,1,0,0,1,1,0,100,0),
(10,7,11420,3000,1,0,0,1,1,0,100,0),
(10,7,14704,3000,1,0,0,1,1,0,100,0),
(10,7,13177,3000,1,0,0,1,1,0,100,0),
(10,7,14191,3000,1,0,0,1,1,0,100,0),
(10,7,13449,3000,1,0,0,1,1,0,100,0),
(10,7,14192,3000,1,0,0,1,1,0,100,0),
(10,7,15772,3000,1,0,0,1,1,0,100,0),
(10,7,13791,3000,1,0,0,1,1,0,100,0),
(10,7,14006,3000,1,0,0,1,1,0,100,0),
(10,7,15768,3000,1,0,0,1,1,0,100,0),
(10,7,14069,3000,1,0,0,1,1,0,100,0),
(10,7,14124,3000,1,0,0,1,1,0,100,0),
(10,7,15507,3000,1,0,0,1,1,0,100,0),
(10,7,15508,3000,1,0,0,1,1,0,100,0),
(10,7,14855,3000,1,0,0,1,1,0,100,0),
(10,7,14894,3000,1,0,0,1,1,0,100,0),
(10,7,16444,3000,1,0,0,1,1,0,100,0),
(10,7,16445,3000,1,0,0,1,1,0,100,0),
(10,7,12509,3000,1,0,0,1,1,0,100,0),
(10,7,14126,3000,1,0,0,1,1,0,100,0),
(10,7,15062,3000,1,0,0,1,1,0,100,0),
(10,7,15063,3000,1,0,0,1,1,0,100,0),
(10,7,14891,3000,1,0,0,1,1,0,100,0),
(10,7,14895,3000,1,0,0,1,1,0,100,0),
(10,7,14091,3000,1,0,0,1,1,0,100,0),
(10,7,14092,3000,1,0,0,1,1,0,100,0),
(10,7,14501,3000,1,0,0,1,1,0,100,0),
(10,7,14506,3000,1,0,0,1,1,0,100,0),
(10,7,15285,3000,1,0,0,1,1,0,100,0),
(10,7,15286,3000,1,0,0,1,1,0,100,0),
(10,7,16442,3000,1,0,0,1,1,0,100,0),
(10,7,16443,3000,1,0,0,1,1,0,100,0),
(10,7,15027,3000,1,0,0,1,1,0,100,0),
(10,7,15028,3000,1,0,0,1,1,0,100,0),
(10,7,13453,3000,1,0,0,1,1,0,100,0),
(10,7,14193,3000,1,0,0,1,1,0,100,0),
(10,7,13178,3000,1,0,0,1,1,0,100,0),
(10,7,14194,3000,1,0,0,1,1,0,100,0),
(10,7,16454,3000,1,0,0,1,1,0,100,0),
(10,7,16455,3000,1,0,0,1,1,0,100,0),
(10,7,15030,3000,1,0,0,1,1,0,100,0),
(10,7,15031,3000,1,0,0,1,1,0,100,0),
(10,7,13790,3000,1,0,0,1,1,0,100,0),
(10,7,14005,3000,1,0,0,1,1,0,100,0),
(10,7,14406,3000,1,0,0,1,1,0,100,0),
(10,7,14413,3000,1,0,0,1,1,0,100,0),
(10,7,16448,3000,1,0,0,1,1,0,100,0),
(10,7,16449,3000,1,0,0,1,1,0,100,0),
(10,7,12872,3000,1,0,0,1,1,0,100,0),
(10,7,14187,3000,1,0,0,1,1,0,100,0),
(10,7,14125,3000,1,0,0,1,1,0,100,0),
(10,7,14500,3000,1,0,0,1,1,0,100,0),
(10,7,14505,3000,1,0,0,1,1,0,100,0),
(10,7,15118,3000,1,0,0,1,1,0,100,0),
(10,7,15119,3000,1,0,0,1,1,0,100,0),
(10,7,14662,3000,1,0,0,1,1,0,100,0),
(10,7,14663,3000,1,0,0,1,1,0,100,0),
(10,7,15771,3000,1,0,0,1,1,0,100,0),
(10,7,9700,3000,1,0,0,1,1,0,100,0),
(10,7,14498,3000,1,0,0,1,1,0,100,0),
(10,7,14913,3000,1,0,0,1,1,0,100,0),
(10,7,14914,3000,1,0,0,1,1,0,100,0),
(10,7,13508,3000,1,0,0,1,1,0,100,0),
(10,7,15115,3000,1,0,0,1,1,0,100,0),
(10,7,15116,3000,1,0,0,1,1,0,100,0),
(10,7,15113,3000,1,0,0,1,1,0,100,0),
(10,7,15114,3000,1,0,0,1,1,0,100,0),
(10,7,15222,3000,1,0,0,1,1,0,100,0),
(10,7,15223,3000,1,0,0,1,1,0,100,0),
(10,7,10750,3000,1,0,0,1,1,0,100,0),
(10,7,14705,3000,1,0,0,1,1,0,100,0),
(10,7,15027,3000,1,0,0,1,1,0,100,0),
(10,7,15028,3000,1,0,0,1,1,0,100,0),
(10,7,10380,3000,1,0,0,1,1,0,100,0),
(10,7,15060,3000,1,0,0,1,1,0,100,0),
(10,7,13963,3000,1,0,0,1,1,0,100,0),
(10,7,14026,3000,1,0,0,1,1,0,100,0),
(10,7,13964,3000,1,0,0,1,1,0,100,0),
(10,7,14027,3000,1,0,0,1,1,0,100,0),
(10,7,15064,3000,1,0,0,1,1,0,100,0),
(10,7,15065,3000,1,0,0,1,1,0,100,0),
(10,7,15524,3000,1,0,0,1,1,0,100,0),
(10,7,15525,3000,1,0,0,1,1,0,100,0),
(10,7,16450,3000,1,0,0,1,1,0,100,0),
(10,7,16451,3000,1,0,0,1,1,0,100,0),
(10,7,16344,3000,1,0,0,1,1,0,100,0),
(10,7,16345,3000,1,0,0,1,1,0,100,0),
(10,7,16342,3000,1,0,0,1,1,0,100,0),
(10,7,16343,3000,1,0,0,1,1,0,100,0),
(10,7,15220,3000,1,0,0,1,1,0,100,0),
(10,7,15221,3000,1,0,0,1,1,0,100,0),
(10,7,15066,3000,1,0,0,1,1,0,100,0),
(10,7,15067,3000,1,0,0,1,1,0,100,0),
(10,7,14089,3000,1,0,0,1,1,0,100,0),
(10,7,14090,3000,1,0,0,1,1,0,100,0),
(10,7,14195,3000,1,0,0,1,1,0,100,0),
(10,7,14196,3000,1,0,0,1,1,0,100,0),
(10,7,13965,3000,1,0,0,1,1,0,100,0),
(10,7,14028,3000,1,0,0,1,1,0,100,0),
(10,7,13508,3000,1,0,0,1,1,0,100,0),
(10,7,13962,3000,1,0,0,1,1,0,100,0),
(10,7,14314,3000,1,0,0,1,1,0,100,0),
(10,7,13404,3000,1,0,0,1,1,0,100,0),
(10,7,14188,3000,1,0,0,1,1,0,100,0),
(10,7,14032,3000,1,0,0,1,1,0,100,0),
(10,7,13960,3000,1,0,0,1,1,0,100,0),
(10,7,15819,3000,1,0,0,1,1,0,100,0),
(10,7,15820,3000,1,0,0,1,1,0,100,0),
(10,7,10750,3000,1,0,0,1,1,0,100,0),
(10,7,14705,3000,1,0,0,1,1,0,100,0),
(10,7,14407,3000,1,0,0,1,1,0,100,0),
(10,7,14414,3000,1,0,0,1,1,0,100,0),
(10,7,16352,3000,1,0,0,1,1,0,100,0),
(10,7,16353,3000,1,0,0,1,1,0,100,0),
(10,7,14502,3000,1,0,0,1,1,0,100,0),
(10,7,14507,3000,1,0,0,1,1,0,100,0),
(10,7,10811,3000,1,0,0,1,1,0,100,0),
(10,7,15061,3000,1,0,0,1,1,0,100,0),
(10,7,15823,3000,1,0,0,1,1,0,100,0),
(10,7,15824,3000,1,0,0,1,1,0,100,0),
(10,7,15224,3000,1,0,0,1,1,0,100,0),
(10,7,15225,3000,1,0,0,1,1,0,100,0),
(10,7,14503,3000,1,0,0,1,1,0,100,0),
(10,7,14510,3000,1,0,0,1,1,0,100,0),
(10,7,15776,3000,1,0,0,1,1,0,100,0),
(10,7,15777,3000,1,0,0,1,1,0,100,0),
(10,7,15821,3000,1,0,0,1,1,0,100,0),
(10,7,15822,3000,1,0,0,1,1,0,100,0),
(10,7,14198,3000,1,0,0,1,1,0,100,0),
(10,7,14197,3000,1,0,0,1,1,0,100,0),
(10,7,16446,3000,1,0,0,1,1,0,100,0),
(10,7,16447,3000,1,0,0,1,1,0,100,0),
(10,7,14905,3000,1,0,0,1,1,0,100,0),
(10,7,14907,3000,1,0,0,1,1,0,100,0),
(10,7,14904,3000,1,0,0,1,1,0,100,0),
(10,7,14906,3000,1,0,0,1,1,0,100,0),
(10,7,14659,3000,1,0,0,1,1,0,100,0),
(10,7,14660,3000,1,0,0,1,1,0,100,0),
(10,7,13326,3000,1,0,0,1,1,0,100,0),
(10,7,14416,3000,1,0,0,1,1,0,100,0),
(10,7,13450,3000,1,0,0,1,1,0,100,0),
(10,7,14031,3000,1,0,0,1,1,0,100,0),
(10,7,16492,3000,1,0,0,1,1,0,100,0),
(10,7,16493,3000,1,0,0,1,1,0,100,0),
(10,7,14299,500,1,0,0,1,1,0,20,0),
(10,7,14389,500,1,0,0,1,1,0,20,0),
(10,7,15177,500,1,0,0,1,1,0,20,0),
(10,7,14537,500,1,0,0,1,1,0,20,0),
(10,7,14758,500,1,0,0,1,1,0,20,0),
(10,7,14854,500,1,0,0,1,1,0,20,0),
(10,7,13974,500,1,0,0,1,1,0,20,0),
(10,7,15021,500,1,0,0,1,1,0,20,0),
(10,7,15111,500,1,0,0,1,1,0,20,0),
(10,7,15226,500,1,0,0,1,1,0,20,0),
(10,7,15773,500,1,0,0,1,1,0,20,0),
(10,7,15825,500,1,0,0,1,1,0,20,0),
(10,7,15827,500,1,0,0,1,1,0,20,0),
(10,7,16340,500,1,0,0,1,1,0,20,0),
(10,7,16341,500,1,0,0,1,1,0,20,0),
(10,7,16457,500,1,0,0,1,1,0,20,0),
(10,7,16458,500,1,0,0,1,1,0,20,0),
(10,7,11698,250,1,0,0,1,1,0,50,0),
(10,7,11700,250,1,0,0,1,1,0,50,0),
(10,8,9958,20,1,0,0,1,1,0,0,999),
(10,8,11284,15,1,0,0,1,1,0,0,0),
(10,8,11285,15,1,0,0,1,1,0,0,0),
(10,8,11286,15,1,0,0,1,1,0,0,0),
(10,8,10356,500,1,0,0,1,1,0,0,0),
(10,8,12511,500,1,0,0,1,1,0,0,0),
(10,8,13238,500,1,0,0,1,1,0,0,0),
(10,8,11383,10,1,0,0,1,1,0,0,0),
(10,8,11382,10,1,0,0,1,1,0,0,0),
(10,8,11381,10,1,0,0,1,1,0,0,0),
(10,7,16348,3000,1,0,0,1,1,0,100,0),
(10,8,11386,10,1,0,0,1,1,0,0,0),
(10,8,14444,10,1,0,0,1,1,0,0,0),
(10,8,14443,10,1,0,0,1,1,0,0,0),
(10,8,14445,10,1,0,0,1,1,0,0,0),
(10,8,15068,500,1,0,0,1,1,0,20,0),
(10,7,16532,1000,1,0,0,1,1,0,0,0),
(10,7,14368,3000,1,0,0,1,1,0,50,0),
(10,7,1622,3000,1,0,0,1,1,0,0,0),
(10,7,16456,500,1,0,0,1,1,0,0,0);
END;

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

@@ -106,7 +106,7 @@ func PaddedString(x string, size uint, t bool) []byte {
e := japanese.ShiftJIS.NewEncoder()
xt, _, err := transform.String(e, x)
if err != nil {
panic(err)
return make([]byte, size)
}
x = xt
}
@@ -120,7 +120,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 {

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

@@ -0,0 +1,13 @@
package token
import "math/rand"
// 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[rand.Intn(len(chars))]
}
return string(b)
}

View File

@@ -1,84 +1,135 @@
{
"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 (Patch 1)!<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,
"FeaturedWeapons": 1,
"HideLoginNotice": true,
"LoginNotice": "<BODY><CENTER><SIZE_3><C_4>Welcome to Erupe SU9.1!<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": "",
"ScreenshotAPIURL": "",
"DeleteOnSaveCorruption": false,
"DevMode": true,
"DevModeOptions": {
"AutoCreateAccount": true,
"CleanDB": false,
"MaxLauncherHR": false,
"LogInboundMessages": false,
"LogOutboundMessages": false,
"MaxHexdumpLength": 256,
"Event": 0,
"DivaEvent": 0,
"FestaEvent": 0,
"FestaEvent": -1,
"TournamentEvent": 0,
"MezFesEvent": true,
"MezFesAlt": false,
"DisableMailItems": true,
"DisableTokenCheck": false,
"QuestDebugTools": false,
"SaveDumps": {
"Enabled": true,
"OutputDir": "savedata"
}
},
"discord": {
"enabled": false,
"bottoken": "",
"realtimeChannelID": "",
"serverId": "",
"devRoles": [],
"devMode": false
"Discord": {
"Enabled": false,
"BotToken": "",
"RealtimeChannelID": ""
},
"database": {
"host": "localhost",
"port": 5432,
"user": "postgres",
"password": "",
"database": "erupe"
"Commands": [
{
"Name": "Rights",
"Enabled": false,
"Prefix": "!rights"
}, {
"Name": "Raviente",
"Enabled": true,
"Prefix": "!ravi"
}, {
"Name": "Teleport",
"Enabled": false,
"Prefix": "!tele"
}, {
"Name": "Reload",
"Enabled": true,
"Prefix": "!reload"
}, {
"Name": "KeyQuest",
"Enabled": false,
"Prefix": "!kqf"
}, {
"Name": "Course",
"Enabled": true,
"Prefix": "!course"
}
],
"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": "OfficialCafe", "Enabled": true},
{"Name": "HLRenewing", "Enabled": true},
{"Name": "EXRenewing", "Enabled": true}
],
"Database": {
"Host": "localhost",
"Port": 5432,
"User": "postgres",
"Password": "",
"Database": "erupe"
},
"launcher": {
"port": 80,
"UseOriginalLauncherFiles": false
"Sign": {
"Enabled": true,
"Port": 53312
},
"sign": {
"port": 53312
"SignV2": {
"Enabled": false,
"Port": 8080
},
"entrance": {
"port": 53310,
"entries": [
"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,43 +1,57 @@
package config
import (
"fmt"
"log"
"net"
"os"
"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
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
FeaturedWeapons int // Number of Active Feature weapons to generate daily
HideLoginNotice bool // Hide the Erupe notice on login
LoginNotice string // MHFML string of the login notice displayed
PatchServerManifest string // Manifest patch server override
PatchServerFile string // File patch server override
ScreenshotAPIURL string // Destination for screenshots uploaded to BBS
DeleteOnSaveCorruption bool // Attempts to save corrupted data will flag the save for deletion
DevMode bool
DevModeOptions DevModeOptions
Discord Discord
Commands []Command
Courses []Course
Database Database
Launcher Launcher
Sign Sign
SignV2 SignV2
Channel Channel
Entrance Entrance
}
// 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
DisableTokenCheck bool // Disables checking login token exists in the DB (security risk!)
DisableMailItems bool // Hack to prevent english versions of MHF from crashing
AutoCreateAccount bool // Automatically create accounts if they don't exist
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
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
MezFesAlt bool // Swaps out Volpakkun for Tokotoko
DisableTokenCheck bool // Disables checking login token exists in the DB (security risk!)
DisableMailItems bool // Hack to prevent english versions of MHF from crashing
QuestDebugTools bool // Enable various quest debug logs
SaveDumps SaveDumpOptions
}
@@ -50,10 +64,20 @@ type SaveDumpOptions struct {
type Discord struct {
Enabled bool
BotToken string
ServerID string
RealtimeChannelID string
DevRoles []string
DevMode bool
}
// Command is a channelserver chat command
type Command struct {
Name string
Enabled bool
Prefix string
}
// Course represents a course within MHF
type Course struct {
Name string
Enabled bool
}
// Database holds the postgres database config.
@@ -65,19 +89,25 @@ 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
}
// SignV2 holds the new sign server config
type SignV2 struct {
Enabled bool
Port int
}
type Channel struct {
Enabled bool
}
// Entrance holds the entrance server config.
type Entrance struct {
Enabled bool
Port uint16
Entries []EntranceServerInfo
}
@@ -104,6 +134,17 @@ 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 {
@@ -139,9 +180,26 @@ func LoadConfig() (*Config, error) {
return nil, err
}
if c.HostIP == "" {
c.HostIP = getOutboundIP4().To4().String()
if c.Host == "" {
c.Host = getOutboundIP4().To4().String()
}
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)
}
}

44
go.mod
View File

@@ -1,27 +1,43 @@
module erupe-ce
go 1.16
go 1.19
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/zap v1.18.1
golang.org/x/crypto v0.1.0
golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f
golang.org/x/text v0.7.0
)
require (
github.com/felixge/httpsnoop v1.0.1 // indirect
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/gdamore/encoding v1.0.0 // indirect
github.com/gdamore/tcell/v2 v2.6.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/magiconair/properties v1.8.5 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
github.com/mitchellh/mapstructure v1.4.3 // indirect
github.com/pelletier/go-toml v1.9.3 // indirect
github.com/rivo/tview v0.0.0-20230226195229-47e7db7885b4 // indirect
github.com/rivo/uniseg v0.4.3 // indirect
github.com/spf13/afero v1.6.0 // indirect
github.com/spf13/cast v1.3.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
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
golang.org/x/sys v0.5.0 // indirect
golang.org/x/term v0.5.0 // indirect
gopkg.in/ini.v1 v1.62.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)

67
go.sum
View File

@@ -74,13 +74,16 @@ github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8S
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/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg=
github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
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 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
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=
@@ -95,8 +98,6 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
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=
@@ -189,22 +190,24 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV
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 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
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/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/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/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
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/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
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=
@@ -222,19 +225,21 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
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/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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rivo/tview v0.0.0-20230226195229-47e7db7885b4 h1:tj6c++jeZxE3+Z+8+3/HOY/KpqaVt1tZ8i6sNRmjQ1M=
github.com/rivo/tview v0.0.0-20230226195229-47e7db7885b4/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw=
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
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=
@@ -265,7 +270,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
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=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
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=
@@ -295,8 +300,9 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
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 +313,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-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc=
golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
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=
@@ -333,7 +341,7 @@ 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/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
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=
@@ -370,8 +378,7 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v
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.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
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=
@@ -395,6 +402,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
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/sync v0.0.0-20220722155255-886fb9371eb4/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=
@@ -435,13 +443,16 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w
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-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-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.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
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=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -449,9 +460,9 @@ 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.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
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=
@@ -506,10 +517,9 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
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.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/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE=
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=
@@ -617,9 +627,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
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 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
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/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=

287
main.go
View File

@@ -2,18 +2,20 @@ package main
import (
"fmt"
"math/rand"
"github.com/rivo/tview"
"net"
"os"
"os/signal"
"syscall"
"runtime/debug"
"strconv"
"time"
"erupe-ce/config"
"erupe-ce/server/channelserver"
"erupe-ce/server/discordbot"
"erupe-ce/server/entranceserver"
"erupe-ce/server/launcherserver"
"erupe-ce/server/signserver"
"erupe-ce/server/signv2server"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
"go.uber.org/zap"
@@ -28,30 +30,49 @@ func cleanDB(db *sqlx.DB) {
_ = 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() {
var err error
zapLogger, _ := zap.NewDevelopment()
defer zapLogger.Sync()
logger := zapLogger.Named("main")
logger.Info("Starting Erupe")
logger.Info(fmt.Sprintf("Starting Erupe (9.2b-%s)", Commit()))
// Load the configuration.
erupeConfig, err := config.LoadConfig()
if err != nil {
preventClose(fmt.Sprintf("Failed to load config: %s", err.Error()))
if config.ErupeConfig.Database.Password == "" {
preventClose("Database password is blank")
}
if erupeConfig.Database.Password == "" {
preventClose("Database password is blank")
if net.ParseIP(config.ErupeConfig.Host) == nil {
ips, _ := net.LookupIP(config.ErupeConfig.Host)
for _, ip := range ips {
if ip != nil {
config.ErupeConfig.Host = ip.String()
break
}
}
if net.ParseIP(config.ErupeConfig.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.ErupeConfig.Discord.Enabled {
bot, err := discordbot.NewDiscordBot(discordbot.Options{
Logger: logger,
Config: erupeConfig,
Config: config.ErupeConfig,
})
if err != nil {
@@ -66,18 +87,19 @@ func main() {
}
discordBot = bot
logger.Info("Discord bot is enabled")
} else {
logger.Info("Discord bot is 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.ErupeConfig.Database.Host,
config.ErupeConfig.Database.Port,
config.ErupeConfig.Database.User,
config.ErupeConfig.Database.Password,
config.ErupeConfig.Database.Database,
)
db, err := sqlx.Open("postgres", connectString)
@@ -92,114 +114,178 @@ func main() {
}
logger.Info("Connected to database")
// Clear existing tokens
// Clear stale data
_ = db.MustExec("DELETE FROM sign_sessions")
_ = db.MustExec("DELETE FROM servers")
// Clean the DB if the option is on.
if erupeConfig.DevMode && erupeConfig.DevModeOptions.CleanDB {
if config.ErupeConfig.DevMode && config.ErupeConfig.DevModeOptions.CleanDB {
logger.Info("Cleaning DB")
cleanDB(db)
logger.Info("Done cleaning DB")
}
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.ErupeConfig.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("Failed to start entrance server: %s", err.Error()))
}
logger.Info("Started entrance server")
}
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.ErupeConfig.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("Failed to start sign server: %s", err.Error()))
}
logger.Info("Started sign server")
}
// New Sign server
var newSignServer *signv2server.Server
if config.ErupeConfig.SignV2.Enabled {
newSignServer = signv2server.NewServer(
&signv2server.Config{
Logger: logger.Named("sign"),
ErupeConfig: config.ErupeConfig,
DB: db,
})
err = newSignServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Failed to start sign-v2 server: %s", err.Error()))
}
logger.Info("Started new sign server")
}
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.ErupeConfig.Channel.Enabled {
channelQuery := ""
si := 0
ci := 0
count := 1
for _, ee := range config.ErupeConfig.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.ErupeConfig.Host
} else {
c.IP = ee.IP
}
c.Port = ce.Port
err = c.Start()
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, world_name, world_description, land) VALUES (%d, %d, 0, '%s', '%s', %d);`, sid, si%3, ee.Name, ee.Description, i+1)
channels = append(channels, &c)
logger.Info(fmt.Sprintf("Started channel server %d on port %d", 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)
logger.Info("Finished starting Erupe")
for _, c := range channels {
c.Channels = channels
app := tview.NewApplication()
channelNode := tview.NewTreeNode("Channel")
browser := tview.NewTreeView().SetRoot(channelNode).SetCurrentNode(channelNode)
browser.SetTitle("Channel Browser").SetBorder(true)
erupeNode := tview.NewTreeNode("Erupe")
channelsList := tview.NewTreeView().SetRoot(erupeNode).SetCurrentNode(erupeNode)
channelsList.SetTitle("Channels").SetBorder(true)
for _, channel := range channels {
temp := tview.NewTreeNode(strconv.Itoa(int(channel.Port))).SetReference(channel)
erupeNode.AddChild(temp)
}
// Wait for exit or interrupt with ctrl+C.
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
channelsList.SetSelectedFunc(func(node *tview.TreeNode) {
channelNode.ClearChildren()
ref := node.GetReference()
for id, stage := range ref.(*channelserver.Server).Stages() {
stageNode := tview.NewTreeNode(id).SetExpanded(true)
for i, j := range stage.Clients() {
charNode := tview.NewTreeNode(i.Name + " (" + strconv.Itoa(int(j)) + ")")
stageNode.AddChild(charNode)
}
channelNode.AddChild(stageNode)
}
})
logger.Info("Trying to shutdown gracefully")
flex := tview.NewFlex().
AddItem(channelsList, 0, 1, true).
AddItem(browser, 0, 3, false)
for _, c := range channels {
c.Shutdown()
app.SetRoot(flex, true).EnableMouse(true)
if err = app.Run(); err != nil {
logger.Error("Error in TUI")
}
signServer.Shutdown()
entranceServer.Shutdown()
launcherServer.Shutdown()
time.Sleep(1 * time.Second)
logger.Info("Shutting down...")
if config.ErupeConfig.Channel.Enabled {
for _, c := range channels {
c.Shutdown()
}
}
if config.ErupeConfig.Sign.Enabled {
signServer.Shutdown()
}
if config.ErupeConfig.SignV2.Enabled {
newSignServer.Shutdown()
}
if config.ErupeConfig.Entrance.Enabled {
entranceServer.Shutdown()
}
}
func wait() {
@@ -209,6 +295,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

@@ -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

@@ -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 uint16
Unk1 uint16
Unk2 uint32
Unk3 uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfAcquireMonthlyItem) Opcode() network.PacketID {
@@ -18,7 +24,12 @@ 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.ReadUint16()
m.Unk1 = bf.ReadUint16()
m.Unk2 = bf.ReadUint32()
m.Unk3 = bf.ReadUint32()
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"
)
// MsgMhfAcquireTitle represents the MSG_MHF_ACQUIRE_TITLE
type MsgMhfAcquireTitle struct{}
type MsgMhfAcquireTitle struct {
AckHandle uint32
Unk0 uint16
Unk1 uint16
TitleID uint16
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfAcquireTitle) Opcode() network.PacketID {
@@ -18,7 +23,11 @@ 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()
m.Unk0 = bf.ReadUint16()
m.Unk1 = bf.ReadUint16()
m.TitleID = bf.ReadUint16()
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/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,15 +1,19 @@
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
Unk []byte
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfCheckMonthlyItem) Opcode() network.PacketID {
@@ -18,7 +22,10 @@ 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()
m.Unk = bf.ReadBytes(3)
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,15 +1,16 @@
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
}
@@ -22,7 +23,13 @@ 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()
return nil
@@ -30,9 +37,5 @@ func (m *MsgMhfCheckWeeklyStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.C
// 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.

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"
)
// MsgMhfEntryRookieGuild represents the MSG_MHF_ENTRY_ROOKIE_GUILD
type MsgMhfEntryRookieGuild struct{}
type MsgMhfEntryRookieGuild struct {
AckHandle uint32
Unk uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfEntryRookieGuild) Opcode() network.PacketID {
@@ -18,7 +21,9 @@ func (m *MsgMhfEntryRookieGuild) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfEntryRookieGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk = bf.ReadUint32()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -32,6 +32,7 @@ type MsgMhfEnumerateGuild struct {
AckHandle uint32
Type EnumerateGuildType
Page uint8
Sorting bool
RawDataPayload []byte
}
@@ -45,6 +46,8 @@ func (m *MsgMhfEnumerateGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
m.AckHandle = bf.ReadUint32()
m.Type = EnumerateGuildType(bf.ReadUint8())
m.Page = bf.ReadUint8()
m.Sorting = bf.ReadBool()
_ = bf.ReadUint8()
m.RawDataPayload = bf.DataFromCurrent()
bf.Seek(-2, io.SeekEnd)
return nil

View File

@@ -29,8 +29,10 @@ func (m *MsgMhfEnumerateHouse) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
m.CharID = bf.ReadUint32()
m.Method = bf.ReadUint8()
m.Unk = bf.ReadUint16()
_ = bf.ReadUint8() // len
m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
lenName := bf.ReadUint8()
if lenName > 0 {
m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
}
return nil
}

View File

@@ -1,20 +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"
)
// MsgMhfEnumerateQuest represents the MSG_MHF_ENUMERATE_QUEST
type MsgMhfEnumerateQuest struct {
AckHandle uint32
Unk0 uint8 // Hardcoded 0 in the binary
Unk1 uint8
Unk2 uint16
QuestList uint16 // Increments to request following batches of quests
World uint8
Counter uint16
Offset uint16 // Increments to request following batches of quests
Unk4 uint8 // Hardcoded 0 in the binary
}
@@ -27,9 +27,9 @@ func (m *MsgMhfEnumerateQuest) Opcode() network.PacketID {
func (m *MsgMhfEnumerateQuest) 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.QuestList = bf.ReadUint16()
m.World = bf.ReadUint8()
m.Counter = bf.ReadUint16()
m.Offset = bf.ReadUint16()
m.Unk4 = bf.ReadUint8()
return nil
}

View File

@@ -1,19 +1,19 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfEnumerateRengokuRanking represents the MSG_MHF_ENUMERATE_RENGOKU_RANKING
type MsgMhfEnumerateRengokuRanking struct {
AckHandle uint32
Unk0 uint32
Unk1 uint16 // Hardcoded 0 in the binary
Unk2 uint16 // Hardcoded 00 01 in the binary
AckHandle uint32
Leaderboard uint32
Unk1 uint16 // Hardcoded 0 in the binary
Unk2 uint16 // Hardcoded 00 01 in the binary
}
// Opcode returns the ID associated with this packet type.
@@ -24,7 +24,7 @@ func (m *MsgMhfEnumerateRengokuRanking) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfEnumerateRengokuRanking) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
m.Leaderboard = bf.ReadUint32()
m.Unk1 = bf.ReadUint16()
m.Unk2 = bf.ReadUint16()
return nil

View File

@@ -1,15 +1,19 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfEnumerateWarehouse represents the MSG_MHF_ENUMERATE_WAREHOUSE
type MsgMhfEnumerateWarehouse struct{}
type MsgMhfEnumerateWarehouse struct {
AckHandle uint32
BoxType string
BoxIndex uint8
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfEnumerateWarehouse) Opcode() network.PacketID {
@@ -18,7 +22,17 @@ func (m *MsgMhfEnumerateWarehouse) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfEnumerateWarehouse) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
boxType := bf.ReadUint8()
switch boxType {
case 0:
m.BoxType = "item"
case 1:
m.BoxType = "equip"
}
m.BoxIndex = bf.ReadUint8()
_ = bf.ReadUint16()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,20 +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"
)
// MsgMhfExchangeFpoint2Item represents the MSG_MHF_EXCHANGE_FPOINT_2_ITEM
type MsgMhfExchangeFpoint2Item struct{
type MsgMhfExchangeFpoint2Item struct {
AckHandle uint32
ItemHash uint32
ItemType uint16
ItemId uint16
Quantity byte
TradeID uint32
ItemType uint16
ItemId uint16
Quantity byte
}
// Opcode returns the ID associated with this packet type.
@@ -25,7 +25,7 @@ func (m *MsgMhfExchangeFpoint2Item) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfExchangeFpoint2Item) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.ItemHash = bf.ReadUint32()
m.TradeID = bf.ReadUint32()
m.ItemType = bf.ReadUint16()
m.ItemId = bf.ReadUint16()
m.Quantity = bf.ReadUint8()

View File

@@ -1,20 +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"
)
// MsgMhfExchangeItem2Fpoint represents the MSG_MHF_EXCHANGE_ITEM_2_FPOINT
type MsgMhfExchangeItem2Fpoint struct{
type MsgMhfExchangeItem2Fpoint struct {
AckHandle uint32
ItemHash uint32
ItemType uint16
ItemId uint16
Quantity byte
TradeID uint32
ItemType uint16
ItemId uint16
Quantity byte
}
// Opcode returns the ID associated with this packet type.
@@ -25,7 +25,7 @@ func (m *MsgMhfExchangeItem2Fpoint) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfExchangeItem2Fpoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.ItemHash = bf.ReadUint32()
m.TradeID = bf.ReadUint32()
m.ItemType = bf.ReadUint16()
m.ItemId = bf.ReadUint16()
m.Quantity = bf.ReadUint8()

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"
)
// MsgMhfExchangeWeeklyStamp represents the MSG_MHF_EXCHANGE_WEEKLY_STAMP
type MsgMhfExchangeWeeklyStamp struct{}
type MsgMhfExchangeWeeklyStamp struct {
AckHandle uint32
StampType string
Unk1 uint8
Unk2 uint16
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfExchangeWeeklyStamp) Opcode() network.PacketID {
@@ -18,7 +23,17 @@ func (m *MsgMhfExchangeWeeklyStamp) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfExchangeWeeklyStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
stampType := bf.ReadUint8()
switch stampType {
case 1:
m.StampType = "hl"
case 2:
m.StampType = "ex"
}
m.Unk1 = bf.ReadUint8()
m.Unk2 = bf.ReadUint16()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,18 +1,18 @@
package mhfpacket
import (
"errors"
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfGetAchievement represents the MSG_MHF_GET_ACHIEVEMENT
type MsgMhfGetAchievement struct{
AckHandle uint32
Unk0 uint32 // id?
Unk1 uint32 // char?
type MsgMhfGetAchievement struct {
AckHandle uint32
CharID uint32
Unk1 uint32 // char?
}
// Opcode returns the ID associated with this packet type.
@@ -22,8 +22,8 @@ func (m *MsgMhfGetAchievement) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetAchievement) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
m.AckHandle = bf.ReadUint32()
m.CharID = bf.ReadUint32()
m.Unk1 = bf.ReadUint32()
return nil
}

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"
)
// MsgMhfGetBbsSnsStatus represents the MSG_MHF_GET_BBS_SNS_STATUS
type MsgMhfGetBbsSnsStatus struct{}
type MsgMhfGetBbsSnsStatus struct {
AckHandle uint32
Unk []byte
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfGetBbsSnsStatus) Opcode() network.PacketID {
@@ -18,7 +21,9 @@ func (m *MsgMhfGetBbsSnsStatus) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetBbsSnsStatus) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk = bf.ReadBytes(12)
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"
)
// MsgMhfGetBbsUserStatus represents the MSG_MHF_GET_BBS_USER_STATUS
type MsgMhfGetBbsUserStatus struct{}
type MsgMhfGetBbsUserStatus struct {
AckHandle uint32
Unk []byte
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfGetBbsUserStatus) Opcode() network.PacketID {
@@ -18,7 +21,9 @@ func (m *MsgMhfGetBbsUserStatus) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetBbsUserStatus) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk = bf.ReadBytes(12)
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,17 +1,17 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfGetBoxGachaInfo represents the MSG_MHF_GET_BOX_GACHA_INFO
type MsgMhfGetBoxGachaInfo struct{
type MsgMhfGetBoxGachaInfo struct {
AckHandle uint32
GachaHash uint32
GachaID uint32
}
// Opcode returns the ID associated with this packet type.
@@ -22,7 +22,7 @@ func (m *MsgMhfGetBoxGachaInfo) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetBoxGachaInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.GachaHash = bf.ReadUint32()
m.GachaID = bf.ReadUint32()
return nil
}

View File

@@ -1,17 +1,17 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfGetGachaPlayHistory represents the MSG_MHF_GET_GACHA_PLAY_HISTORY
type MsgMhfGetGachaPlayHistory struct{
type MsgMhfGetGachaPlayHistory struct {
AckHandle uint32
GachaHash uint32
GachaID uint32
}
// Opcode returns the ID associated with this packet type.
@@ -22,7 +22,7 @@ func (m *MsgMhfGetGachaPlayHistory) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetGachaPlayHistory) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.GachaHash = bf.ReadUint32()
m.GachaID = bf.ReadUint32()
return nil
}

View File

@@ -1,15 +1,19 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfGetGemInfo represents the MSG_MHF_GET_GEM_INFO
type MsgMhfGetGemInfo struct{}
type MsgMhfGetGemInfo struct {
AckHandle uint32
Unk uint32
Unk1 []byte
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfGetGemInfo) Opcode() network.PacketID {
@@ -18,7 +22,10 @@ func (m *MsgMhfGetGemInfo) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetGemInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk = bf.ReadUint32()
m.Unk1 = bf.ReadBytes(24)
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,18 +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"
)
// MsgMhfGetStepupStatus represents the MSG_MHF_GET_STEPUP_STATUS
type MsgMhfGetStepupStatus struct{
type MsgMhfGetStepupStatus struct {
AckHandle uint32
GachaHash uint32
Unk uint8
GachaID uint32
Unk uint8
}
// Opcode returns the ID associated with this packet type.
@@ -23,7 +23,7 @@ func (m *MsgMhfGetStepupStatus) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetStepupStatus) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.GachaHash = bf.ReadUint32()
m.GachaID = bf.ReadUint32()
m.Unk = bf.ReadUint8()
return nil
}

View File

@@ -1,11 +1,11 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// The server sends different responses based on these values.
@@ -13,7 +13,7 @@ const (
TowerInfoTypeUnk0 = iota
TowerInfoTypeTowerRankPoint
TowerInfoTypeGetOwnTowerSkill
TowerInfoTypeUnk3
TowerInfoTypeGetOwnTowerLevelV3
TowerInfoTypeTowerTouhaHistory
TowerInfoTypeUnk5
)

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"
)
// MsgMhfGetWeeklySeibatuRankingReward represents the MSG_MHF_GET_WEEKLY_SEIBATU_RANKING_REWARD
type MsgMhfGetWeeklySeibatuRankingReward struct{}
type MsgMhfGetWeeklySeibatuRankingReward struct {
AckHandle uint32
Unk0 uint32
Unk1 uint32
Unk2 uint32
Unk3 uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfGetWeeklySeibatuRankingReward) Opcode() network.PacketID {
@@ -18,7 +24,12 @@ func (m *MsgMhfGetWeeklySeibatuRankingReward) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGetWeeklySeibatuRankingReward) 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()
m.Unk3 = bf.ReadUint32()
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,17 +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"
)
// MsgMhfGuildHuntdata represents the MSG_MHF_GUILD_HUNTDATA
type MsgMhfGuildHuntdata struct{
AckHandle uint32
Unk0 uint8
type MsgMhfGuildHuntdata struct {
AckHandle uint32
Operation uint8
GuildID uint32
}
// Opcode returns the ID associated with this packet type.
@@ -22,7 +23,10 @@ func (m *MsgMhfGuildHuntdata) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfGuildHuntdata) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint8()
m.Operation = bf.ReadUint8()
if m.Operation == 1 {
m.GuildID = bf.ReadUint32()
}
return nil
}

View File

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

View File

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

View File

@@ -1,39 +1,43 @@
package mhfpacket
import (
"errors"
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
type OperateGuildAction uint8
const (
OPERATE_GUILD_DISBAND = 0x01
OPERATE_GUILD_APPLY = 0x02
OPERATE_GUILD_LEAVE = 0x03
OPERATE_GUILD_RESIGN = 0x04
OPERATE_GUILD_SET_APPLICATION_DENY = 0x05
OPERATE_GUILD_SET_APPLICATION_ALLOW = 0x06
OPERATE_GUILD_SET_AVOID_LEADERSHIP_TRUE = 0x07
OPERATE_GUILD_SET_AVOID_LEADERSHIP_FALSE = 0x08
OPERATE_GUILD_UPDATE_COMMENT = 0x09
OPERATE_GUILD_DONATE_RANK = 0x0a
OPERATE_GUILD_UPDATE_MOTTO = 0x0b
OPERATE_GUILD_RENAME_PUGI_1 = 0x0c
OPERATE_GUILD_RENAME_PUGI_2 = 0x0d
OPERATE_GUILD_RENAME_PUGI_3 = 0x0e
OPERATE_GUILD_CHANGE_PUGI_1 = 0x0f
OPERATE_GUILD_CHANGE_PUGI_2 = 0x10
OPERATE_GUILD_CHANGE_PUGI_3 = 0x11
// pugi something
OPERATE_GUILD_DONATE_EVENT = 0x15
// pugi something
OPERATE_GUILD_CHANGE_DIVA_PUGI_1 = 0x19
OPERATE_GUILD_CHANGE_DIVA_PUGI_2 = 0x1a
OPERATE_GUILD_CHANGE_DIVA_PUGI_3 = 0x1b
OPERATE_GUILD_DISBAND = 0x01
OPERATE_GUILD_APPLY = 0x02
OPERATE_GUILD_LEAVE = 0x03
OPERATE_GUILD_RESIGN = 0x04
OPERATE_GUILD_SET_APPLICATION_DENY = 0x05
OPERATE_GUILD_SET_APPLICATION_ALLOW = 0x06
OPERATE_GUILD_SET_AVOID_LEADERSHIP_TRUE = 0x07
OPERATE_GUILD_SET_AVOID_LEADERSHIP_FALSE = 0x08
OPERATE_GUILD_UPDATE_COMMENT = 0x09
OPERATE_GUILD_DONATE_RANK = 0x0a
OPERATE_GUILD_UPDATE_MOTTO = 0x0b
OPERATE_GUILD_RENAME_PUGI_1 = 0x0c
OPERATE_GUILD_RENAME_PUGI_2 = 0x0d
OPERATE_GUILD_RENAME_PUGI_3 = 0x0e
OPERATE_GUILD_CHANGE_PUGI_1 = 0x0f
OPERATE_GUILD_CHANGE_PUGI_2 = 0x10
OPERATE_GUILD_CHANGE_PUGI_3 = 0x11
OPERATE_GUILD_UNLOCK_OUTFIT = 0x12
// 0x13 Unk
// 0x14 Unk
OPERATE_GUILD_DONATE_EVENT = 0x15
OPERATE_GUILD_EVENT_EXCHANGE = 0x16
// 0x17 Unk
// 0x18 Unk
OPERATE_GUILD_CHANGE_DIVA_PUGI_1 = 0x19
OPERATE_GUILD_CHANGE_DIVA_PUGI_2 = 0x1a
OPERATE_GUILD_CHANGE_DIVA_PUGI_3 = 0x1b
)
// MsgMhfOperateGuild represents the MSG_MHF_OPERATE_GUILD
@@ -41,7 +45,8 @@ type MsgMhfOperateGuild struct {
AckHandle uint32
GuildID uint32
Action OperateGuildAction
UnkData []byte
Data1 *byteframe.ByteFrame
Data2 *byteframe.ByteFrame
}
// Opcode returns the ID associated with this packet type.
@@ -54,8 +59,9 @@ func (m *MsgMhfOperateGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clien
m.AckHandle = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
m.Action = OperateGuildAction(bf.ReadUint8())
m.UnkData = bf.DataFromCurrent()
bf.Seek(int64(len(bf.Data()) - 2), 0)
dataLen := uint(bf.ReadUint8())
m.Data1 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(4))
m.Data2 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(dataLen))
return nil
}

View File

@@ -1,28 +1,28 @@
package mhfpacket
import (
"errors"
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
type OperateJointAction uint8
const (
OPERATE_JOINT_DISBAND = 0x01
OPERATE_JOINT_LEAVE = 0x03
OPERATE_JOINT_KICK = 0x09
OPERATE_JOINT_DISBAND = 0x01
OPERATE_JOINT_LEAVE = 0x03
OPERATE_JOINT_KICK = 0x09
)
// MsgMhfOperateJoint represents the MSG_MHF_OPERATE_JOINT
type MsgMhfOperateJoint struct {
AckHandle uint32
AllianceID uint32
GuildID uint32
Action OperateJointAction
UnkData []byte
AckHandle uint32
AllianceID uint32
GuildID uint32
Action OperateJointAction
UnkData *byteframe.ByteFrame
}
// Opcode returns the ID associated with this packet type.
@@ -32,13 +32,13 @@ func (m *MsgMhfOperateJoint) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfOperateJoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.AllianceID = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
m.Action = OperateJointAction(bf.ReadUint8())
m.UnkData = bf.DataFromCurrent()
bf.Seek(int64(len(bf.Data()) - 2), 0)
return nil
m.AckHandle = bf.ReadUint32()
m.AllianceID = bf.ReadUint32()
m.GuildID = bf.ReadUint32()
m.Action = OperateJointAction(bf.ReadUint8())
m.UnkData = byteframe.NewByteFrameFromBytes(bf.DataFromCurrent())
bf.Seek(int64(len(bf.Data())-2), 0)
return nil
}
// Build builds a binary packet from the current data.

View File

@@ -1,15 +1,22 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/common/stringsupport"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfOperateWarehouse represents the MSG_MHF_OPERATE_WAREHOUSE
type MsgMhfOperateWarehouse struct{}
type MsgMhfOperateWarehouse struct {
AckHandle uint32
Operation uint8
BoxType string
BoxIndex uint8
Name string
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfOperateWarehouse) Opcode() network.PacketID {
@@ -18,7 +25,20 @@ func (m *MsgMhfOperateWarehouse) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfOperateWarehouse) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Operation = bf.ReadUint8()
boxType := bf.ReadUint8()
switch boxType {
case 0:
m.BoxType = "item"
case 1:
m.BoxType = "equip"
}
m.BoxIndex = bf.ReadUint8()
_ = bf.ReadUint8() // lenName
_ = bf.ReadUint16() // Unk
m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
return nil
}
// Build builds a binary packet from the current data.

View File

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

View File

@@ -1,19 +1,19 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfPlayBoxGacha represents the MSG_MHF_PLAY_BOX_GACHA
type MsgMhfPlayBoxGacha struct{
type MsgMhfPlayBoxGacha struct {
AckHandle uint32
GachaHash uint32
RollType uint8
CurrencyMode uint8
GachaID uint32
RollType uint8
GachaType uint8
}
// Opcode returns the ID associated with this packet type.
@@ -24,9 +24,9 @@ func (m *MsgMhfPlayBoxGacha) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfPlayBoxGacha) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.GachaHash = bf.ReadUint32()
m.GachaID = bf.ReadUint32()
m.RollType = bf.ReadUint8()
m.CurrencyMode = bf.ReadUint8()
m.GachaType = bf.ReadUint8()
return nil
}

View File

@@ -1,19 +1,19 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfPlayNormalGacha represents the MSG_MHF_PLAY_NORMAL_GACHA
type MsgMhfPlayNormalGacha struct{
type MsgMhfPlayNormalGacha struct {
AckHandle uint32
GachaHash uint32
RollType uint8
CurrencyMode uint8
GachaID uint32
RollType uint8
GachaType uint8
}
// Opcode returns the ID associated with this packet type.
@@ -24,9 +24,9 @@ func (m *MsgMhfPlayNormalGacha) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfPlayNormalGacha) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.GachaHash = bf.ReadUint32()
m.GachaID = bf.ReadUint32()
m.RollType = bf.ReadUint8()
m.CurrencyMode = bf.ReadUint8()
m.GachaType = bf.ReadUint8()
return nil
}

View File

@@ -1,19 +1,19 @@
package mhfpacket
import (
"errors"
import (
"errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgMhfPlayStepupGacha represents the MSG_MHF_PLAY_STEPUP_GACHA
type MsgMhfPlayStepupGacha struct{
type MsgMhfPlayStepupGacha struct {
AckHandle uint32
GachaHash uint32
RollType uint8
CurrencyMode uint8
GachaID uint32
RollType uint8
GachaType uint8
}
// Opcode returns the ID associated with this packet type.
@@ -24,9 +24,9 @@ func (m *MsgMhfPlayStepupGacha) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfPlayStepupGacha) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.GachaHash = bf.ReadUint32()
m.GachaID = bf.ReadUint32()
m.RollType = bf.ReadUint8()
m.CurrencyMode = bf.ReadUint8()
m.GachaType = bf.ReadUint8()
return nil
}

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"
)
// MsgMhfPostCafeDurationBonusReceived represents the MSG_MHF_POST_CAFE_DURATION_BONUS_RECEIVED
type MsgMhfPostCafeDurationBonusReceived struct{}
type MsgMhfPostCafeDurationBonusReceived struct {
AckHandle uint32
CafeBonusID []uint32
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfPostCafeDurationBonusReceived) Opcode() network.PacketID {
@@ -18,7 +21,12 @@ func (m *MsgMhfPostCafeDurationBonusReceived) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfPostCafeDurationBonusReceived) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
ids := int(bf.ReadUint32())
for i := 0; i < ids; i++ {
m.CafeBonusID = append(m.CafeBonusID, bf.ReadUint32())
}
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"
)
// MsgMhfPostTinyBin represents the MSG_MHF_POST_TINY_BIN
type MsgMhfPostTinyBin struct{}
type MsgMhfPostTinyBin struct {
AckHandle uint32
Unk []byte
}
// Opcode returns the ID associated with this packet type.
func (m *MsgMhfPostTinyBin) Opcode() network.PacketID {
@@ -18,7 +21,9 @@ func (m *MsgMhfPostTinyBin) Opcode() network.PacketID {
// Parse parses the packet from binary
func (m *MsgMhfPostTinyBin) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED")
m.AckHandle = bf.ReadUint32()
m.Unk = bf.ReadBytes(14)
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