From 729b1e75b316a9373afe62a40376bea5df52e9f3 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 20 Dec 2023 16:19:53 +0800 Subject: [PATCH] This is an automated cherry-pick of #49441 Signed-off-by: ti-chi-bot --- parser/hintparser.go | 1031 +++++++++++++---- parser/hintparser.y | 21 + parser/parser.y | 5 + parser/parser_test.go | 8 +- pkg/planner/core/casetest/hint/hint_test.go | 342 ++++++ .../integrationtest/r/expression/misc.result | 1023 ++++++++++++++++ 6 files changed, 2178 insertions(+), 252 deletions(-) create mode 100644 pkg/planner/core/casetest/hint/hint_test.go create mode 100644 tests/integrationtest/r/expression/misc.result diff --git a/parser/hintparser.go b/parser/hintparser.go index ec266f90556d9..7c5373222b5a1 100644 --- a/parser/hintparser.go +++ b/parser/hintparser.go @@ -133,11 +133,16 @@ const ( hintUseToja = 57410 yyhintMaxDepth = 200 +<<<<<<< HEAD:parser/hintparser.go yyhintTabOfs = -211 +======= + yyhintTabOfs = -217 +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go ) var ( yyhintXLAT = map[int]int{ +<<<<<<< HEAD:parser/hintparser.go 41: 0, // ')' (155x) 57379: 1, // hintAggToCop (142x) 57401: 2, // hintBCJoin (142x) @@ -270,6 +275,142 @@ var ( 57433: 129, // $default (0x) 57345: 130, // error (0x) 57348: 131, // hintInvalid (0x) +======= + 41: 0, // ')' (162x) + 57379: 1, // hintAggToCop (151x) + 57401: 2, // hintBCJoin (151x) + 57355: 3, // hintBKA (151x) + 57357: 4, // hintBNL (151x) + 57415: 5, // hintForceIndex (151x) + 57381: 6, // hintHashAgg (151x) + 57359: 7, // hintHashJoin (151x) + 57360: 8, // hintHashJoinBuild (151x) + 57361: 9, // hintHashJoinProbe (151x) + 57347: 10, // hintIdentifier (151x) + 57384: 11, // hintIgnoreIndex (151x) + 57380: 12, // hintIgnorePlanCache (151x) + 57388: 13, // hintIndexHashJoin (151x) + 57385: 14, // hintIndexJoin (151x) + 57365: 15, // hintIndexMerge (151x) + 57392: 16, // hintIndexMergeJoin (151x) + 57387: 17, // hintInlHashJoin (151x) + 57390: 18, // hintInlJoin (151x) + 57391: 19, // hintInlMergeJoin (151x) + 57351: 20, // hintJoinFixedOrder (151x) + 57352: 21, // hintJoinOrder (151x) + 57353: 22, // hintJoinPrefix (151x) + 57354: 23, // hintJoinSuffix (151x) + 57417: 24, // hintLeading (151x) + 57414: 25, // hintLimitToCop (151x) + 57375: 26, // hintMaxExecutionTime (151x) + 57394: 27, // hintMemoryQuota (151x) + 57363: 28, // hintMerge (151x) + 57382: 29, // hintMpp1PhaseAgg (151x) + 57383: 30, // hintMpp2PhaseAgg (151x) + 57367: 31, // hintMRR (151x) + 57356: 32, // hintNoBKA (151x) + 57358: 33, // hintNoBNL (151x) + 57419: 34, // hintNoDecorrelate (151x) + 57362: 35, // hintNoHashJoin (151x) + 57369: 36, // hintNoICP (151x) + 57389: 37, // hintNoIndexHashJoin (151x) + 57386: 38, // hintNoIndexJoin (151x) + 57366: 39, // hintNoIndexMerge (151x) + 57393: 40, // hintNoIndexMergeJoin (151x) + 57364: 41, // hintNoMerge (151x) + 57368: 42, // hintNoMRR (151x) + 57408: 43, // hintNoOrderIndex (151x) + 57370: 44, // hintNoRangeOptimization (151x) + 57374: 45, // hintNoSemijoin (151x) + 57372: 46, // hintNoSkipScan (151x) + 57400: 47, // hintNoSMJoin (151x) + 57395: 48, // hintNoSwapJoinInputs (151x) + 57413: 49, // hintNthPlan (151x) + 57407: 50, // hintOrderIndex (151x) + 57378: 51, // hintQBName (151x) + 57396: 52, // hintQueryType (151x) + 57397: 53, // hintReadConsistentReplica (151x) + 57398: 54, // hintReadFromStorage (151x) + 57377: 55, // hintResourceGroup (151x) + 57373: 56, // hintSemijoin (151x) + 57418: 57, // hintSemiJoinRewrite (151x) + 57376: 58, // hintSetVar (151x) + 57402: 59, // hintShuffleJoin (151x) + 57371: 60, // hintSkipScan (151x) + 57399: 61, // hintSMJoin (151x) + 57416: 62, // hintStraightJoin (151x) + 57403: 63, // hintStreamAgg (151x) + 57404: 64, // hintSwapJoinInputs (151x) + 57411: 65, // hintTimeRange (151x) + 57412: 66, // hintUseCascades (151x) + 57406: 67, // hintUseIndex (151x) + 57405: 68, // hintUseIndexMerge (151x) + 57409: 69, // hintUsePlanCache (151x) + 57410: 70, // hintUseToja (151x) + 44: 71, // ',' (145x) + 57429: 72, // hintDupsWeedOut (124x) + 57430: 73, // hintFirstMatch (124x) + 57431: 74, // hintLooseScan (124x) + 57432: 75, // hintMaterialization (124x) + 57424: 76, // hintTiFlash (124x) + 57423: 77, // hintTiKV (124x) + 57425: 78, // hintFalse (123x) + 57420: 79, // hintOLAP (123x) + 57421: 80, // hintOLTP (123x) + 57426: 81, // hintTrue (123x) + 57428: 82, // hintGB (122x) + 57427: 83, // hintMB (122x) + 57349: 84, // hintSingleAtIdentifier (103x) + 57346: 85, // hintIntLit (100x) + 93: 86, // ']' (93x) + 46: 87, // '.' (92x) + 57422: 88, // hintPartition (87x) + 61: 89, // '=' (84x) + 40: 90, // '(' (79x) + 57344: 91, // $end (29x) + 57453: 92, // QueryBlockOpt (21x) + 57445: 93, // Identifier (18x) + 57350: 94, // hintStringLit (6x) + 57435: 95, // CommaOpt (5x) + 57441: 96, // HintTable (4x) + 57442: 97, // HintTableList (4x) + 91: 98, // '[' (3x) + 43: 99, // '+' (2x) + 45: 100, // '-' (2x) + 57434: 101, // BooleanHintName (2x) + 57436: 102, // HintIndexList (2x) + 57438: 103, // HintStorageType (2x) + 57439: 104, // HintStorageTypeAndTable (2x) + 57443: 105, // HintTableListOpt (2x) + 57448: 106, // JoinOrderOptimizerHintName (2x) + 57449: 107, // NullaryHintName (2x) + 57451: 108, // PartitionList (2x) + 57452: 109, // PartitionListOpt (2x) + 57455: 110, // StorageOptimizerHintOpt (2x) + 57456: 111, // SubqueryOptimizerHintName (2x) + 57459: 112, // SubqueryStrategy (2x) + 57460: 113, // SupportedIndexLevelOptimizerHintName (2x) + 57461: 114, // SupportedTableLevelOptimizerHintName (2x) + 57462: 115, // TableOptimizerHintOpt (2x) + 57464: 116, // UnsupportedIndexLevelOptimizerHintName (2x) + 57465: 117, // UnsupportedTableLevelOptimizerHintName (2x) + 57466: 118, // Value (2x) + 57467: 119, // ViewName (2x) + 57437: 120, // HintQueryType (1x) + 57440: 121, // HintStorageTypeAndTableList (1x) + 57444: 122, // HintTrueOrFalse (1x) + 57446: 123, // IndexNameList (1x) + 57447: 124, // IndexNameListOpt (1x) + 57450: 125, // OptimizerHintList (1x) + 57454: 126, // Start (1x) + 57457: 127, // SubqueryStrategies (1x) + 57458: 128, // SubqueryStrategiesOpt (1x) + 57463: 129, // UnitOfBytes (1x) + 57468: 130, // ViewNameList (1x) + 57433: 131, // $default (0x) + 57345: 132, // error (0x) + 57348: 133, // hintInvalid (0x) +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go } yyhintSymNames = []string{ @@ -283,6 +424,7 @@ var ( "hintHashJoin", "hintHashJoinBuild", "hintHashJoinProbe", + "hintIdentifier", "hintIgnoreIndex", "hintIgnorePlanCache", "hintIndexHashJoin", @@ -356,8 +498,8 @@ var ( "hintTrue", "hintGB", "hintMB", - "hintIdentifier", "hintSingleAtIdentifier", + "hintIntLit", "']'", "'.'", "hintPartition", @@ -366,12 +508,13 @@ var ( "$end", "QueryBlockOpt", "Identifier", - "hintIntLit", "hintStringLit", "CommaOpt", "HintTable", "HintTableList", "'['", + "'+'", + "'-'", "BooleanHintName", "HintIndexList", "HintStorageType", @@ -379,6 +522,7 @@ var ( "HintTableListOpt", "JoinOrderOptimizerHintName", "NullaryHintName", + "PartitionList", "PartitionListOpt", "StorageOptimizerHintOpt", "SubqueryOptimizerHintName", @@ -388,6 +532,7 @@ var ( "TableOptimizerHintOpt", "UnsupportedIndexLevelOptimizerHintName", "UnsupportedTableLevelOptimizerHintName", + "Value", "ViewName", "HintQueryType", "HintStorageTypeAndTableList", @@ -395,12 +540,10 @@ var ( "IndexNameList", "IndexNameListOpt", "OptimizerHintList", - "PartitionList", "Start", "SubqueryStrategies", "SubqueryStrategiesOpt", "UnitOfBytes", - "Value", "ViewNameList", "$default", "error", @@ -409,6 +552,7 @@ var ( yyhintReductions = []struct{ xsym, components int }{ {0, 1}, +<<<<<<< HEAD:parser/hintparser.go {123, 1}, {121, 1}, {121, 3}, @@ -446,10 +590,54 @@ var ( {122, 3}, {103, 1}, {103, 1}, +======= + {126, 1}, + {125, 1}, + {125, 3}, + {125, 1}, + {125, 3}, + {115, 4}, + {115, 4}, + {115, 4}, + {115, 4}, + {115, 4}, + {115, 4}, + {115, 5}, + {115, 5}, + {115, 5}, + {115, 6}, + {115, 4}, + {115, 4}, + {115, 6}, + {115, 6}, + {115, 6}, + {115, 5}, + {115, 4}, + {115, 5}, + {115, 5}, + {115, 4}, + {115, 6}, + {115, 6}, + {110, 5}, + {121, 1}, + {121, 3}, + {104, 4}, + {92, 0}, + {92, 1}, + {95, 0}, + {95, 1}, + {109, 0}, + {109, 4}, + {108, 1}, + {108, 3}, + {105, 1}, + {105, 1}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go {97, 2}, {97, 3}, {96, 3}, {96, 5}, +<<<<<<< HEAD:parser/hintparser.go {128, 3}, {128, 1}, {115, 2}, @@ -473,11 +661,60 @@ var ( {104, 1}, {104, 1}, {104, 1}, +======= + {130, 3}, + {130, 1}, + {119, 2}, + {119, 1}, + {102, 4}, + {124, 0}, + {124, 1}, + {123, 1}, + {123, 3}, + {128, 0}, + {128, 1}, + {127, 1}, + {127, 3}, + {118, 1}, + {118, 1}, + {118, 1}, + {118, 2}, + {118, 2}, + {129, 1}, + {129, 1}, + {122, 1}, + {122, 1}, + {106, 1}, + {106, 1}, + {106, 1}, + {117, 1}, + {117, 1}, + {117, 1}, + {117, 1}, + {117, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, {114, 1}, {114, 1}, {114, 1}, {114, 1}, {114, 1}, + {114, 1}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, + {114, 1}, +<<<<<<< HEAD:parser/hintparser.go {111, 1}, {111, 1}, {111, 1}, @@ -535,94 +772,133 @@ var ( {105, 1}, {116, 1}, {116, 1}, +======= + {116, 1}, + {116, 1}, + {116, 1}, + {116, 1}, + {116, 1}, + {116, 1}, + {116, 1}, + {113, 1}, + {113, 1}, + {113, 1}, + {113, 1}, + {113, 1}, + {113, 1}, + {111, 1}, + {111, 1}, + {112, 1}, + {112, 1}, + {112, 1}, + {112, 1}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go {101, 1}, {101, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, - {92, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {107, 1}, + {120, 1}, + {120, 1}, + {103, 1}, + {103, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, } yyhintXErrors = map[yyhintXError]string{} +<<<<<<< HEAD:parser/hintparser.go yyhintParseTab = [298][]uint16{ // 0 {1: 285, 244, 237, 239, 273, 281, 258, 260, 261, 271, 289, 251, 247, 263, 256, 250, 246, 255, 216, 234, 235, 236, 262, 286, 223, 228, 249, 282, 283, 264, 238, 240, 292, 259, 266, 252, 248, 287, 257, 241, 265, 275, 267, 277, 269, 243, 254, 224, 274, 227, 232, 288, 233, 226, 276, 291, 225, 245, 268, 242, 290, 284, 253, 229, 279, 270, 272, 280, 278, 99: 230, 104: 217, 231, 107: 215, 222, 110: 221, 219, 214, 220, 218, 121: 213, 123: 212}, @@ -654,73 +930,107 @@ var ( {89: 293}, {89: 149}, {89: 148}, +======= + yyhintParseTab = [316][]uint16{ + // 0 + {1: 292, 251, 244, 246, 280, 288, 265, 267, 268, 239, 278, 296, 258, 254, 270, 263, 257, 253, 262, 222, 241, 242, 243, 269, 293, 229, 234, 256, 289, 290, 271, 245, 247, 299, 266, 273, 259, 255, 294, 264, 248, 272, 282, 274, 284, 276, 250, 261, 230, 281, 233, 238, 295, 240, 232, 283, 298, 231, 252, 275, 249, 297, 291, 260, 235, 286, 277, 279, 287, 285, 101: 236, 106: 223, 237, 110: 221, 228, 113: 227, 225, 220, 226, 224, 125: 219, 218}, + {91: 217}, + {1: 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 404, 91: 216, 95: 530}, + {1: 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 91: 215}, + {1: 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 91: 213}, + // 5 + {90: 527}, + {90: 524}, + {90: 521}, + {90: 516}, + {90: 513}, + // 10 + {90: 502}, + {90: 490}, + {90: 486}, + {90: 482}, + {90: 477}, + // 15 + {90: 474}, + {90: 462}, + {90: 455}, + {90: 450}, + {90: 444}, + // 20 + {90: 441}, + {90: 435}, + {90: 415}, + {90: 300}, + {90: 149}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go // 25 - {89: 147}, - {89: 146}, - {89: 145}, - {89: 144}, - {89: 143}, + {90: 148}, + {90: 147}, + {90: 146}, + {90: 145}, + {90: 144}, // 30 - {89: 142}, - {89: 141}, - {89: 140}, - {89: 139}, - {89: 138}, + {90: 143}, + {90: 142}, + {90: 141}, + {90: 140}, + {90: 139}, // 35 - {89: 137}, - {89: 136}, - {89: 135}, - {89: 134}, - {89: 133}, + {90: 138}, + {90: 137}, + {90: 136}, + {90: 135}, + {90: 134}, // 40 - {89: 132}, - {89: 131}, - {89: 130}, - {89: 129}, - {89: 128}, + {90: 133}, + {90: 132}, + {90: 131}, + {90: 130}, + {90: 129}, // 45 - {89: 127}, - {89: 126}, - {89: 125}, - {89: 124}, - {89: 123}, + {90: 128}, + {90: 127}, + {90: 126}, + {90: 125}, + {90: 124}, // 50 - {89: 122}, - {89: 121}, - {89: 120}, - {89: 119}, - {89: 118}, + {90: 123}, + {90: 122}, + {90: 121}, + {90: 120}, + {90: 119}, // 55 - {89: 117}, - {89: 116}, - {89: 115}, - {89: 114}, - {89: 113}, + {90: 118}, + {90: 117}, + {90: 116}, + {90: 115}, + {90: 114}, // 60 - {89: 112}, - {89: 111}, - {89: 110}, - {89: 109}, - {89: 108}, + {90: 113}, + {90: 112}, + {90: 111}, + {90: 110}, + {90: 109}, // 65 - {89: 107}, - {89: 106}, - {89: 101}, - {89: 100}, - {89: 99}, + {90: 108}, + {90: 107}, + {90: 106}, + {90: 101}, + {90: 100}, // 70 - {89: 98}, - {89: 97}, - {89: 96}, - {89: 95}, - {89: 94}, + {90: 99}, + {90: 98}, + {90: 97}, + {90: 96}, + {90: 95}, // 75 - {89: 93}, - {89: 92}, - {89: 91}, - {89: 90}, - {89: 89}, + {90: 94}, + {90: 93}, + {90: 92}, + {90: 91}, + {90: 90}, // 80 +<<<<<<< HEAD:parser/hintparser.go {89: 88}, {89: 87}, {75: 183, 183, 84: 295, 91: 294}, @@ -730,111 +1040,131 @@ var ( {405, 70: 406}, {186, 70: 186}, {98: 301}, +======= + {90: 89}, + {90: 88}, + {90: 87}, + {76: 185, 185, 84: 302, 92: 301}, + {76: 307, 306, 103: 305, 304, 121: 303}, + // 85 + {184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 85: 184, 184, 184, 184}, + {412, 71: 413}, + {188, 71: 188}, + {98: 308}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go {98: 84}, - {98: 83}, // 90 +<<<<<<< HEAD:parser/hintparser.go {1: 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 71: 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 295, 91: 303, 97: 302}, {70: 403, 85: 402}, {1: 335, 358, 311, 313, 371, 338, 315, 316, 317, 341, 337, 343, 346, 321, 349, 342, 345, 348, 307, 308, 309, 310, 373, 336, 331, 351, 319, 339, 340, 323, 312, 314, 375, 318, 325, 344, 347, 322, 350, 320, 324, 365, 326, 330, 328, 357, 352, 370, 364, 334, 353, 354, 355, 333, 329, 374, 332, 359, 327, 356, 372, 360, 361, 368, 369, 363, 362, 366, 367, 71: 384, 385, 386, 387, 379, 378, 380, 376, 377, 381, 383, 382, 306, 92: 305, 96: 304}, {173, 70: 173, 85: 173}, {183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 295, 183, 389, 183, 91: 388}, +======= + {98: 83}, + {1: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 72: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 92: 310, 97: 309}, + {71: 410, 86: 409}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 312, 96: 311}, + {175, 71: 175, 86: 175}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go // 95 - {82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82}, - {81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81}, - {80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80}, - {79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79}, - {78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78}, + {185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 86: 185, 396, 185, 92: 395}, + {82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82}, + {81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81}, + {80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80}, + {79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79}, // 100 - {77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77}, - {76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76}, - {75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75}, - {74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74}, - {73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73}, + {78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78}, + {77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77}, + {76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76}, + {75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75}, + {74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74}, // 105 - {72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72}, - {71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71}, - {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70}, - {69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69}, - {68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, + {73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73}, + {72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72}, + {71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71}, + {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70}, + {69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69}, // 110 - {67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67}, - {66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66}, - {65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65}, - {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, - {63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63}, + {68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, + {67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67}, + {66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66}, + {65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65}, + {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, // 115 - {62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62}, - {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, - {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, - {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, - {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, + {63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63}, + {62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62}, + {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, + {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, + {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, // 120 - {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, - {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, - {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, - {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, - {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, + {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, + {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, + {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, + {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, + {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, // 125 - {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, - {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, - {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, - {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, - {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, + {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, + {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, + {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, + {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, + {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, // 130 - {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, - {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, - {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, - {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, - {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, + {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, + {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, + {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, + {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, + {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, // 135 - {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, - {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, - {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, - {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, - {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, + {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, + {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, + {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, + {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, + {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, // 140 - {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, - {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, - {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, - {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, - {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, + {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, + {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, + {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, + {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, + {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, // 145 - {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, - {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, - {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, - {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, + {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, + {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, + {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, + {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, // 150 - {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, - {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, - {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, - {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, - {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, + {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, + {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, + {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, + {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, + {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, // 155 - {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, - {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, - {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, - {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, - {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, + {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, + {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, + {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, + {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, + {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, // 160 - {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, - {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, - {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, - {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, - {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, + {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, + {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, + {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, + {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, + {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, // 165 - {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, - {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, - {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, + {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, + {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, + {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, + {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, + {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, // 170 - {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, - {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, - {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, + {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, + {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, + {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, + {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, // 175 +<<<<<<< HEAD:parser/hintparser.go {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 85: 179, 87: 392, 106: 401}, @@ -864,9 +1194,66 @@ var ( {78: 183, 183, 84: 295, 91: 409}, {78: 411, 412, 116: 410}, {413}, +======= + {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, + {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 86: 181, 88: 399, 109: 408}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 397}, + // 180 + {185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 86: 185, 88: 185, 92: 398}, + {181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 86: 181, 88: 399, 109: 400}, + {90: 401}, + {172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 86: 172}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 403, 108: 402}, + // 185 + {405, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 404, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 95: 406}, + {179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179}, + {182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 72: 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 85: 182, 94: 182}, + {180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 86: 180}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 407}, + // 190 + {178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 85: 178}, + {173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 86: 173}, + {186, 71: 186}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 312, 96: 411}, + {174, 71: 174, 86: 174}, + // 195 + {1: 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 91: 189}, + {76: 307, 306, 103: 305, 414}, + {187, 71: 187}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 302, 185, 92: 416, 418, 108: 417}, + {85: 433}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go // 200 + {429, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 404, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 85: 183, 95: 430}, + {179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 85: 179, 89: 419}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 85: 423, 93: 422, 421, 99: 424, 425, 118: 420}, + {428}, + {158}, + // 205 + {157}, + {156}, + {85: 427}, + {85: 426}, + {154}, + // 210 + {155}, + {1: 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 91: 190}, + {1: 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 91: 192}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 85: 431, 93: 407}, + {432}, + // 215 + {1: 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 91: 191}, + {434}, + {1: 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 91: 193}, + {79: 185, 185, 84: 302, 92: 436}, + {79: 438, 439, 120: 437}, + // 220 + {440}, {86}, {85}, +<<<<<<< HEAD:parser/hintparser.go {1: 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 90: 188}, {183, 84: 295, 91: 415}, {416}, @@ -875,9 +1262,20 @@ var ( {77: 183, 80: 183, 84: 295, 91: 418}, {77: 421, 80: 420, 118: 419}, {422}, +======= + {1: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 91: 194}, + {185, 84: 302, 92: 442}, + // 225 + {443}, + {1: 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 91: 195}, + {78: 185, 81: 185, 84: 302, 92: 445}, + {78: 448, 81: 447, 122: 446}, + {449}, + // 230 +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go {151}, - // 210 {150}, +<<<<<<< HEAD:parser/hintparser.go {1: 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 90: 190}, {94: 424}, {70: 397, 94: 181, 425}, @@ -982,6 +1380,109 @@ var ( {1: 285, 244, 237, 239, 273, 281, 258, 260, 261, 271, 289, 251, 247, 263, 256, 250, 246, 255, 216, 234, 235, 236, 262, 286, 223, 228, 249, 282, 283, 264, 238, 240, 292, 259, 266, 252, 248, 287, 257, 241, 265, 275, 267, 277, 269, 243, 254, 224, 274, 227, 232, 288, 233, 226, 276, 291, 225, 245, 268, 242, 290, 284, 253, 229, 279, 270, 272, 280, 278, 99: 230, 104: 217, 231, 107: 508, 222, 110: 221, 219, 507, 220, 218}, {1: 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 90: 208}, {1: 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 90: 206}, +======= + {1: 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 91: 196}, + {94: 451}, + {71: 404, 94: 183, 452}, + // 235 + {94: 453}, + {454}, + {1: 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 91: 197}, + {84: 302, 185, 92: 456}, + {85: 457}, + // 240 + {82: 460, 459, 129: 458}, + {461}, + {153}, + {152}, + {1: 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 91: 198}, + // 245 + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 463}, + {464, 71: 465}, + {1: 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 91: 200}, + {185, 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 302, 87: 185, 92: 469, 468, 119: 467, 130: 466}, + {471, 87: 472}, + // 250 + {170, 87: 170}, + {185, 84: 302, 87: 185, 92: 470}, + {168, 87: 168}, + {169, 87: 169}, + {1: 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 91: 199}, + // 255 + {185, 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 302, 87: 185, 92: 469, 468, 119: 473}, + {171, 87: 171}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 475}, + {476}, + {1: 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 91: 201}, + // 260 + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 478}, + {89: 479}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 85: 423, 93: 422, 421, 99: 424, 425, 118: 480}, + {481}, + {1: 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 91: 202}, + // 265 + {84: 302, 185, 92: 483}, + {85: 484}, + {485}, + {1: 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 91: 203}, + {84: 302, 185, 92: 487}, + // 270 + {85: 488}, + {489}, + {1: 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 91: 204}, + {185, 72: 185, 185, 185, 185, 84: 302, 92: 491}, + {162, 72: 495, 496, 497, 498, 112: 494, 127: 493, 492}, + // 275 + {501}, + {161, 71: 499}, + {160, 71: 160}, + {105, 71: 105}, + {104, 71: 104}, + // 280 + {103, 71: 103}, + {102, 71: 102}, + {72: 495, 496, 497, 498, 112: 500}, + {159, 71: 159}, + {1: 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 91: 205}, + // 285 + {1: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 72: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 92: 504, 102: 503}, + {512}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 312, 96: 505}, + {183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 404, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 95: 506}, + {166, 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 509, 123: 508, 507}, + // 290 + {167}, + {165, 71: 510}, + {164, 71: 164}, + {1: 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 511}, + {163, 71: 163}, + // 295 + {1: 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 91: 206}, + {1: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 72: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 92: 504, 102: 514}, + {515}, + {1: 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 91: 207}, + {185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 72: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 92: 519, 97: 518, 105: 517}, + // 300 + {520}, + {177, 71: 410}, + {176, 342, 365, 318, 320, 378, 345, 322, 323, 324, 313, 348, 344, 350, 353, 328, 356, 349, 352, 355, 314, 315, 316, 317, 380, 343, 338, 358, 326, 346, 347, 330, 319, 321, 382, 325, 332, 351, 354, 329, 357, 327, 331, 372, 333, 337, 335, 364, 359, 377, 371, 341, 360, 361, 362, 340, 336, 381, 339, 366, 334, 363, 379, 367, 368, 375, 376, 370, 369, 373, 374, 72: 391, 392, 393, 394, 386, 385, 387, 383, 384, 388, 390, 389, 93: 312, 96: 311}, + {1: 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 91: 208}, + {185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 72: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 92: 519, 97: 518, 105: 522}, + // 305 + {523}, + {1: 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 91: 209}, + {1: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 72: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 302, 92: 310, 97: 525}, + {526, 71: 410}, + {1: 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 91: 210}, + // 310 + {185, 84: 302, 92: 528}, + {529}, + {1: 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 91: 211}, + {1: 292, 251, 244, 246, 280, 288, 265, 267, 268, 239, 278, 296, 258, 254, 270, 263, 257, 253, 262, 222, 241, 242, 243, 269, 293, 229, 234, 256, 289, 290, 271, 245, 247, 299, 266, 273, 259, 255, 294, 264, 248, 272, 282, 274, 284, 276, 250, 261, 230, 281, 233, 238, 295, 240, 232, 283, 298, 231, 252, 275, 249, 297, 291, 260, 235, 286, 277, 279, 287, 285, 101: 236, 106: 223, 237, 110: 532, 228, 113: 227, 225, 531, 226, 224}, + {1: 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 91: 214}, + // 315 + {1: 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 91: 212}, +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go } ) @@ -1353,6 +1854,26 @@ yynewstate: } } case 24: + { + parser.warnUnsupportedHint(yyS[yypt-4].ident) + parser.yyVAL.hint = nil + } + case 25: + { + parser.warnUnsupportedHint(yyS[yypt-3].ident) + parser.yyVAL.hint = nil + } + case 26: + { + parser.warnUnsupportedHint(yyS[yypt-5].ident) + parser.yyVAL.hint = nil + } + case 27: + { + parser.warnUnsupportedHint(yyS[yypt-5].ident) + parser.yyVAL.hint = nil + } + case 28: { hs := yyS[yypt-1].hints name := model.NewCIStr(yyS[yypt-4].ident) @@ -1363,60 +1884,60 @@ yynewstate: } parser.yyVAL.hints = hs } - case 25: + case 29: { parser.yyVAL.hints = []*ast.TableOptimizerHint{yyS[yypt-0].hint} } - case 26: + case 30: { parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hint) } - case 27: + case 31: { h := yyS[yypt-1].hint h.HintData = model.NewCIStr(yyS[yypt-3].ident) parser.yyVAL.hint = h } - case 28: + case 32: { parser.yyVAL.ident = "" } - case 32: + case 36: { parser.yyVAL.modelIdents = nil } - case 33: + case 37: { parser.yyVAL.modelIdents = yyS[yypt-1].modelIdents } - case 34: + case 38: { parser.yyVAL.modelIdents = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 35: + case 39: { parser.yyVAL.modelIdents = append(yyS[yypt-2].modelIdents, model.NewCIStr(yyS[yypt-0].ident)) } - case 37: + case 41: { parser.yyVAL.hint = &ast.TableOptimizerHint{ QBName: model.NewCIStr(yyS[yypt-0].ident), } } - case 38: + case 42: { parser.yyVAL.hint = &ast.TableOptimizerHint{ Tables: []ast.HintTable{yyS[yypt-0].table}, QBName: model.NewCIStr(yyS[yypt-1].ident), } } - case 39: + case 43: { h := yyS[yypt-2].hint h.Tables = append(h.Tables, yyS[yypt-0].table) parser.yyVAL.hint = h } - case 40: + case 44: { parser.yyVAL.table = ast.HintTable{ TableName: model.NewCIStr(yyS[yypt-2].ident), @@ -1424,7 +1945,7 @@ yynewstate: PartitionList: yyS[yypt-0].modelIdents, } } - case 41: + case 45: { parser.yyVAL.table = ast.HintTable{ DBName: model.NewCIStr(yyS[yypt-4].ident), @@ -1433,71 +1954,85 @@ yynewstate: PartitionList: yyS[yypt-0].modelIdents, } } - case 42: + case 46: { h := yyS[yypt-2].hint h.Tables = append(h.Tables, yyS[yypt-0].table) parser.yyVAL.hint = h } - case 43: + case 47: { parser.yyVAL.hint = &ast.TableOptimizerHint{ Tables: []ast.HintTable{yyS[yypt-0].table}, } } - case 44: + case 48: { parser.yyVAL.table = ast.HintTable{ TableName: model.NewCIStr(yyS[yypt-1].ident), QBName: model.NewCIStr(yyS[yypt-0].ident), } } - case 45: + case 49: { parser.yyVAL.table = ast.HintTable{ QBName: model.NewCIStr(yyS[yypt-0].ident), } } - case 46: + case 50: { h := yyS[yypt-0].hint h.Tables = []ast.HintTable{yyS[yypt-2].table} h.QBName = model.NewCIStr(yyS[yypt-3].ident) parser.yyVAL.hint = h } - case 47: + case 51: { parser.yyVAL.hint = &ast.TableOptimizerHint{} } - case 49: + case 53: { parser.yyVAL.hint = &ast.TableOptimizerHint{ Indexes: []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)}, } } - case 50: + case 54: { h := yyS[yypt-2].hint h.Indexes = append(h.Indexes, model.NewCIStr(yyS[yypt-0].ident)) parser.yyVAL.hint = h } - case 57: + case 61: { parser.yyVAL.ident = strconv.FormatUint(yyS[yypt-0].number, 10) } - case 58: + case 62: { parser.yyVAL.number = 1024 * 1024 } - case 59: + case 63: { parser.yyVAL.number = 1024 * 1024 * 1024 } - case 60: + case 64: { +<<<<<<< HEAD:parser/hintparser.go parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: true} } case 61: +======= + parser.yyVAL.number = 1024 * 1024 + } + case 65: + { + parser.yyVAL.number = 1024 * 1024 * 1024 + } + case 66: + { + parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: true} + } + case 67: +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/hintparser.go { parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: false} } diff --git a/parser/hintparser.y b/parser/hintparser.y index dd21c899017de..e6d64c6462df2 100644 --- a/parser/hintparser.y +++ b/parser/hintparser.y @@ -351,6 +351,27 @@ TableOptimizerHintOpt: HintData: model.NewCIStr($4), } } +| hintIdentifier '(' QueryBlockOpt hintIntLit ')' + /* The hints below are pseudo hint. They are unsupported hints */ + { + parser.warnUnsupportedHint($1) + $$ = nil + } +| hintIdentifier '(' PartitionList ')' + { + parser.warnUnsupportedHint($1) + $$ = nil + } +| hintIdentifier '(' PartitionList CommaOpt hintIntLit ')' + { + parser.warnUnsupportedHint($1) + $$ = nil + } +| hintIdentifier '(' Identifier '=' Value ')' + { + parser.warnUnsupportedHint($1) + $$ = nil + } StorageOptimizerHintOpt: "READ_FROM_STORAGE" '(' QueryBlockOpt HintStorageTypeAndTableList ')' diff --git a/parser/parser.y b/parser/parser.y index 7c1580bdd804d..a183699926fa8 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -9759,6 +9759,11 @@ SetOprStmtWoutLimitOrderBy: setOprList2 = []ast.Node{x} with2 = x.With case *ast.SetOprStmt: +<<<<<<< HEAD:parser/parser.y +======= + // child setOprStmt's limit and order should also make sense + // we should separate it out from other normal SetOprSelectList. +>>>>>>> c06f54c6984 (parser: fix invalid hint addition disable other valid hints (#49441)):pkg/parser/parser.y setOprList2 = x.SelectList.Selects with2 = x.With } diff --git a/parser/parser_test.go b/parser/parser_test.go index bea53c904ba39..5f4a4f8c793b2 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -3680,13 +3680,13 @@ func TestHintError(t *testing.T) { stmt, warns, err := p.Parse("select /*+ tidb_unknown(T1,t2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") require.NoError(t, err) require.Len(t, warns, 1) - require.Regexp(t, `Optimizer hint syntax error at line 1 column 23 near "tidb_unknown\(T1,t2\) \*/" $`, warns[0].Error()) - require.Len(t, stmt[0].(*ast.SelectStmt).TableHints, 0) - stmt, warns, err = p.Parse("select /*+ TIDB_INLJ(t1, T2) tidb_unknow(T1,t2, 1) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + require.Equal(t, `[parser:8061]Optimizer hint tidb_unknown is not supported by TiDB and is ignored`, warns[0].Error()) require.Len(t, stmt[0].(*ast.SelectStmt).TableHints, 0) + stmt, warns, err = p.Parse("select /*+ TIDB_INLJ(t1, T2) tidb_unknown(T1,t2, 1) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + require.Len(t, stmt[0].(*ast.SelectStmt).TableHints, 1) require.NoError(t, err) require.Len(t, warns, 1) - require.Regexp(t, `Optimizer hint syntax error at line 1 column 40 near "tidb_unknow\(T1,t2, 1\) \*/" $`, warns[0].Error()) + require.Equal(t, `[parser:8061]Optimizer hint tidb_unknown is not supported by TiDB and is ignored`, warns[0].Error()) _, _, err = p.Parse("select c1, c2 from /*+ tidb_unknow(T1,t2) */ t1, t2 where t1.c1 = t2.c1", "", "") require.NoError(t, err) // Hints are ignored after the "FROM" keyword! _, _, err = p.Parse("select1 /*+ TIDB_INLJ(t1, T2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") diff --git a/pkg/planner/core/casetest/hint/hint_test.go b/pkg/planner/core/casetest/hint/hint_test.go new file mode 100644 index 0000000000000..d62bd7d59777f --- /dev/null +++ b/pkg/planner/core/casetest/hint/hint_test.go @@ -0,0 +1,342 @@ +// Copyright 2023 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hint + +import ( + "testing" + + "github.com/pingcap/tidb/pkg/domain" + "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/planner/core/internal" + "github.com/pingcap/tidb/pkg/sessionctx/variable" + "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testdata" + "github.com/stretchr/testify/require" +) + +func TestReadFromStorageHint(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("set tidb_cost_model_version=2") + tk.MustExec("drop table if exists t, tt, ttt") + tk.MustExec("set session tidb_allow_mpp=OFF") + // since allow-mpp is adjusted to false, there will be no physical plan if TiFlash cop is banned. + tk.MustExec("set @@session.tidb_allow_tiflash_cop=ON") + tk.MustExec("create table t(a int, b int, index ia(a))") + tk.MustExec("create table tt(a int, b int, primary key(a))") + tk.MustExec("create table ttt(a int, primary key (a desc))") + + // Create virtual tiflash replica info. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + db, exists := is.SchemaByName(model.NewCIStr("test")) + require.True(t, exists) + for _, tblInfo := range db.Tables { + tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ + Count: 1, + Available: true, + } + } + + var input []string + var output []struct { + SQL string + Plan []string + Warn []string + } + integrationSuiteData := GetIntegrationSuiteData() + integrationSuiteData.LoadTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + output[i].Warn = testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings()) + }) + res := tk.MustQuery(tt) + res.Check(testkit.Rows(output[i].Plan...)) + require.Equal(t, output[i].Warn, testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings())) + } +} + +func TestAllViewHintType(t *testing.T) { + store := testkit.CreateMockStore(t, internal.WithMockTiFlash(2)) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("set tidb_cost_model_version=2") + tk.MustExec("set @@session.tidb_allow_mpp=ON") + tk.MustExec("set @@session.tidb_isolation_read_engines='tiflash, tikv'") + tk.MustExec("drop view if exists v, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12") + tk.MustExec("drop table if exists t, t1, t2, t4, t3, t5") + tk.MustExec("create table t(a int not null, b int, index idx_a(a));") + tk.MustExec("create table t1(a int not null, b int, index idx_a(a));") + tk.MustExec("create table t2(a int, b int, index idx_a(a));") + tk.MustExec("create table t3(a int, b int, index idx_a(a));") + tk.MustExec("create table t4(a int, b int, index idx_a(a));") + tk.MustExec("create table t5(a int, b int, index idx_a(a), index idx_b(b));") + + // Create virtual tiflash replica info. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + db, exists := is.SchemaByName(model.NewCIStr("test")) + require.True(t, exists) + for _, tblInfo := range db.Tables { + if tblInfo.Name.L == "t" { + tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ + Count: 1, + Available: true, + } + } + } + + tk.MustExec("create definer='root'@'localhost' view v as select t.a, t.b from t join t1 on t.a = t1.a;") + tk.MustExec("create definer='root'@'localhost' view v1 as select t2.a, t2.b from t2 join t3 join v where t2.b = t3.b and t3.a = v.a;") + tk.MustExec("create definer='root'@'localhost' view v2 as select t.a, t.b from t join (select count(*) as a from t1 join v1 on t1.b=v1.b group by v1.a) tt on t.a = tt.a;") + tk.MustExec("create definer='root'@'localhost' view v3 as select * from t5 where a > 1 and b < 2;") + tk.MustExec("create definer='root'@'localhost' view v4 as select * from t5 where a > 1 or b < 2;") + tk.MustExec("create definer='root'@'localhost' view v5 as SELECT * FROM t WHERE EXISTS (SELECT 1 FROM t1 WHERE t1.b = t.b);") + tk.MustExec("create definer='root'@'localhost' view v6 as select * from t1 where t1.a < (select sum(t2.a) from t2 where t2.b = t1.b);") + tk.MustExec("create definer='root'@'localhost' view v7 as WITH CTE AS (SELECT * FROM t WHERE t.a < 60) SELECT * FROM CTE WHERE CTE.a <18 union select * from cte where cte.b > 1;") + tk.MustExec("create definer='root'@'localhost' view v8 as WITH CTE1 AS (SELECT b FROM t1), CTE2 AS (WITH CTE3 AS (SELECT a FROM t2), CTE4 AS (SELECT a FROM t3) SELECT CTE3.a FROM CTE3, CTE4) SELECT b FROM CTE1, CTE2 union select * from CTE1;") + tk.MustExec("create definer='root'@'localhost' view v9 as select sum(a) from t;") + tk.MustExec("create definer='root'@'localhost' view v10 as SELECT * FROM t WHERE a > 10 ORDER BY b LIMIT 1;") + tk.MustExec("create definer='root'@'localhost' view v11 as select a, sum(b) from t group by a") + tk.MustExec("create definer='root'@'localhost' view v12 as select t.a, t.b from t join t t1 on t.a = t1.a;") + + var input []string + var output []struct { + SQL string + Plan []string + Warn []string + } + integrationSuiteData := GetIntegrationSuiteData() + integrationSuiteData.LoadTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + output[i].Warn = testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings()) + }) + res := tk.MustQuery(tt) + res.Check(testkit.Rows(output[i].Plan...)) + require.Equal(t, output[i].Warn, testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings())) + } +} + +func TestJoinHintCompatibility(t *testing.T) { + store := testkit.CreateMockStore(t, internal.WithMockTiFlash(2)) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("set tidb_cost_model_version=2") + tk.MustExec("set @@session.tidb_allow_mpp=ON") + tk.MustExec("set @@session.tidb_isolation_read_engines='tiflash, tikv'") + tk.MustExec("drop view if exists v, v1, v2") + tk.MustExec("drop table if exists t, t1, t2, t3, t4, t5, t6, t7, t8, t9;") + tk.MustExec("create table t(a int not null, b int, index idx_a(a), index idx_b(b));") + tk.MustExec("create table t1(a int not null, b int, index idx_a(a), index idx_b(b));") + tk.MustExec("create table t2(a int, b int, index idx_a(a), index idx_b(b));") + tk.MustExec("create table t3(a int, b int, index idx_a(a), index idx_b(b));") + tk.MustExec("create table t4(a int, b int, index idx_a(a), index idx_b(b));") + tk.MustExec("create table t5(a int, b int, index idx_a(a), index idx_b(b));") + tk.MustExec("create table t6(a int, b int, index idx_a(a), index idx_b(b));") + tk.MustExec("create table t7(a int, b int, index idx_a(a), index idx_b(b)) partition by hash(a) partitions 4;") + tk.MustExec("create table t8(a int, b int, index idx_a(a), index idx_b(b)) partition by hash(a) partitions 4;") + tk.MustExec("create table t9(a int, b int, index idx_a(a), index idx_b(b)) partition by hash(a) partitions 4;") + tk.MustExec("analyze table t7, t8, t9") + + // Create virtual tiflash replica info. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + db, exists := is.SchemaByName(model.NewCIStr("test")) + require.True(t, exists) + for _, tblInfo := range db.Tables { + name := tblInfo.Name.L + if name == "t4" || name == "t5" || name == "t6" { + tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ + Count: 1, + Available: true, + } + } + } + + tk.MustExec("create definer='root'@'localhost' view v as select /*+ leading(t1), inl_join(t1) */ t.a from t join t1 join t2 where t.a = t1.a and t1.b = t2.b;") + tk.MustExec("create definer='root'@'localhost' view v1 as select /*+ leading(t2), merge_join(t) */ t.a from t join t1 join t2 where t.a = t1.a and t1.b = t2.b;") + tk.MustExec("create definer='root'@'localhost' view v2 as select t.a from t join t1 join t2 where t.a = t1.a and t1.b = t2.b;") + + var input []string + var output []struct { + SQL string + Plan []string + Warn []string + } + integrationSuiteData := GetIntegrationSuiteData() + integrationSuiteData.LoadTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + output[i].Warn = testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings()) + }) + res := tk.MustQuery(tt) + res.Check(testkit.Rows(output[i].Plan...)) + require.Equal(t, output[i].Warn, testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings())) + } +} + +func TestReadFromStorageHintAndIsolationRead(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("set tidb_cost_model_version=2") + tk.MustExec("drop table if exists t, tt, ttt") + tk.MustExec("create table t(a int, b int, index ia(a))") + tk.MustExec("set @@session.tidb_isolation_read_engines=\"tikv\"") + + // Create virtual tiflash replica info. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + db, exists := is.SchemaByName(model.NewCIStr("test")) + require.True(t, exists) + for _, tblInfo := range db.Tables { + tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ + Count: 1, + Available: true, + } + } + + var input []string + var output []struct { + SQL string + Plan []string + Warn []string + } + integrationSuiteData := GetIntegrationSuiteData() + integrationSuiteData.LoadTestCases(t, &input, &output) + for i, tt := range input { + tk.Session().GetSessionVars().StmtCtx.SetWarnings(nil) + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + output[i].Warn = testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings()) + }) + res := tk.MustQuery(tt) + res.Check(testkit.Rows(output[i].Plan...)) + require.Equal(t, output[i].Warn, testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings())) + } +} + +func TestIsolationReadTiFlashUseIndexHint(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, index idx(a));") + + // Create virtual tiflash replica info. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + db, exists := is.SchemaByName(model.NewCIStr("test")) + require.True(t, exists) + for _, tblInfo := range db.Tables { + tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ + Count: 1, + Available: true, + } + } + + tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") + var input []string + var output []struct { + SQL string + Plan []string + Warn []string + } + integrationSuiteData := GetIntegrationSuiteData() + integrationSuiteData.LoadTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + output[i].Warn = testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings()) + }) + res := tk.MustQuery(tt) + res.Check(testkit.Rows(output[i].Plan...)) + require.Equal(t, output[i].Warn, testdata.ConvertSQLWarnToStrings(tk.Session().GetSessionVars().StmtCtx.GetWarnings())) + } +} + +func TestOptimizeHintOnPartitionTable(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec(`create table t ( + a int, b int, c varchar(20), + primary key(a), key(b), key(c) + ) partition by range columns(a) ( + partition p0 values less than(6), + partition p1 values less than(11), + partition p2 values less than(16));`) + tk.MustExec(`insert into t values (1,1,"1"), (2,2,"2"), (8,8,"8"), (11,11,"11"), (15,15,"15")`) + tk.MustExec("set @@tidb_enable_index_merge = off") + defer func() { + tk.MustExec("set @@tidb_enable_index_merge = on") + }() + + // Create virtual tiflash replica info. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + db, exists := is.SchemaByName(model.NewCIStr("test")) + require.True(t, exists) + for _, tblInfo := range db.Tables { + if tblInfo.Name.L == "t" { + tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ + Count: 1, + Available: true, + } + } + } + + tk.MustExec(`set @@tidb_partition_prune_mode='` + string(variable.Static) + `'`) + + var input []string + var output []struct { + SQL string + Plan []string + Warn []string + } + integrationSuiteData := GetIntegrationSuiteData() + integrationSuiteData.LoadTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery("explain format = 'brief' " + tt).Rows()) + output[i].Warn = testdata.ConvertRowsToStrings(tk.MustQuery("show warnings").Rows()) + }) + tk.MustQuery("explain format = 'brief' " + tt).Check(testkit.Rows(output[i].Plan...)) + tk.MustQuery("show warnings").Check(testkit.Rows(output[i].Warn...)) + } + tk.MustQuery("SELECT /*+ MAX_EXECUTION_TIME(10) */ SLEEP(5)").Check(testkit.Rows("0")) + tk.MustQuery("SELECT /*+ MAX_EXECUTION_TIME(10), dtc(name=tt) */ SLEEP(5)").Check(testkit.Rows("0")) + require.Len(t, tk.Session().GetSessionVars().StmtCtx.GetWarnings(), 1) + tk.MustQuery("SELECT /*+ MAX_EXECUTION_TIME(10), dtc(name=tt) unknow(t1,t2) */ SLEEP(5)").Check(testkit.Rows("0")) + require.Len(t, tk.Session().GetSessionVars().StmtCtx.GetWarnings(), 2) +} diff --git a/tests/integrationtest/r/expression/misc.result b/tests/integrationtest/r/expression/misc.result new file mode 100644 index 0000000000000..e55f8fc4fe65d --- /dev/null +++ b/tests/integrationtest/r/expression/misc.result @@ -0,0 +1,1023 @@ +SELECT LENGTH(b''), LENGTH(B''), b''+1, b''-1, B''+1; +LENGTH(b'') LENGTH(B'') b''+1 b''-1 B''+1 +0 0 1 -1 1 +select timestamp '2017-01-01 00:00:00'; +timestamp '2017-01-01 00:00:00' +2017-01-01 00:00:00 +select timestamp '2017@01@01 00:00:00'; +timestamp '2017@01@01 00:00:00' +2017-01-01 00:00:00 +select timestamp '2017@01@01 00~00~00'; +timestamp '2017@01@01 00~00~00' +2017-01-01 00:00:00 +select timestamp '2017@01@0001 00~00~00.333'; +timestamp '2017@01@0001 00~00~00.333' +2017-01-01 00:00:00.333 +select timestamp '00:00:00'; +Error 1292 (22007): Incorrect datetime value: '00:00:00' +select timestamp '1992-01-03'; +Error 1292 (22007): Incorrect datetime value: '1992-01-03' +select timestamp '20171231235959.999999'; +Error 1292 (22007): Incorrect datetime value: '20171231235959.999999' +select time '117:01:12'; +time '117:01:12' +117:01:12 +select time '01:00:00.999999'; +time '01:00:00.999999' +01:00:00.999999 +select time '1 01:00:00'; +time '1 01:00:00' +25:00:00 +select time '110:00:00'; +time '110:00:00' +110:00:00 +select time'-1:1:1.123454656'; +time'-1:1:1.123454656' +-01:01:01.123455 +select time '33:33'; +time '33:33' +33:33:00 +select time '1.1'; +time '1.1' +00:00:01.1 +select time '21'; +time '21' +00:00:21 +select time '20 20:20'; +time '20 20:20' +500:20:00 +select time '2017-01-01 00:00:00'; +Error 1292 (22007): Incorrect time value: '2017-01-01 00:00:00' +select time '071231235959.999999'; +Error 1292 (22007): Incorrect time value: '071231235959.999999' +select time '20171231235959.999999'; +Error 1292 (22007): Incorrect time value: '20171231235959.999999' +select ADDDATE('2008-01-34', -1); +ADDDATE('2008-01-34', -1) +NULL +Level Code Message +Warning 1292 Incorrect datetime value: '2008-01-34' +set sql_mode=''; +drop table if exists t; +create table t1(a decimal(10,5), b decimal(10,1)); +insert into t1 values(123.12345, 123.12345); +update t1 set b = a; +select a, b from t1; +a b +123.12345 123.1 +select 2.00000000000000000000000000000001 * 1.000000000000000000000000000000000000000000002; +2.00000000000000000000000000000001 * 1.000000000000000000000000000000000000000000002 +2.000000000000000000000000000000 +set sql_mode=default; +drop table if exists t; +create table t(a decimal(38, 17)); +insert into t select 0.5999991229316*0.918755041726043; +select * from t; +a +0.55125221922461136 +select cast(1 as decimal(60,30)) / cast(1 as decimal(60,30)) / cast(1 as decimal(60, 30)); +cast(1 as decimal(60,30)) / cast(1 as decimal(60,30)) / cast(1 as decimal(60, 30)) +1.000000000000000000000000000000 +select cast(1 as decimal(60,30)) / cast(3 as decimal(60,30)) / cast(7 as decimal(60, 30)); +cast(1 as decimal(60,30)) / cast(3 as decimal(60,30)) / cast(7 as decimal(60, 30)) +0.047619047619047619047619047619 +select cast(1 as decimal(60,30)) / cast(3 as decimal(60,30)) / cast(7 as decimal(60, 30)) / cast(13 as decimal(60, 30)); +cast(1 as decimal(60,30)) / cast(3 as decimal(60,30)) / cast(7 as decimal(60, 30)) / cast(13 as decimal(60, 30)) +0.003663003663003663003663003663 +drop table if exists t; +create table t (i int key, j float); +insert into t values (1, 0.01); +select * from t; +i j +1 0.01 +insert into t values (1, 0.02) on duplicate key update j = values (j); +select * from t; +i j +1 0.02 +drop table if exists t; +create table t (a bigint primary key, b enum('a','b','c')); +insert into t values (1, "a"); +select * from t; +a b +1 a +insert into t values (1, "b") on duplicate key update b = values(b); +select * from t; +a b +1 b +drop table if exists t; +drop table if exists s; +create table t(id int primary key, a int); +create table s(a int); +insert into s values(1),(2); +select t.id = 1.234 from t right join s on t.a = s.a; +t.id = 1.234 +NULL +NULL +SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' +OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' +OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' +OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' +OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' +OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' +OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' +OR Variable_name = 'license' OR Variable_name = 'init_connect'; +Variable_name Value +character_set_client utf8mb4 +character_set_connection utf8mb4 +character_set_results utf8mb4 +character_set_server utf8mb4 +init_connect +interactive_timeout 28800 +license Apache License 2.0 +lower_case_table_names 2 +max_allowed_packet 67108864 +net_buffer_length 16384 +net_write_timeout 60 +query_cache_size 1048576 +query_cache_type OFF +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +system_time_zone Asia/Shanghai +time_zone Asia/Shanghai +transaction_isolation REPEATABLE-READ +tx_isolation REPEATABLE-READ +wait_timeout 28800 +select '1e800' + 1e100; +'1e800' + 1e100 +1.7976931348623157e308 +select '-1e800' - 1e100; +'-1e800' - 1e100 +-1.7976931348623157e308 +drop table if exists identity; +create table identity (id int not null primary key auto_increment); +SELECT @@identity; +@@identity +0 +INSERT INTO identity VALUES (NULL); +SELECT @@identity, LAST_INSERT_ID(); +@@identity LAST_INSERT_ID() +1 1 +INSERT INTO identity VALUES (NULL); +SELECT @@identity, LAST_INSERT_ID(); +@@identity LAST_INSERT_ID() +2 2 +INSERT INTO identity VALUES (NULL); +SELECT @@identity, LAST_INSERT_ID(); +@@identity LAST_INSERT_ID() +3 3 +drop table if exists lastinsertid; +create table lastinsertid (id int not null primary key auto_increment); +SELECT @@last_insert_id; +@@last_insert_id +3 +INSERT INTO lastinsertid VALUES (NULL); +SELECT @@last_insert_id, LAST_INSERT_ID(); +@@last_insert_id LAST_INSERT_ID() +1 1 +INSERT INTO lastinsertid VALUES (NULL); +SELECT @@last_insert_id, LAST_INSERT_ID(); +@@last_insert_id LAST_INSERT_ID() +2 2 +INSERT INTO lastinsertid VALUES (NULL); +SELECT @@last_insert_id, LAST_INSERT_ID(); +@@last_insert_id LAST_INSERT_ID() +3 3 +drop table if exists t; +create table t (a int, b int as (a + 1)); +insert into t(a) values (1); +select /*+ LIMIT_TO_COP() */ b from t limit 1; +b +2 +select /*+ LIMIT_TO_COP() */ b from t order by b limit 1; +b +2 +drop table if exists t0, t1; +CREATE TABLE t0(c0 float); +CREATE TABLE t1(c0 float); +INSERT INTO t1(c0) VALUES (0); +INSERT INTO t0(c0) VALUES (0); +SELECT t1.c0 FROM t1, t0 WHERE t0.c0=-t1.c0; +c0 +0 +drop table if exists kankan1, kankan2; +create table kankan1(id int, name text); +insert into kankan1 values(1, 'a'); +insert into kankan1 values(2, 'a'); +create table kankan2(id int, h1 text); +insert into kankan2 values(2, 'z'); +select t1.id from kankan1 t1 left join kankan2 t2 on t1.id = t2.id where (case when t1.name='b' then 'case2' when t1.name='a' then 'case1' else NULL end) = 'case1' order by t1.id; +id +1 +2 +drop table if exists t, t1; +create table t (a bit(64)); +create table t1 (a varchar(2)); +insert t1 value ('10'); +insert t select a from t1; +select a+0 from t; +a+0 +12592 +drop table if exists t, t1; +create table t (a bit(64)); +create table t1 (a binary(2)); +insert t1 value ('10'); +insert t select a from t1; +select a+0 from t; +a+0 +12592 +drop table if exists t, t1; +create table t (a bit(64)); +create table t1 (a datetime); +insert t1 value ('09-01-01'); +insert t select a from t1; +select a+0 from t; +a+0 +20090101000000 +drop table if exists t; +create table t(a int); +select /*+ unknown_hint(c1)*/ 1; +1 +1 +Level Code Message +Warning 8061 Optimizer hint unknown_hint is not supported by TiDB and is ignored +select 1 from /*+ test1() */ t; +1 +Level Code Message +Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:8066]Optimizer hint can only be followed by certain keywords like SELECT, INSERT, etc. +drop table if exists t; +create table t(a bigint, b double, c decimal, d varchar(20), e datetime, f time, g json); +insert into t values(1, 1.1, 2.2, "abc", "2018-10-24", NOW(), "12"); +select values(a), values(b), values(c), values(d), values(e), values(f), values(g) from t; +values(a) values(b) values(c) values(d) values(e) values(f) values(g) +NULL NULL NULL NULL NULL NULL NULL +set global innodb_default_row_format = dynamic; +set global innodb_default_row_format = 'dynamic'; +SHOW VARIABLES LIKE 'innodb_default_row_format'; +Variable_name Value +innodb_default_row_format dynamic +SHOW VARIABLES LIKE 'character_set_server'; +Variable_name Value +character_set_server utf8mb4 +SHOW VARIABLES LIKE 'innodb_file_format'; +Variable_name Value +innodb_file_format Barracuda +SHOW VARIABLES LIKE 'innodb_large_prefix'; +Variable_name Value +innodb_large_prefix ON +drop table if exists t; +create table t (c1 varchar(100), c2 varchar(128)); +prepare pr1 from "insert into t values(ifnull(?,' '),ifnull(?,' '))"; +set @a='1',@b=repeat('x', 80); +execute pr1 using @a,@b; +drop table if exists t; +create table t(a int, b int, index(a)); +insert into t values (null, 0), (null, 1), (10, 11), (10, 12); +select * from t use index(a) where a is null order by b; +a b +NULL 0 +NULL 1 +select * from t use index(a) where a<=>null order by b; +a b +NULL 0 +NULL 1 +select * from t use index(a) where a<=>10 order by b; +a b +10 11 +10 12 +drop table if exists t1; +create table t1(a int, b int, c int, unique key(a, b, c)); +insert into t1 values (1, null, 1), (1, null, 2), (1, null, 3), (1, null, 4); +insert into t1 values (1, 1, 1), (1, 2, 2), (1, 3, 33), (1, 4, 44); +select c from t1 where a=1 and b<=>null and c>2 order by c; +c +3 +4 +select c from t1 where a=1 and b is null and c>2 order by c; +c +3 +4 +select c from t1 where a=1 and b is not null and c>2 order by c; +c +33 +44 +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (d date NOT NULL) PARTITION BY RANGE (YEAR(d)) +(PARTITION p2016 VALUES LESS THAN (2017), PARTITION p2017 VALUES LESS THAN (2018), PARTITION p2018 VALUES LESS THAN (2019), +PARTITION p2019 VALUES LESS THAN (2020), PARTITION pmax VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES ('2016-01-01'), ('2016-06-01'), ('2016-09-01'), ('2017-01-01'), +('2017-06-01'), ('2017-09-01'), ('2018-01-01'), ('2018-06-01'), ('2018-09-01'), ('2018-10-01'), +('2018-11-01'), ('2018-12-01'), ('2018-12-31'), ('2019-01-01'), ('2019-06-01'), ('2019-09-01'), +('2020-01-01'), ('2020-06-01'), ('2020-09-01'); +SELECT COUNT(*) FROM t1 WHERE d < '2018-01-01'; +COUNT(*) +6 +SELECT COUNT(*) FROM t1 WHERE d > '2018-01-01'; +COUNT(*) +12 +drop table if exists t; +create table t(a bigint, b bigint); +insert into t values(1, 1); +desc format='brief' select ifnull("aaaa", a) from t; +id estRows task access object operator info +Projection 10000.00 root aaaa->Column#4 +└─TableReader 10000.00 root data:TableFullScan + └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo +select ifnull("aaaa", a) from t; +ifnull("aaaa", a) +aaaa +drop table if exists t1; +drop table if exists prefix; +CREATE TABLE t1 ( +name varchar(12) DEFAULT NULL, +KEY pname (name(12)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +insert into t1 values('借款策略集_网页'); +select * from t1 where name = '借款策略集_网页'; +name +借款策略集_网页 +CREATE TABLE prefix ( +a int(11) NOT NULL, +b varchar(55) DEFAULT NULL, +c int(11) DEFAULT NULL, +PRIMARY KEY (a), +KEY prefix_index (b(2)), +KEY prefix_complex (a,b(2)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +INSERT INTO prefix VALUES(0, 'b', 2), (1, 'bbb', 3), (2, 'bbc', 4), (3, 'bbb', 5), (4, 'abc', 6), (5, 'abc', 7), (6, 'abc', 7), (7, 'ÿÿ', 8), (8, 'ÿÿ0', 9), (9, 'ÿÿÿ', 10); +select c, b from prefix where b > 'ÿ' and b < 'ÿÿc'; +c b +8 ÿÿ +9 ÿÿ0 +select a, b from prefix where b LIKE 'ÿÿ%'; +a b +7 ÿÿ +8 ÿÿ0 +9 ÿÿÿ +drop table if exists t; +create table t (a int, b varchar (20), c varchar (20)); +insert into t values +(1,'key1-value1','insert_order1'), +(1,'key1-value2','insert_order2'), +(1,'key1-value3','insert_order3'), +(1,'key1-value4','insert_order4'), +(1,'key1-value5','insert_order5'), +(1,'key1-value6','insert_order6'), +(2,'key2-value1','insert_order1'), +(2,'key2-value2','insert_order2'), +(2,'key2-value3','insert_order3'), +(2,'key2-value4','insert_order4'), +(2,'key2-value5','insert_order5'), +(2,'key2-value6','insert_order6'), +(3,'key3-value1','insert_order1'), +(3,'key3-value2','insert_order2'), +(3,'key3-value3','insert_order3'), +(3,'key3-value4','insert_order4'), +(3,'key3-value5','insert_order5'), +(3,'key3-value6','insert_order6'); +SET @LAST_VAL := NULL; +SET @ROW_NUM := 0; +select * from ( +SELECT +a, +@ROW_NUM := IF(a = @LAST_VAL, @ROW_NUM + 1, 1) AS ROW_NUM, +@LAST_VAL := a AS LAST_VAL, +b, +c +FROM (select * from t where a in (1, 2, 3) ORDER BY a, c) t1 +) t2 where t2.ROW_NUM < 2; +a ROW_NUM LAST_VAL b c +1 1 1 key1-value1 insert_order1 +2 1 2 key2-value1 insert_order1 +3 1 3 key3-value1 insert_order1 +select * from ( +SELECT +a, +@ROW_NUM := IF(a = @LAST_VAL, @ROW_NUM + 1, 1) AS ROW_NUM, +@LAST_VAL := a AS LAST_VAL, +b, +c +FROM (select * from t where a in (1, 2, 3) ORDER BY a, c) t1 +) t2; +a ROW_NUM LAST_VAL b c +1 1 1 key1-value1 insert_order1 +1 2 1 key1-value2 insert_order2 +1 3 1 key1-value3 insert_order3 +1 4 1 key1-value4 insert_order4 +1 5 1 key1-value5 insert_order5 +1 6 1 key1-value6 insert_order6 +2 1 2 key2-value1 insert_order1 +2 2 2 key2-value2 insert_order2 +2 3 2 key2-value3 insert_order3 +2 4 2 key2-value4 insert_order4 +2 5 2 key2-value5 insert_order5 +2 6 2 key2-value6 insert_order6 +3 1 3 key3-value1 insert_order1 +3 2 3 key3-value2 insert_order2 +3 3 3 key3-value3 insert_order3 +3 4 3 key3-value4 insert_order4 +3 5 3 key3-value5 insert_order5 +3 6 3 key3-value6 insert_order6 +drop table if exists t1; +create table t1(a int); +insert into t1 values(2),(3); +with t1 as (select 36 as col from t1 where a=3) select * from t1; +col +36 +insert into t1 with t1 as (select 36 as col from t1) select * from t1; +select * from t1; +a +2 +3 +36 +36 +with cte1(a) as (select 36) update t1 set a = 1 where a in (select a from cte1); +select * from t1; +a +2 +3 +1 +1 +with recursive cte(a) as (select 1 union select a + 1 from cte where a < 10) update cte, t1 set t1.a=1; +select * from t1; +a +1 +1 +1 +1 +with recursive cte(a) as (select 1 union select a + 1 from cte where a < 10) update cte set a=1; +Error 1288 (HY000): The target table cte of the UPDATE is not updatable +with recursive cte(a) as (select 1 union select a + 1 from cte where a < 10) delete from cte; +Error 1288 (HY000): The target table cte of the DELETE is not updatable +with cte(a) as (select a from t1) delete from cte; +Error 1288 (HY000): The target table cte of the DELETE is not updatable +with cte(a) as (select a from t1) update cte set a=1; +Error 1288 (HY000): The target table cte of the UPDATE is not updatable +drop table if exists t1; +create table t1(a int, b int, primary key(a)); +insert into t1 values (1, 1),(2,1),(3,1); +replace into t1 with recursive cte(a,b) as (select 1, 1 union select a + 1,b+1 from cte where a < 5) select * from cte; +select * from t1; +a b +1 1 +2 2 +3 3 +4 4 +5 5 +drop table if exists t; +create table t(a int, b tinyint as(a+100) unique key); +insert ignore into t values(200, default); +update t set a=1 where a=200; +admin check table t; +delete from t; +insert ignore into t values(200, default); +admin check table t; +insert ignore into t values(200, default) on duplicate key update a=100; +admin check table t; +delete from t; +admin check table t; +begin; +insert ignore into t values(200, default); +update t set a=1 where a=200; +admin check table t; +delete from t; +insert ignore into t values(200, default); +admin check table t; +insert ignore into t values(200, default) on duplicate key update a=100; +admin check table t; +delete from t; +admin check table t; +commit; +admin check table t; +drop table if exists t; +create table t (c_enum enum('c', 'b', 'a')); +insert into t values ('a'), ('b'), ('c'), ('a'), ('b'), ('a'); +select c_enum from t order by c_enum; +c_enum +c +b +b +a +a +a +select c_enum from t order by c_enum desc; +c_enum +a +a +a +b +b +c +select c_enum from t order by if(c_enum>1, c_enum, c_enum); +c_enum +a +a +a +b +b +c +select c_enum from t where c_enum order by c_enum; +c_enum +c +b +b +a +a +a +select c_enum from t where c_enum > 'a' order by c_enum; +c_enum +c +b +b +select c_enum from t where c_enum > 1 order by c_enum; +c_enum +b +b +a +a +a +select c_enum from t where c_enum = 1 order by c_enum; +c_enum +c +select c_enum from t where c_enum = 'a' order by c_enum; +c_enum +a +a +a +select c_enum from t where c_enum + 1 order by c_enum; +c_enum +c +b +b +a +a +a +select c_enum from t where c_enum - 1 order by c_enum; +c_enum +b +b +a +a +a +select c_enum+1 from t order by c_enum; +c_enum+1 +2 +3 +3 +4 +4 +4 +select c_enum, c_enum=1 from t order by c_enum; +c_enum c_enum=1 +c 1 +b 0 +b 0 +a 0 +a 0 +a 0 +select c_enum, c_enum>1 from t order by c_enum; +c_enum c_enum>1 +c 0 +b 1 +b 1 +a 1 +a 1 +a 1 +select c_enum, c_enum>'a' from t order by c_enum; +c_enum c_enum>'a' +c 1 +b 1 +b 1 +a 0 +a 0 +a 0 +select max(c_enum) from t; +max(c_enum) +c +select min(c_enum) from t; +min(c_enum) +a +select max(c_enum+1) from t; +max(c_enum+1) +4 +select min(c_enum+1) from t; +min(c_enum+1) +2 +select avg(c_enum) from t; +avg(c_enum) +2.3333333333333335 +select avg(distinct c_enum) from t; +avg(distinct c_enum) +2 +select distinct c_enum from t order by c_enum; +c_enum +c +b +a +select c_enum from t group by c_enum order by c_enum; +c_enum +c +b +a +drop table if exists t1; +CREATE TABLE t1 ( +a char(3) NOT NULL default '', +e enum('a','b','c','d','e') NOT NULL default 'a' +); +INSERT INTO t1 VALUES ('aaa','e'); +INSERT INTO t1 VALUES ('bbb','e'); +INSERT INTO t1 VALUES ('ccc','a'); +INSERT INTO t1 VALUES ('ddd','e'); +SELECT DISTINCT e AS c FROM t1 outr WHERE +a <> SOME ( SELECT a FROM t1 WHERE e = outr.e); +c +e +drop table t; +create table t(e enum('c','b','a')); +insert into t values(1),(2),(3); +select e from t where e > 'b'; +e +c +select e from t where e > 2; +e +a +alter table t add index idx(e); +select e from t where e > 'b'; +e +c +select e from t where e > 2; +e +a +drop table if exists tdm; +create table tdm(id int, `c12` enum('a','b','c'), PRIMARY KEY (`id`)); +insert into tdm values (1, 'a'); +update tdm set c12 = 2 where id = 1; +select * from tdm; +id c12 +1 b +set @@sql_mode = ''; +update tdm set c12 = 0 where id = 1; +select c12+0 from tdm; +c12+0 +0 +update tdm set c12 = '0' where id = 1; +select c12+0 from tdm; +c12+0 +0 +drop table if exists t; +create table t(a int); +with cte1 as (select * from cte2), cte2 as (select 1) select * from cte1; +Error 1146 (42S02): Table 'expression__misc.cte2' doesn't exist +with cte1 as (select * from cte2) select * from (with cte2 as (select 2) select * from cte1 ) q; +Error 1146 (42S02): Table 'expression__misc.cte2' doesn't exist +with recursive cte(n) as (select 1 union select sum(n) from cte group by n) select * from cte; +Error 3575 (HY000): Recursive Common Table Expression 'cte' can contain neither aggregation nor window functions in recursive query block +with recursive cte(n) as (select 1 union select row_number() over(partition by n) from cte ) select * from cte; +Error 3575 (HY000): Recursive Common Table Expression 'cte' can contain neither aggregation nor window functions in recursive query block +with recursive cte(n) as (select 1 union (select * from cte order by n)) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'ORDER BY / LIMIT / SELECT DISTINCT in recursive query block of Common Table Expression' +with recursive cte(n) as (select 1 union (select * from cte order by n)) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'ORDER BY / LIMIT / SELECT DISTINCT in recursive query block of Common Table Expression' +with recursive cte(n) as (select 1 union select distinct * from cte) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'ORDER BY / LIMIT / SELECT DISTINCT in recursive query block of Common Table Expression' +with recursive cte(n) as (select 1 union (select * from cte limit 2)) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'ORDER BY / LIMIT / SELECT DISTINCT in recursive query block of Common Table Expression' +with recursive cte(n) as (select 1 union select * from cte, cte c1) select * from cte; +Error 3577 (HY000): In recursive query block of Recursive Common Table Expression 'cte', the recursive table must be referenced only once, and not in any subquery +with recursive cte(n) as (select 1 union select * from (select * from cte) c1) select * from cte; +Error 3577 (HY000): In recursive query block of Recursive Common Table Expression 'cte', the recursive table must be referenced only once, and not in any subquery +with recursive cte(n) as (select 1 union select * from cte where 1 in (select * from cte)) select * from cte; +Error 3577 (HY000): In recursive query block of Recursive Common Table Expression 'cte', the recursive table must be referenced only once, and not in any subquery +with recursive cte(n) as (select 1 union select * from cte where exists (select * from cte)) select * from cte; +Error 3577 (HY000): In recursive query block of Recursive Common Table Expression 'cte', the recursive table must be referenced only once, and not in any subquery +with recursive cte(n) as (select 1 union select * from cte where 1 > (select * from cte)) select * from cte; +Error 3577 (HY000): In recursive query block of Recursive Common Table Expression 'cte', the recursive table must be referenced only once, and not in any subquery +with recursive cte(n) as (select 1 union select (select * from cte) c1) select * from cte; +Error 3577 (HY000): In recursive query block of Recursive Common Table Expression 'cte', the recursive table must be referenced only once, and not in any subquery +with recursive cte(n) as (select 1 union select * from t left join cte on t.a=cte.n) select * from cte; +Error 3576 (HY000): In recursive query block of Recursive Common Table Expression 'cte', the recursive table must neither be in the right argument of a LEFT JOIN, nor be forced to be non-first with join order hints +with recursive cte(n) as (select 1 intersect select 2 union select * from cte union select 1) select * from cte; +Error 3574 (HY000): Recursive Common Table Expression 'cte' should have one or more non-recursive query blocks followed by one or more recursive ones +with recursive cte(n) as (select * from cte union select * from cte) select * from cte; +Error 3574 (HY000): Recursive Common Table Expression 'cte' should have one or more non-recursive query blocks followed by one or more recursive ones +with recursive cte(n) as (select 1 intersect select * from cte) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'INTERSECT between seed part and recursive part, hint: The operator between seed part and recursive part must bu UNION[DISTINCT] or UNION ALL' +with recursive cte(n) as (select 1 union select 1 intersect select * from cte) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'INTERSECT between seed part and recursive part, hint: The operator between seed part and recursive part must bu UNION[DISTINCT] or UNION ALL' +with recursive cte(n) as (select 1 except select * from cte) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'EXCEPT between seed part and recursive part, hint: The operator between seed part and recursive part must bu UNION[DISTINCT] or UNION ALL' +with recursive cte(n) as (select 1 union select 1 except select * from cte) select * from cte; +Error 1235 (42000): This version of TiDB doesn't yet support 'EXCEPT between seed part and recursive part, hint: The operator between seed part and recursive part must bu UNION[DISTINCT] or UNION ALL' +drop table if exists t1, t2; +create table t1(a int not null); +create table t2(a int not null); +insert into t1 values(1); +insert into t2 values(1); +select a, count(*) from t1 join t2 using (a) group by a; +a count(*) +1 1 +select a, count(*) from t1 natural join t2 group by a; +a count(*) +1 1 +select a, count(*) from t1 join t2 on t1.a=t2.a group by a; +Error 1052 (23000): Column 'a' in field list is ambiguous +select t1.a, t2.a from t1 join t2 using (a) group by t1.a; +a a +1 1 +select t1.a, t2.a from t1 join t2 using(a) group by a; +Error 1052 (23000): Column 'a' in group statement is ambiguous +select t2.a from t1 join t2 using (a) group by t1.a; +a +1 +select t1.a from t1 join t2 using (a) group by t1.a; +a +1 +select t2.a from t1 join t2 using (a) group by t2.a; +a +1 +select count(*) from t1 join t2 using (a) group by t2.a; +count(*) +1 +select t2.a from t1 join t2 using (a) group by a; +a +1 +select t1.a from t1 join t2 using (a) group by a; +a +1 +select * from t1 join t2 using(a); +a +1 +select t1.a, t2.a from t1 join t2 using(a); +a a +1 1 +select * from t1 natural join t2; +a +1 +select t1.a, t2.a from t1 natural join t2; +a a +1 1 +drop table if exists e; +create table e(e enum('c', 'b', 'a')); +insert into e values ('a'),('b'),('a'),('b'); +select e from e where if(e>1, e, e); +e +a +a +b +b +select e from e where case e when 1 then e else e end; +e +a +a +b +b +select e from e where case 1 when e then e end; +e +select if(e>1,e,e)='a' from e; +if(e>1,e,e)='a' +0 +0 +1 +1 +select if(e>1,e,e)=1 from e; +if(e>1,e,e)=1 +0 +0 +0 +0 +select if(e>2,e,e) and if(e<=2,e,e) from e; +if(e>2,e,e) and if(e<=2,e,e) +1 +1 +1 +1 +select if(e>2,e,e) and (if(e<3,0,e) or if(e>=2,0,e)) from e; +if(e>2,e,e) and (if(e<3,0,e) or if(e>=2,0,e)) +0 +0 +1 +1 +select * from e where if(e>2,e,e) and if(e<=2,e,e); +e +a +a +b +b +select * from e where if(e>2,e,e) and (if(e<3,0,e) or if(e>=2,0,e)); +e +a +a +drop table if exists t; +create table t(a int,b enum("b","y","1")); +insert into t values(0,"y"),(1,"b"),(null,null),(2,"1"); +SELECT count(*) FROM t where if(a,b ,null); +count(*) +2 +drop table if exists t; +create table t(a int,b enum("b"),c enum("c")); +insert into t values(1,1,1),(2,1,1),(1,1,1),(2,1,1); +select a from t where if(a=1,b,c)="b"; +a +1 +1 +select a from t where if(a=1,b,c)="c"; +a +2 +2 +select a from t where if(a=1,b,c)=1; +a +1 +2 +1 +2 +select a from t where if(a=1,b,c); +a +1 +2 +1 +2 +drop table if exists e; +create table e(e enum('c', 'b', 'a')); +insert into e values(3); +select elt(1,e) = 'a' from e; +elt(1,e) = 'a' +1 +select elt(1,e) = 3 from e; +elt(1,e) = 3 +1 +select e from e where elt(1,e); +e +a +drop table if exists s; +create table s(s set('c', 'b', 'a')); +insert into s values ('a'),('b'),('a'),('b'); +select s from s where if(s>1, s, s); +s +a +b +a +b +select s from s where case s when 1 then s else s end; +s +a +b +a +b +select s from s where case 1 when s then s end; +s +select if(s>1,s,s)='a' from s; +if(s>1,s,s)='a' +1 +0 +1 +0 +select if(s>1,s,s)=4 from s; +if(s>1,s,s)=4 +1 +0 +1 +0 +drop table if exists s; +create table s(s set('c', 'b', 'a')); +insert into s values('a'); +select elt(1,s) = 'a' from s; +elt(1,s) = 'a' +1 +select elt(1,s) = 4 from s; +elt(1,s) = 4 +1 +select s from s where elt(1,s); +s +a +drop table if exists t; +create table t(a int,b enum("b"),c enum("c")); +insert into t values(1,1,1),(2,1,1),(1,1,1),(2,1,1); +select if(A, null,b)=1 from t; +if(A, null,b)=1 +NULL +NULL +NULL +NULL +select if(A, null,b)='a' from t; +if(A, null,b)='a' +NULL +NULL +NULL +NULL +drop table if exists t; +create table t(a int,b set("b"),c set("c")); +insert into t values(1,1,1),(2,1,1),(1,1,1),(2,1,1); +select if(A, null,b)=1 from t; +if(A, null,b)=1 +NULL +NULL +NULL +NULL +select if(A, null,b)='a' from t; +if(A, null,b)='a' +NULL +NULL +NULL +NULL +drop table if exists t; +create table t(`a` enum('y','b','Abc','null','1','2','0')) CHARSET=binary; +insert into t values("1"); +SELECT count(*) from t where (null like 'a') = (case when cast('2015' as real) <=> round("1200","1") then a end); +count(*) +0 +SELECT (null like 'a') = (case when cast('2015' as real) <=> round("1200","1") then a end) from t; +(null like 'a') = (case when cast('2015' as real) <=> round("1200","1") then a end) +NULL +SELECT 5 = (case when 0 <=> 0 then a end) from t; +5 = (case when 0 <=> 0 then a end) +1 +SELECT '1' = (case when 0 <=> 0 then a end) from t; +'1' = (case when 0 <=> 0 then a end) +1 +SELECT 5 = (case when 0 <=> 1 then a end) from t; +5 = (case when 0 <=> 1 then a end) +NULL +SELECT '1' = (case when 0 <=> 1 then a end) from t; +'1' = (case when 0 <=> 1 then a end) +NULL +SELECT 5 = (case when 0 <=> 1 then a else a end) from t; +5 = (case when 0 <=> 1 then a else a end) +1 +SELECT '1' = (case when 0 <=> 1 then a else a end) from t; +'1' = (case when 0 <=> 1 then a else a end) +1 +drop table if exists t1, t2; +create table t1 (a integer); +insert into t1 values (0), (1), (2), (3); +create table t2 (a integer, b integer); +insert into t2 values (0,1), (1,1), (2,1), (3,1); +select t1.* from t1 left join t2 on t2.a = t1.a where t1.a = ifnull(t2.b, 0); +a +1 +drop table if exists t1, t2; +create table t1 (i1 integer, c1 char); +insert into t1 values (2, 'a'), (1, 'b'), (3, 'c'), (0, null); +create table t2 (i2 integer, c2 char, f2 float); +insert into t2 values (0, 'c', null), (1, null, 0.1), (3, 'b', 0.01), (2, 'q', 0.12), (null, 'a', -0.1), (null, null, null); +select * from t2 where t2.i2=((select count(1) from t1 where t1.i1=t2.i2)); +i2 c2 f2 +1 NULL 0.1 +select tidb_decode_plan(''); +tidb_decode_plan('') + +select tidb_decode_plan('7APIMAk1XzEzCTAJMQlmdW5jczpjb3VudCgxKQoxCTE3XzE0CTAJMAlpbm5lciBqb2luLCBpAQyQOlRhYmxlUmVhZGVyXzIxLCBlcXVhbDpbZXEoQ29sdW1uIzEsIA0KCDkpIBkXADIVFywxMCldCjIJMzFfMTgFZXhkYXRhOlNlbGVjdGlvbl8xNwozCTFfMTcJMQkwCWx0HVlATlVMTCksIG5vdChpc251bGwVHAApUhcAUDIpKQo0CTEwXzE2CTEJMTAwMDAJdAHB2Dp0MSwgcmFuZ2U6Wy1pbmYsK2luZl0sIGtlZXAgb3JkZXI6ZmFsc2UsIHN0YXRzOnBzZXVkbwoFtgAyAZcEMAk6tgAEMjAFtgQyMDq2AAg5LCBmtgAAMFa3AAA5FbcAOT63AAAyzrcA'); +tidb_decode_plan('7APIMAk1XzEzCTAJMQlmdW5jczpjb3VudCgxKQoxCTE3XzE0CTAJMAlpbm5lciBqb2luLCBpAQyQOlRhYmxlUmVhZGVyXzIxLCBlcXVhbDpbZXEoQ29sdW1uIzEsIA0KCDkpIBkXADIVFywxMCldCjIJMzFfMTgFZXhkYXRhOlNlbGVjdGlvbl8xNwozCTFfMTcJMQkwCWx0HVlATlVMTCksIG5vdChpc251bGwVHAApUh + id task estRows operator info + StreamAgg_13 root 1 funcs:count(1) + └─HashJoin_14 root 0 inner join, inner:TableReader_21, equal:[eq(Column#1, Column#9) eq(Column#2, Column#10)] + ├─TableReader_18 root 0 data:Selection_17 + │ └─Selection_17 cop 0 lt(Column#1, NULL), not(isnull(Column#1)), not(isnull(Column#2)) + │ └─TableScan_16 cop 10000 table:t1, range:[-inf,+inf], keep order:false, stats:pseudo + └─TableReader_21 root 0 data:Selection_20 + └─Selection_20 cop 0 lt(Column#9, NULL), not(isnull(Column#10)), not(isnull(Column#9)) + └─TableScan_19 cop 10000 table:t2, range:[-inf,+inf], keep order:false, stats:pseudo +select tidb_decode_plan('rwPwcTAJNV8xNAkwCTEJZnVuY3M6bWF4KHRlc3QudC5hKS0+Q29sdW1uIzQJMQl0aW1lOjIyMy45MzXCtXMsIGxvb3BzOjIJMTI4IEJ5dGVzCU4vQQoxCTE2XzE4CTAJMQlvZmZzZXQ6MCwgY291bnQ6MQkxCQlHFDE4LjQyMjJHAAhOL0EBBCAKMgkzMl8yOAkBlEBpbmRleDpMaW1pdF8yNwkxCQ0+DDYuODUdPSwxLCBycGMgbnVtOiANDAUpGDE1MC44MjQFKjhwcm9jIGtleXM6MAkxOTgdsgAzAbIAMgFearIAFDU3LjM5NgVKAGwN+BGxIDQJMTNfMjYJMQGgHGFibGU6dCwgCbqwaWR4KGEpLCByYW5nZTooMCwraW5mXSwga2VlcCBvcmRlcjp0cnVlLCBkZXNjAT8kaW1lOjU2LjY2MR1rJDEJTi9BCU4vQQo='); +tidb_decode_plan('rwPwcTAJNV8xNAkwCTEJZnVuY3M6bWF4KHRlc3QudC5hKS0+Q29sdW1uIzQJMQl0aW1lOjIyMy45MzXCtXMsIGxvb3BzOjIJMTI4IEJ5dGVzCU4vQQoxCTE2XzE4CTAJMQlvZmZzZXQ6MCwgY291bnQ6MQkxCQlHFDE4LjQyMjJHAAhOL0EBBCAKMgkzMl8yOAkBlEBpbmRleDpMaW1pdF8yNwkxCQ0+DDYuODUdPSwxLC + id task estRows operator info actRows execution info memory disk + StreamAgg_14 root 1 funcs:max(test.t.a)->Column#4 1 time:223.935µs, loops:2 128 Bytes N/A + └─Limit_18 root 1 offset:0, count:1 1 time:218.422µs, loops:2 N/A N/A + └─IndexReader_28 root 1 index:Limit_27 1 time:216.85µs, loops:1, rpc num: 1, rpc time:150.824µs, proc keys:0 198 Bytes N/A + └─Limit_27 cop 1 offset:0, count:1 1 time:57.396µs, loops:2 N/A N/A + └─IndexScan_26 cop 1 table:t, index:idx(a), range:(0,+inf], keep order:true, desc 1 time:56.661µs, loops:1 N/A N/A +select tidb_decode_plan(query), time from information_schema.slow_query order by time desc limit 1; +select tidb_decode_plan('xxx'); +tidb_decode_plan('xxx') +xxx +set @p = now(); +set @@tidb_enable_vectorized_expression = false; +select length(@p); +length(@p) +19 +set @@tidb_enable_vectorized_expression = true; +select length(@p); +length(@p) +19 +SELECT xxx(1); +Error 1046 (3D000): No database selected +SELECT yyy(); +Error 1046 (3D000): No database selected +SELECT T.upper(1); +Error 1305 (42000): FUNCTION t.upper does not exist +use test; +SELECT xxx(1); +Error 1305 (42000): FUNCTION test.xxx does not exist +SELECT yyy(); +Error 1305 (42000): FUNCTION test.yyy does not exist +SELECT t.upper(1); +Error 1305 (42000): FUNCTION t.upper does not exist +SELECT timestampliteral(rand()); +Error 1305 (42000): FUNCTION test.timestampliteral does not exist +drop table if exists tab0; +CREATE TABLE tab0(col0 INTEGER, col1 INTEGER, col2 INTEGER); +SELECT + - (- CASE + col0 WHEN + CAST( col0 AS SIGNED ) THEN col1 WHEN 79 THEN NULL WHEN + - col1 THEN col0 / + col0 END ) * - 16 FROM tab0; ++ - (- CASE + col0 WHEN + CAST( col0 AS SIGNED ) THEN col1 WHEN 79 THEN NULL WHEN + - col1 THEN col0 / + col0 END ) * - 16 +show create table tab0; +Table Create Table +tab0 CREATE TABLE `tab0` ( + `col0` int(11) DEFAULT NULL, + `col1` int(11) DEFAULT NULL, + `col2` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin