diff --git a/src/VahterBanBot.Tests/ContainerTestBase.fs b/src/VahterBanBot.Tests/ContainerTestBase.fs index 0e8df2a..b36e756 100644 --- a/src/VahterBanBot.Tests/ContainerTestBase.fs +++ b/src/VahterBanBot.Tests/ContainerTestBase.fs @@ -239,4 +239,4 @@ type MlAwaitFixture() = interface IAsyncLifetime with member this.DisposeAsync() = Task.CompletedTask // we assume 5 seconds is enough for model to train. Could be flaky - member this.InitializeAsync() = Task.Delay 5000 + member this.InitializeAsync() = Task.Delay 10000 diff --git a/src/VahterBanBot.Tests/MLBanTests.fs b/src/VahterBanBot.Tests/MLBanTests.fs index e5cb45f..43e543b 100644 --- a/src/VahterBanBot.Tests/MLBanTests.fs +++ b/src/VahterBanBot.Tests/MLBanTests.fs @@ -12,7 +12,7 @@ type MLBanTests(fixture: VahterTestContainers, _unused: MlAwaitFixture) = let ``Message IS autobanned if it looks like a spam`` () = task { // record a message, where 2 is in a training set as spam word // ChatsToMonitor[0] doesn't have stopwords - let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "2") + let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "2222222") let! _ = fixture.SendMessage msgUpdate // assert that the message got auto banned @@ -25,7 +25,7 @@ type MLBanTests(fixture: VahterTestContainers, _unused: MlAwaitFixture) = // record a message, where 2 is in a training set as spam word // ChatsToMonitor[0] doesn't have stopwords // but it was sent by vahter - let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "2", from = fixture.AdminUsers[0]) + let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "2222222", from = fixture.AdminUsers[0]) let! _ = fixture.SendMessage msgUpdate // assert that the message got auto banned @@ -37,7 +37,7 @@ type MLBanTests(fixture: VahterTestContainers, _unused: MlAwaitFixture) = let ``Message is NOT autobanned if it has a stopword in specific chat`` () = task { // record a message, where 2 is in a training set as spam word // ChatsToMonitor[1] does have a stopword 2 - let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[1], text = "2") + let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[1], text = "2222222") let! _ = fixture.SendMessage msgUpdate // assert that the message got auto banned @@ -59,7 +59,7 @@ type MLBanTests(fixture: VahterTestContainers, _unused: MlAwaitFixture) = [] let ``Message IS autobanned if it is a known false-negative spam`` () = task { // record a message, where 3 is in a training set as false negative spam word - let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "3") + let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "3333333") let! _ = fixture.SendMessage msgUpdate // assert that the message got auto banned @@ -71,7 +71,7 @@ type MLBanTests(fixture: VahterTestContainers, _unused: MlAwaitFixture) = let ``If message got auto-deleted we can mark it as false-positive with a button click`` () = task { // record a message, where 2 is in a training set as spam word // ChatsToMonitor[0] doesn't have stopwords - let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "7") + let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "7777777") let! _ = fixture.SendMessage msgUpdate // assert that the message got auto banned @@ -95,7 +95,7 @@ type MLBanTests(fixture: VahterTestContainers, _unused: MlAwaitFixture) = let ``Only vahter can press THE BUTTON(s)`` () = task { // record a message, where 2 is in a training set as spam word // ChatsToMonitor[0] doesn't have stopwords - let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "6") + let msgUpdate = Tg.quickMsg(chat = fixture.ChatsToMonitor[0], text = "66666666") let! _ = fixture.SendMessage msgUpdate // assert that the message got auto banned diff --git a/src/VahterBanBot.Tests/test_seed.sql b/src/VahterBanBot.Tests/test_seed.sql index 13b4137..f58af51 100644 --- a/src/VahterBanBot.Tests/test_seed.sql +++ b/src/VahterBanBot.Tests/test_seed.sql @@ -17,12 +17,12 @@ VALUES (1001, 'a', NULL, NULL, NULL), INSERT INTO public.message(chat_id, message_id, user_id, created_at, text, raw_message) VALUES (-666, 10001, 1001, '2021-01-01 00:00:00', 'a', '{}'), -- false positive user banned - (-666, 10002, 1001, '2021-01-01 00:00:01', 'a', '{}'), - (-666, 10003, 1001, '2021-01-01 00:00:02', 'a', '{}'), - (-666, 10004, 1002, '2021-01-01 00:00:03', 'a', '{}'), - (-666, 10005, 1002, '2021-01-01 00:00:04', 'a', '{}'), - (-666, 10006, 1003, '2021-01-01 00:00:05', 'a', '{}'), - (-666, 10007, 1003, '2021-01-01 00:00:06', 'a', '{}'), + (-666, 10002, 1001, '2021-01-01 00:00:01', 'aa', '{}'), + (-666, 10003, 1001, '2021-01-01 00:00:02', 'aaa', '{}'), + (-666, 10004, 1002, '2021-01-01 00:00:03', 'aaaa', '{}'), + (-666, 10005, 1002, '2021-01-01 00:00:04', 'aaaaa', '{}'), + (-666, 10006, 1003, '2021-01-01 00:00:05', 'aaaaaa', '{}'), + (-666, 10007, 1003, '2021-01-01 00:00:06', 'aaaaaaa', '{}'), (-666, 10008, 1004, '2021-01-01 00:00:07', 'a', '{}'), -- false positive message banned (-666, 10009, 1005, '2021-01-01 00:00:08', '1', '{}'), (-666, 10010, 1005, '2021-01-01 00:00:09', '1', '{}'), @@ -39,25 +39,25 @@ VALUES (-666, 10001, 1001, '2021-01-01 00:00:00', 'a', '{}'), -- false positive -- to prevent small sample size, we'll copy the next line 100 times -- this is spam (-42, 10010, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10011, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10012, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10013, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10014, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10015, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10016, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10017, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10018, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10019, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10020, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10021, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10022, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10023, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10024, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10025, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10026, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10027, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10028, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10029, 1006, '2021-01-01 00:00:09', '1', '{}'), + (-42, 10011, 1006, '2021-01-01 00:00:09', '11', '{}'), + (-42, 10012, 1006, '2021-01-01 00:00:09', '111', '{}'), + (-42, 10013, 1006, '2021-01-01 00:00:09', '1111', '{}'), + (-42, 10014, 1006, '2021-01-01 00:00:09', '11111', '{}'), + (-42, 10015, 1006, '2021-01-01 00:00:09', '111111', '{}'), + (-42, 10016, 1006, '2021-01-01 00:00:09', '1111111', '{}'), + (-42, 10017, 1006, '2021-01-01 00:00:09', '11111111', '{}'), + (-42, 10018, 1006, '2021-01-01 00:00:09', '111111111', '{}'), + (-42, 10019, 1006, '2021-01-01 00:00:09', '1111111111', '{}'), + (-42, 10020, 1006, '2021-01-01 00:00:09', '11111111111', '{}'), + (-42, 10021, 1006, '2021-01-01 00:00:09', '111111111111', '{}'), + (-42, 10022, 1006, '2021-01-01 00:00:09', '1111111111111', '{}'), + (-42, 10023, 1006, '2021-01-01 00:00:09', '11111111111111', '{}'), + (-42, 10024, 1006, '2021-01-01 00:00:09', '111111111111111', '{}'), + (-42, 10025, 1006, '2021-01-01 00:00:09', '1111111111111111', '{}'), + (-42, 10026, 1006, '2021-01-01 00:00:09', '11111111111111111', '{}'), + (-42, 10027, 1006, '2021-01-01 00:00:09', '111111111111111111', '{}'), + (-42, 10028, 1006, '2021-01-01 00:00:09', '1111111111111111111', '{}'), + (-42, 10029, 1006, '2021-01-01 00:00:09', '11111111111111111111', '{}'), (-42, 10030, 1006, '2021-01-01 00:00:09', '1', '{}'), (-42, 10031, 1006, '2021-01-01 00:00:09', '1', '{}'), (-42, 10032, 1006, '2021-01-01 00:00:09', '1', '{}'), @@ -98,36 +98,36 @@ VALUES (-666, 10001, 1001, '2021-01-01 00:00:00', 'a', '{}'), -- false positive (-42, 10067, 1006, '2021-01-01 00:00:09', '1', '{}'), (-42, 10068, 1006, '2021-01-01 00:00:09', '1', '{}'), (-42, 10069, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10070, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10071, 1006, '2021-01-01 00:00:09', '1', '{}'), - (-42, 10072, 1006, '2021-01-01 00:00:09', '1', '{}'), + (-42, 10070, 1006, '2021-01-01 00:00:09', '2', '{}'), + (-42, 10071, 1006, '2021-01-01 00:00:09', '2', '{}'), + (-42, 10072, 1006, '2021-01-01 00:00:09', '2', '{}'), (-42, 10073, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10074, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10075, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10076, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10077, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10078, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10079, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10080, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10081, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10082, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10083, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10084, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10085, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10086, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10087, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10088, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10089, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10090, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10091, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10092, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10093, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10094, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10095, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10096, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10097, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10098, 1006, '2021-01-01 00:00:09', '2', '{}'), - (-42, 10099, 1006, '2021-01-01 00:00:09', '2', '{}'), + (-42, 10074, 1006, '2021-01-01 00:00:09', '22', '{}'), + (-42, 10075, 1006, '2021-01-01 00:00:09', '222', '{}'), + (-42, 10076, 1006, '2021-01-01 00:00:09', '2222', '{}'), + (-42, 10077, 1006, '2021-01-01 00:00:09', '22222', '{}'), + (-42, 10078, 1006, '2021-01-01 00:00:09', '222222', '{}'), + (-42, 10079, 1006, '2021-01-01 00:00:09', '2222222', '{}'), + (-42, 10080, 1006, '2021-01-01 00:00:09', '22222222', '{}'), + (-42, 10081, 1006, '2021-01-01 00:00:09', '222222222', '{}'), + (-42, 10082, 1006, '2021-01-01 00:00:09', '2222222222', '{}'), + (-42, 10083, 1006, '2021-01-01 00:00:09', '22222222222', '{}'), + (-42, 10084, 1006, '2021-01-01 00:00:09', '222222222222', '{}'), + (-42, 10085, 1006, '2021-01-01 00:00:09', '2222222222222', '{}'), + (-42, 10086, 1006, '2021-01-01 00:00:09', '22222222222222', '{}'), + (-42, 10087, 1006, '2021-01-01 00:00:09', '222222222222222', '{}'), + (-42, 10088, 1006, '2021-01-01 00:00:09', '2222222222222222', '{}'), + (-42, 10089, 1006, '2021-01-01 00:00:09', '22222222222222222', '{}'), + (-42, 10090, 1006, '2021-01-01 00:00:09', '222222222222222222', '{}'), + (-42, 10091, 1006, '2021-01-01 00:00:09', '2222222222222222222', '{}'), + (-42, 10092, 1006, '2021-01-01 00:00:09', '22222222222222222222', '{}'), + (-42, 10093, 1006, '2021-01-01 00:00:09', '222222222222222222222', '{}'), + (-42, 10094, 1006, '2021-01-01 00:00:09', '2222222222222222222222', '{}'), + (-42, 10095, 1006, '2021-01-01 00:00:09', '22222222222222222222222', '{}'), + (-42, 10096, 1006, '2021-01-01 00:00:09', '222222222222222222222222', '{}'), + (-42, 10097, 1006, '2021-01-01 00:00:09', '2222222222222222222222222', '{}'), + (-42, 10098, 1006, '2021-01-01 00:00:09', '22222222222222222222222222', '{}'), + (-42, 10099, 1006, '2021-01-01 00:00:09', '222222222222222222222222222', '{}'), -- this is not spam (-666, 10100, 1001, '2021-01-01 00:00:01', 'a', '{}'), (-666, 10101, 1001, '2021-01-01 00:00:01', 'b', '{}'), @@ -230,72 +230,72 @@ VALUES (-666, 10001, 1001, '2021-01-01 00:00:00', 'a', '{}'), -- false positive (-666, 10198, 1001, '2021-01-01 00:00:01', 'a', '{}'), (-666, 10199, 1001, '2021-01-01 00:00:01', 'a', '{}'), - -- to enforce false-negative appearance + -- to enforce false-negative appearance of 3 (-666, 10200, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10201, 1001, '2021-01-01 00:00:01', '4', '{}'), - (-666, 10202, 1001, '2021-01-01 00:00:01', '5', '{}'), - (-666, 10203, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10204, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10205, 1001, '2021-01-01 00:00:01', '8', '{}'), - (-666, 10206, 1001, '2021-01-01 00:00:01', '9', '{}'), - (-666, 10207, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10208, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10209, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10210, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10211, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10212, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10213, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10214, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10215, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10216, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10217, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10218, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10219, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10220, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10221, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10222, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10223, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10224, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10225, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10226, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10227, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10228, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10229, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10230, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10231, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10232, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10233, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10234, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10235, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10236, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10237, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10238, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10239, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10240, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10241, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10242, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10243, 1001, '2021-01-01 00:00:01', '7', '{}'), - (-666, 10244, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10245, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10246, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10247, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10248, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10249, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10250, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10251, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10252, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10253, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10254, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10255, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10256, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10257, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10258, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10259, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10260, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10261, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10262, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10263, 1001, '2021-01-01 00:00:01', '6', '{}'), - (-666, 10264, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10201, 1001, '2021-01-01 00:00:01', '33', '{}'), + (-666, 10202, 1001, '2021-01-01 00:00:01', '333', '{}'), + (-666, 10203, 1001, '2021-01-01 00:00:01', '3333', '{}'), + (-666, 10204, 1001, '2021-01-01 00:00:01', '33333', '{}'), + (-666, 10205, 1001, '2021-01-01 00:00:01', '333333', '{}'), + (-666, 10206, 1001, '2021-01-01 00:00:01', '3333333', '{}'), + (-666, 10207, 1001, '2021-01-01 00:00:01', '33333333', '{}'), + (-666, 10208, 1001, '2021-01-01 00:00:01', '333333333', '{}'), + (-666, 10209, 1001, '2021-01-01 00:00:01', '3333333333', '{}'), + (-666, 10210, 1001, '2021-01-01 00:00:01', '33333333333', '{}'), + (-666, 10211, 1001, '2021-01-01 00:00:01', '333333333333', '{}'), + (-666, 10212, 1001, '2021-01-01 00:00:01', '3333333333333', '{}'), + (-666, 10213, 1001, '2021-01-01 00:00:01', '33333333333333', '{}'), + (-666, 10214, 1001, '2021-01-01 00:00:01', '333333333333333', '{}'), + (-666, 10215, 1001, '2021-01-01 00:00:01', '3333333333333333', '{}'), + (-666, 10216, 1001, '2021-01-01 00:00:01', '33333333333333333', '{}'), + (-666, 10217, 1001, '2021-01-01 00:00:01', '333333333333333333', '{}'), + (-666, 10218, 1001, '2021-01-01 00:00:01', '3333333333333333333', '{}'), + (-666, 10219, 1001, '2021-01-01 00:00:01', '33333333333333333333', '{}'), + (-666, 10220, 1001, '2021-01-01 00:00:01', '333333333333333333333', '{}'), + (-666, 10221, 1001, '2021-01-01 00:00:01', '3333333333333333333333', '{}'), + (-666, 10222, 1001, '2021-01-01 00:00:01', '33333333333333333333333', '{}'), + (-666, 10223, 1001, '2021-01-01 00:00:01', '333333333333333333333333', '{}'), + (-666, 10224, 1001, '2021-01-01 00:00:01', '3333333333333333333333333', '{}'), + (-666, 10225, 1001, '2021-01-01 00:00:01', '33333333333333333333333333', '{}'), + (-666, 10226, 1001, '2021-01-01 00:00:01', '333333333333333333333333333', '{}'), + (-666, 10227, 1001, '2021-01-01 00:00:01', '3333333333333333333333333333', '{}'), + (-666, 10228, 1001, '2021-01-01 00:00:01', '33333333333333333333333333333', '{}'), + (-666, 10229, 1001, '2021-01-01 00:00:01', '333333333333333333333333333333', '{}'), + (-666, 10230, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10231, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10232, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10233, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10234, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10235, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10236, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10237, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10238, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10239, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10240, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10241, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10242, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10243, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10244, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10245, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10246, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10247, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10248, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10249, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10250, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10251, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10252, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10253, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10254, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10255, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10256, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10257, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10258, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10259, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10260, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10261, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10262, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10263, 1001, '2021-01-01 00:00:01', '3', '{}'), + (-666, 10264, 1001, '2021-01-01 00:00:01', '3', '{}'), (-666, 10265, 1001, '2021-01-01 00:00:01', '3', '{}'), (-666, 10266, 1001, '2021-01-01 00:00:01', '3', '{}'), (-666, 10267, 1001, '2021-01-01 00:00:01', '3', '{}'), @@ -330,7 +330,211 @@ VALUES (-666, 10001, 1001, '2021-01-01 00:00:00', 'a', '{}'), -- false positive (-666, 10296, 1001, '2021-01-01 00:00:01', '3', '{}'), (-666, 10297, 1001, '2021-01-01 00:00:01', '3', '{}'), (-666, 10298, 1001, '2021-01-01 00:00:01', '3', '{}'), - (-666, 10299, 1001, '2021-01-01 00:00:01', '3', '{}'); + (-666, 10299, 1001, '2021-01-01 00:00:01', '3', '{}'), + + -- to enforce false-negative appearance of 6 + (-666, 10300, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10301, 1001, '2021-01-01 00:00:01', '66', '{}'), + (-666, 10302, 1001, '2021-01-01 00:00:01', '666', '{}'), + (-666, 10303, 1001, '2021-01-01 00:00:01', '6666', '{}'), + (-666, 10304, 1001, '2021-01-01 00:00:01', '66666', '{}'), + (-666, 10305, 1001, '2021-01-01 00:00:01', '666666', '{}'), + (-666, 10306, 1001, '2021-01-01 00:00:01', '6666666', '{}'), + (-666, 10307, 1001, '2021-01-01 00:00:01', '66666666', '{}'), + (-666, 10308, 1001, '2021-01-01 00:00:01', '6666666666', '{}'), + (-666, 10309, 1001, '2021-01-01 00:00:01', '66666666666', '{}'), + (-666, 10310, 1001, '2021-01-01 00:00:01', '666666666666', '{}'), + (-666, 10311, 1001, '2021-01-01 00:00:01', '6666666666666', '{}'), + (-666, 10312, 1001, '2021-01-01 00:00:01', '66666666666666', '{}'), + (-666, 10313, 1001, '2021-01-01 00:00:01', '666666666666666', '{}'), + (-666, 10314, 1001, '2021-01-01 00:00:01', '6666666666666666', '{}'), + (-666, 10315, 1001, '2021-01-01 00:00:01', '66666666666666666', '{}'), + (-666, 10316, 1001, '2021-01-01 00:00:01', '666666666666666666', '{}'), + (-666, 10317, 1001, '2021-01-01 00:00:01', '6666666666666666666', '{}'), + (-666, 10318, 1001, '2021-01-01 00:00:01', '66666666666666666666', '{}'), + (-666, 10319, 1001, '2021-01-01 00:00:01', '666666666666666666666', '{}'), + (-666, 10320, 1001, '2021-01-01 00:00:01', '6666666666666666666666', '{}'), + (-666, 10321, 1001, '2021-01-01 00:00:01', '66666666666666666666666', '{}'), + (-666, 10322, 1001, '2021-01-01 00:00:01', '666666666666666666666666', '{}'), + (-666, 10323, 1001, '2021-01-01 00:00:01', '6666666666666666666666666', '{}'), + (-666, 10324, 1001, '2021-01-01 00:00:01', '66666666666666666666666666', '{}'), + (-666, 10325, 1001, '2021-01-01 00:00:01', '666666666666666666666666666', '{}'), + (-666, 10326, 1001, '2021-01-01 00:00:01', '6666666666666666666666666666', '{}'), + (-666, 10327, 1001, '2021-01-01 00:00:01', '66666666666666666666666666666', '{}'), + (-666, 10328, 1001, '2021-01-01 00:00:01', '666666666666666666666666666666', '{}'), + (-666, 10329, 1001, '2021-01-01 00:00:01', '6666666666666666666666666666666', '{}'), + (-666, 10330, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10331, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10332, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10333, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10334, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10335, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10336, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10337, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10338, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10339, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10340, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10341, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10342, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10343, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10344, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10345, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10346, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10347, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10348, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10349, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10350, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10351, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10352, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10353, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10354, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10355, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10356, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10357, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10358, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10359, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10360, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10361, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10362, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10363, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10364, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10365, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10366, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10367, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10368, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10369, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10370, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10371, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10372, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10373, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10374, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10375, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10376, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10377, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10378, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10379, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10380, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10381, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10382, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10383, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10384, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10385, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10386, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10387, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10388, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10389, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10390, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10391, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10392, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10393, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10394, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10395, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10396, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10397, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10398, 1001, '2021-01-01 00:00:01', '6', '{}'), + (-666, 10399, 1001, '2021-01-01 00:00:01', '6', '{}'), + + -- to enforce false-negative appearance of 7 + (-666, 10400, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10401, 1001, '2021-01-01 00:00:01', '77', '{}'), + (-666, 10402, 1001, '2021-01-01 00:00:01', '7777', '{}'), + (-666, 10403, 1001, '2021-01-01 00:00:01', '77777', '{}'), + (-666, 10404, 1001, '2021-01-01 00:00:01', '777777', '{}'), + (-666, 10405, 1001, '2021-01-01 00:00:01', '7777777', '{}'), + (-666, 10406, 1001, '2021-01-01 00:00:01', '77777777', '{}'), + (-666, 10407, 1001, '2021-01-01 00:00:01', '777777777', '{}'), + (-666, 10408, 1001, '2021-01-01 00:00:01', '7777777777', '{}'), + (-666, 10409, 1001, '2021-01-01 00:00:01', '77777777777', '{}'), + (-666, 10410, 1001, '2021-01-01 00:00:01', '777777777777', '{}'), + (-666, 10411, 1001, '2021-01-01 00:00:01', '7777777777777', '{}'), + (-666, 10412, 1001, '2021-01-01 00:00:01', '777777777777777', '{}'), + (-666, 10413, 1001, '2021-01-01 00:00:01', '7777777777777777', '{}'), + (-666, 10414, 1001, '2021-01-01 00:00:01', '77777777777777777', '{}'), + (-666, 10415, 1001, '2021-01-01 00:00:01', '777777777777777777', '{}'), + (-666, 10416, 1001, '2021-01-01 00:00:01', '77777777777777777777', '{}'), + (-666, 10417, 1001, '2021-01-01 00:00:01', '777777777777777777777', '{}'), + (-666, 10418, 1001, '2021-01-01 00:00:01', '7777777777777777777777', '{}'), + (-666, 10419, 1001, '2021-01-01 00:00:01', '77777777777777777777777', '{}'), + (-666, 10420, 1001, '2021-01-01 00:00:01', '777777777777777777777777', '{}'), + (-666, 10421, 1001, '2021-01-01 00:00:01', '7777777777777777777777777', '{}'), + (-666, 10422, 1001, '2021-01-01 00:00:01', '77777777777777777777777777', '{}'), + (-666, 10423, 1001, '2021-01-01 00:00:01', '777777777777777777777777777', '{}'), + (-666, 10424, 1001, '2021-01-01 00:00:01', '7777777777777777777777777777', '{}'), + (-666, 10425, 1001, '2021-01-01 00:00:01', '77777777777777777777777777777', '{}'), + (-666, 10426, 1001, '2021-01-01 00:00:01', '777777777777777777777777777777', '{}'), + (-666, 10427, 1001, '2021-01-01 00:00:01', '7777777777777777777777777777777', '{}'), + (-666, 10428, 1001, '2021-01-01 00:00:01', '77777777777777777777777777777777', '{}'), + (-666, 10429, 1001, '2021-01-01 00:00:01', '777777777777777777777777777777777', '{}'), + (-666, 10430, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10431, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10432, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10433, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10434, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10435, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10436, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10437, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10438, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10439, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10440, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10441, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10442, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10443, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10444, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10445, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10446, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10447, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10448, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10449, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10450, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10451, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10452, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10453, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10454, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10455, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10456, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10457, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10458, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10459, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10460, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10461, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10462, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10463, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10464, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10465, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10466, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10467, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10468, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10469, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10470, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10471, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10472, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10473, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10474, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10475, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10476, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10477, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10478, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10479, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10480, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10481, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10482, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10483, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10484, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10485, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10486, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10487, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10488, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10489, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10490, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10491, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10492, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10493, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10494, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10495, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10496, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10497, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10498, 1001, '2021-01-01 00:00:01', '7', '{}'), + (-666, 10499, 1001, '2021-01-01 00:00:01', '7', '{}'); INSERT INTO public.banned(id, message_id, message_text, banned_user_id, banned_at, banned_in_chat_id, banned_in_chat_username, banned_by) VALUES (100001, 10001, 'a', 1001, '2021-01-01 00:00:00', -666, 'pro.hell', 34), @@ -346,6 +550,51 @@ VALUES ('a'); INSERT INTO public.false_negative_messages(chat_id, message_id) VALUES (-42, 10008), + (-42, 10011), + (-42, 10012), + (-42, 10013), + (-42, 10014), + (-42, 10015), + (-42, 10016), + (-42, 10017), + (-42, 10018), + (-42, 10019), + (-42, 10020), + (-42, 10021), + (-42, 10022), + (-42, 10023), + (-42, 10024), + (-42, 10025), + (-42, 10026), + (-42, 10027), + (-42, 10028), + (-42, 10029), + (-42, 10074), + (-42, 10075), + (-42, 10076), + (-42, 10077), + (-42, 10078), + (-42, 10079), + (-42, 10080), + (-42, 10081), + (-42, 10082), + (-42, 10083), + (-42, 10084), + (-42, 10085), + (-42, 10086), + (-42, 10087), + (-42, 10088), + (-42, 10089), + (-42, 10090), + (-42, 10091), + (-42, 10092), + (-42, 10093), + (-42, 10094), + (-42, 10095), + (-42, 10096), + (-42, 10097), + (-42, 10098), + (-42, 10099), (-666, 10200), (-666, 10201), (-666, 10202), @@ -445,4 +694,204 @@ VALUES (-42, 10008), (-666, 10296), (-666, 10297), (-666, 10298), - (-666, 10299); + (-666, 10299), + (-666, 10300), + (-666, 10301), + (-666, 10302), + (-666, 10303), + (-666, 10304), + (-666, 10305), + (-666, 10306), + (-666, 10307), + (-666, 10308), + (-666, 10309), + (-666, 10310), + (-666, 10311), + (-666, 10312), + (-666, 10313), + (-666, 10314), + (-666, 10315), + (-666, 10316), + (-666, 10317), + (-666, 10318), + (-666, 10319), + (-666, 10320), + (-666, 10321), + (-666, 10322), + (-666, 10323), + (-666, 10324), + (-666, 10325), + (-666, 10326), + (-666, 10327), + (-666, 10328), + (-666, 10329), + (-666, 10330), + (-666, 10331), + (-666, 10332), + (-666, 10333), + (-666, 10334), + (-666, 10335), + (-666, 10336), + (-666, 10337), + (-666, 10338), + (-666, 10339), + (-666, 10340), + (-666, 10341), + (-666, 10342), + (-666, 10343), + (-666, 10344), + (-666, 10345), + (-666, 10346), + (-666, 10347), + (-666, 10348), + (-666, 10349), + (-666, 10350), + (-666, 10351), + (-666, 10352), + (-666, 10353), + (-666, 10354), + (-666, 10355), + (-666, 10356), + (-666, 10357), + (-666, 10358), + (-666, 10359), + (-666, 10360), + (-666, 10361), + (-666, 10362), + (-666, 10363), + (-666, 10364), + (-666, 10365), + (-666, 10366), + (-666, 10367), + (-666, 10368), + (-666, 10369), + (-666, 10370), + (-666, 10371), + (-666, 10372), + (-666, 10373), + (-666, 10374), + (-666, 10375), + (-666, 10376), + (-666, 10377), + (-666, 10378), + (-666, 10379), + (-666, 10380), + (-666, 10381), + (-666, 10382), + (-666, 10383), + (-666, 10384), + (-666, 10385), + (-666, 10386), + (-666, 10387), + (-666, 10388), + (-666, 10389), + (-666, 10390), + (-666, 10391), + (-666, 10392), + (-666, 10393), + (-666, 10394), + (-666, 10395), + (-666, 10396), + (-666, 10397), + (-666, 10398), + (-666, 10399), + (-666, 10400), + (-666, 10401), + (-666, 10402), + (-666, 10403), + (-666, 10404), + (-666, 10405), + (-666, 10406), + (-666, 10407), + (-666, 10408), + (-666, 10409), + (-666, 10410), + (-666, 10411), + (-666, 10412), + (-666, 10413), + (-666, 10414), + (-666, 10415), + (-666, 10416), + (-666, 10417), + (-666, 10418), + (-666, 10419), + (-666, 10420), + (-666, 10421), + (-666, 10422), + (-666, 10423), + (-666, 10424), + (-666, 10425), + (-666, 10426), + (-666, 10427), + (-666, 10428), + (-666, 10429), + (-666, 10430), + (-666, 10431), + (-666, 10432), + (-666, 10433), + (-666, 10434), + (-666, 10435), + (-666, 10436), + (-666, 10437), + (-666, 10438), + (-666, 10439), + (-666, 10440), + (-666, 10441), + (-666, 10442), + (-666, 10443), + (-666, 10444), + (-666, 10445), + (-666, 10446), + (-666, 10447), + (-666, 10448), + (-666, 10449), + (-666, 10450), + (-666, 10451), + (-666, 10452), + (-666, 10453), + (-666, 10454), + (-666, 10455), + (-666, 10456), + (-666, 10457), + (-666, 10458), + (-666, 10459), + (-666, 10460), + (-666, 10461), + (-666, 10462), + (-666, 10463), + (-666, 10464), + (-666, 10465), + (-666, 10466), + (-666, 10467), + (-666, 10468), + (-666, 10469), + (-666, 10470), + (-666, 10471), + (-666, 10472), + (-666, 10473), + (-666, 10474), + (-666, 10475), + (-666, 10476), + (-666, 10477), + (-666, 10478), + (-666, 10479), + (-666, 10480), + (-666, 10481), + (-666, 10482), + (-666, 10483), + (-666, 10484), + (-666, 10485), + (-666, 10486), + (-666, 10487), + (-666, 10488), + (-666, 10489), + (-666, 10490), + (-666, 10491), + (-666, 10492), + (-666, 10493), + (-666, 10494), + (-666, 10495), + (-666, 10496), + (-666, 10497), + (-666, 10498), + (-666, 10499); \ No newline at end of file